diff2html/src/printer-utils.js

94 lines
2.4 KiB
JavaScript
Raw Normal View History

2015-04-11 23:34:33 +00:00
/*
*
* PrinterUtils (printer-utils.js)
* Author: rtfpessoa
*
*/
(function (ctx, undefined) {
2015-04-12 01:59:54 +00:00
// dirty hack for browser compatibility
var jsDiff = (typeof JsDiff !== "undefined" && JsDiff) || require("diff");
2015-06-21 21:49:05 +00:00
var utils = require("./utils.js").Utils;
2015-04-12 01:59:54 +00:00
function PrinterUtils() {
2015-04-11 23:34:33 +00:00
}
2015-04-19 23:24:19 +00:00
PrinterUtils.prototype.getDiffName = function (file) {
var oldFilename = file.oldName;
var newFilename = file.newName;
if (oldFilename && newFilename
&& oldFilename !== newFilename
&& !isDeletedName(newFilename)) {
2015-04-12 01:59:54 +00:00
return oldFilename + " -> " + newFilename;
2015-04-19 23:24:19 +00:00
} else if (newFilename && !isDeletedName(newFilename)) {
2015-04-12 01:59:54 +00:00
return newFilename;
} else if (oldFilename) {
return oldFilename;
} else {
return "Unknown filename";
}
};
PrinterUtils.prototype.diffHighlight = function (diffLine1, diffLine2, config) {
2015-04-12 01:59:54 +00:00
var lineStart1, lineStart2;
var prefixSize = 1;
2015-04-11 23:34:33 +00:00
2015-04-19 23:24:19 +00:00
if (config.isCombined) prefixSize = 2;
2015-04-11 23:34:33 +00:00
2015-04-12 01:59:54 +00:00
lineStart1 = diffLine1.substr(0, prefixSize);
lineStart2 = diffLine2.substr(0, prefixSize);
2015-04-11 23:34:33 +00:00
2015-04-12 01:59:54 +00:00
diffLine1 = diffLine1.substr(prefixSize);
diffLine2 = diffLine2.substr(prefixSize);
2015-04-11 23:34:33 +00:00
var diff;
if (config.charByChar) diff = jsDiff.diffChars(diffLine1, diffLine2);
else diff = jsDiff.diffWordsWithSpace(diffLine1, diffLine2);
2015-04-12 01:59:54 +00:00
var highlightedLine = "";
2015-04-11 23:34:33 +00:00
2015-04-12 01:59:54 +00:00
diff.forEach(function (part) {
var elemType = part.added ? 'ins' : part.removed ? 'del' : null;
2015-06-21 21:49:05 +00:00
var escapedValue = utils.escape(part.value);
2015-04-11 23:34:33 +00:00
2015-06-21 21:49:05 +00:00
if (elemType !== null) highlightedLine += "<" + elemType + ">" + escapedValue + "</" + elemType + ">";
else highlightedLine += escapedValue;
2015-04-12 01:59:54 +00:00
});
2015-04-11 23:34:33 +00:00
2015-04-12 01:59:54 +00:00
return {
2015-05-31 22:07:23 +00:00
first: {
prefix: lineStart1,
line: removeIns(highlightedLine)
},
second: {
prefix: lineStart2,
line: removeDel(highlightedLine)
}
2015-04-12 01:59:54 +00:00
}
};
2015-04-11 23:34:33 +00:00
2015-04-19 23:24:19 +00:00
function isDeletedName(name) {
return name === "dev/null";
}
2015-04-12 01:59:54 +00:00
function removeIns(line) {
return line.replace(/(<ins>((.|\n)*?)<\/ins>)/g, "");
2015-04-11 23:34:33 +00:00
}
2015-04-12 01:59:54 +00:00
function removeDel(line) {
return line.replace(/(<del>((.|\n)*?)<\/del>)/g, "");
}
// expose this module
((typeof module !== 'undefined' && module.exports) ||
(typeof exports !== 'undefined' && exports) ||
(typeof window !== 'undefined' && window) ||
(typeof self !== 'undefined' && self) ||
(typeof $this !== 'undefined' && $this) ||
Function('return this')())["PrinterUtils"] = new PrinterUtils();
2015-04-11 23:34:33 +00:00
2015-04-12 01:59:54 +00:00
})(this);