Fix for disabled syntax_highlighting
Change-Id: I8ee96702d99af9c7503832d9478a577bc0d14e52
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js
index 7382af6..d6aa8ee 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.js
@@ -223,7 +223,7 @@
_syntaxHighlightingEnabled: {
type: Boolean,
computed:
- '_isSyntaxHighlightingEnabled(prefs.syntax_highlighting, _diff)',
+ '_isSyntaxHighlightingEnabled(prefs.*, diff)',
},
_layers: {
@@ -258,6 +258,7 @@
observers: [
'_whitespaceChanged(prefs.ignore_whitespace, _loadedWhitespaceLevel,' +
' noRenderOnPrefsChange)',
+ '_syntaxHighlightingChanged(noRenderOnPrefsChange, prefs.*)',
],
ready() {
@@ -811,6 +812,24 @@
}
},
+ _syntaxHighlightingChanged(noRenderOnPrefsChange, prefsChangeRecord) {
+ // Polymer 2: check for undefined
+ if ([
+ noRenderOnPrefsChange,
+ prefsChangeRecord,
+ ].some(arg => arg === undefined)) {
+ return;
+ }
+
+ if (prefsChangeRecord.path !== 'prefs.syntax_highlighting') {
+ return;
+ }
+
+ if (!noRenderOnPrefsChange) {
+ this.reload();
+ }
+ },
+
/**
* @param {Object} patchRangeRecord
* @return {number|null}
@@ -892,8 +911,9 @@
item => item.__draftID === comment.__draftID);
},
- _isSyntaxHighlightingEnabled(preference, diff) {
- if (!preference) return false;
+ _isSyntaxHighlightingEnabled(preferenceChangeRecord, diff) {
+ if (!preferenceChangeRecord || !diff) return false;
+ if (!preferenceChangeRecord.base.syntax_highlighting) return false;
return !this._anyLineTooLong(diff) &&
this.$.diff.getDiffLength(diff) <= SYNTAX_MAX_DIFF_LENGTH;
},
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.html b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.html
index cdbdeb5..16b7728 100644
--- a/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.html
+++ b/polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host_test.html
@@ -1344,7 +1344,7 @@
Gerrit.DiffSide.RIGHT), [r]);
});
- suite('syntax layer', () => {
+ suite('syntax layer with syntax_highlighting on', () => {
setup(() => {
const prefs = {
line_length: 10,
@@ -1353,17 +1353,17 @@
context: -1,
syntax_highlighting: true,
};
+ element.patchRange = {};
element.prefs = prefs;
});
test('gr-diff-host provides syntax highlighting layer to gr-diff', () => {
- element.patchRange = {};
element.reload();
assert.equal(element.$.diff.layers[0], element.$.syntaxLayer);
});
test('rendering normal-sized diff does not disable syntax', () => {
- element._diff = {
+ element.diff = {
content: [{
a: ['foo'],
}],
@@ -1373,7 +1373,7 @@
test('rendering large diff disables syntax', () => {
// Before it renders, set the first diff line to 500 '*' characters.
- element._diff = {
+ element.diff = {
content: [{
a: [new Array(501).join('*')],
}],
@@ -1385,7 +1385,6 @@
sandbox.stub(element.$.syntaxLayer, 'process').returns(Promise.resolve());
sandbox.stub(element.$.restAPI, 'getDiff').returns(
Promise.resolve({content: []}));
- element.patchRange = {};
element.reload();
setTimeout(() => {
element.dispatchEvent(
@@ -1395,5 +1394,42 @@
});
});
});
+
+ suite('syntax layer with syntax_highlgihting off', () => {
+ setup(() => {
+ const prefs = {
+ line_length: 10,
+ show_tabs: true,
+ tab_size: 4,
+ context: -1,
+ };
+ element.diff = {
+ content: [{
+ a: ['foo'],
+ }],
+ };
+ element.patchRange = {};
+ element.prefs = prefs;
+ });
+
+ test('gr-diff-host provides syntax highlighting layer', () => {
+ element.reload();
+ assert.equal(element.$.diff.layers[0], element.$.syntaxLayer);
+ });
+
+ test('syntax layer should be disabled', () => {
+ assert.isFalse(element.$.syntaxLayer.enabled);
+ });
+
+ test('still disabled for large diff', () => {
+ // Before it renders, set the first diff line to 500 '*' characters.
+ element.diff = {
+ content: [{
+ a: [new Array(501).join('*')],
+ }],
+ };
+ assert.isFalse(element.$.syntaxLayer.enabled);
+ });
+ });
});
</script>