| /** | |
| * @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, comments, prefs, projectName, outputEl, layers) { | |
| GrDiffBuilder.call( | |
| this, diff, comments, prefs, projectName, 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'); | |
| } | |
| 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 lineEl = this._createLineEl(line, lineNumber, line.type, side); | |
| lineEl.classList.add(side); | |
| row.appendChild(lineEl); | |
| const action = this._createContextControl(section, line); | |
| if (action) { | |
| row.appendChild(action); | |
| } else { | |
| const textEl = this._createTextEl(line, side); | |
| const threadGroupEl = this._commentThreadGroupForLine(line, side); | |
| if (threadGroupEl) { | |
| textEl.appendChild(threadGroupEl); | |
| } | |
| 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); |