mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-07 22:15:51 +01:00
114 lines
3.9 KiB
HTML
114 lines
3.9 KiB
HTML
@(diffs: Seq[util.JGitUtil.DiffInfo],
|
|
repository: service.RepositoryService.RepositoryInfo,
|
|
newCommitId: Option[String],
|
|
oldCommitId: Option[String])(implicit context: app.Context)
|
|
@import context._
|
|
@import view.helpers._
|
|
@import org.eclipse.jgit.diff.DiffEntry.ChangeType
|
|
@diffs.zipWithIndex.map { case (diff, i) =>
|
|
<a name="diff-@i"></a>
|
|
<table class="table table-bordered">
|
|
<tr>
|
|
<th style="font-weight: normal;" class="box-header">
|
|
@if(diff.changeType == ChangeType.COPY || diff.changeType == ChangeType.RENAME){
|
|
@diff.oldPath -> @diff.newPath
|
|
@if(newCommitId.isDefined){
|
|
<div class="pull-right align-right">
|
|
<a href="@url(repository)/blob/@newCommitId.get/@diff.newPath" class="btn btn-small">View file @@ @newCommitId.get.substring(0, 10)</a>
|
|
</div>
|
|
}
|
|
}
|
|
@if(diff.changeType == ChangeType.ADD || diff.changeType == ChangeType.MODIFY){
|
|
@diff.newPath
|
|
@if(newCommitId.isDefined){
|
|
<div class="pull-right align-right">
|
|
<a href="@url(repository)/blob/@newCommitId.get/@diff.newPath" class="btn btn-small">View file @@ @newCommitId.get.substring(0, 10)</a>
|
|
</div>
|
|
}
|
|
}
|
|
@if(diff.changeType == ChangeType.DELETE){
|
|
@diff.oldPath
|
|
@if(oldCommitId.isDefined){
|
|
<div class="pull-right align-right">
|
|
<a href="@url(repository)/blob/@oldCommitId.get/@diff.oldPath" class="btn btn-small">View file @@ @oldCommitId.get.substring(0, 10)</a>
|
|
</div>
|
|
}
|
|
}
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
@if(diff.newContent != None || diff.oldContent != None){
|
|
<div id="diffText-@i"></div>
|
|
<textarea id="newText-@i" style="display: none;">@diff.newContent.getOrElse("")</textarea>
|
|
<textarea id="oldText-@i" style="display: none;">@diff.oldContent.getOrElse("")</textarea>
|
|
} else {
|
|
Not supported
|
|
}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
}
|
|
<script type="text/javascript" src="@assets/jsdifflib/difflib.js"></script>
|
|
<script type="text/javascript" src="@assets/jsdifflib/diffview.js"></script>
|
|
<link href="@assets/jsdifflib/diffview.css" type="text/css" rel="stylesheet" />
|
|
<style type="text/css">
|
|
table.inlinediff {
|
|
width: 100%;
|
|
}
|
|
|
|
table.inlinediff thead {
|
|
display: none;
|
|
}
|
|
|
|
td.insert, td.equal, td.delete {
|
|
width: 100%;
|
|
}
|
|
</style>
|
|
<script>
|
|
function diffUsingJS(oldTextId, newTextId, outputId) {
|
|
// get the baseText and newText values from the two textboxes, and split them into lines
|
|
var oldText = document.getElementById(oldTextId).value;
|
|
if(oldText == ''){
|
|
var oldLines = [];
|
|
} else {
|
|
var oldLines = difflib.stringAsLines(oldText);
|
|
}
|
|
|
|
var newText = document.getElementById(newTextId).value
|
|
if(newText == ''){
|
|
var newLines = [];
|
|
} else {
|
|
var newLines = difflib.stringAsLines(newText);
|
|
}
|
|
|
|
// create a SequenceMatcher instance that diffs the two sets of lines
|
|
var sm = new difflib.SequenceMatcher(oldLines, newLines);
|
|
|
|
// get the opcodes from the SequenceMatcher instance
|
|
// opcodes is a list of 3-tuples describing what changes should be made to the base text
|
|
// in order to yield the new text
|
|
var opcodes = sm.get_opcodes();
|
|
var diffoutputdiv = document.getElementById(outputId);
|
|
while (diffoutputdiv.firstChild) diffoutputdiv.removeChild(diffoutputdiv.firstChild);
|
|
|
|
// build the diff view and add it to the current DOM
|
|
diffoutputdiv.appendChild(diffview.buildView({
|
|
baseTextLines: oldLines,
|
|
newTextLines: newLines,
|
|
opcodes: opcodes,
|
|
contextSize: 4,
|
|
viewType: 1
|
|
}));
|
|
}
|
|
|
|
$(function(){
|
|
@diffs.zipWithIndex.map { case (diff, i) =>
|
|
@if(diff.newContent != None || diff.oldContent != None){
|
|
if($('#oldText-@i').length > 0){
|
|
diffUsingJS('oldText-@i', 'newText-@i', 'diffText-@i');
|
|
}
|
|
}
|
|
}
|
|
});
|
|
</script> |