Rich diffs of rendered HTML
Have you ever seen the way Github allows you to see rendered diffs for code they can render as HTML? Like this “rich” diff , as they call it?
For some reason I wanted something similar (probably for Silicon Zucchini ), but couldn’t find a good library that did that nicely. Now I have a nice idea how to implement this.
“Virtual DOM” is a nice abstraction of how to render HTML entities to the DOM1 – and how to quickly update them. The idea is to find a quick way to compare two virtual DOM trees and only update the differences. Thus, any virtual DOM implementation contains a way to diff two HTML trees!
Assuming we can render a file to HTML and build a virtual DOM, we can then construct two virtual DOM trees from two versions of this files and compare them. Instead of updating the real DOM by replacing DOM nodes, we
- take the old nodes, label them (e.g. with a class to make them red),
- take the new nodes, add them after the old ones, and label them as well (e.g. with a class to make them green), and finally
- render all this to a new HTML string.