server/resources/buildServerResources/agentsDiff.js (65 lines of code) (raw):
/**
* Created by Evgeniy.Koshkin on 18.03.14.
*/
BS.AgentsDiff = {
chooseAgents: function(){
var parsedHash = BS.Util.paramsFromHash('&');
var processed = false;
var agendAId = parsedHash['agentA'];
if (agendAId) {
$j('#agentASelection').val(agendAId).change();
processed = true;
}
var agentBId = parsedHash['agentB'];
if (agentBId) {
$j('#agentBSelection').val(agentBId).change();
processed = true;
}
if(processed){
BS.Util.setParamsInHash({}, '&', true);
}
},
updateDiff: function(url){
var agentAId = $j('#agentASelection').val();
var agentBId = $j('#agentBSelection').val();
BS.ajaxUpdater($('agentsDiffView'), url + "?agentA=" + agentAId + "&agentB=" + agentBId, {
method: 'get',
evalScripts: true
});
return false;
},
colorize: function() {
var dmp = new diff_match_patch();
$j("tr.diffRow").each(function() {
var propACell = $j(this).children(".propA").children().first();
var propBCell = $j(this).children(".propB").children().first();
if(propACell && propBCell){
var textA = propACell.text();
var textB = propBCell.text();
var diffABHtml = BS.AgentsDiff.diff2Html(dmp.diff_main(textA, textB));
var diffBAHtml = BS.AgentsDiff.diff2Html(dmp.diff_main(textB, textA));
propACell.html(diffBAHtml);
propBCell.html(diffABHtml);
}
});
},
diff2Html: function(diffs) {
var html = [];
var pattern_amp = /&/g;
var pattern_lt = /</g;
var pattern_gt = />/g;
var pattern_para = /\n/g;
for (var x = 0; x < diffs.length; x++) {
var op = diffs[x][0]; // Operation (insert, delete, equal)
var data = diffs[x][1]; // Text of change.
var text = data.replace(pattern_amp, '&').replace(pattern_lt, '<')
.replace(pattern_gt, '>').replace(pattern_para, '¶<br>');
switch (op) {
case DIFF_INSERT:
html[x] = '<span style="background:#9DCBFA;">' + text + '</span>';
break;
case DIFF_EQUAL:
html[x] = '<span>' + text + '</span>';
break;
}
}
return html.join('');
}
};