blob: 81e4fc4c2b3919f0c8a7b54d752362edd4241c2e [file] [log] [blame]
/**
* @license
* Copyright (C) 2020 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.
*/
import {html} from '@polymer/polymer/lib/utils/html-tag';
export const htmlTemplate = html`
<style include="gr-font-styles">
/* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
</style>
<style include="shared-styles">
:host {
color: var(--primary-text-color);
}
h2 {
font-family: var(--header-font-family);
font-size: var(--font-size-h2);
font-weight: var(--font-weight-h2);
line-height: var(--line-height-h2);
}
.newEmailInput {
width: 20em;
}
#email {
margin-bottom: var(--spacing-l);
}
.main section.darkToggle {
display: block;
}
.filters p,
.darkToggle p {
margin-bottom: var(--spacing-l);
}
.queryExample em {
color: violet;
}
.toggle {
align-items: center;
display: flex;
margin-bottom: var(--spacing-l);
margin-right: var(--spacing-l);
}
</style>
<style include="gr-form-styles">
/* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
</style>
<style include="gr-menu-page-styles">
/* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
</style>
<style include="gr-page-nav-styles">
/* Workaround for empty style block - see https://github.com/Polymer/tools/issues/408 */
</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="#EditPreferences">Edit 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>
<template is="dom-if" if="[[_showHttpAuth(_serverConfig)]]">
<li><a href="#HTTPCredentials">HTTP Credentials</a></li>
</template>
<li hidden$="[[!_serverConfig.sshd]]">
<a href="#SSHKeys"> SSH Keys </a>
</li>
<li hidden$="[[!_serverConfig.receive.enable_signed_push]]">
<a href="#GPGKeys"> GPG Keys </a>
</li>
<li><a href="#Groups">Groups</a></li>
<li><a href="#Identities">Identities</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>
<gr-endpoint-decorator name="settings-menu-item">
</gr-endpoint-decorator>
</ul>
</gr-page-nav>
<div class="main gr-form-styles">
<h1 class="heading-1">User Settings</h1>
<h2 id="Theme">Theme</h2>
<section class="darkToggle">
<div class="toggle">
<paper-toggle-button
aria-labelledby="darkThemeToggleLabel"
checked="[[_isDark]]"
on-change="_handleToggleDark"
on-click="_onTapDarkToggle"
></paper-toggle-button>
<div id="darkThemeToggleLabel">
Dark theme (the toggle reloads the page)
</div>
</div>
</section>
<h2 id="Profile" class$="[[_computeHeaderClass(_accountInfoChanged)]]">
Profile
</h2>
<fieldset id="profile">
<gr-account-info
id="accountInfo"
has-unsaved-changes="{{_accountInfoChanged}}"
></gr-account-info>
<gr-button
on-click="_handleSaveAccountInfo"
disabled="[[!_accountInfoChanged]]"
>Save changes</gr-button
>
</fieldset>
<h2 id="Preferences" class$="[[_computeHeaderClass(_prefsChanged)]]">
Preferences
</h2>
<fieldset id="preferences">
<section>
<label class="title" for="changesPerPageSelect"
>Changes per page</label
>
<span class="value">
<gr-select
bind-value="[[_convertToString(_localPrefs.changes_per_page)]]"
on-change="_handleChangesPerPage"
>
<select id="changesPerPageSelect">
<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>
<label class="title" for="dateTimeFormatSelect"
>Date/time format</label
>
<span class="value">
<gr-select
bind-value="[[_convertToString(_localPrefs.date_format)]]"
on-change="_handleDateFormat"
>
<select id="dateTimeFormatSelect">
<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="[[_convertToString(_localPrefs.time_format)]]"
aria-label="Time Format"
on-change="_handleTimeFormat"
>
<select id="timeFormatSelect">
<option value="HHMM_12">4:10 PM</option>
<option value="HHMM_24">16:10</option>
</select>
</gr-select>
</span>
</section>
<section>
<label class="title" for="emailNotificationsSelect"
>Email notifications</label
>
<span class="value">
<gr-select
bind-value="[[_convertToString(_localPrefs.email_strategy)]]"
on-change="_handleEmailStrategy"
>
<select id="emailNotificationsSelect">
<option value="CC_ON_OWN_COMMENTS">Every comment</option>
<option value="ENABLED">Only comments left by others</option>
<option value="ATTENTION_SET_ONLY">
Only when I am in the attention set
</option>
<option value="DISABLED">None</option>
</select>
</gr-select>
</span>
</section>
<section hidden$="[[!_convertToString(_localPrefs.email_format)]]">
<label class="title" for="emailFormatSelect">Email format</label>
<span class="value">
<gr-select
bind-value="[[_convertToString(_localPrefs.email_format)]]"
on-change="_handleEmailFormat"
>
<select id="emailFormatSelect">
<option value="HTML_PLAINTEXT">HTML and plaintext</option>
<option value="PLAINTEXT">Plaintext only</option>
</select>
</gr-select>
</span>
</section>
<section hidden$="[[!_localPrefs.default_base_for_merges]]">
<span class="title">Default Base For Merges</span>
<span class="value">
<gr-select
bind-value="[[_convertToString(_localPrefs.default_base_for_merges)]]"
on-change="_handleDefaultBaseForMerges"
>
<select id="defaultBaseForMergesSelect">
<option value="AUTO_MERGE">Auto Merge</option>
<option value="FIRST_PARENT">First Parent</option>
</select>
</gr-select>
</span>
</section>
<section>
<label class="title" for="relativeDateInChangeTable"
>Show Relative Dates In Changes Table</label
>
<span class="value">
<input
id="relativeDateInChangeTable"
type="checkbox"
checked$="[[_localPrefs.relative_date_in_change_table]]"
on-change="_handleRelativeDateInChangeTable"
/>
</span>
</section>
<section>
<span class="title">Diff view</span>
<span class="value">
<gr-select
bind-value="[[_convertToString(_localPrefs.diff_view)]]"
on-change="_handleDiffView"
>
<select id="diffViewSelect">
<option value="SIDE_BY_SIDE">Side by side</option>
<option value="UNIFIED_DIFF">Unified diff</option>
</select>
</gr-select>
</span>
</section>
<section>
<label for="showSizeBarsInFileList" class="title"
>Show size bars in file list</label
>
<span class="value">
<input
id="showSizeBarsInFileList"
type="checkbox"
checked$="[[_localPrefs.size_bar_in_change_table]]"
on-change="_handleShowSizeBarsInFileListChanged"
/>
</span>
</section>
<section>
<label for="publishCommentsOnPush" class="title"
>Publish comments on push</label
>
<span class="value">
<input
id="publishCommentsOnPush"
type="checkbox"
checked$="[[_localPrefs.publish_comments_on_push]]"
on-change="_handlePublishCommentsOnPushChanged"
/>
</span>
</section>
<section>
<label for="workInProgressByDefault" class="title"
>Set new changes to "work in progress" by default</label
>
<span class="value">
<input
id="workInProgressByDefault"
type="checkbox"
checked$="[[_localPrefs.work_in_progress_by_default]]"
on-change="_handleWorkInProgressByDefault"
/>
</span>
</section>
<section>
<label for="disableKeyboardShortcuts" class="title"
>Disable all keyboard shortcuts</label
>
<span class="value">
<input
id="disableKeyboardShortcuts"
type="checkbox"
checked$="[[_localPrefs.disable_keyboard_shortcuts]]"
on-change="_handleDisableKeyboardShortcutsChanged"
/>
</span>
</section>
<section>
<label for="disableTokenHighlighting" class="title"
>Disable token highlighting on hover</label
>
<span class="value">
<input
id="disableTokenHighlighting"
type="checkbox"
checked$="[[_localPrefs.disable_token_highlighting]]"
on-change="_handleDisableTokenHighlightingChanged"
/>
</span>
</section>
<section>
<label for="insertSignedOff" class="title">
Insert Signed-off-by Footer For Inline Edit Changes
</label>
<span class="value">
<input
id="insertSignedOff"
type="checkbox"
checked$="[[_localPrefs.signed_off_by]]"
on-change="_handleInsertSignedOff"
/>
</span>
</section>
<gr-button
id="savePrefs"
on-click="_handleSavePreferences"
disabled="[[!_prefsChanged]]"
>Save changes</gr-button
>
</fieldset>
<h2
id="DiffPreferences"
class$="[[_computeHeaderClass(_diffPrefsChanged)]]"
>
Diff Preferences
</h2>
<fieldset id="diffPreferences">
<gr-diff-preferences
id="diffPrefs"
has-unsaved-changes="{{_diffPrefsChanged}}"
></gr-diff-preferences>
<gr-button
id="saveDiffPrefs"
on-click="_handleSaveDiffPreferences"
disabled$="[[!_diffPrefsChanged]]"
>Save changes</gr-button
>
</fieldset>
<h2
id="EditPreferences"
class$="[[_computeHeaderClass(_editPrefsChanged)]]"
>
Edit Preferences
</h2>
<fieldset id="editPreferences">
<gr-edit-preferences
id="editPrefs"
has-unsaved-changes="{{_editPrefsChanged}}"
></gr-edit-preferences>
<gr-button
id="saveEditPrefs"
on-click="_handleSaveEditPreferences"
disabled$="[[!_editPrefsChanged]]"
>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-click="_handleSaveMenu"
disabled="[[!_menuChanged]]"
>Save changes</gr-button
>
<gr-button id="resetButton" link="" on-click="_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}}"
server-config="[[_serverConfig]]"
displayed-columns="{{_localChangeTableColumns}}"
>
</gr-change-table-editor>
<gr-button
id="saveChangeTable"
on-click="_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-click="_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 on-click="_handleSaveEmails" disabled$="[[!_emailsChanged]]"
>Save changes</gr-button
>
</fieldset>
<fieldset id="newEmail">
<section>
<span class="title">New email address</span>
<span class="value">
<iron-input
class="newEmailInput"
bind-value="{{_newEmail}}"
type="text"
on-keydown="_handleNewEmailKeydown"
placeholder="email@example.com"
>
<input
class="newEmailInput"
type="text"
disabled="[[_addingEmail]]"
on-keydown="_handleNewEmailKeydown"
placeholder="email@example.com"
/>
</iron-input>
</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-click="_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>
<div hidden$="[[!_serverConfig.receive.enable_signed_push]]">
<h2 id="GPGKeys" class$="[[_computeHeaderClass(_gpgKeysChanged)]]">
GPG keys
</h2>
<gr-gpg-editor
id="gpgEditor"
has-unsaved-changes="{{_gpgKeysChanged}}"
></gr-gpg-editor>
</div>
<h2 id="Groups">Groups</h2>
<fieldset>
<gr-group-list id="groupList"></gr-group-list>
</fieldset>
<h2 id="Identities">Identities</h2>
<fieldset>
<gr-identities
id="identities"
server-config="[[_serverConfig]]"
></gr-identities>
</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>
&lt;<em>your.email@example.com</em>&gt;"
</code>
</td>
</tr>
<tr>
<td>Changes requesting my attention</td>
<td>
<code class="queryExample">
"Gerrit-Attention: <em>Your Name</em>
&lt;<em>your.email@example.com</em>&gt;"
</code>
</td>
</tr>
<tr>
<td>Changes from a specific owner</td>
<td>
<code class="queryExample">
"Gerrit-Owner: <em>Owner name</em>
&lt;<em>owner.email@example.com</em>&gt;"
</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>
<gr-endpoint-decorator name="settings-screen"> </gr-endpoint-decorator>
</div>
</div>
`;