Add Tabular Diff for CSV files (#14661)

Implements request #14320 The rendering of CSV files does match the diff style.

* Moved CSV logic into base package.

* Added method to create a tabular diff.

* Added CSV compare context.

* Added CSV diff template.

* Use new table style in CSV markup.

* Added file size limit for CSV rendering.

* Display CSV parser errors in diff.

* Lazy read single file.

* Lazy read rows for full diff.

* Added unit tests for various CSV changes.
This commit is contained in:
KN4CK3R 2021-03-29 22:44:28 +02:00 committed by GitHub
parent d3b8127ad3
commit 0c6137617f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 937 additions and 118 deletions

View file

@ -2489,6 +2489,18 @@ function initIssueReferenceRepositorySearch() {
});
}
function initFileViewToggle() {
$('.file-view-toggle').on('click', function() {
const $this = $(this);
$this.parent().children().removeClass('active');
$this.addClass('active');
const $target = $($this.data('toggle-selector'));
$target.parent().children().addClass('hide');
$target.removeClass('hide');
});
}
function initLinkAccountView() {
const $lnkUserPage = $('.page-content.user.link-account');
if ($lnkUserPage.length === 0) {
@ -2756,6 +2768,7 @@ $(document).ready(async () => {
initTableSort();
initNotificationsTable();
initPullRequestMergeInstruction();
initFileViewToggle();
initReleaseEditor();
initRelease();

View file

@ -473,31 +473,6 @@
box-shadow: inset 0 -1px 0 var(--color-secondary);
}
.csv-data td,
.csv-data th {
padding: 5px;
overflow: hidden;
font-size: 12px;
line-height: 1;
text-align: left;
white-space: nowrap;
}
.csv-data .blob-num {
padding: 10px 8px 9px;
text-align: right;
border: 0;
}
.csv-data tr {
border-top: 0;
}
.csv-data th {
font-weight: 600;
border-top: 0;
}
.ui.list .list,
ol.ui.list ol,
ul.ui.list ul {

View file

@ -1455,6 +1455,65 @@
}
}
.data-table {
width: 100%;
tr {
border-top: 0;
}
td,
th {
padding: 5px !important;
overflow: hidden;
font-size: 12px;
text-align: left;
white-space: nowrap;
border: 1px solid var(--color-secondary);
}
td {
white-space: pre-line;
}
th {
font-weight: 600;
background: var(--color-box-header);
border-top: 0;
}
td.added,
th.added,
tr.added {
background-color: var(--color-diff-added-row-bg) !important;
}
td.removed,
th.removed,
tr.removed {
background-color: var(--color-diff-removed-row-bg) !important;
}
tbody.section {
border-top: 2px solid var(--color-secondary);
}
.line-num {
width: 1%;
min-width: 50px;
font-family: monospace;
line-height: 20px;
color: var(--color-secondary-dark-2);
white-space: nowrap;
vertical-align: top;
cursor: pointer;
user-select: none;
text-align: right;
background: var(--color-body);
border: 0;
}
}
.diff-detail-box {
padding: 7px 0;
background: var(--color-body);