Move text selection out of gr-diff.
Change-Id: I0734653066a1bb78f95c141aa8202fad315b13c0
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html
index cfe5d66..7c66bf1 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html
@@ -17,8 +17,9 @@
<link rel="import" href="../../../bower_components/polymer/polymer.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-comment-thread/gr-diff-comment-thread.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-selection/gr-diff-selection.html">
<dom-module id="gr-diff">
<template>
@@ -41,7 +42,7 @@
border-collapse: collapse;
border-right: 1px solid #ddd;
}
- .section {
+ .lineNum {
background-color: #eee;
}
.image-diff .gr-diff {
@@ -99,18 +100,6 @@
max-width: var(--content-width, 80ch);
min-width: var(--content-width, 80ch);
}
- .content.left {
- -webkit-user-select: var(--left-user-select, text);
- -moz-user-select: var(--left-user-select, text);
- -ms-user-select: var(--left-user-select, text);
- user-select: var(--left-user-select, text);
- }
- .content.right {
- -webkit-user-select: var(--right-user-select, text);
- -moz-user-select: var(--right-user-select, text);
- -ms-user-select: var(--right-user-select, text);
- user-select: var(--right-user-select, text);
- }
.content.add hl,
.content.add.darkHighlight {
background-color: var(--dark-add-highlight-color);
@@ -151,17 +140,17 @@
}
</style>
<div class$="[[_computeContainerClass(_loggedIn, viewMode)]]"
- on-tap="_handleTap"
- on-mousedown="_handleMouseDown"
- on-copy="_handleCopy">
- <gr-diff-builder
- id="diffBuilder"
- view-mode="[[viewMode]]"
- is-image-diff="[[isImageDiff]]"
- base-image="[[_baseImage]]"
- revision-image="[[_revisionImage]]">
- <table id="diffTable"></table>
- </gr-diff-builder>
+ on-tap="_handleTap">
+ <gr-diff-selection>
+ <gr-diff-builder
+ id="diffBuilder"
+ view-mode="[[viewMode]]"
+ is-image-diff="[[isImageDiff]]"
+ base-image="[[_baseImage]]"
+ revision-image="[[_revisionImage]]">
+ <table id="diffTable"></table>
+ </gr-diff-builder>
+ </gr-diff-selection>
</div>
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
</template>
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
index f89d1e8..f3a353b 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
@@ -54,10 +54,6 @@
value: DiffViewMode.SIDE_BY_SIDE,
},
_diff: Object,
- _selectionSide: {
- type: String,
- observer: '_selectionSideChanged',
- },
_comments: Object,
},
@@ -297,66 +293,6 @@
});
},
- _handleMouseDown: function(e) {
- var el = Polymer.dom(e).rootTarget;
- var side;
- for (var node = el; node != null; node = node.parentNode) {
- if (!node.classList) { continue; }
-
- if (node.classList.contains(DiffSide.LEFT)) {
- side = DiffSide.LEFT;
- break;
- } else if (node.classList.contains(DiffSide.RIGHT)) {
- side = DiffSide.RIGHT;
- break;
- }
- }
- this._selectionSide = side;
- },
-
- _selectionSideChanged: function(side) {
- if (side) {
- var oppositeSide = side === DiffSide.RIGHT ?
- DiffSide.LEFT : DiffSide.RIGHT;
- this.customStyle['--' + side + '-user-select'] = 'text';
- this.customStyle['--' + oppositeSide + '-user-select'] = 'none';
- } else {
- this.customStyle['--left-user-select'] = 'text';
- this.customStyle['--right-user-select'] = 'text';
- }
- this.updateStyles();
- },
-
- _handleCopy: function(e) {
- if (!e.target.classList.contains('content')) {
- return;
- }
- var text = this._getSelectedText(this._selectionSide);
- e.clipboardData.setData('Text', text);
- e.preventDefault();
- },
-
- _getSelectedText: function(opt_side) {
- var sel = window.getSelection();
- var range = sel.getRangeAt(0);
- var doc = range.cloneContents();
- var selector = '.content';
- if (opt_side) {
- selector += '.' + opt_side;
- }
- var contentEls = Polymer.dom(doc).querySelectorAll(selector);
-
- if (contentEls.length === 0) {
- return doc.textContent;
- }
-
- var text = '';
- for (var i = 0; i < contentEls.length; i++) {
- text += contentEls[i].textContent + '\n';
- }
- return text;
- },
-
_prefsChanged: function(prefsChangeRecord) {
var prefs = prefsChangeRecord.base;
this.customStyle['--content-width'] = prefs.line_length + 'ch';
@@ -473,7 +409,6 @@
this.changeNum, this._diff, this.patchRange);
},
-
_projectConfigChanged: function(projectConfig) {
var threadEls = this._getCommentThreads();
for (var i = 0; i < threadEls.length; i++) {