/**
 * 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.
 */

{namespace com.google.gerrit.server.mail.template}

/**
 * The .AddToAttentionSet template will determine the contents of the email related to a
 * user being added to the attention set.
 */
{template .AddToAttentionSet kind="text"}
  {@param change: ?}
  {@param coverLetter: ?}
  {@param email: ?}
  {@param fromName: ?}
  {@param attentionSetUser: ?}
  {@param reason: ?}
  {if $fromName == $attentionSetUser}
  {$fromName} added themselves to the attention set of this change.
  {else}
  {$fromName} requires the attention of {$attentionSetUser} to this change.
  {/if}
  {\n} The reason is: {$reason}.
  {if $email.changeUrl} ( {$email.changeUrl} ){/if}{\n}
  {\n}
  Change subject: {$change.subject}{\n}
  ......................................................................{\n}
  {if $coverLetter}
    {\n}
    {\n}
    {$coverLetter}
    {\n}
  {/if}
{/template}
