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

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

/*
 * Private templates that cannot be overridden.
 */

/**
 * Private template to generate "View Change" buttons.
 * @param email
 */
{template .ViewChangeButton}
  <a href="{$email.changeUrl}">View Change</a>
{/template}

/**
 * Private template to render PRE block with consistent font-sizing.
 * @param content
 */
{template .Pre}
  {let $preStyle kind="css"}
    font-family: monospace,monospace; // Use this to avoid browsers scaling down
                                      // monospace text.
    white-space: pre-wrap;
  {/let}
  <pre style="{$preStyle}">{$content|changeNewlineToBr}</pre>
{/template}

/**
 * Take a list of unescaped comment blocks and emit safely escaped HTML to
 * render it nicely with wiki-like format.
 *
 * Each block is a map with a type key. When the type is 'paragraph', or 'pre',
 * it also has a 'text' key that maps to the unescaped text content for the
 * block. If the type is 'list', the map will have a 'items' key which maps to
 * list of unescaped list item strings. If the type is quote, the map will have
 * a 'quotedBlocks' key which maps to the blocks contained within the quote.
 *
 * This mechanism encodes as little structure as possible in order to depend on
 * the Soy autoescape mechanism for all of the content.
 *
 * @param content
 */
{template .WikiFormat}
  {let $blockquoteStyle kind="css"}
    border-left: 1px solid #aaa;
    margin: 10px 0;
    padding: 0 10px;
  {/let}

  {let $pStyle kind="css"}
    white-space: pre-wrap;
    word-wrap: break-word;
  {/let}

  {for $block in $content}
    {if $block.type == 'paragraph'}
      <p style="{$pStyle}">{$block.text|changeNewlineToBr}</p>
    {elseif $block.type == 'quote'}
      <blockquote style="{$blockquoteStyle}">
        {call .WikiFormat}{param content: $block.quotedBlocks /}{/call}
      </blockquote>
    {elseif $block.type == 'pre'}
      {call .Pre}{param content: $block.text /}{/call}
    {elseif $block.type == 'list'}
      <ul>
        {for $item in $block.items}
          <li>{$item}</li>
        {/for}
      </ul>
    {/if}
  {/for}
{/template}

/**
 * @param diffLines
 */
{template .UnifiedDiff}
  {let $addStyle kind="css"}
    color: hsl(120, 100%, 40%);
  {/let}

  {let $removeStyle kind="css"}
    color: hsl(0, 100%, 40%);
  {/let}

  {let $preStyle kind="css"}
    font-family: monospace,monospace; // Use this to avoid browsers scaling down
                                      // monospace text.
    white-space: pre-wrap;
  {/let}

  <pre style="{$preStyle}">
    {for $line in $diffLines}
      {if $line.type == 'add'}
        <span style="{$addStyle}">
      {elseif $line.type == 'remove'}
        <span style="{$removeStyle}">
      {else}
        <span>
      {/if}
        {$line.text}
      </span><br>
    {/for}
  </pre>
{/template}
