| <!-- | 
 | 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="../../../behaviors/docs-url-behavior/docs-url-behavior.html"> | 
 | <link rel="import" href="../../../styles/shared-styles.html"> | 
 | <link rel="import" href="../../../styles/gr-menu-page-styles.html"> | 
 | <link rel="import" href="../../../styles/gr-page-nav-styles.html"> | 
 | <link rel="import" href="../../../styles/gr-form-styles.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-date-formatter/gr-date-formatter.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-select/gr-select.html"> | 
 | <link rel="import" href="../gr-account-info/gr-account-info.html"> | 
 | <link rel="import" href="../gr-agreements-list/gr-agreements-list.html"> | 
 | <link rel="import" href="../gr-email-editor/gr-email-editor.html"> | 
 | <link rel="import" href="../gr-group-list/gr-group-list.html"> | 
 | <link rel="import" href="../gr-http-password/gr-http-password.html"> | 
 | <link rel="import" href="../gr-menu-editor/gr-menu-editor.html"> | 
 | <link rel="import" href="../gr-ssh-editor/gr-ssh-editor.html"> | 
 | <link rel="import" href="../gr-watched-projects-editor/gr-watched-projects-editor.html"> | 
 |  | 
 | <dom-module id="gr-settings-view"> | 
 |   <template> | 
 |     <style include="shared-styles"> | 
 |       #newEmailInput { | 
 |         width: 20em; | 
 |       } | 
 |       #email { | 
 |         margin-bottom: 1em; | 
 |       } | 
 |       .filters p { | 
 |         margin-bottom: 1em; | 
 |       } | 
 |       .queryExample em { | 
 |         color: violet; | 
 |       } | 
 |     </style> | 
 |     <style include="gr-form-styles"></style> | 
 |     <style include="gr-menu-page-styles"></style> | 
 |     <style include="gr-page-nav-styles"></style> | 
 |     <div class="loading" hidden$="[[!_loading]]">Loading...</div> | 
 |     <div hidden$="[[_loading]]" hidden> | 
 |       <gr-page-nav class="navStyles"> | 
 |         <ul> | 
 |           <li><a href="#Profile">Profile</a></li> | 
 |           <li><a href="#Preferences">Preferences</a></li> | 
 |           <li><a href="#DiffPreferences">Diff Preferences</a></li> | 
 |           <li><a href="#Menu">Menu</a></li> | 
 |           <li><a href="#ChangeTableColumns">Change Table Columns</a></li> | 
 |           <li><a href="#Notifications">Notifications</a></li> | 
 |           <li><a href="#EmailAddresses">Email Addresses</a></li> | 
 |           <li><a href="#HTTPCredentials">HTTP Credentials</a></li> | 
 |           <li hidden$="[[!_serverConfig.sshd]]"><a href="#SSHKeys"> | 
 |             SSH Keys | 
 |           </a></li> | 
 |           <li><a href="#Groups">Groups</a></li> | 
 |           <template is="dom-if" if="[[_serverConfig.auth.use_contributor_agreements]]"> | 
 |             <li> | 
 |               <a href="#Agreements">Agreements</a> | 
 |             </li> | 
 |           </template> | 
 |           <li><a href="#MailFilters">Mail Filters</a></li> | 
 |         </ul> | 
 |       </gr-page-nav> | 
 |       <main class="gr-form-styles"> | 
 |         <h1>User Settings</h1> | 
 |         <h2 | 
 |             id="Profile" | 
 |             class$="[[_computeHeaderClass(_accountInfoChanged)]]">Profile</h2> | 
 |         <fieldset id="profile"> | 
 |           <gr-account-info | 
 |               id="accountInfo" | 
 |               mutable="{{_accountNameMutable}}" | 
 |               has-unsaved-changes="{{_accountInfoChanged}}"></gr-account-info> | 
 |           <gr-button | 
 |               on-tap="_handleSaveAccountInfo" | 
 |               disabled="[[!_accountInfoChanged]]">Save changes</gr-button> | 
 |         </fieldset> | 
 |         <h2 | 
 |             id="Preferences" | 
 |             class$="[[_computeHeaderClass(_prefsChanged)]]">Preferences</h2> | 
 |         <fieldset id="preferences"> | 
 |           <section> | 
 |             <span class="title">Changes per page</span> | 
 |             <span class="value"> | 
 |               <gr-select | 
 |                   bind-value="{{_localPrefs.changes_per_page}}"> | 
 |                 <select> | 
 |                   <option value="10">10 rows per page</option> | 
 |                   <option value="25">25 rows per page</option> | 
 |                   <option value="50">50 rows per page</option> | 
 |                   <option value="100">100 rows per page</option> | 
 |                 </select> | 
 |               </gr-select> | 
 |             </span> | 
 |           </section> | 
 |           <section> | 
 |             <span class="title">Date/time format</span> | 
 |             <span class="value"> | 
 |               <gr-select | 
 |                   bind-value="{{_localPrefs.date_format}}"> | 
 |                 <select> | 
 |                   <option value="STD">Jun 3 ; Jun 3, 2016</option> | 
 |                   <option value="US">06/03 ; 06/03/16</option> | 
 |                   <option value="ISO">06-03 ; 2016-06-03</option> | 
 |                   <option value="EURO">3. Jun ; 03.06.2016</option> | 
 |                   <option value="UK">03/06 ; 03/06/2016</option> | 
 |                 </select> | 
 |               </gr-select> | 
 |               <gr-select | 
 |                   bind-value="{{_localPrefs.time_format}}"> | 
 |                 <select> | 
 |                   <option value="HHMM_12">4:10 PM</option> | 
 |                   <option value="HHMM_24">16:10</option> | 
 |                 </select> | 
 |               </gr-select> | 
 |             </span> | 
 |           </section> | 
 |           <section> | 
 |             <span class="title">Email notifications</span> | 
 |             <span class="value"> | 
 |               <gr-select | 
 |                   bind-value="{{_localPrefs.email_strategy}}"> | 
 |                 <select> | 
 |                   <option value="CC_ON_OWN_COMMENTS">Every comment</option> | 
 |                   <option value="ENABLED">Only comments left by others</option> | 
 |                   <option value="DISABLED">None</option> | 
 |                 </select> | 
 |               </gr-select> | 
 |             </span> | 
 |           </section> | 
 |           <section hidden$="[[!_localPrefs.email_format]]"> | 
 |             <span class="title">Email format</span> | 
 |             <span class="value"> | 
 |               <gr-select | 
 |                   bind-value="{{_localPrefs.email_format}}"> | 
 |                 <select> | 
 |                   <option value="HTML_PLAINTEXT">HTML and plaintext</option> | 
 |                   <option value="PLAINTEXT">Plaintext only</option> | 
 |                 </select> | 
 |               </gr-select> | 
 |             </span> | 
 |           </section> | 
 |           <section> | 
 |             <span class="title">Diff view</span> | 
 |             <span class="value"> | 
 |               <gr-select | 
 |                   bind-value="{{_localPrefs.diff_view}}"> | 
 |                 <select> | 
 |                   <option value="SIDE_BY_SIDE">Side by side</option> | 
 |                   <option value="UNIFIED_DIFF">Unified diff</option> | 
 |                 </select> | 
 |               </gr-select> | 
 |             </span> | 
 |           </section> | 
 |           <section> | 
 |             <span class="title">Expand inline diffs</span> | 
 |             <span class="value"> | 
 |               <input | 
 |                   id="expandInlineDiffs" | 
 |                   type="checkbox" | 
 |                   checked$="[[_localPrefs.expand_inline_diffs]]" | 
 |                   on-change="_handleExpandInlineDiffsChanged"> | 
 |             </span> | 
 |           </section> | 
 |           <section> | 
 |             <span class="title">Publish comments on push</span> | 
 |             <span class="value"> | 
 |               <input | 
 |                   id="publishCommentsOnPush" | 
 |                   type="checkbox" | 
 |                   checked$="[[_localPrefs.publish_comments_on_push]]" | 
 |                   on-change="_handlePublishCommentsOnPushChanged"> | 
 |             </span> | 
 |           </section> | 
 |           <section> | 
 |             <span class="title">Set new changes to "work in progress" by default</span> | 
 |             <span class="value"> | 
 |               <input | 
 |                   id="workInProgressByDefault" | 
 |                   type="checkbox" | 
 |                   checked$="[[_localPrefs.work_in_progress_by_default]]" | 
 |                   on-change="_handleWorkInProgressByDefault"> | 
 |             </span> | 
 |           </section> | 
 |           <section> | 
 |             <span class="title"> | 
 |               Insert Signed-off-by Footer For Inline Edit Changes | 
 |             </span> | 
 |             <span class="value"> | 
 |               <input | 
 |                   id="insertSignedOff" | 
 |                   type="checkbox" | 
 |                   checked$="[[_localPrefs.signed_off_by]]" | 
 |                   on-change="_handleInsertSignedOff"> | 
 |             </span> | 
 |           </section> | 
 |           <gr-button | 
 |               id="savePrefs" | 
 |               on-tap="_handleSavePreferences" | 
 |               disabled="[[!_prefsChanged]]">Save changes</gr-button> | 
 |         </fieldset> | 
 |         <h2 | 
 |             id="DiffPreferences" | 
 |             class$="[[_computeHeaderClass(_diffPrefsChanged)]]"> | 
 |           Diff Preferences | 
 |         </h2> | 
 |         <fieldset id="diffPreferences"> | 
 |           <section> | 
 |             <span class="title">Context</span> | 
 |             <span class="value"> | 
 |               <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="lineWrapping" | 
 |                   type="checkbox" | 
 |                   checked$="[[_diffPrefs.line_wrapping]]" | 
 |                   on-change="_handleLineWrappingChanged"> | 
 |             </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="showTabs" | 
 |                   type="checkbox" | 
 |                   checked$="[[_diffPrefs.show_tabs]]" | 
 |                   on-change="_handleShowTabsChanged"> | 
 |             </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="syntaxHighlighting" | 
 |                   type="checkbox" | 
 |                   checked$="[[_diffPrefs.syntax_highlighting]]" | 
 |                   on-change="_handleSyntaxHighlightingChanged"> | 
 |             </span> | 
 |           </section> | 
 |           <gr-button | 
 |               id="saveDiffPrefs" | 
 |               on-tap="_handleSaveDiffPreferences" | 
 |               disabled$="[[!_diffPrefsChanged]]">Save changes</gr-button> | 
 |         </fieldset> | 
 |         <h2 id="Menu" class$="[[_computeHeaderClass(_menuChanged)]]">Menu</h2> | 
 |         <fieldset id="menu"> | 
 |           <gr-menu-editor | 
 |               menu-items="{{_localMenu}}"></gr-menu-editor> | 
 |           <gr-button | 
 |               id="saveMenu" | 
 |               on-tap="_handleSaveMenu" | 
 |               disabled="[[!_menuChanged]]">Save changes</gr-button> | 
 |           <gr-button | 
 |               id="resetMenu" | 
 |               link | 
 |               on-tap="_handleResetMenuButton">Reset</gr-button> | 
 |         </fieldset> | 
 |         <h2 id="ChangeTableColumns" | 
 |             class$="[[_computeHeaderClass(_changeTableChanged)]]"> | 
 |           Change Table Columns | 
 |         </h2> | 
 |         <fieldset id="changeTableColumns"> | 
 |           <gr-change-table-editor | 
 |               show-number="{{_showNumber}}" | 
 |               displayed-columns="{{_localChangeTableColumns}}"> | 
 |           </gr-change-table-editor> | 
 |           <gr-button | 
 |               id="saveChangeTable" | 
 |               on-tap="_handleSaveChangeTable" | 
 |               disabled="[[!_changeTableChanged]]">Save changes</gr-button> | 
 |         </fieldset> | 
 |         <h2 | 
 |             id="Notifications" | 
 |             class$="[[_computeHeaderClass(_watchedProjectsChanged)]]"> | 
 |           Notifications | 
 |         </h2> | 
 |         <fieldset id="watchedProjects"> | 
 |           <gr-watched-projects-editor | 
 |               has-unsaved-changes="{{_watchedProjectsChanged}}" | 
 |               id="watchedProjectsEditor"></gr-watched-projects-editor> | 
 |           <gr-button | 
 |               on-tap="_handleSaveWatchedProjects" | 
 |               disabled$="[[!_watchedProjectsChanged]]" | 
 |               id="_handleSaveWatchedProjects">Save changes</gr-button> | 
 |         </fieldset> | 
 |         <h2 | 
 |             id="EmailAddresses" | 
 |             class$="[[_computeHeaderClass(_emailsChanged)]]"> | 
 |           Email Addresses | 
 |         </h2> | 
 |         <fieldset id="email"> | 
 |           <gr-email-editor | 
 |               id="emailEditor" | 
 |               has-unsaved-changes="{{_emailsChanged}}"></gr-email-editor> | 
 |           <gr-button | 
 |               link | 
 |               on-tap="_handleSaveEmails" | 
 |               disabled$="[[!_emailsChanged]]">Save changes</gr-button> | 
 |         </fieldset> | 
 |         <fieldset id="newEmail"> | 
 |           <section> | 
 |             <span class="title">New email address</span> | 
 |             <span class="value"> | 
 |               <input | 
 |                   id="newEmailInput" | 
 |                   bind-value="{{_newEmail}}" | 
 |                   is="iron-input" | 
 |                   type="text" | 
 |                   disabled="[[_addingEmail]]" | 
 |                   on-keydown="_handleNewEmailKeydown" | 
 |                   placeholder="email@example.com"> | 
 |             </span> | 
 |           </section> | 
 |           <section | 
 |               id="verificationSentMessage" | 
 |               hidden$="[[!_lastSentVerificationEmail]]"> | 
 |             <p> | 
 |               A verification email was sent to | 
 |               <em>[[_lastSentVerificationEmail]]</em>. Please check your inbox. | 
 |             </p> | 
 |           </section> | 
 |           <gr-button | 
 |               disabled="[[!_computeAddEmailButtonEnabled(_newEmail, _addingEmail)]]" | 
 |               on-tap="_handleAddEmailButton">Send verification</gr-button> | 
 |         </fieldset> | 
 |         <template is="dom-if" if="[[_showHttpAuth(_serverConfig)]]"> | 
 |           <div> | 
 |             <h2 id="HTTPCredentials">HTTP Credentials</h2> | 
 |             <fieldset> | 
 |               <gr-http-password id="httpPass"></gr-http-password> | 
 |             </fieldset> | 
 |           </div> | 
 |         </template> | 
 |         <div hidden$="[[!_serverConfig.sshd]]"> | 
 |           <h2 | 
 |               id="SSHKeys" | 
 |               class$="[[_computeHeaderClass(_keysChanged)]]">SSH keys</h2> | 
 |           <gr-ssh-editor | 
 |               id="sshEditor" | 
 |               has-unsaved-changes="{{_keysChanged}}"></gr-ssh-editor> | 
 |         </div> | 
 |         <h2 id="Groups">Groups</h2> | 
 |         <fieldset> | 
 |           <gr-group-list id="groupList"></gr-group-list> | 
 |         </fieldset> | 
 |         <template is="dom-if" if="[[_serverConfig.auth.use_contributor_agreements]]"> | 
 |           <h2 id="Agreements">Agreements</h2> | 
 |           <fieldset> | 
 |             <gr-agreements-list id="agreementsList"></gr-agreements-list> | 
 |           </fieldset> | 
 |         </template> | 
 |         <h2 id="MailFilters">Mail Filters</h2> | 
 |         <fieldset class="filters"> | 
 |           <p> | 
 |             Gerrit emails include metadata about the change to support | 
 |             writing mail filters. | 
 |           </p> | 
 |           <p> | 
 |             Here are some example Gmail queries that can be used for filters or | 
 |             for searching through archived messages. View the | 
 |             <a href$="[[_getFilterDocsLink(_docsBaseUrl)]]" | 
 |                 target="_blank" | 
 |                 rel="nofollow">Gerrit documentation</a> | 
 |             for the complete set of footers. | 
 |           </p> | 
 |           <table> | 
 |             <tbody> | 
 |               <tr><th>Name</th><th>Query</th></tr> | 
 |               <tr> | 
 |                 <td>Changes requesting my review</td> | 
 |                 <td> | 
 |                   <code class="queryExample"> | 
 |                     "Gerrit-Reviewer: <em>Your Name</em> | 
 |                     <<em>your.email@example.com</em>>" | 
 |                   </code> | 
 |                 </td> | 
 |               </tr> | 
 |               <tr> | 
 |                 <td>Changes from a specific owner</td> | 
 |                 <td> | 
 |                   <code class="queryExample"> | 
 |                     "Gerrit-Owner: <em>Owner name</em> | 
 |                     <<em>owner.email@example.com</em>>" | 
 |                   </code> | 
 |                 </td> | 
 |               </tr> | 
 |               <tr> | 
 |                 <td>Changes targeting a specific branch</td> | 
 |                 <td> | 
 |                   <code class="queryExample"> | 
 |                     "Gerrit-Branch: <em>branch-name</em>" | 
 |                   </code> | 
 |                 </td> | 
 |               </tr> | 
 |               <tr> | 
 |                 <td>Changes in a specific project</td> | 
 |                 <td> | 
 |                   <code class="queryExample"> | 
 |                     "Gerrit-Project: <em>project-name</em>" | 
 |                   </code> | 
 |                 </td> | 
 |               </tr> | 
 |               <tr> | 
 |                 <td>Messages related to a specific Change ID</td> | 
 |                 <td> | 
 |                   <code class="queryExample"> | 
 |                     "Gerrit-Change-Id: <em>Change ID</em>" | 
 |                   </code> | 
 |                 </td> | 
 |               </tr> | 
 |               <tr> | 
 |                 <td>Messages related to a specific change number</td> | 
 |                 <td> | 
 |                   <code class="queryExample"> | 
 |                     "Gerrit-Change-Number: <em>change number</em>" | 
 |                   </code> | 
 |                 </td> | 
 |               </tr> | 
 |             </tbody> | 
 |           </table> | 
 |         </fieldset> | 
 |       </main> | 
 |     </div> | 
 |     <gr-rest-api-interface id="restAPI"></gr-rest-api-interface> | 
 |   </template> | 
 |   <script src="../../../scripts/util.js"></script> | 
 |   <script src="gr-settings-view.js"></script> | 
 | </dom-module> |