visual-dom-diff
Highlight differences between two DOM trees.
Installation
npm i visual-dom-diff
Usage
import { visualDomDiff } from 'visual-dom-diff'
const diffNode = visualDomDiff(originalNode, changedNode, options)
API
visualDomDiff(originalNode: Node, changedNode: Node, options?: Options): DocumentFragment
Returns a new document fragment with the content from the two input nodes and annotations indicating if the given fragment was removed, modified or added in the changedNode
, ralative to the originalNode
.
Changes to text content are represented as deletions (<del class="vdd-removed">
) followed by insertions (<ins class="vdd-added">
).
Changes to the document structure are indicated by adding the vdd-removed
and vdd-added
classes to the removed and inserted elements respectively.
Changes to formatting are treated as content modifications (<ins class="vdd-modified">
wraps the modified text) and only the new formatting is carried over to the returned document fragment.
Changes to attributes of structural elements are treated as modifications (vdd-modified
class is added to the element) and only the new attributes are carried over to the returned document fragment.
Options
addedClass: string = 'vdd-added'
The class used for annotating content additions.modifiedClass: string = 'vdd-modified'
The class used for annotating content modifications.removedClass: string = 'vdd-removed'
The class used for annotating content removals.skipModified: boolean = false
Iftrue
, then formatting changes are NOT wrapped in<ins class="vdd-modified">
and modified structural elements are NOT annotated with thevdd-modified
class.skipChildren: (node: Node): boolean | undefined
Indicates if the child nodes of the specifiednode
should be ignored. It is useful for ignoring child nodes of an element representing some embedded content, which should not be compared. Returnundefined
for the default behaviour.skipSelf: (node: Node): boolean | undefined
Indicates if the specifiednode
should be ignored. Even if thenode
is ignored, its child nodes will still be processed, unlessskipChildNodes
says they should also be ignored. Ignored elements whose child nodes are processed are treated as formatting elements. Returnundefined
for the default behaviour.diffText: (oldText: string, newText: string): Diff[]
A function to use for diffing serialized representations of DOM nodes, where each DOM element is represented by a single character from the Private Use Area of the Basic Multilingual Unicode Plane. The default implementation is case sensitive and inteligently merges related changes to make the result more user friendly. See the source code for more details, especially if you want to implement a customdiffText
function.