| <!-- |
| Copyright (C) 2015 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. |
| --> |
| |
| <link rel="import" href="../../../bower_components/polymer/polymer.html"> |
| |
| <link rel="import" href="../../../behaviors/gr-patch-set-behavior/gr-patch-set-behavior.html"> |
| <link rel="import" href="../../shared/gr-button/gr-button.html"> |
| <link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html"> |
| <link rel="import" href="../gr-diff-builder/gr-diff-builder.html"> |
| <link rel="import" href="../gr-diff-comment-thread/gr-diff-comment-thread.html"> |
| <link rel="import" href="../gr-diff-highlight/gr-diff-highlight.html"> |
| <link rel="import" href="../gr-diff-selection/gr-diff-selection.html"> |
| <link rel="import" href="../gr-syntax-themes/gr-theme-default.html"> |
| <link rel="import" href="../../../styles/shared-styles.html"> |
| |
| <script src="../../../scripts/hiddenscroll.js"></script> |
| |
| <dom-module id="gr-diff"> |
| <template> |
| <style include="shared-styles"> |
| :host { |
| --light-remove-highlight-color: #fee; |
| --dark-remove-highlight-color: rgba(255, 0, 0, 0.15); |
| --light-add-highlight-color: #efe; |
| --dark-add-highlight-color: rgba(0, 255, 0, 0.15); |
| --light-rebased-remove-highlight-color: #fff6ea; |
| --dark-rebased-remove-highlight-color: rgba(255, 139, 6, 0.15); |
| --light-rebased-add-highlight-color: #edfffa; |
| --dark-rebased-add-highlight-color: rgba(11, 255, 155, 0.15); |
| } |
| :host(.no-left) .sideBySide ::content .left, |
| :host(.no-left) .sideBySide ::content .left + td, |
| :host(.no-left) .sideBySide ::content .right:not([data-value]), |
| :host(.no-left) .sideBySide ::content .right:not([data-value]) + td { |
| display: none; |
| } |
| .diffContainer { |
| border-bottom: 1px solid #eee; |
| border-top: 1px solid #eee; |
| display: flex; |
| font: 12px var(--monospace-font-family); |
| } |
| .diffContainer.hiddenscroll { |
| padding-bottom: .8em; |
| } |
| table { |
| border-collapse: collapse; |
| border-right: 1px solid #ddd; |
| table-layout: fixed; |
| } |
| .lineNum { |
| background-color: #eee; |
| } |
| .image-diff .gr-diff { |
| text-align: center; |
| } |
| .image-diff img { |
| max-width: 50em; |
| outline: 1px solid #ccc; |
| } |
| .image-diff label { |
| font-family: var(--font-family); |
| font-style: italic; |
| } |
| .diff-row { |
| outline: none; |
| } |
| .diff-row.target-row.target-side-left .lineNum.left, |
| .diff-row.target-row.target-side-right .lineNum.right, |
| .diff-row.target-row.unified .lineNum { |
| background-color: #BBDEFB; |
| } |
| .diff-row.target-row.target-side-left .lineNum.left:before, |
| .diff-row.target-row.target-side-right .lineNum.right:before, |
| .diff-row.target-row.unified .lineNum:before { |
| color: #000; |
| } |
| .blank, |
| .content { |
| background-color: #fff; |
| } |
| .full-width { |
| width: 100%; |
| } |
| .full-width .contentText { |
| white-space: pre-wrap; |
| word-wrap: break-word; |
| } |
| .lineNum, |
| .content { |
| /* Set font size based the user's diff preference. */ |
| font-size: var(--font-size, 12px); |
| vertical-align: top; |
| white-space: pre; |
| } |
| .contextLineNum:before, |
| .lineNum:before { |
| box-sizing: border-box; |
| display: inline-block; |
| color: #666; |
| content: attr(data-value); |
| padding: 0 .5em; |
| text-align: right; |
| width: 100%; |
| } |
| .canComment .lineNum[data-value] { |
| cursor: pointer; |
| } |
| .canComment .lineNum[data-value="FILE"]:before { |
| content: 'File'; |
| } |
| .content { |
| overflow: hidden; |
| /* Set max and min width since setting width on table cells still |
| allows them to shrink. */ |
| max-width: var(--content-width, 80ch); |
| min-width: var(--content-width, 80ch); |
| width: var(--content-width, 80ch); |
| } |
| .content.add .intraline, |
| .delta.total .content.add { |
| background-color: var(--dark-add-highlight-color); |
| } |
| .content.add { |
| background-color: var(--light-add-highlight-color); |
| } |
| .content.remove .intraline, |
| .delta.total .content.remove { |
| background-color: var(--dark-remove-highlight-color); |
| } |
| .content.remove { |
| background-color: var(--light-remove-highlight-color); |
| } |
| .dueToRebase .content.add .intraline, |
| .delta.total.dueToRebase .content.add { |
| background-color: var(--dark-rebased-add-highlight-color); |
| } |
| .dueToRebase .content.add { |
| background-color: var(--light-rebased-add-highlight-color); |
| } |
| .dueToRebase .content.remove .intraline, |
| .delta.total.dueToRebase .content.remove { |
| background-color: var(--dark-rebased-remove-highlight-color); |
| } |
| .dueToRebase .content.remove { |
| background-color: var(--light-rebased-remove-highlight-color); |
| } |
| .content .contentText:empty:after { |
| /* Newline, to ensure empty lines are one line-height tall. */ |
| content: '\A'; |
| } |
| .contextControl { |
| background-color: #fef; |
| color: #849; |
| } |
| .contextControl gr-button { |
| display: inline-block; |
| font-family: var(--monospace-font-family); |
| text-decoration: none; |
| } |
| .contextControl td:not(.lineNum) { |
| text-align: center; |
| } |
| .displayLine .diff-row.target-row td { |
| box-shadow: inset 0 -1px #bbb; |
| } |
| .br:after { |
| /* Line feed */ |
| content: '\A'; |
| } |
| .tab { |
| display: inline-block; |
| } |
| .tab-indicator:before { |
| color: #C62828; |
| /* >> character */ |
| content: '\00BB'; |
| } |
| .trailing-whitespace { |
| border-radius: .4em; |
| background-color: #FF9AD2; |
| } |
| #diffHeader { |
| background-color: #F9F9F9; |
| color: #2A00FF; |
| font-family: var(--monospace-font-family); |
| font-size: var(--font-size, 12px); |
| padding: 0.5em 0 0.5em 4em; |
| } |
| #sizeWarning { |
| display: none; |
| margin: 1em auto; |
| max-width: 60em; |
| text-align: center; |
| } |
| #sizeWarning gr-button { |
| margin: 1em; |
| } |
| #sizeWarning.warn { |
| display: block; |
| } |
| .target-row td.blame { |
| background: #eee; |
| } |
| col.blame { |
| display: none; |
| } |
| td.blame { |
| display: none; |
| font-family: var(--font-family); |
| font-size: var(--font-size, 12px); |
| padding: 0 .5em; |
| white-space: pre; |
| } |
| :host(.showBlame) col.blame { |
| display: table-column; |
| } |
| :host(.showBlame) td.blame { |
| display: table-cell; |
| } |
| td.blame > span { |
| opacity: 0.6; |
| } |
| td.blame > span.startOfRange { |
| opacity: 1; |
| } |
| td.blame .sha { |
| font-family: var(--monospace-font-family); |
| } |
| .full-width td.blame { |
| overflow: hidden; |
| width: 200px; |
| } |
| </style> |
| <style include="gr-theme-default"></style> |
| <div id="diffHeader" hidden$="[[_computeDiffHeaderHidden(_diffHeaderItems)]]"> |
| <template |
| is="dom-repeat" |
| items="[[_diffHeaderItems]]"> |
| <div>[[item]]</div> |
| </template> |
| </div> |
| <div class$="[[_computeContainerClass(_loggedIn, viewMode, displayLine)]]" |
| on-tap="_handleTap"> |
| <gr-diff-selection diff="[[_diff]]"> |
| <gr-diff-highlight |
| id="highlights" |
| logged-in="[[_loggedIn]]" |
| comments="{{comments}}"> |
| <gr-diff-builder |
| id="diffBuilder" |
| comments="[[comments]]" |
| project-name="[[projectName]]" |
| diff="[[_diff]]" |
| diff-path="[[path]]" |
| view-mode="[[viewMode]]" |
| line-wrapping="[[lineWrapping]]" |
| is-image-diff="[[isImageDiff]]" |
| base-image="[[_baseImage]]" |
| revision-image="[[_revisionImage]]"> |
| <table |
| id="diffTable" |
| class$="[[_diffTableClass]]" |
| role="presentation"></table> |
| </gr-diff-builder> |
| </gr-diff-highlight> |
| </gr-diff-selection> |
| </div> |
| <div id="sizeWarning" class$="[[_computeWarningClass(_showWarning)]]"> |
| <p> |
| Prevented render because "Whole file" is enabled and this diff is very |
| large (about [[_diffLength(_diff)]] lines). |
| </p> |
| <gr-button on-tap="_handleLimitedBypass"> |
| Render with limited context |
| </gr-button> |
| <gr-button on-tap="_handleFullBypass"> |
| Render anyway (may be slow) |
| </gr-button> |
| </div> |
| <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> |
| </template> |
| <script src="gr-diff-line.js"></script> |
| <script src="gr-diff-group.js"></script> |
| <script src="gr-diff.js"></script> |
| </dom-module> |