Files
gerrit/polygerrit-ui/app/elements/diff/gr-diff-builder/gr-diff-builder-side-by-side.js
Ole Rehmsen 80df1f3f0f Show but don't highlight ignored whitespace
When a line had only whitespace changes that the user had configured to
be ignored, the previous behavior was to not show those at all, and if
the line showed up as context, render the right-side version of that
line both left and right. That is very confusing.

The new behavior is to not use colors to highlight those changes, but
still render the left and right as the files actually are.

Bug: Issue 1062
Change-Id: Ic301cc5445d33ee6e0a780178a189386669f8a7a
2019-06-06 18:06:50 +02:00

120 lines
3.9 KiB
JavaScript

/**
* @license
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the 'License');
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an 'AS IS' BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function(window, GrDiffBuilder) {
'use strict';
// Prevent redefinition.
if (window.GrDiffBuilderSideBySide) { return; }
function GrDiffBuilderSideBySide(diff, prefs, outputEl, layers) {
GrDiffBuilder.call(this, diff, prefs, outputEl, layers);
}
GrDiffBuilderSideBySide.prototype = Object.create(GrDiffBuilder.prototype);
GrDiffBuilderSideBySide.prototype.constructor = GrDiffBuilderSideBySide;
GrDiffBuilderSideBySide.prototype.buildSectionElement = function(group) {
const sectionEl = this._createElement('tbody', 'section');
sectionEl.classList.add(group.type);
if (this._isTotal(group)) {
sectionEl.classList.add('total');
}
if (group.dueToRebase) {
sectionEl.classList.add('dueToRebase');
}
if (group.ignoredWhitespaceOnly) {
sectionEl.classList.add('ignoredWhitespaceOnly');
}
const pairs = group.getSideBySidePairs();
for (let i = 0; i < pairs.length; i++) {
sectionEl.appendChild(this._createRow(sectionEl, pairs[i].left,
pairs[i].right));
}
return sectionEl;
};
GrDiffBuilderSideBySide.prototype.addColumns = function(outputEl, fontSize) {
const width = fontSize * 4;
const colgroup = document.createElement('colgroup');
// Add the blame column.
let col = this._createElement('col', 'blame');
colgroup.appendChild(col);
// Add left-side line number.
col = document.createElement('col');
col.setAttribute('width', width);
colgroup.appendChild(col);
// Add left-side content.
colgroup.appendChild(document.createElement('col'));
// Add right-side line number.
col = document.createElement('col');
col.setAttribute('width', width);
colgroup.appendChild(col);
// Add right-side content.
colgroup.appendChild(document.createElement('col'));
outputEl.appendChild(colgroup);
};
GrDiffBuilderSideBySide.prototype._createRow = function(section, leftLine,
rightLine) {
const row = this._createElement('tr');
row.classList.add('diff-row', 'side-by-side');
row.setAttribute('left-type', leftLine.type);
row.setAttribute('right-type', rightLine.type);
row.tabIndex = -1;
row.appendChild(this._createBlameCell(leftLine));
this._appendPair(section, row, leftLine, leftLine.beforeNumber,
GrDiffBuilder.Side.LEFT);
this._appendPair(section, row, rightLine, rightLine.afterNumber,
GrDiffBuilder.Side.RIGHT);
return row;
};
GrDiffBuilderSideBySide.prototype._appendPair = function(section, row, line,
lineNumber, side) {
const lineNumberEl = this._createLineEl(line, lineNumber, line.type, side);
lineNumberEl.classList.add(side);
row.appendChild(lineNumberEl);
const action = this._createContextControl(section, line);
if (action) {
row.appendChild(action);
} else {
const textEl = this._createTextEl(lineNumberEl, line, side);
row.appendChild(textEl);
}
};
GrDiffBuilderSideBySide.prototype._getNextContentOnSide = function(
content, side) {
let tr = content.parentElement.parentElement;
while (tr = tr.nextSibling) {
content = tr.querySelector(
'td.content .contentText[data-side="' + side + '"]');
if (content) { return content; }
}
return null;
};
window.GrDiffBuilderSideBySide = GrDiffBuilderSideBySide;
})(window, GrDiffBuilder);