| // 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-confirm-rebase-dialog', |
| |
| /** |
| * Fired when the confirm button is pressed. |
| * |
| * @event confirm |
| */ |
| |
| /** |
| * Fired when the cancel button is pressed. |
| * |
| * @event cancel |
| */ |
| |
| properties: { |
| /** |
| * Weird API usage requires this to be String or Null. Add this so |
| * the closure compiler doesn't complain. |
| * @type {?string} */ |
| base: String, |
| branch: String, |
| hasParent: Boolean, |
| rebaseOnCurrent: Boolean, |
| }, |
| |
| observers: [ |
| '_updateSelectedOption(rebaseOnCurrent, hasParent)', |
| ], |
| |
| _displayParentOption(rebaseOnCurrent, hasParent) { |
| return hasParent && rebaseOnCurrent; |
| }, |
| |
| _displayParentUpToDateMsg(rebaseOnCurrent, hasParent) { |
| return hasParent && !rebaseOnCurrent; |
| }, |
| |
| _displayTipOption(rebaseOnCurrent, hasParent) { |
| return !(!rebaseOnCurrent && !hasParent); |
| }, |
| |
| _handleConfirmTap(e) { |
| e.preventDefault(); |
| this.fire('confirm', null, {bubbles: false}); |
| }, |
| |
| _handleCancelTap(e) { |
| e.preventDefault(); |
| this.fire('cancel', null, {bubbles: false}); |
| }, |
| |
| _handleRebaseOnOther() { |
| this.$.parentInput.focus(); |
| }, |
| |
| /** |
| * There is a subtle but important difference between setting the base to an |
| * empty string and omitting it entirely from the payload. An empty string |
| * implies that the parent should be cleared and the change should be |
| * rebased on top of the target branch. Leaving out the base implies that it |
| * should be rebased on top of its current parent. |
| */ |
| _handleRebaseOnTip() { |
| this.base = ''; |
| }, |
| |
| _handleRebaseOnParent() { |
| this.base = null; |
| }, |
| |
| _handleEnterChangeNumberTap() { |
| this.$.rebaseOnOtherInput.checked = true; |
| }, |
| |
| /** |
| * Sets the default radio button based on the state of the app and |
| * the corresponding value to be submitted. |
| */ |
| _updateSelectedOption(rebaseOnCurrent, hasParent) { |
| if (this._displayParentOption(rebaseOnCurrent, hasParent)) { |
| this.$.rebaseOnParentInput.checked = true; |
| this._handleRebaseOnParent(); |
| } else if (this._displayTipOption(rebaseOnCurrent, hasParent)) { |
| this.$.rebaseOnTipInput.checked = true; |
| this._handleRebaseOnTip(); |
| } else { |
| this.$.rebaseOnOtherInput.checked = true; |
| this._handleRebaseOnOther(); |
| } |
| }, |
| }); |
| })(); |