Pretty diff to html javascript library (diff2html)
Find a file
2015-12-27 11:08:24 +01:00
css Fix some more CSS and JS style issues 2015-12-20 23:38:16 +00:00
dist Fix some more CSS and JS style issues 2015-12-20 23:38:16 +00:00
sample Enable line matching on side-by-side sample 2015-12-19 22:54:03 +00:00
src Force JSCS style 2015-12-23 19:34:39 +00:00
test Add tests to generateLineHtml for LineByLine tests 2015-12-27 11:08:24 +01:00
.gitignore add npm and bower folder to gitignore and fix license on npm 2015-07-19 00:32:40 +01:00
.jscsrc Force JSCS style 2015-12-23 19:34:39 +00:00
bower.json Prepare for version 1.2.0 release 2015-12-19 21:09:31 +00:00
circle.yml Start using mocha with istambul to test and setup circleci 2015-12-22 15:48:33 +00:00
CONTRIBUTING.md Add contributing docs and help 2015-12-23 20:19:10 +00:00
CREDITS.md Update contributors list, add codacy badge 2015-12-20 22:51:31 +00:00
LICENSE initial lines 2014-08-30 03:54:52 +01:00
package.json Add JSCS script and update dependencies 2015-12-23 19:47:09 +00:00
README.md Add more badges 2015-12-24 11:27:07 +00:00
release.sh fix changes summary on files headers 2015-10-31 21:55:15 +00:00

diff2html

Circle CI Codacy Code Badge Codacy Coverage Badge

npm David David

node npm npm Gitter

diff2html generates pretty HTML diffs from git diff output.

NPM

Features

  • line-by-line and side-by-side diff

  • new and old line numbers

  • inserted and removed lines

  • GitHub like style

  • Code syntax highlight

  • Line similarity matching

Online Example

Go to diff2html

Distributions

How to use

Pretty HTML diff

Diff2Html.getPrettyHtml(exInput, configuration)

Intermediate Json From Git Word Diff Output

Diff2Html.getJsonFromDiff(exInput)

Check out the index.html for a complete example.

Configuration

The HTML output accepts a Javascript object with configuration. Possible options:

  • inputFormat: the format of the input data: 'diff' or 'json', default is 'diff'
  • outputFormat: the format of the output data: 'line-by-line' or 'side-by-side', default is 'line-by-line'
  • showFiles: show a file list before the diff: true or false, default is false
  • matching: matching level: 'lines' for matching lines, 'words' for matching lines and words or 'none', default is none
  • matchWordsThreshold: similarity threshold for word matching, default is 0.25

Syntax Highlight

Add the dependencies. Choose one color scheme, and add the main highlight code. If your favourite language is not included in the default package also add its javascript highlight file.

<!-- Stylesheet -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/styles/github.min.css">

<!-- Javascripts -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/8.6/languages/scala.min.js"></script>

Invoke the highlightjs plugin

document.addEventListener("DOMContentLoaded", function () {
    // parse the diff to json
    var diffJson = Diff2Html.getJsonFromDiff(lineDiffExample);

    // collect all the file extensions in the json
    var allFileLanguages = diffJson.map(function (line) {
        return line.language;
    });

    // remove duplicated languages
    var distinctLanguages = allFileLanguages.filter(function (v, i) {
        return allFileLanguages.indexOf(v) == i;
    });

    // pass the languages to the highlightjs plugin
    hljs.configure({languages: distinctLanguages});

    // generate and inject the diff HTML into the desired place
    document.getElementById("line-by-line").innerHTML = Diff2Html.getPrettyHtml(diffJson, { inputFormat: 'json' });
    document.getElementById("side-by-side").innerHTML = Diff2Html.getPrettyHtml(diffJson, { inputFormat: 'json', outputFormat: 'side-by-side' });

    // collect all the code lines and execute the highlight on them
    var codeLines = document.getElementsByClassName("d2h-code-line-ctn");
    [].forEach.call(codeLines, function (line) {
        hljs.highlightBlock(line);
    });
});

Contributions

This is a developer friendly project, all the contributions are welcome. To contribute just send a pull request with your changes following the guidelines described in CONTRIBUTING.md. I will try to review them as soon as possible.

License

Copyright 2014 Rodrigo Fernandes. Released under the terms of the MIT license.

Thanks

This project is inspired in pretty-diff by Scott González.