| /** | |
| * @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.GrDiffBuilderUnified) { return; } | |
| function GrDiffBuilderUnified( | |
| diff, comments, prefs, projectName, outputEl, layers) { | |
| GrDiffBuilder.call( | |
| this, diff, comments, prefs, projectName, outputEl, layers); | |
| } | |
| GrDiffBuilderUnified.prototype = Object.create(GrDiffBuilder.prototype); | |
| GrDiffBuilderUnified.prototype.constructor = GrDiffBuilderUnified; | |
| GrDiffBuilderUnified.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'); | |
| } | |
| for (let i = 0; i < group.lines.length; ++i) { | |
| sectionEl.appendChild(this._createRow(sectionEl, group.lines[i])); | |
| } | |
| return sectionEl; | |
| }; | |
| GrDiffBuilderUnified.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 right-side line number. | |
| col = document.createElement('col'); | |
| col.setAttribute('width', width); | |
| colgroup.appendChild(col); | |
| // Add the content. | |
| colgroup.appendChild(document.createElement('col')); | |
| outputEl.appendChild(colgroup); | |
| }; | |
| GrDiffBuilderUnified.prototype._createRow = function(section, line) { | |
| const row = this._createElement('tr', line.type); | |
| row.appendChild(this._createBlameCell(line)); | |
| let lineEl = this._createLineEl(line, line.beforeNumber, | |
| GrDiffLine.Type.REMOVE); | |
| lineEl.classList.add('left'); | |
| row.appendChild(lineEl); | |
| lineEl = this._createLineEl(line, line.afterNumber, | |
| GrDiffLine.Type.ADD); | |
| lineEl.classList.add('right'); | |
| row.appendChild(lineEl); | |
| row.classList.add('diff-row', 'unified'); | |
| row.tabIndex = -1; | |
| const action = this._createContextControl(section, line); | |
| if (action) { | |
| row.appendChild(action); | |
| } else { | |
| const textEl = this._createTextEl(line); | |
| const threadGroupEl = this._commentThreadGroupForLine(line); | |
| if (threadGroupEl) { | |
| textEl.appendChild(threadGroupEl); | |
| } | |
| row.appendChild(textEl); | |
| } | |
| return row; | |
| }; | |
| GrDiffBuilderUnified.prototype._getNextContentOnSide = function( | |
| content, side) { | |
| let tr = content.parentElement.parentElement; | |
| while (tr = tr.nextSibling) { | |
| if (tr.classList.contains('both') || ( | |
| (side === 'left' && tr.classList.contains('remove')) || | |
| (side === 'right' && tr.classList.contains('add')))) { | |
| return tr.querySelector('.contentText'); | |
| } | |
| } | |
| return null; | |
| }; | |
| window.GrDiffBuilderUnified = GrDiffBuilderUnified; | |
| })(window, GrDiffBuilder); |