Add a line limit indicator in fit to screen mode When the width of the screen is larger than the line limit, a line will be visible to indicate the line limit. When the screen is narrower than the line limit, the indicator is not visible. Bug: Issue 4813 Change-Id: I06cd97c10c33c4eb9e73340752b9254f10239ddb
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences.html b/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences.html index 9b830cf..c4c5ee6 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences.html +++ b/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences.html
@@ -101,8 +101,7 @@ id="lineWrappingInput" on-tap="_handlelineWrappingTap"> </div> - <div class="pref" id="columnsPref" - hidden$="[[_newPrefs.line_wrapping]]"> + <div class="pref" id="columnsPref"> <label for="columnsInput">Diff width</label> <input is="iron-input" type="number" id="columnsInput" prevent-invalid-input
diff --git a/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences_test.html b/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences_test.html index f06cd3a..f157640 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences_test.html +++ b/polygerrit-ui/app/elements/diff/gr-diff-preferences/gr-diff-preferences_test.html
@@ -77,18 +77,6 @@ assert.isFalse(element._newPrefs.syntax_highlighting); }); - test('clicking fit to screen hides line length input', () => { - element.prefs = {line_wrapping: false}; - - assert.isFalse(element.$.columnsPref.hidden); - - MockInteractions.tap(element.$.lineWrappingInput); - assert.isTrue(element.$.columnsPref.hidden); - - MockInteractions.tap(element.$.lineWrappingInput); - assert.isFalse(element.$.columnsPref.hidden); - }); - test('clicking save button calls _handleSave function', () => { const savePrefs = sinon.stub(element, '_handleSave'); MockInteractions.tap(element.$.saveButton);
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 5ba62af..0255361 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html +++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.html
@@ -239,6 +239,20 @@ overflow: hidden; width: 200px; } + /** Since the line limit position is determined by charachter size, blank + lines also need to have the same font size as everything else */ + .full-width .blank { + font-size: var(--font-size, var(--font-size-small)); + } + /** Support the line length indicator **/ + .full-width td.content, + .full-width td.blank { + /* Base 64 encoded 1x30px of #ddd */ + background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAeAgMAAACQ+5xUAAAACVBMVEXd3d0AAAClpaWbWM6mAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAEElEQVQImWNgwAsakEgMAAAaPAEBM3eopQAAAABJRU5ErkJggg==') +; + background-position: var(--line-limit) 0; + background-repeat: repeat-y; + } </style> <style include="gr-theme-default"></style> <div id="diffHeader" hidden$="[[_computeDiffHeaderHidden(_diffHeaderItems)]]">
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 19b3c6d..987c108 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js +++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff.js
@@ -623,6 +623,7 @@ this._diffTableClass = 'full-width'; if (this.viewMode === 'SIDE_BY_SIDE') { stylesToUpdate['--content-width'] = 'none'; + stylesToUpdate['--line-limit'] = prefs.line_length + 'ch'; } } else { this._diffTableClass = '';
diff --git a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html index 7526141..e2e9c84 100644 --- a/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html +++ b/polygerrit-ui/app/elements/diff/gr-diff/gr-diff_test.html
@@ -70,6 +70,20 @@ assert.equal(element._diffLength(mock.diffResponse), 52); }); + test('line limit with line_wrapping', () => { + element = fixture('basic'); + element.prefs = {line_wrapping: true, line_length: 80, tab_size: 2}; + flushAsynchronousOperations(); + assert.equal(element.customStyle['--line-limit'], '80ch'); + }); + + test('line limit without line_wrapping', () => { + element = fixture('basic'); + element.prefs = {line_wrapping: false, line_length: 80, tab_size: 2}; + flushAsynchronousOperations(); + assert.isNotOk(element.customStyle['--line-limit']); + }); + suite('_get{PatchNum|IsParentComment}ByLineAndContent', () => { let lineEl; let contentEl;