Before:
This is not a test. This is line 2.
After:
This is totally a test. This is line 2.
Compare
Differences:
// events function buttonCompareClicked() { var textBefore = document.getElementById("textareaBefore").value; var textAfter = document.getElementById("textareaAfter").value; var differences = new TextDifferencer().findDifferencesBetweenStrings ( textBefore, textAfter ); var differencesAsString = differences.toString(); var textareaDifferences = document.getElementById ( "textareaDifferences" ); textareaDifferences.innerHTML = differencesAsString; } // extensions function ArrayExtensions() { // extension class } { Array.prototype.insertElementAt = function(element, index) { this.splice(index, 0, element); } Array.prototype.insertElementsAt = function(elements, index) { for (var i = 0; i < elements.length; i++) { this.splice(index + i, 0, elements[i]); } } Array.prototype.removeAt = function(index) { this.splice(index, 1); } } // classes function TextDifferencer() { // do nothing } { TextDifferencer.prototype.findDifferencesBetweenStrings = function(string0, string1) { var lengthOfShorterString = (string0.length <= string1.length ? string0.length : string1.length); var numberOfExtremes = 2; var passagePairsMatchingAtExtremes = []; for (var e = 0; e < numberOfExtremes; e++) { var lengthOfMatchingSubstring = 0; for (var i = 0; i < lengthOfShorterString; i++) { var offsetForString0 = (e == 0 ? i : string0.length - i - 1); var offsetForString1 = (e == 0 </x-turndown>