| // 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; |
| }, |
| |
| _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)); |
| }, |
| |
| _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); |
| }, |
| }); |
| })(); |