Re use gr-diff-preferences inside gr-settings-view
Bug: Issue 8678 Change-Id: Ifd950bd4226407252e86610149dd8c6ba94ab967
This commit is contained in:
@@ -24,7 +24,6 @@ limitations under the License.
|
|||||||
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
|
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
|
||||||
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
|
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
|
||||||
<link rel="import" href="../../diff/gr-comment-api/gr-comment-api.html">
|
<link rel="import" href="../../diff/gr-comment-api/gr-comment-api.html">
|
||||||
<link rel="import" href="../../diff/gr-diff-preferences/gr-diff-preferences.html">
|
|
||||||
<link rel="import" href="../../edit/gr-edit-constants.html">
|
<link rel="import" href="../../edit/gr-edit-constants.html">
|
||||||
<link rel="import" href="../../plugins/gr-endpoint-decorator/gr-endpoint-decorator.html">
|
<link rel="import" href="../../plugins/gr-endpoint-decorator/gr-endpoint-decorator.html">
|
||||||
<link rel="import" href="../../plugins/gr-endpoint-param/gr-endpoint-param.html">
|
<link rel="import" href="../../plugins/gr-endpoint-param/gr-endpoint-param.html">
|
||||||
|
|||||||
@@ -283,7 +283,8 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
|
|
||||||
test(', should open diff preferences', () => {
|
test(', should open diff preferences', () => {
|
||||||
const stub = sandbox.stub(element.$.fileList.$.diffPreferences, 'open');
|
const stub = sandbox.stub(
|
||||||
|
element.$.fileList.$.diffPreferencesDialog, 'open');
|
||||||
MockInteractions.pressAndReleaseKeyOn(element, 188, null, ',');
|
MockInteractions.pressAndReleaseKeyOn(element, 188, null, ',');
|
||||||
assert.isTrue(stub.called);
|
assert.isTrue(stub.called);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -23,8 +23,9 @@ limitations under the License.
|
|||||||
<link rel="import" href="../../../styles/shared-styles.html">
|
<link rel="import" href="../../../styles/shared-styles.html">
|
||||||
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
|
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
|
||||||
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
|
<link rel="import" href="../../core/gr-reporting/gr-reporting.html">
|
||||||
<link rel="import" href="../../diff/gr-diff-host/gr-diff-host.html">
|
|
||||||
<link rel="import" href="../../diff/gr-diff-cursor/gr-diff-cursor.html">
|
<link rel="import" href="../../diff/gr-diff-cursor/gr-diff-cursor.html">
|
||||||
|
<link rel="import" href="../../diff/gr-diff-host/gr-diff-host.html">
|
||||||
|
<link rel="import" href="../../diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog.html">
|
||||||
<link rel="import" href="../../edit/gr-edit-file-controls/gr-edit-file-controls.html">
|
<link rel="import" href="../../edit/gr-edit-file-controls/gr-edit-file-controls.html">
|
||||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
||||||
<link rel="import" href="../../shared/gr-cursor-manager/gr-cursor-manager.html">
|
<link rel="import" href="../../shared/gr-cursor-manager/gr-cursor-manager.html">
|
||||||
@@ -465,10 +466,11 @@ limitations under the License.
|
|||||||
</gr-button><!--
|
</gr-button><!--
|
||||||
--></gr-tooltip-content>
|
--></gr-tooltip-content>
|
||||||
</div>
|
</div>
|
||||||
<gr-diff-preferences
|
<gr-diff-preferences-dialog
|
||||||
id="diffPreferences"
|
id="diffPreferencesDialog"
|
||||||
prefs="{{diffPrefs}}"
|
diff-prefs="{{diffPrefs}}"
|
||||||
local-prefs="{{_localPrefs}}"></gr-diff-preferences>
|
on-reload-diff-preference="_handleReloadingDiffPreference">
|
||||||
|
</gr-diff-preferences-dialog>
|
||||||
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
||||||
<gr-storage id="storage"></gr-storage>
|
<gr-storage id="storage"></gr-storage>
|
||||||
<gr-diff-cursor id="diffCursor"></gr-diff-cursor>
|
<gr-diff-cursor id="diffCursor"></gr-diff-cursor>
|
||||||
|
|||||||
@@ -125,7 +125,6 @@
|
|||||||
},
|
},
|
||||||
/** @type {?} */
|
/** @type {?} */
|
||||||
_userPrefs: Object,
|
_userPrefs: Object,
|
||||||
_localPrefs: Object,
|
|
||||||
_showInlineDiffs: Boolean,
|
_showInlineDiffs: Boolean,
|
||||||
numFilesShown: {
|
numFilesShown: {
|
||||||
type: Number,
|
type: Number,
|
||||||
@@ -269,7 +268,6 @@
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
|
|
||||||
this._localPrefs = this.$.storage.getPreferences();
|
|
||||||
promises.push(this._getDiffPreferences().then(prefs => {
|
promises.push(this._getDiffPreferences().then(prefs => {
|
||||||
this.diffPrefs = prefs;
|
this.diffPrefs = prefs;
|
||||||
}));
|
}));
|
||||||
@@ -297,7 +295,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
openDiffPrefs() {
|
openDiffPrefs() {
|
||||||
this.$.diffPreferences.open();
|
this.$.diffPreferencesDialog.open();
|
||||||
},
|
},
|
||||||
|
|
||||||
_calculatePatchChange(files) {
|
_calculatePatchChange(files) {
|
||||||
@@ -1255,5 +1253,11 @@
|
|||||||
|
|
||||||
return 'Mark as reviewed (shortcut: r)';
|
return 'Mark as reviewed (shortcut: r)';
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_handleReloadingDiffPreference() {
|
||||||
|
this._getDiffPreferences().then(prefs => {
|
||||||
|
this.diffPrefs = prefs;
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<!--
|
||||||
|
@license
|
||||||
|
Copyright (C) 2019 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
|
<link rel="import" href="../../../styles/shared-styles.html">
|
||||||
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
||||||
|
<link rel="import" href="../../shared/gr-diff-preferences/gr-preferences.html">
|
||||||
|
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
|
||||||
|
|
||||||
|
<dom-module id="gr-diff-preferences-dialog">
|
||||||
|
<template>
|
||||||
|
<style include="shared-styles">
|
||||||
|
.diffHeader,
|
||||||
|
.diffActions {
|
||||||
|
padding: 1em 1.5em;
|
||||||
|
}
|
||||||
|
.diffHeader,
|
||||||
|
.diffActions {
|
||||||
|
background-color: var(--dialog-background-color);
|
||||||
|
}
|
||||||
|
.diffHeader {
|
||||||
|
border-bottom: 1px solid var(--border-color);
|
||||||
|
font-weight: var(--font-weight-bold);
|
||||||
|
}
|
||||||
|
.diffActions {
|
||||||
|
border-top: 1px solid var(--border-color);
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
.diffPrefsOverlay gr-button {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
div.edited:after {
|
||||||
|
color: var(--deemphasized-text-color);
|
||||||
|
content: ' *';
|
||||||
|
}
|
||||||
|
#diffPreferences {
|
||||||
|
display: flex;
|
||||||
|
padding: .35em 1.5em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<gr-overlay id="diffPrefsOverlay" with-backdrop>
|
||||||
|
<div class$="diffHeader [[_computeHeaderClass(_diffPrefsChanged)]]">Diff Preferences</div>
|
||||||
|
<gr-diff-preferences
|
||||||
|
id="diffPreferences"
|
||||||
|
diff-prefs="{{diffPrefs}}"
|
||||||
|
has-unsaved-changes="{{_diffPrefsChanged}}"></gr-diff-preferences>
|
||||||
|
<div class="diffActions">
|
||||||
|
<gr-button
|
||||||
|
id="cancelButton"
|
||||||
|
link
|
||||||
|
on-tap="_handleCancelDiff">
|
||||||
|
Cancel
|
||||||
|
</gr-button>
|
||||||
|
<gr-button
|
||||||
|
id="saveButton"
|
||||||
|
link primary
|
||||||
|
on-tap="_handleSaveDiffPreferences"
|
||||||
|
disabled$="[[!_diffPrefsChanged]]">
|
||||||
|
Save
|
||||||
|
</gr-button>
|
||||||
|
</div>
|
||||||
|
</gr-overlay>
|
||||||
|
</template>
|
||||||
|
<script src="gr-diff-preferences-dialog.js"></script>
|
||||||
|
</dom-module>
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Copyright (C) 2019 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Polymer({
|
||||||
|
is: 'gr-diff-preferences-dialog',
|
||||||
|
|
||||||
|
properties: {
|
||||||
|
/** @type {?} */
|
||||||
|
diffPrefs: Object,
|
||||||
|
|
||||||
|
_diffPrefsChanged: Boolean,
|
||||||
|
},
|
||||||
|
|
||||||
|
getFocusStops() {
|
||||||
|
return {
|
||||||
|
start: this.$.contextSelect,
|
||||||
|
end: this.$.saveButton,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
resetFocus() {
|
||||||
|
this.$.contextSelect.focus();
|
||||||
|
},
|
||||||
|
|
||||||
|
_computeHeaderClass(changed) {
|
||||||
|
return changed ? 'edited' : '';
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleCancelDiff(e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
this.$.diffPrefsOverlay.close();
|
||||||
|
},
|
||||||
|
|
||||||
|
open() {
|
||||||
|
this.$.diffPrefsOverlay.open().then(() => {
|
||||||
|
const focusStops = this.getFocusStops();
|
||||||
|
this.$.diffPrefsOverlay.setFocusStops(focusStops);
|
||||||
|
this.resetFocus();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleSaveDiffPreferences() {
|
||||||
|
this.$.diffPreferences.save().then(() => {
|
||||||
|
this.fire('reload-diff-preference', null, {bubbles: false});
|
||||||
|
|
||||||
|
this.$.diffPrefsOverlay.close();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
})();
|
||||||
@@ -1,173 +0,0 @@
|
|||||||
<!--
|
|
||||||
@license
|
|
||||||
Copyright (C) 2016 The Android Open Source Project
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
|
||||||
<link rel="import" href="../../../bower_components/iron-input/iron-input.html">
|
|
||||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
|
||||||
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
|
|
||||||
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
|
||||||
<link rel="import" href="../../shared/gr-storage/gr-storage.html">
|
|
||||||
<link rel="import" href="../../../styles/shared-styles.html">
|
|
||||||
|
|
||||||
<dom-module id="gr-diff-preferences">
|
|
||||||
<template>
|
|
||||||
<style include="shared-styles">
|
|
||||||
:host {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
:host([disabled]) {
|
|
||||||
opacity: .5;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
input,
|
|
||||||
select {
|
|
||||||
font: inherit;
|
|
||||||
}
|
|
||||||
input[type="number"] {
|
|
||||||
width: 4em;
|
|
||||||
}
|
|
||||||
.header,
|
|
||||||
.actions {
|
|
||||||
padding: 1em 1.5em;
|
|
||||||
}
|
|
||||||
.header,
|
|
||||||
.mainContainer,
|
|
||||||
.actions {
|
|
||||||
background-color: var(--dialog-background-color);
|
|
||||||
}
|
|
||||||
.header {
|
|
||||||
border-bottom: 1px solid var(--border-color);
|
|
||||||
font-weight: var(--font-weight-bold);
|
|
||||||
}
|
|
||||||
.mainContainer {
|
|
||||||
padding: 1em 0;
|
|
||||||
}
|
|
||||||
.pref {
|
|
||||||
align-items: center;
|
|
||||||
display: flex;
|
|
||||||
padding: .35em 1.5em;
|
|
||||||
width: 25em;
|
|
||||||
}
|
|
||||||
.pref:hover {
|
|
||||||
background-color: var(--hover-background-color);
|
|
||||||
}
|
|
||||||
.pref label {
|
|
||||||
cursor: pointer;
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
.actions {
|
|
||||||
border-top: 1px solid var(--border-color);
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
}
|
|
||||||
gr-button {
|
|
||||||
margin-left: 1em;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<gr-overlay id="prefsOverlay" with-backdrop>
|
|
||||||
<div class="header">
|
|
||||||
Diff View Preferences
|
|
||||||
</div>
|
|
||||||
<div class="mainContainer">
|
|
||||||
<div class="pref">
|
|
||||||
<label for="contextSelect">Context</label>
|
|
||||||
<select id="contextSelect" on-change="_handleContextSelectChange">
|
|
||||||
<option value="3">3 lines</option>
|
|
||||||
<option value="10">10 lines</option>
|
|
||||||
<option value="25">25 lines</option>
|
|
||||||
<option value="50">50 lines</option>
|
|
||||||
<option value="75">75 lines</option>
|
|
||||||
<option value="100">100 lines</option>
|
|
||||||
<option value="-1">Whole file</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div class="pref">
|
|
||||||
<label for="lineWrappingInput">Fit to screen</label>
|
|
||||||
<input
|
|
||||||
is="iron-input"
|
|
||||||
type="checkbox"
|
|
||||||
id="lineWrappingInput"
|
|
||||||
on-tap="_handlelineWrappingTap">
|
|
||||||
</div>
|
|
||||||
<div class="pref" id="columnsPref">
|
|
||||||
<label for="columnsInput">Diff width</label>
|
|
||||||
<input is="iron-input" type="number" id="columnsInput"
|
|
||||||
prevent-invalid-input
|
|
||||||
allowed-pattern="[0-9]"
|
|
||||||
bind-value="{{_newPrefs.line_length}}">
|
|
||||||
</div>
|
|
||||||
<div class="pref">
|
|
||||||
<label for="tabSizeInput">Tab width</label>
|
|
||||||
<input is="iron-input" type="number" id="tabSizeInput"
|
|
||||||
prevent-invalid-input
|
|
||||||
allowed-pattern="[0-9]"
|
|
||||||
bind-value="{{_newPrefs.tab_size}}">
|
|
||||||
</div>
|
|
||||||
<div class="pref" hidden$="[[!_newPrefs.font_size]]">
|
|
||||||
<label for="fontSizeInput">Font size</label>
|
|
||||||
<input is="iron-input" type="number" id="fontSizeInput"
|
|
||||||
prevent-invalid-input
|
|
||||||
allowed-pattern="[0-9]"
|
|
||||||
bind-value="{{_newPrefs.font_size}}">
|
|
||||||
</div>
|
|
||||||
<div class="pref">
|
|
||||||
<label for="showTabsInput">Show tabs</label>
|
|
||||||
<input is="iron-input" type="checkbox" id="showTabsInput"
|
|
||||||
on-tap="_handleShowTabsTap">
|
|
||||||
</div>
|
|
||||||
<div class="pref">
|
|
||||||
<label for="showTrailingWhitespaceInput">
|
|
||||||
Show trailing whitespace</label>
|
|
||||||
<input is="iron-input" type="checkbox"
|
|
||||||
id="showTrailingWhitespaceInput"
|
|
||||||
on-tap="_handleShowTrailingWhitespaceTap">
|
|
||||||
</div>
|
|
||||||
<div class="pref">
|
|
||||||
<label for="syntaxHighlightInput">Syntax highlighting</label>
|
|
||||||
<input is="iron-input" type="checkbox" id="syntaxHighlightInput"
|
|
||||||
on-tap="_handleSyntaxHighlightTap">
|
|
||||||
</div>
|
|
||||||
<div class="pref">
|
|
||||||
<label for="automaticReviewInput">Automatically mark viewed files reviewed</label>
|
|
||||||
<input
|
|
||||||
is="iron-input"
|
|
||||||
id="automaticReviewInput"
|
|
||||||
type="checkbox"
|
|
||||||
on-tap="_handleAutomaticReviewTap">
|
|
||||||
</div>
|
|
||||||
<div class="pref">
|
|
||||||
<label for="ignoreWhitespace">Ignore Whitespace</label>
|
|
||||||
<select id="ignoreWhitespace" on-change="_handleIgnoreWhitespaceChange">
|
|
||||||
<option value="IGNORE_NONE">None</option>
|
|
||||||
<option value="IGNORE_TRAILING">Trailing</option>
|
|
||||||
<option value="IGNORE_LEADING_AND_TRAILING">Leading & trailing</option>
|
|
||||||
<option value="IGNORE_ALL">All</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="actions">
|
|
||||||
<gr-button id="cancelButton" link on-tap="_handleCancel">
|
|
||||||
Cancel</gr-button>
|
|
||||||
<gr-button id="saveButton" link primary on-tap="_handleSave">
|
|
||||||
Save</gr-button>
|
|
||||||
</div>
|
|
||||||
</gr-overlay>
|
|
||||||
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
|
||||||
<gr-storage id="storage"></gr-storage>
|
|
||||||
</template>
|
|
||||||
<script src="gr-diff-preferences.js"></script>
|
|
||||||
</dom-module>
|
|
||||||
@@ -1,144 +0,0 @@
|
|||||||
/**
|
|
||||||
* @license
|
|
||||||
* Copyright (C) 2016 The Android Open Source Project
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
(function() {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
Polymer({
|
|
||||||
is: 'gr-diff-preferences',
|
|
||||||
|
|
||||||
properties: {
|
|
||||||
prefs: {
|
|
||||||
type: Object,
|
|
||||||
notify: true,
|
|
||||||
},
|
|
||||||
localPrefs: {
|
|
||||||
type: Object,
|
|
||||||
notify: true,
|
|
||||||
},
|
|
||||||
disabled: {
|
|
||||||
type: Boolean,
|
|
||||||
value: false,
|
|
||||||
reflectToAttribute: true,
|
|
||||||
},
|
|
||||||
|
|
||||||
/** @type {?} */
|
|
||||||
_newPrefs: Object,
|
|
||||||
_newLocalPrefs: Object,
|
|
||||||
},
|
|
||||||
|
|
||||||
observers: [
|
|
||||||
'_prefsChanged(prefs.*)',
|
|
||||||
'_localPrefsChanged(localPrefs.*)',
|
|
||||||
],
|
|
||||||
|
|
||||||
getFocusStops() {
|
|
||||||
return {
|
|
||||||
start: this.$.contextSelect,
|
|
||||||
end: this.$.saveButton,
|
|
||||||
};
|
|
||||||
},
|
|
||||||
|
|
||||||
resetFocus() {
|
|
||||||
this.$.contextSelect.focus();
|
|
||||||
},
|
|
||||||
|
|
||||||
_prefsChanged(changeRecord) {
|
|
||||||
const prefs = changeRecord.base;
|
|
||||||
// NOTE: Object.assign is NOT automatically a deep copy. If prefs adds
|
|
||||||
// an object as a value, it must be marked enumerable.
|
|
||||||
this._newPrefs = Object.assign({}, prefs);
|
|
||||||
this.$.contextSelect.value = prefs.context;
|
|
||||||
this.$.showTabsInput.checked = prefs.show_tabs;
|
|
||||||
this.$.showTrailingWhitespaceInput.checked = prefs.show_whitespace_errors;
|
|
||||||
this.$.lineWrappingInput.checked = prefs.line_wrapping;
|
|
||||||
this.$.syntaxHighlightInput.checked = prefs.syntax_highlighting;
|
|
||||||
this.$.automaticReviewInput.checked = !prefs.manual_review;
|
|
||||||
this.$.ignoreWhitespace.value = prefs.ignore_whitespace;
|
|
||||||
},
|
|
||||||
|
|
||||||
_localPrefsChanged(changeRecord) {
|
|
||||||
const localPrefs = changeRecord.base || {};
|
|
||||||
this._newLocalPrefs = Object.assign({}, localPrefs);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleContextSelectChange(e) {
|
|
||||||
const selectEl = Polymer.dom(e).rootTarget;
|
|
||||||
this.set('_newPrefs.context', parseInt(selectEl.value, 10));
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleIgnoreWhitespaceChange(e) {
|
|
||||||
const selectEl = Polymer.dom(e).rootTarget;
|
|
||||||
this.set('_newPrefs.ignore_whitespace', selectEl.value);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleShowTabsTap(e) {
|
|
||||||
this.set('_newPrefs.show_tabs', Polymer.dom(e).rootTarget.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleShowTrailingWhitespaceTap(e) {
|
|
||||||
this.set('_newPrefs.show_whitespace_errors',
|
|
||||||
Polymer.dom(e).rootTarget.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleSyntaxHighlightTap(e) {
|
|
||||||
this.set('_newPrefs.syntax_highlighting',
|
|
||||||
Polymer.dom(e).rootTarget.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handlelineWrappingTap(e) {
|
|
||||||
this.set('_newPrefs.line_wrapping', Polymer.dom(e).rootTarget.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleAutomaticReviewTap(e) {
|
|
||||||
this.set('_newPrefs.manual_review', !Polymer.dom(e).rootTarget.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleSave(e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
this.prefs = this._newPrefs;
|
|
||||||
this.localPrefs = this._newLocalPrefs;
|
|
||||||
const el = Polymer.dom(e).rootTarget;
|
|
||||||
el.disabled = true;
|
|
||||||
this.$.storage.savePreferences(this._localPrefs);
|
|
||||||
this._saveDiffPreferences().then(response => {
|
|
||||||
el.disabled = false;
|
|
||||||
if (!response.ok) { return response; }
|
|
||||||
|
|
||||||
this.$.prefsOverlay.close();
|
|
||||||
}).catch(err => {
|
|
||||||
el.disabled = false;
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleCancel(e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
this.$.prefsOverlay.close();
|
|
||||||
},
|
|
||||||
|
|
||||||
open() {
|
|
||||||
this.$.prefsOverlay.open().then(() => {
|
|
||||||
const focusStops = this.getFocusStops();
|
|
||||||
this.$.prefsOverlay.setFocusStops(focusStops);
|
|
||||||
this.resetFocus();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_saveDiffPreferences() {
|
|
||||||
return this.$.restAPI.saveDiffPreferences(this.prefs);
|
|
||||||
},
|
|
||||||
});
|
|
||||||
})();
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<!--
|
|
||||||
@license
|
|
||||||
Copyright (C) 2016 The Android Open Source Project
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
-->
|
|
||||||
|
|
||||||
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
|
|
||||||
<title>gr-diff-preferences</title>
|
|
||||||
|
|
||||||
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
|
|
||||||
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
|
||||||
<link rel="import" href="../../../test/common-test-setup.html"/>
|
|
||||||
<link rel="import" href="gr-diff-preferences.html">
|
|
||||||
|
|
||||||
<script>void(0);</script>
|
|
||||||
|
|
||||||
<test-fixture id="basic">
|
|
||||||
<template>
|
|
||||||
<gr-diff-preferences></gr-diff-preferences>
|
|
||||||
</template>
|
|
||||||
</test-fixture>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
suite('gr-diff-preferences tests', () => {
|
|
||||||
let element;
|
|
||||||
let sandbox;
|
|
||||||
|
|
||||||
setup(() => {
|
|
||||||
sandbox = sinon.sandbox.create();
|
|
||||||
element = fixture('basic');
|
|
||||||
});
|
|
||||||
|
|
||||||
teardown(() => {
|
|
||||||
sandbox.restore();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('model changes', () => {
|
|
||||||
element.prefs = {
|
|
||||||
context: 10,
|
|
||||||
font_size: 12,
|
|
||||||
line_length: 100,
|
|
||||||
show_tabs: true,
|
|
||||||
tab_size: 8,
|
|
||||||
show_whitespace_errors: true,
|
|
||||||
syntax_highlighting: true,
|
|
||||||
};
|
|
||||||
assert.deepEqual(element.prefs, element._newPrefs);
|
|
||||||
|
|
||||||
element.$.contextSelect.value = '50';
|
|
||||||
element.fire('change', {}, {node: element.$.contextSelect});
|
|
||||||
element.$.columnsInput.bindValue = 80;
|
|
||||||
element.$.fontSizeInput.bindValue = 10;
|
|
||||||
element.$.tabSizeInput.bindValue = 4;
|
|
||||||
MockInteractions.tap(element.$.showTabsInput);
|
|
||||||
MockInteractions.tap(element.$.showTrailingWhitespaceInput);
|
|
||||||
MockInteractions.tap(element.$.syntaxHighlightInput);
|
|
||||||
MockInteractions.tap(element.$.lineWrappingInput);
|
|
||||||
|
|
||||||
assert.equal(element._newPrefs.context, 50);
|
|
||||||
assert.equal(element._newPrefs.font_size, 10);
|
|
||||||
assert.equal(element._newPrefs.line_length, 80);
|
|
||||||
assert.equal(element._newPrefs.tab_size, 4);
|
|
||||||
assert.isFalse(element._newPrefs.show_tabs);
|
|
||||||
assert.isFalse(element._newPrefs.show_whitespace_errors);
|
|
||||||
assert.isTrue(element._newPrefs.line_wrapping);
|
|
||||||
assert.isFalse(element._newPrefs.syntax_highlighting);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('clicking save button calls _handleSave function', () => {
|
|
||||||
const savePrefs = sinon.stub(element, '_handleSave');
|
|
||||||
MockInteractions.tap(element.$.saveButton);
|
|
||||||
flushAsynchronousOperations();
|
|
||||||
assert(savePrefs.calledOnce);
|
|
||||||
savePrefs.restore();
|
|
||||||
});
|
|
||||||
|
|
||||||
test('save button', () => {
|
|
||||||
element.prefs = {
|
|
||||||
font_size: '11',
|
|
||||||
};
|
|
||||||
element._newPrefs = {
|
|
||||||
font_size: '12',
|
|
||||||
};
|
|
||||||
const saveStub = sandbox.stub(element.$.restAPI, 'saveDiffPreferences',
|
|
||||||
() => { return Promise.resolve(); });
|
|
||||||
|
|
||||||
MockInteractions.tap(element.$$('gr-button[primary]'));
|
|
||||||
assert.deepEqual(element.prefs, element._newPrefs);
|
|
||||||
assert.deepEqual(saveStub.lastCall.args[0], element._newPrefs);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('cancel button', () => {
|
|
||||||
const closeStub = sandbox.stub(element.$.prefsOverlay, 'close');
|
|
||||||
MockInteractions.tap(element.$$('gr-button:not([primary])'));
|
|
||||||
assert.isTrue(closeStub.called);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@@ -34,9 +34,9 @@ limitations under the License.
|
|||||||
<link rel="import" href="../../shared/revision-info/revision-info.html">
|
<link rel="import" href="../../shared/revision-info/revision-info.html">
|
||||||
<link rel="import" href="../gr-comment-api/gr-comment-api.html">
|
<link rel="import" href="../gr-comment-api/gr-comment-api.html">
|
||||||
<link rel="import" href="../gr-diff-cursor/gr-diff-cursor.html">
|
<link rel="import" href="../gr-diff-cursor/gr-diff-cursor.html">
|
||||||
<link rel="import" href="../gr-diff-mode-selector/gr-diff-mode-selector.html">
|
|
||||||
<link rel="import" href="../gr-diff-preferences/gr-diff-preferences.html">
|
|
||||||
<link rel="import" href="../gr-diff-host/gr-diff-host.html">
|
<link rel="import" href="../gr-diff-host/gr-diff-host.html">
|
||||||
|
<link rel="import" href="../gr-diff-mode-selector/gr-diff-mode-selector.html">
|
||||||
|
<link rel="import" href="../gr-diff-preferences-dialog/gr-diff-preferences-dialog.html">
|
||||||
<link rel="import" href="../gr-patch-range-select/gr-patch-range-select.html">
|
<link rel="import" href="../gr-patch-range-select/gr-patch-range-select.html">
|
||||||
|
|
||||||
<dom-module id="gr-diff-view">
|
<dom-module id="gr-diff-view">
|
||||||
@@ -338,10 +338,11 @@ limitations under the License.
|
|||||||
is-blame-loaded="{{_isBlameLoaded}}"
|
is-blame-loaded="{{_isBlameLoaded}}"
|
||||||
on-line-selected="_onLineSelected">
|
on-line-selected="_onLineSelected">
|
||||||
</gr-diff-host>
|
</gr-diff-host>
|
||||||
<gr-diff-preferences
|
<gr-diff-preferences-dialog
|
||||||
id="diffPreferences"
|
id="diffPreferencesDialog"
|
||||||
prefs="{{_prefs}}"
|
diff-prefs="{{_prefs}}"
|
||||||
local-prefs="{{_localPrefs}}"></gr-diff-preferences>
|
on-reload-diff-preference="_handleReloadingDiffPreference">
|
||||||
|
</gr-diff-preferences-dialog>
|
||||||
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
||||||
<gr-storage id="storage"></gr-storage>
|
<gr-storage id="storage"></gr-storage>
|
||||||
<gr-diff-cursor id="cursor"></gr-diff-cursor>
|
<gr-diff-cursor id="cursor"></gr-diff-cursor>
|
||||||
|
|||||||
@@ -258,7 +258,9 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
_getDiffPreferences() {
|
_getDiffPreferences() {
|
||||||
return this.$.restAPI.getDiffPreferences();
|
return this.$.restAPI.getDiffPreferences().then(prefs => {
|
||||||
|
this._prefs = prefs;
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_getPreferences() {
|
_getPreferences() {
|
||||||
@@ -457,7 +459,7 @@
|
|||||||
this.modifierPressed(e)) { return; }
|
this.modifierPressed(e)) { return; }
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
this.$.diffPreferences.open();
|
this.$.diffPreferencesDialog.open();
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleToggleDiffMode(e) {
|
_handleToggleDiffMode(e) {
|
||||||
@@ -608,10 +610,7 @@
|
|||||||
|
|
||||||
const promises = [];
|
const promises = [];
|
||||||
|
|
||||||
this._localPrefs = this.$.storage.getPreferences();
|
promises.push(this._getDiffPreferences());
|
||||||
promises.push(this._getDiffPreferences().then(prefs => {
|
|
||||||
this._prefs = prefs;
|
|
||||||
}));
|
|
||||||
|
|
||||||
promises.push(this._getPreferences().then(prefs => {
|
promises.push(this._getPreferences().then(prefs => {
|
||||||
this._userPrefs = prefs;
|
this._userPrefs = prefs;
|
||||||
@@ -837,22 +836,7 @@
|
|||||||
|
|
||||||
_handlePrefsTap(e) {
|
_handlePrefsTap(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
this.$.diffPreferences.open();
|
this.$.diffPreferencesDialog.open();
|
||||||
},
|
|
||||||
|
|
||||||
_handlePrefsSave(e) {
|
|
||||||
e.stopPropagation();
|
|
||||||
const el = Polymer.dom(e).rootTarget;
|
|
||||||
el.disabled = true;
|
|
||||||
this.$.storage.savePreferences(this._localPrefs);
|
|
||||||
this._saveDiffPreferences().then(response => {
|
|
||||||
el.disabled = false;
|
|
||||||
if (!response.ok) { return response; }
|
|
||||||
|
|
||||||
this.$.prefsOverlay.close();
|
|
||||||
}).catch(err => {
|
|
||||||
el.disabled = false;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1036,5 +1020,9 @@
|
|||||||
(file === this._path || !this._reviewedFiles.has(file)));
|
(file === this._path || !this._reviewedFiles.has(file)));
|
||||||
this._navToFile(this._path, unreviewedFiles, 1);
|
this._navToFile(this._path, unreviewedFiles, 1);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_handleReloadingDiffPreference() {
|
||||||
|
this._getDiffPreferences();
|
||||||
|
},
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ limitations under the License.
|
|||||||
assert.isTrue(element._loading);
|
assert.isTrue(element._loading);
|
||||||
|
|
||||||
const showPrefsStub =
|
const showPrefsStub =
|
||||||
sandbox.stub(element.$.diffPreferences.$.prefsOverlay, 'open',
|
sandbox.stub(element.$.diffPreferencesDialog, 'open',
|
||||||
() => Promise.resolve());
|
() => Promise.resolve());
|
||||||
|
|
||||||
MockInteractions.pressAndReleaseKeyOn(element, 188, null, ',');
|
MockInteractions.pressAndReleaseKeyOn(element, 188, null, ',');
|
||||||
@@ -365,7 +365,7 @@ limitations under the License.
|
|||||||
|
|
||||||
test('prefsButton opens gr-diff-preferences', () => {
|
test('prefsButton opens gr-diff-preferences', () => {
|
||||||
const handlePrefsTapSpy = sandbox.spy(element, '_handlePrefsTap');
|
const handlePrefsTapSpy = sandbox.spy(element, '_handlePrefsTap');
|
||||||
const overlayOpenStub = sandbox.stub(element.$.diffPreferences,
|
const overlayOpenStub = sandbox.stub(element.$.diffPreferencesDialog,
|
||||||
'open');
|
'open');
|
||||||
const prefsButton =
|
const prefsButton =
|
||||||
Polymer.dom(element.root).querySelector('.prefsButton');
|
Polymer.dom(element.root).querySelector('.prefsButton');
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ limitations under the License.
|
|||||||
<link rel="import" href="../../settings/gr-change-table-editor/gr-change-table-editor.html">
|
<link rel="import" href="../../settings/gr-change-table-editor/gr-change-table-editor.html">
|
||||||
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
<link rel="import" href="../../shared/gr-button/gr-button.html">
|
||||||
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
|
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
|
||||||
|
<link rel="import" href="../../shared/gr-diff-preferences/gr-diff-preferences.html">
|
||||||
<link rel="import" href="../../shared/gr-page-nav/gr-page-nav.html">
|
<link rel="import" href="../../shared/gr-page-nav/gr-page-nav.html">
|
||||||
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
|
||||||
<link rel="import" href="../../shared/gr-select/gr-select.html">
|
<link rel="import" href="../../shared/gr-select/gr-select.html">
|
||||||
@@ -259,110 +260,9 @@ limitations under the License.
|
|||||||
Diff Preferences
|
Diff Preferences
|
||||||
</h2>
|
</h2>
|
||||||
<fieldset id="diffPreferences">
|
<fieldset id="diffPreferences">
|
||||||
<section>
|
<gr-diff-preferences
|
||||||
<span class="title">Context</span>
|
id="diffPrefs"
|
||||||
<span class="value">
|
has-unsaved-changes="{{_diffPrefsChanged}}"></gr-diff-preferences>
|
||||||
<gr-select bind-value="{{_diffPrefs.context}}">
|
|
||||||
<select>
|
|
||||||
<option value="3">3 lines</option>
|
|
||||||
<option value="10">10 lines</option>
|
|
||||||
<option value="25">25 lines</option>
|
|
||||||
<option value="50">50 lines</option>
|
|
||||||
<option value="75">75 lines</option>
|
|
||||||
<option value="100">100 lines</option>
|
|
||||||
<option value="-1">Whole file</option>
|
|
||||||
</select>
|
|
||||||
</gr-select>
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<span class="title">Fit to screen</span>
|
|
||||||
<span class="value">
|
|
||||||
<input
|
|
||||||
id="diffLineWrapping"
|
|
||||||
type="checkbox"
|
|
||||||
checked$="[[_diffPrefs.line_wrapping]]"
|
|
||||||
on-change="_handleDiffLineWrappingChanged">
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section id="columnsPref" hidden$="[[_diffPrefs.line_wrapping]]">
|
|
||||||
<span class="title">Diff width</span>
|
|
||||||
<span class="value">
|
|
||||||
<input
|
|
||||||
is="iron-input"
|
|
||||||
type="number"
|
|
||||||
prevent-invalid-input
|
|
||||||
allowed-pattern="[0-9]"
|
|
||||||
bind-value="{{_diffPrefs.line_length}}">
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<span class="title">Tab width</span>
|
|
||||||
<span class="value">
|
|
||||||
<input
|
|
||||||
is="iron-input"
|
|
||||||
type="number"
|
|
||||||
prevent-invalid-input
|
|
||||||
allowed-pattern="[0-9]"
|
|
||||||
bind-value="{{_diffPrefs.tab_size}}">
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section hidden$="[[!_diffPrefs.font_size]]">
|
|
||||||
<span class="title">Font size</span>
|
|
||||||
<span class="value">
|
|
||||||
<input
|
|
||||||
is="iron-input"
|
|
||||||
type="number"
|
|
||||||
prevent-invalid-input
|
|
||||||
allowed-pattern="[0-9]"
|
|
||||||
bind-value="{{_diffPrefs.font_size}}">
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<span class="title">Show tabs</span>
|
|
||||||
<span class="value">
|
|
||||||
<input
|
|
||||||
id="diffShowTabs"
|
|
||||||
type="checkbox"
|
|
||||||
checked$="[[_diffPrefs.show_tabs]]"
|
|
||||||
on-change="_handleDiffShowTabsChanged">
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<span class="title">Show trailing whitespace</span>
|
|
||||||
<span class="value">
|
|
||||||
<input
|
|
||||||
id="showTrailingWhitespace"
|
|
||||||
type="checkbox"
|
|
||||||
checked$="[[_diffPrefs.show_whitespace_errors]]"
|
|
||||||
on-change="_handleShowTrailingWhitespaceChanged">
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<span class="title">Syntax highlighting</span>
|
|
||||||
<span class="value">
|
|
||||||
<input
|
|
||||||
id="diffSyntaxHighlighting"
|
|
||||||
type="checkbox"
|
|
||||||
checked$="[[_diffPrefs.syntax_highlighting]]"
|
|
||||||
on-change="_handleDiffSyntaxHighlightingChanged">
|
|
||||||
</span>
|
|
||||||
</section>
|
|
||||||
<section>
|
|
||||||
<div class="pref">
|
|
||||||
<span class="title">Ignore Whitespace</span>
|
|
||||||
<span class="value">
|
|
||||||
<gr-select bind-value="{{_diffPrefs.ignore_whitespace}}">
|
|
||||||
<select>
|
|
||||||
<option value="IGNORE_NONE">None</option>
|
|
||||||
<option value="IGNORE_TRAILING">Trailing</option>
|
|
||||||
<option value="IGNORE_LEADING_AND_TRAILING">Leading & trailing</option>
|
|
||||||
<option value="IGNORE_ALL">All</option>
|
|
||||||
</select>
|
|
||||||
</gr-select>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
<gr-button
|
<gr-button
|
||||||
id="saveDiffPrefs"
|
id="saveDiffPrefs"
|
||||||
on-tap="_handleSaveDiffPreferences"
|
on-tap="_handleSaveDiffPreferences"
|
||||||
|
|||||||
@@ -64,8 +64,6 @@
|
|||||||
},
|
},
|
||||||
_accountNameMutable: Boolean,
|
_accountNameMutable: Boolean,
|
||||||
_accountInfoChanged: Boolean,
|
_accountInfoChanged: Boolean,
|
||||||
/** @type {?} */
|
|
||||||
_diffPrefs: Object,
|
|
||||||
_changeTableColumnsNotDisplayed: Array,
|
_changeTableColumnsNotDisplayed: Array,
|
||||||
/** @type {?} */
|
/** @type {?} */
|
||||||
_localPrefs: {
|
_localPrefs: {
|
||||||
@@ -92,10 +90,8 @@
|
|||||||
type: Boolean,
|
type: Boolean,
|
||||||
value: false,
|
value: false,
|
||||||
},
|
},
|
||||||
_diffPrefsChanged: {
|
/** @type {?} */
|
||||||
type: Boolean,
|
_diffPrefsChanged: Boolean,
|
||||||
value: false,
|
|
||||||
},
|
|
||||||
/** @type {?} */
|
/** @type {?} */
|
||||||
_editPrefsChanged: Boolean,
|
_editPrefsChanged: Boolean,
|
||||||
_menuChanged: {
|
_menuChanged: {
|
||||||
@@ -149,7 +145,6 @@
|
|||||||
|
|
||||||
observers: [
|
observers: [
|
||||||
'_handlePrefsChanged(_localPrefs.*)',
|
'_handlePrefsChanged(_localPrefs.*)',
|
||||||
'_handleDiffPrefsChanged(_diffPrefs.*)',
|
|
||||||
'_handleMenuChanged(_localMenu.splices)',
|
'_handleMenuChanged(_localMenu.splices)',
|
||||||
'_handleChangeTableChanged(_localChangeTableColumns, _showNumber)',
|
'_handleChangeTableChanged(_localChangeTableColumns, _showNumber)',
|
||||||
],
|
],
|
||||||
@@ -166,6 +161,7 @@
|
|||||||
this.$.httpPass.loadData(),
|
this.$.httpPass.loadData(),
|
||||||
this.$.identities.loadData(),
|
this.$.identities.loadData(),
|
||||||
this.$.editPrefs.loadData(),
|
this.$.editPrefs.loadData(),
|
||||||
|
this.$.diffPrefs.loadData(),
|
||||||
];
|
];
|
||||||
|
|
||||||
promises.push(this.$.restAPI.getPreferences().then(prefs => {
|
promises.push(this.$.restAPI.getPreferences().then(prefs => {
|
||||||
@@ -176,10 +172,6 @@
|
|||||||
this._cloneChangeTableColumns();
|
this._cloneChangeTableColumns();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
promises.push(this.$.restAPI.getDiffPreferences().then(prefs => {
|
|
||||||
this._diffPrefs = prefs;
|
|
||||||
}));
|
|
||||||
|
|
||||||
promises.push(this.$.restAPI.getConfig().then(config => {
|
promises.push(this.$.restAPI.getConfig().then(config => {
|
||||||
this._serverConfig = config;
|
this._serverConfig = config;
|
||||||
const configPromises = [];
|
const configPromises = [];
|
||||||
@@ -277,11 +269,6 @@
|
|||||||
this._prefsChanged = true;
|
this._prefsChanged = true;
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleDiffPrefsChanged() {
|
|
||||||
if (this._isLoading()) { return; }
|
|
||||||
this._diffPrefsChanged = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleShowSizeBarsInFileListChanged() {
|
_handleShowSizeBarsInFileListChanged() {
|
||||||
this.set('_localPrefs.size_bar_in_change_table',
|
this.set('_localPrefs.size_bar_in_change_table',
|
||||||
this.$.showSizeBarsInFileList.checked);
|
this.$.showSizeBarsInFileList.checked);
|
||||||
@@ -318,24 +305,6 @@
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleDiffLineWrappingChanged() {
|
|
||||||
this.set('_diffPrefs.line_wrapping', this.$.diffLineWrapping.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleDiffShowTabsChanged() {
|
|
||||||
this.set('_diffPrefs.show_tabs', this.$.diffShowTabs.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleShowTrailingWhitespaceChanged() {
|
|
||||||
this.set('_diffPrefs.show_whitespace_errors',
|
|
||||||
this.$.showTrailingWhitespace.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleDiffSyntaxHighlightingChanged() {
|
|
||||||
this.set('_diffPrefs.syntax_highlighting',
|
|
||||||
this.$.diffSyntaxHighlighting.checked);
|
|
||||||
},
|
|
||||||
|
|
||||||
_handleSaveChangeTable() {
|
_handleSaveChangeTable() {
|
||||||
this.set('prefs.change_table', this._localChangeTableColumns);
|
this.set('prefs.change_table', this._localChangeTableColumns);
|
||||||
this.set('prefs.legacycid_in_change_table', this._showNumber);
|
this.set('prefs.legacycid_in_change_table', this._showNumber);
|
||||||
@@ -346,10 +315,7 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
_handleSaveDiffPreferences() {
|
_handleSaveDiffPreferences() {
|
||||||
return this.$.restAPI.saveDiffPreferences(this._diffPrefs)
|
this.$.diffPrefs.save();
|
||||||
.then(() => {
|
|
||||||
this._diffPrefsChanged = false;
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_handleSaveEditPreferences() {
|
_handleSaveEditPreferences() {
|
||||||
|
|||||||
@@ -43,7 +43,6 @@ limitations under the License.
|
|||||||
let element;
|
let element;
|
||||||
let account;
|
let account;
|
||||||
let preferences;
|
let preferences;
|
||||||
let diffPreferences;
|
|
||||||
let config;
|
let config;
|
||||||
let sandbox;
|
let sandbox;
|
||||||
|
|
||||||
@@ -96,31 +95,12 @@ limitations under the License.
|
|||||||
],
|
],
|
||||||
change_table: [],
|
change_table: [],
|
||||||
};
|
};
|
||||||
diffPreferences = {
|
|
||||||
context: 10,
|
|
||||||
tab_size: 8,
|
|
||||||
font_size: 12,
|
|
||||||
line_length: 100,
|
|
||||||
cursor_blink_rate: 0,
|
|
||||||
line_wrapping: false,
|
|
||||||
intraline_difference: true,
|
|
||||||
show_line_endings: true,
|
|
||||||
show_tabs: true,
|
|
||||||
show_whitespace_errors: true,
|
|
||||||
syntax_highlighting: true,
|
|
||||||
auto_hide_diff_table_header: true,
|
|
||||||
theme: 'DEFAULT',
|
|
||||||
ignore_whitespace: 'IGNORE_NONE',
|
|
||||||
};
|
|
||||||
config = {auth: {editable_account_fields: []}};
|
config = {auth: {editable_account_fields: []}};
|
||||||
|
|
||||||
stub('gr-rest-api-interface', {
|
stub('gr-rest-api-interface', {
|
||||||
getLoggedIn() { return Promise.resolve(true); },
|
getLoggedIn() { return Promise.resolve(true); },
|
||||||
getAccount() { return Promise.resolve(account); },
|
getAccount() { return Promise.resolve(account); },
|
||||||
getPreferences() { return Promise.resolve(preferences); },
|
getPreferences() { return Promise.resolve(preferences); },
|
||||||
getDiffPreferences() {
|
|
||||||
return Promise.resolve(diffPreferences);
|
|
||||||
},
|
|
||||||
getWatchedProjects() {
|
getWatchedProjects() {
|
||||||
return Promise.resolve([]);
|
return Promise.resolve([]);
|
||||||
},
|
},
|
||||||
@@ -261,56 +241,6 @@ limitations under the License.
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test('diff preferences', done => {
|
|
||||||
// Rendered with the expected preferences selected.
|
|
||||||
assert.equal(valueOf('Context', 'diffPreferences')
|
|
||||||
.firstElementChild.bindValue, diffPreferences.context);
|
|
||||||
assert.equal(valueOf('Diff width', 'diffPreferences')
|
|
||||||
.firstElementChild.bindValue, diffPreferences.line_length);
|
|
||||||
assert.equal(valueOf('Tab width', 'diffPreferences')
|
|
||||||
.firstElementChild.bindValue, diffPreferences.tab_size);
|
|
||||||
assert.equal(valueOf('Font size', 'diffPreferences')
|
|
||||||
.firstElementChild.bindValue, diffPreferences.font_size);
|
|
||||||
assert.equal(valueOf('Show tabs', 'diffPreferences')
|
|
||||||
.firstElementChild.checked, diffPreferences.show_tabs);
|
|
||||||
assert.equal(valueOf('Show trailing whitespace', 'diffPreferences')
|
|
||||||
.firstElementChild.checked, diffPreferences.show_whitespace_errors);
|
|
||||||
assert.equal(valueOf('Fit to screen', 'diffPreferences')
|
|
||||||
.firstElementChild.checked, diffPreferences.line_wrapping);
|
|
||||||
|
|
||||||
assert.isFalse(element._diffPrefsChanged);
|
|
||||||
|
|
||||||
const showTabsCheckbox = valueOf('Show tabs', 'diffPreferences')
|
|
||||||
.firstElementChild;
|
|
||||||
showTabsCheckbox.checked = false;
|
|
||||||
element._handleDiffShowTabsChanged();
|
|
||||||
|
|
||||||
assert.isTrue(element._diffPrefsChanged);
|
|
||||||
|
|
||||||
stub('gr-rest-api-interface', {
|
|
||||||
saveDiffPreferences(prefs) {
|
|
||||||
assert.equal(prefs.show_tabs, false);
|
|
||||||
return Promise.resolve();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
// Save the change.
|
|
||||||
element._handleSaveDiffPreferences().then(() => {
|
|
||||||
assert.isFalse(element._diffPrefsChanged);
|
|
||||||
done();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('columns input is hidden with fit to scsreen is selected', () => {
|
|
||||||
assert.isFalse(element.$.columnsPref.hidden);
|
|
||||||
|
|
||||||
MockInteractions.tap(element.$.diffLineWrapping);
|
|
||||||
assert.isTrue(element.$.columnsPref.hidden);
|
|
||||||
|
|
||||||
MockInteractions.tap(element.$.diffLineWrapping);
|
|
||||||
assert.isFalse(element.$.columnsPref.hidden);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('menu', done => {
|
test('menu', done => {
|
||||||
assert.isFalse(element._menuChanged);
|
assert.isFalse(element._menuChanged);
|
||||||
assert.isFalse(element._prefsChanged);
|
assert.isFalse(element._prefsChanged);
|
||||||
|
|||||||
@@ -0,0 +1,163 @@
|
|||||||
|
<!--
|
||||||
|
@license
|
||||||
|
Copyright (C) 2016 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<link rel="import" href="../../../bower_components/polymer/polymer.html">
|
||||||
|
<link rel="import" href="../../../bower_components/iron-input/iron-input.html">
|
||||||
|
<link rel="import" href="../../../styles/shared-styles.html">
|
||||||
|
<link rel="import" href="../gr-button/gr-button.html">
|
||||||
|
<link rel="import" href="../gr-rest-api-interface/gr-rest-api-interface.html">
|
||||||
|
<link rel="import" href="../gr-select/gr-select.html">
|
||||||
|
|
||||||
|
<dom-module id="gr-diff-preferences">
|
||||||
|
<template>
|
||||||
|
<style include="shared-styles"></style>
|
||||||
|
<style include="gr-form-styles"></style>
|
||||||
|
<div id="diffPreferences" class="gr-form-styles">
|
||||||
|
<section>
|
||||||
|
<span class="title">Context</span>
|
||||||
|
<span class="value">
|
||||||
|
<gr-select
|
||||||
|
id="contextSelect"
|
||||||
|
bind-value="{{diffPrefs.context}}">
|
||||||
|
<select
|
||||||
|
on-keypress="_handleDiffPrefsChanged"
|
||||||
|
on-change="_handleDiffPrefsChanged">
|
||||||
|
<option value="3">3 lines</option>
|
||||||
|
<option value="10">10 lines</option>
|
||||||
|
<option value="25">25 lines</option>
|
||||||
|
<option value="50">50 lines</option>
|
||||||
|
<option value="75">75 lines</option>
|
||||||
|
<option value="100">100 lines</option>
|
||||||
|
<option value="-1">Whole file</option>
|
||||||
|
</select>
|
||||||
|
</gr-select>
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<span class="title">Fit to screen</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
id="lineWrappingInput"
|
||||||
|
type="checkbox"
|
||||||
|
checked$="[[diffPrefs.line_wrapping]]"
|
||||||
|
on-change="_handleLineWrappingTap">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<span class="title">Diff width</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
is="iron-input"
|
||||||
|
type="number"
|
||||||
|
id="columnsInput"
|
||||||
|
prevent-invalid-input
|
||||||
|
allowed-pattern="[0-9]"
|
||||||
|
bind-value="{{diffPrefs.line_length}}"
|
||||||
|
on-keypress="_handleDiffPrefsChanged"
|
||||||
|
on-change="_handleDiffPrefsChanged">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<span class="title">Tab width</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
is="iron-input"
|
||||||
|
type="number"
|
||||||
|
id="tabSizeInput"
|
||||||
|
prevent-invalid-input
|
||||||
|
allowed-pattern="[0-9]"
|
||||||
|
bind-value="{{diffPrefs.tab_size}}"
|
||||||
|
on-keypress="_handleDiffPrefsChanged"
|
||||||
|
on-change="_handleDiffPrefsChanged">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section hidden$="[[!diffPrefs.font_size]]">
|
||||||
|
<span class="title">Font size</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
is="iron-input"
|
||||||
|
type="number"
|
||||||
|
id="fontSizeInput"
|
||||||
|
prevent-invalid-input
|
||||||
|
allowed-pattern="[0-9]"
|
||||||
|
bind-value="{{diffPrefs.font_size}}"
|
||||||
|
on-keypress="_handleDiffPrefsChanged"
|
||||||
|
on-change="_handleDiffPrefsChanged">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<span class="title">Show tabs</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
id="showTabsInput"
|
||||||
|
type="checkbox"
|
||||||
|
checked$="[[diffPrefs.show_tabs]]"
|
||||||
|
on-change="_handleShowTabsTap">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<span class="title">Show trailing whitespace</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
id="showTrailingWhitespaceInput"
|
||||||
|
type="checkbox"
|
||||||
|
checked$="[[diffPrefs.show_whitespace_errors]]"
|
||||||
|
on-change="_handleShowTrailingWhitespaceTap">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<span class="title">Syntax highlighting</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
id="syntaxHighlightInput"
|
||||||
|
type="checkbox"
|
||||||
|
checked$="[[diffPrefs.syntax_highlighting]]"
|
||||||
|
on-change="_handleSyntaxHighlightTap">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<span class="title">Automatically mark viewed files reviewed</span>
|
||||||
|
<span class="value">
|
||||||
|
<input
|
||||||
|
id="automaticReviewInput"
|
||||||
|
type="checkbox"
|
||||||
|
checked$="[[diffPrefs.manual_review]]"
|
||||||
|
on-change="_handleAutomaticReviewTap">
|
||||||
|
</span>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<div class="pref">
|
||||||
|
<span class="title">Ignore Whitespace</span>
|
||||||
|
<span class="value">
|
||||||
|
<gr-select bind-value="{{diffPrefs.ignore_whitespace}}">
|
||||||
|
<select
|
||||||
|
on-keypress="_handleDiffPrefsChanged"
|
||||||
|
on-change="_handleDiffPrefsChanged">
|
||||||
|
<option value="IGNORE_NONE">None</option>
|
||||||
|
<option value="IGNORE_TRAILING">Trailing</option>
|
||||||
|
<option value="IGNORE_LEADING_AND_TRAILING">Leading & trailing</option>
|
||||||
|
<option value="IGNORE_ALL">All</option>
|
||||||
|
</select>
|
||||||
|
</gr-select>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
<gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
|
||||||
|
</template>
|
||||||
|
<script src="gr-diff-preferences.js"></script>
|
||||||
|
</dom-module>
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
/**
|
||||||
|
* @license
|
||||||
|
* Copyright (C) 2016 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
(function() {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
Polymer({
|
||||||
|
is: 'gr-diff-preferences',
|
||||||
|
|
||||||
|
properties: {
|
||||||
|
hasUnsavedChanges: {
|
||||||
|
type: Boolean,
|
||||||
|
notify: true,
|
||||||
|
value: false,
|
||||||
|
},
|
||||||
|
|
||||||
|
/** @type {?} */
|
||||||
|
diffPrefs: Object,
|
||||||
|
},
|
||||||
|
|
||||||
|
loadData() {
|
||||||
|
return this.$.restAPI.getDiffPreferences().then(prefs => {
|
||||||
|
this.diffPrefs = prefs;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleDiffPrefsChanged() {
|
||||||
|
this.hasUnsavedChanges = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleLineWrappingTap() {
|
||||||
|
this.set('diffPrefs.line_wrapping', this.$.lineWrappingInput.checked);
|
||||||
|
this._handleDiffPrefsChanged();
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleShowTabsTap() {
|
||||||
|
this.set('diffPrefs.show_tabs', this.$.showTabsInput.checked);
|
||||||
|
this._handleDiffPrefsChanged();
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleShowTrailingWhitespaceTap() {
|
||||||
|
this.set('diffPrefs.show_whitespace_errors',
|
||||||
|
this.$.showTrailingWhitespaceInput.checked);
|
||||||
|
this._handleDiffPrefsChanged();
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleSyntaxHighlightTap() {
|
||||||
|
this.set('diffPrefs.syntax_highlighting',
|
||||||
|
this.$.syntaxHighlightInput.checked);
|
||||||
|
this._handleDiffPrefsChanged();
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleAutomaticReviewTap() {
|
||||||
|
this.set('diffPrefs.manual_review',
|
||||||
|
this.$.automaticReviewInput.checked);
|
||||||
|
this._handleDiffPrefsChanged();
|
||||||
|
},
|
||||||
|
|
||||||
|
save() {
|
||||||
|
return this.$.restAPI.saveDiffPreferences(this.diffPrefs).then(res => {
|
||||||
|
this.hasUnsavedChanges = false;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
})();
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<!--
|
||||||
|
@license
|
||||||
|
Copyright (C) 2016 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
|
||||||
|
<title>gr-diff-preferences</title>
|
||||||
|
|
||||||
|
<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
|
||||||
|
<script src="../../../bower_components/web-component-tester/browser.js"></script>
|
||||||
|
<link rel="import" href="../../../test/common-test-setup.html"/>
|
||||||
|
<link rel="import" href="gr-diff-preferences.html">
|
||||||
|
|
||||||
|
<script>void(0);</script>
|
||||||
|
|
||||||
|
<test-fixture id="basic">
|
||||||
|
<template>
|
||||||
|
<gr-diff-preferences></gr-diff-preferences>
|
||||||
|
</template>
|
||||||
|
</test-fixture>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
suite('gr-diff-preferences tests', () => {
|
||||||
|
let element;
|
||||||
|
let sandbox;
|
||||||
|
let diffPreferences;
|
||||||
|
|
||||||
|
function valueOf(title, fieldsetid) {
|
||||||
|
const sections = element.$[fieldsetid].querySelectorAll('section');
|
||||||
|
let titleEl;
|
||||||
|
for (let i = 0; i < sections.length; i++) {
|
||||||
|
titleEl = sections[i].querySelector('.title');
|
||||||
|
if (titleEl.textContent.trim() === title) {
|
||||||
|
return sections[i].querySelector('.value');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setup(() => {
|
||||||
|
diffPreferences = {
|
||||||
|
context: 10,
|
||||||
|
line_wrapping: false,
|
||||||
|
line_length: 100,
|
||||||
|
tab_size: 8,
|
||||||
|
font_size: 12,
|
||||||
|
show_tabs: true,
|
||||||
|
show_whitespace_errors: true,
|
||||||
|
syntax_highlighting: true,
|
||||||
|
manual_review: false,
|
||||||
|
ignore_whitespace: 'IGNORE_NONE',
|
||||||
|
};
|
||||||
|
|
||||||
|
stub('gr-rest-api-interface', {
|
||||||
|
getDiffPreferences() {
|
||||||
|
return Promise.resolve(diffPreferences);
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
element = fixture('basic');
|
||||||
|
sandbox = sinon.sandbox.create();
|
||||||
|
return element.loadData();
|
||||||
|
});
|
||||||
|
|
||||||
|
teardown(() => { sandbox.restore(); });
|
||||||
|
|
||||||
|
test('renders', () => {
|
||||||
|
// Rendered with the expected preferences selected.
|
||||||
|
assert.equal(valueOf('Context', 'diffPreferences')
|
||||||
|
.firstElementChild.bindValue, diffPreferences.context);
|
||||||
|
assert.equal(valueOf('Fit to screen', 'diffPreferences')
|
||||||
|
.firstElementChild.checked, diffPreferences.line_wrapping);
|
||||||
|
assert.equal(valueOf('Diff width', 'diffPreferences')
|
||||||
|
.firstElementChild.bindValue, diffPreferences.line_length);
|
||||||
|
assert.equal(valueOf('Tab width', 'diffPreferences')
|
||||||
|
.firstElementChild.bindValue, diffPreferences.tab_size);
|
||||||
|
assert.equal(valueOf('Font size', 'diffPreferences')
|
||||||
|
.firstElementChild.bindValue, diffPreferences.font_size);
|
||||||
|
assert.equal(valueOf('Show tabs', 'diffPreferences')
|
||||||
|
.firstElementChild.checked, diffPreferences.show_tabs);
|
||||||
|
assert.equal(valueOf('Show trailing whitespace', 'diffPreferences')
|
||||||
|
.firstElementChild.checked, diffPreferences.show_whitespace_errors);
|
||||||
|
assert.equal(valueOf('Syntax highlighting', 'diffPreferences')
|
||||||
|
.firstElementChild.checked, diffPreferences.syntax_highlighting);
|
||||||
|
assert.equal(
|
||||||
|
valueOf('Automatically mark viewed files reviewed', 'diffPreferences')
|
||||||
|
.firstElementChild.checked, diffPreferences.manual_review);
|
||||||
|
assert.equal(valueOf('Ignore Whitespace', 'diffPreferences')
|
||||||
|
.firstElementChild.bindValue, diffPreferences.ignore_whitespace);
|
||||||
|
|
||||||
|
assert.isFalse(element.hasUnsavedChanges);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('save changes', () => {
|
||||||
|
sandbox.stub(element.$.restAPI, 'saveDiffPreferences')
|
||||||
|
.returns(Promise.resolve());
|
||||||
|
const showTrailingWhitespaceCheckbox =
|
||||||
|
valueOf('Show trailing whitespace', 'diffPreferences')
|
||||||
|
.firstElementChild;
|
||||||
|
showTrailingWhitespaceCheckbox.checked = false;
|
||||||
|
element._handleShowTrailingWhitespaceTap();
|
||||||
|
|
||||||
|
assert.isTrue(element.hasUnsavedChanges);
|
||||||
|
|
||||||
|
// Save the change.
|
||||||
|
return element.save().then(() => {
|
||||||
|
assert.isFalse(element.hasUnsavedChanges);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -110,7 +110,6 @@ limitations under the License.
|
|||||||
'diff/gr-diff-highlight/gr-annotation_test.html',
|
'diff/gr-diff-highlight/gr-annotation_test.html',
|
||||||
'diff/gr-diff-highlight/gr-diff-highlight_test.html',
|
'diff/gr-diff-highlight/gr-diff-highlight_test.html',
|
||||||
'diff/gr-diff-mode-selector/gr-diff-mode-selector_test.html',
|
'diff/gr-diff-mode-selector/gr-diff-mode-selector_test.html',
|
||||||
'diff/gr-diff-preferences/gr-diff-preferences_test.html',
|
|
||||||
'diff/gr-diff-processor/gr-diff-processor_test.html',
|
'diff/gr-diff-processor/gr-diff-processor_test.html',
|
||||||
'diff/gr-diff-selection/gr-diff-selection_test.html',
|
'diff/gr-diff-selection/gr-diff-selection_test.html',
|
||||||
'diff/gr-diff-view/gr-diff-view_test.html',
|
'diff/gr-diff-view/gr-diff-view_test.html',
|
||||||
@@ -162,6 +161,7 @@ limitations under the License.
|
|||||||
'shared/gr-cursor-manager/gr-cursor-manager_test.html',
|
'shared/gr-cursor-manager/gr-cursor-manager_test.html',
|
||||||
'shared/gr-date-formatter/gr-date-formatter_test.html',
|
'shared/gr-date-formatter/gr-date-formatter_test.html',
|
||||||
'shared/gr-dialog/gr-dialog_test.html',
|
'shared/gr-dialog/gr-dialog_test.html',
|
||||||
|
'shared/gr-diff-preferences/gr-diff-preferences_test.html',
|
||||||
'shared/gr-download-commands/gr-download-commands_test.html',
|
'shared/gr-download-commands/gr-download-commands_test.html',
|
||||||
'shared/gr-dropdown-list/gr-dropdown-list_test.html',
|
'shared/gr-dropdown-list/gr-dropdown-list_test.html',
|
||||||
'shared/gr-editable-content/gr-editable-content_test.html',
|
'shared/gr-editable-content/gr-editable-content_test.html',
|
||||||
|
|||||||
Reference in New Issue
Block a user