Merge changes Ifc9a1871,I598f91b5

* changes:
  Move "move cursor on selection" to gr-diff-cursor
  Upgrade gr-diff-cursor event handling to Polymer 3
This commit is contained in:
Ole Rehmsen
2020-04-17 09:59:24 +00:00
committed by Gerrit Code Review
7 changed files with 52 additions and 32 deletions

View File

@@ -1104,11 +1104,6 @@ class GrFileList extends mixinBehaviors( [
return expandedFilesRecord.base.some(f => f.path === path);
}
_onLineSelected(e, detail) {
this.$.diffCursor.moveToLineNumber(detail.number, detail.side,
detail.path);
}
_computeExpandedFiles(expandedCount, totalCount) {
if (expandedCount === 0) {
return GrFileListConstants.FilesExpandedState.NONE;

View File

@@ -385,7 +385,7 @@ export const htmlTemplate = html`
</div>
</div>
<template is="dom-if" if="[[_isFileExpanded(file.__path, _expandedFiles.*)]]">
<gr-diff-host no-auto-render="" show-load-failure="" display-line="[[_displayLine]]" hidden="[[!_isFileExpanded(file.__path, _expandedFiles.*)]]" change-num="[[changeNum]]" patch-range="[[patchRange]]" path="[[file.__path]]" prefs="[[diffPrefs]]" project-name="[[change.project]]" on-line-selected="_onLineSelected" no-render-on-prefs-change="" view-mode="[[diffViewMode]]"></gr-diff-host>
<gr-diff-host no-auto-render="" show-load-failure="" display-line="[[_displayLine]]" hidden="[[!_isFileExpanded(file.__path, _expandedFiles.*)]]" change-num="[[changeNum]]" patch-range="[[patchRange]]" path="[[file.__path]]" prefs="[[diffPrefs]]" project-name="[[change.project]]" no-render-on-prefs-change="" view-mode="[[diffViewMode]]"></gr-diff-host>
</template>
</div>
</template>

View File

@@ -1104,7 +1104,10 @@ suite('gr-file-list tests', () => {
cancel() {},
getCursorStops() { return []; },
addEventListener(eventName, callback) {
callback(new Event(eventName));
if (['render-start', 'render-content', 'scroll']
.indexOf(eventName) >= 0) {
callback(new Event(eventName));
}
},
}];
sinon.stub(element, 'diffs', {

View File

@@ -127,6 +127,14 @@ class GrDiffCursor extends GestureEventListeners(
];
}
constructor() {
super();
this._boundHandleWindowScroll = () => this._handleWindowScroll();
this._boundHandleDiffRenderStart = () => this._handleDiffRenderStart();
this._boundHandleDiffRenderContent = () => this._handleDiffRenderContent();
this._boundHandleDiffLineSelected = e => this._handleDiffLineSelected(e);
}
/** @override */
ready() {
super.ready();
@@ -148,16 +156,16 @@ class GrDiffCursor extends GestureEventListeners(
}
/** @override */
attached() {
super.attached();
connectedCallback() {
super.connectedCallback();
// Catch when users are scrolling as the view loads.
this.listen(window, 'scroll', '_handleWindowScroll');
window.addEventListener('scroll', this._boundHandleWindowScroll);
}
/** @override */
detached() {
super.detached();
this.unlisten(window, 'scroll', '_handleWindowScroll');
disconnectedCallback() {
super.disconnectedCallback();
window.removeEventListener('scroll', this._boundHandleWindowScroll);
}
moveLeft() {
@@ -315,6 +323,11 @@ class GrDiffCursor extends GestureEventListeners(
this._preventAutoScrollOnManualScroll = false;
}
_handleDiffLineSelected(event) {
this.moveToLineNumber(
event.detail.number, event.detail.side, event.detail.path);
}
createCommentInPlace() {
const diffWithRangeSelected = this.diffs
.find(diff => diff.isRangeSelected());
@@ -472,21 +485,22 @@ class GrDiffCursor extends GestureEventListeners(
spliceIdx++) {
splice = changeRecord.indexSplices[spliceIdx];
for (i = splice.index;
i < splice.index + splice.addedCount;
i++) {
this.listen(this.diffs[i], 'render-start', '_handleDiffRenderStart');
this.listen(
this.diffs[i], 'render-content', '_handleDiffRenderContent');
for (i = splice.index; i < splice.index + splice.addedCount; i++) {
this.diffs[i].addEventListener(
'render-start', this._boundHandleDiffRenderStart);
this.diffs[i].addEventListener(
'render-content', this._boundHandleDiffRenderContent);
this.diffs[i].addEventListener(
'line-selected', this._boundHandleDiffLineSelected);
}
for (i = 0;
i < splice.removed && splice.removed.length;
i++) {
this.unlisten(splice.removed[i],
'render-start', '_handleDiffRenderStart');
this.unlisten(splice.removed[i],
'render-content', '_handleDiffRenderContent');
for (i = 0; i < splice.removed && splice.removed.length; i++) {
splice.removed[i].removeEventListener(
'render-start', this._boundHandleDiffRenderStart);
splice.removed[i].removeEventListener(
'render-content', this._boundHandleDiffRenderContent);
splice.removed[i].removeEventListener(
'line-selected', this._boundHandleDiffLineSelected);
}
}
}

View File

@@ -136,6 +136,20 @@ suite('gr-diff-cursor tests', () => {
assert.equal(cursorElement._scrollBehavior, 'keep-visible');
});
test('moves to selected line', () => {
const moveToNumStub = sandbox.stub(cursorElement, 'moveToLineNumber');
cursorElement._handleDiffLineSelected(
new CustomEvent('line-selected', {
detail: {number: '123', side: 'right', path: 'some/file'},
}));
assert.isTrue(moveToNumStub.called);
assert.equal(moveToNumStub.lastCall.args[0], '123');
assert.equal(moveToNumStub.lastCall.args[1], 'right');
assert.equal(moveToNumStub.lastCall.args[2], 'some/file');
});
suite('unified diff', () => {
setup(done => {
// We must allow the diff to re-render after setting the viewMode.

View File

@@ -1033,7 +1033,6 @@ class GrDiffView extends mixinBehaviors( [
}
_onLineSelected(e, detail) {
this.$.cursor.moveToLineNumber(detail.number, detail.side);
if (!this._change) { return; }
const cursorAddress = this.$.cursor.getAddress();
const number = cursorAddress ? cursorAddress.number : undefined;

View File

@@ -904,7 +904,6 @@ suite('gr-diff-view tests', () => {
test('_onLineSelected', () => {
const getUrlStub = sandbox.stub(Gerrit.Nav, 'getUrlForDiffById');
const replaceStateStub = sandbox.stub(history, 'replaceState');
const moveStub = sandbox.stub(element.$.cursor, 'moveToLineNumber');
sandbox.stub(element.$.cursor, 'getAddress')
.returns({number: 123, isLeftSide: false});
@@ -919,10 +918,6 @@ suite('gr-diff-view tests', () => {
element._onLineSelected(e, detail);
assert.isTrue(moveStub.called);
assert.equal(moveStub.lastCall.args[0], detail.number);
assert.equal(moveStub.lastCall.args[1], detail.side);
assert.isTrue(replaceStateStub.called);
assert.isTrue(getUrlStub.called);
});