Fix `Shift A` shortcut for `hide_left_side` diff mode
Hiding the left side of a diff could be triggered by either setting
`hide_left_side` in the render prefs, or by calling `toggleLeftDiff()`
on gr-diff directly. We prefer to let gr-diff users rather update the
preferences than calling special methods.
Also, `toggleLeftDiff()` was only toggling the `no-left` css class, not
updating the preferences, so code relying on the preferences was
actually broken.
Release-Notes: skip
Change-Id: I47d458bf38a967df2402401cf7a6beb6e42000ee
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
index 1f1ac5c..00f7639 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts
@@ -827,7 +827,10 @@
toggleLeftDiff() {
assertIsDefined(this.diffElement);
- this.diffElement.toggleLeftDiff();
+ this.renderPrefs = {
+ ...this.renderPrefs,
+ hide_left_side: !this.renderPrefs.hide_left_side,
+ };
}
/**
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.ts b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.ts
index 9dabe1d..eea8aaa 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.ts
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.ts
@@ -560,14 +560,6 @@
assert.equal(stub.lastCall.args.length, 0);
});
- test('delegates toggleLeftDiff()', () => {
- assertIsDefined(element.diffElement);
- const stub = sinon.stub(element.diffElement, 'toggleLeftDiff');
- element.toggleLeftDiff();
- assert.isTrue(stub.calledOnce);
- assert.equal(stub.lastCall.args.length, 0);
- });
-
test('clearBlame', async () => {
element.blame = [];
await element.updateComplete;
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts
index 5738cb7..a8a9ff4 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff.ts
@@ -48,7 +48,7 @@
ContentLoadNeededEventDetail,
DiffContextExpandedExternalDetail,
} from '../../../api/diff';
-import {isSafari, toggleClass} from '../../../utils/dom-util';
+import {isSafari} from '../../../utils/dom-util';
import {assertIsDefined} from '../../../utils/common-util';
import {GrDiffSelection} from '../gr-diff-selection/gr-diff-selection';
import {property, query, state} from 'lit/decorators.js';
@@ -508,10 +508,6 @@
return !!this.highlights.selectedRange;
}
- toggleLeftDiff() {
- toggleClass(this, 'no-left');
- }
-
private blameChanged() {
this.setBlame(this.blame ?? []);
if (this.blame) {
@@ -624,18 +620,16 @@
}
private renderPrefsChanged() {
- if (this.renderPrefs.hide_left_side) {
- this.classList.add('no-left');
- }
- if (this.renderPrefs.disable_context_control_buttons) {
- this.classList.add('disable-context-control-buttons');
- }
- if (this.renderPrefs.hide_line_length_indicator) {
- this.classList.add('hide-line-length-indicator');
- }
- if (this.renderPrefs.show_sign_col) {
- this.classList.add('with-sign-col');
- }
+ this.classList.toggle('no-left', !!this.renderPrefs.hide_left_side);
+ this.classList.toggle(
+ 'disable-context-control-buttons',
+ !!this.renderPrefs.disable_context_control_buttons
+ );
+ this.classList.toggle(
+ 'hide-line-length-indicator',
+ !!this.renderPrefs.hide_line_length_indicator
+ );
+ this.classList.toggle('with-sign-col', !!this.renderPrefs.show_sign_col);
if (this.prefs) {
this.updatePreferenceStyles();
}
diff --git a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts
index 917decc..19c0df8 100644
--- a/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts
+++ b/polygerrit-ui/app/embed/diff/gr-diff/gr-diff_test.ts
@@ -180,10 +180,13 @@
await element.updateComplete;
});
- test('toggleLeftDiff', () => {
- element.toggleLeftDiff();
+ test('toggleLeftDiff', async () => {
+ element.renderPrefs = {...element.renderPrefs, hide_left_side: true};
+ await element.updateComplete;
assert.isTrue(element.classList.contains('no-left'));
- element.toggleLeftDiff();
+
+ element.renderPrefs = {...element.renderPrefs, hide_left_side: false};
+ await element.updateComplete;
assert.isFalse(element.classList.contains('no-left'));
});