antville/code/SkinMgr/diff.hac

67 lines
2.2 KiB
Text

var deny = this.isDenied(session.user,req.data.memberlevel);
if (deny) {
res.message = getMessage("error",deny);
res.redirect(path.site.href());
}
if (!req.data.proto || !req.data.name ||
!this[req.data.proto] ||
!this[req.data.proto][req.data.name] ||
!app.skinfiles[req.data.proto])
{
res.writeln ("Invalid Parameters. No Diff.");
return;
}
// get the modified and original skins
var modifiedSkin = this[req.data.proto][req.data.name].skin;
var originalSkin = app.skinfiles[req.data.proto][req.data.name];
if (originalSkin == null || modifiedSkin == null) {
res.writeln ("Invalid Parameters. No Diff.");
return;
}
res.writeln ("<h3>Diffs for "+req.data.proto+"/"+req.data.name+"</h3>");
// split the strings into arrays of lines
var orig = originalSkin.split(new RegExp("\r\n|\r|\n"));
var mod = modifiedSkin.split(new RegExp("\r\n|\r|\n"));
// create the Diff object
var diff = new Packages.helma.util.Diff (orig, mod);
// get the diff.
var d = diff.diff ();
// print an short explanation of the output format
if (d) {
res.write ("<span style=\"background: #FF3333\">&nbsp;&nbsp;&nbsp;&nbsp;</span> ");
res.writeln (" Lines removed from original skin");
res.write ("<span style=\"background: #33CC33\">&nbsp;&nbsp;&nbsp;&nbsp;</span> ");
res.writeln (" Lines added to modified skin");
} else {
res.writeln ("No visible changes between original and modified skin.");
}
// run through the modified skin. for each line that is changed,
// print the deleted lines from the original version and the new
// lines in the modified version.
res.write ("<pre>");
for (var i=0; i<mod.length; i++) {
if (d && i == d.line1) {
if (d.deleted) {
for (var j=d.line0; j<d.line0+d.deleted; j++)
res.write ((j+1)+" DEL <span style=\"background: #FF3333\">"+encode(orig[j])+"</span>\r\n");
}
if (d.inserted) {
for (var j=d.line1; j<d.line1+d.inserted; j++)
res.write ((j+1)+" INS <span style=\"background: #33CC33\">"+encode(mod[j])+"</span>\r\n");
}
i = d.line1 + d.inserted -1;
d = d.link;
} else {
res.write ((i+1)+" <span>"+encode(mod[i])+"</span>\r\n");
}
}
res.write ("</pre>");