| <!-- | 
 | 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-autogrow-textarea/iron-autogrow-textarea.html"> | 
 | <link rel="import" href="../../../styles/gr-form-styles.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="../../../styles/shared-styles.html"> | 
 |  | 
 | <dom-module id="gr-ssh-editor"> | 
 |   <template> | 
 |     <style include="shared-styles"></style> | 
 |     <style include="gr-form-styles"> | 
 |       .statusHeader { | 
 |         width: 4em; | 
 |       } | 
 |       .keyHeader { | 
 |         width: 7.5em; | 
 |       } | 
 |       #viewKeyOverlay { | 
 |         padding: 2em; | 
 |         width: 50em; | 
 |       } | 
 |       .publicKey { | 
 |         font-family: var(--monospace-font-family); | 
 |         overflow-x: scroll; | 
 |         overflow-wrap: break-word; | 
 |         width: 30em; | 
 |       } | 
 |       .closeButton { | 
 |         bottom: 2em; | 
 |         position: absolute; | 
 |         right: 2em; | 
 |       } | 
 |       #existing { | 
 |         margin-bottom: 1em; | 
 |       } | 
 |       #existing .commentColumn { | 
 |         min-width: 27em; | 
 |         width: auto; | 
 |       } | 
 |     </style> | 
 |     <div class="gr-form-styles"> | 
 |       <fieldset id="existing"> | 
 |         <table> | 
 |           <thead> | 
 |             <tr> | 
 |               <th class="commentColumn">Comment</th> | 
 |               <th class="statusHeader">Status</th> | 
 |               <th class="keyHeader">Public key</th> | 
 |               <th></th> | 
 |             </tr> | 
 |           </thead> | 
 |           <tbody> | 
 |             <template is="dom-repeat" items="[[_keys]]" as="key"> | 
 |               <tr> | 
 |                 <td class="commentColumn">[[key.comment]]</td> | 
 |                 <td>[[_getStatusLabel(key.valid)]]</td> | 
 |                 <td> | 
 |                   <gr-button | 
 |                       on-tap="_showKey" | 
 |                       data-index$="[[index]]" | 
 |                       link>Click to View</gr-button> | 
 |                 </td> | 
 |                 <td> | 
 |                   <gr-button | 
 |                       data-index$="[[index]]" | 
 |                       on-tap="_handleDeleteKey">Delete</gr-button> | 
 |                 </td> | 
 |               </tr> | 
 |             </template> | 
 |           </tbody> | 
 |         </table> | 
 |         <gr-overlay id="viewKeyOverlay" with-backdrop> | 
 |           <fieldset> | 
 |             <section> | 
 |               <span class="title">Algorithm</span> | 
 |               <span class="value">[[_keyToView.algorithm]]</span> | 
 |             </section> | 
 |             <section> | 
 |               <span class="title">Public key</span> | 
 |               <span class="value publicKey">[[_keyToView.encoded_key]]</span> | 
 |             </section> | 
 |             <section> | 
 |               <span class="title">Comment</span> | 
 |               <span class="value">[[_keyToView.comment]]</span> | 
 |             </section> | 
 |           </fieldset> | 
 |           <gr-button | 
 |               class="closeButton" | 
 |               on-tap="_closeOverlay">Close</gr-button> | 
 |         </gr-overlay> | 
 |         <gr-button | 
 |             on-tap="save" | 
 |             disabled$="[[!hasUnsavedChanges]]">Save changes</gr-button> | 
 |       </fieldset> | 
 |       <fieldset> | 
 |         <section> | 
 |           <span class="title">New SSH key</span> | 
 |           <span class="value"> | 
 |             <iron-autogrow-textarea | 
 |                 id="newKey" | 
 |                 autocomplete="on" | 
 |                 bind-value="{{_newKey}}" | 
 |                 placeholder="New SSH Key"></iron-autogrow-textarea> | 
 |           </span> | 
 |         </section> | 
 |         <gr-button | 
 |             id="addButton" | 
 |             disabled$="[[_computeAddButtonDisabled(_newKey)]]" | 
 |             on-tap="_handleAddKey">Add new SSH key</gr-button> | 
 |       </fieldset> | 
 |     </div> | 
 |     <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> | 
 |   </template> | 
 |   <script src="gr-ssh-editor.js"></script> | 
 | </dom-module> |