// 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', /** * Fired when the user presses the save button. * * @event save */ /** * Fired when the user presses the cancel button. * * @event cancel */ properties: { prefs: { type: Object, notify: true, }, localPrefs: { type: Object, notify: true, }, disabled: { type: Boolean, value: false, reflectToAttribute: true, }, _newPrefs: Object, _newLocalPrefs: Object, }, observers: [ '_prefsChanged(prefs.*)', '_localPrefsChanged(localPrefs.*)', ], getFocusStops: function() { return { start: this.$.contextSelect, end: this.$.cancelButton, }; }, resetFocus: function() { this.$.contextSelect.focus(); }, _prefsChanged: function(changeRecord) { var prefs = changeRecord.base; // TODO(andybons): This is not supported in IE. Implement a polyfill. // 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; }, _localPrefsChanged: function(changeRecord) { var localPrefs = changeRecord.base || {}; // TODO(viktard): This is not supported in IE. Implement a polyfill. this._newLocalPrefs = Object.assign({}, localPrefs); }, _handleContextSelectChange: function(e) { var selectEl = Polymer.dom(e).rootTarget; this.set('_newPrefs.context', parseInt(selectEl.value, 10)); }, _handleShowTabsTap: function(e) { this.set('_newPrefs.show_tabs', Polymer.dom(e).rootTarget.checked); }, _handleShowTrailingWhitespaceTap: function(e) { this.set('_newPrefs.show_whitespace_errors', Polymer.dom(e).rootTarget.checked); }, _handleSyntaxHighlightTap: function(e) { this.set('_newPrefs.syntax_highlighting', Polymer.dom(e).rootTarget.checked); }, _handlelineWrappingTap: function(e) { this.set('_newPrefs.line_wrapping', Polymer.dom(e).rootTarget.checked); }, _handleSave: function() { this.prefs = this._newPrefs; this.localPrefs = this._newLocalPrefs; this.fire('save', null, {bubbles: false}); }, _handleCancel: function() { this.fire('cancel', null, {bubbles: false}); }, }); })();