// Copyright 2012 Google Inc. All Rights Reserved.
//
// 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 gitiles autoescape="strict"}

/**
 * Detail page showing a shortlog for a commit.
 *
 * @param title human-readable revision name.
 * @param repositoryName name of this repository.
 * @param? menuEntries menu entries.
 * @param? customVariant variant name for custom styling.
 * @param breadcrumbs breadcrumbs for this page.
 * @param? tags optional list of tags encountered when peeling this object, with
 *     keys corresponding to gitiles.tagDetail.
 */
{template .logDetail}
{call .header data="all" /}

{if $tags}
  {foreach $tag in $tags}
    {call gitiles.tagDetail data="$tag" /}
  {/foreach}
{/if}

{call .streamingPlaceholder /}

{call .footer}
  {param customVariant: $customVariant /}
{/call}
{/template}


/**
 * Header for list of log entries.
 *
 * @param? previousUrl URL for the previous page of results.
 */
{template .logEntriesHeader}
{if $previousUrl}
  <nav class="LogNav">
    <a class="LogNav-prev" href="{$previousUrl}">{msg desc="text for previous URL"}&laquo; Previous{/msg}</a>
  </nav>
{/if}

<ol class="CommitLog">
{/template}


/**
 * Wrapper for a single log entry with pretty format and variant.
 *
 * @param variant variant name for log entry template.
 * @param entry log entry; see .logEntry.
 */
{template .logEntryWrapper}
<li class="CommitLog-item CommitLog-item--{$variant}">
  {delcall gitiles.logEntry variant="$variant ?: 'default'" data="$entry" /}
</li>
{/template}


/**
 * Footer for the list of log entries.
 *
 * @param? nextUrl URL for the next page of results.
 */
{template .logEntriesFooter}
</ol>
{if $nextUrl}
  <nav class="LogNav">
    <a class="LogNav-next" href="{$nextUrl}">{msg desc="text for next URL"}Next &raquo;{/msg}</a>
  </nav>
{/if}
{/template}


/**
 * Single log entry indicating the full log is empty.
 */
{template .emptyLog}
<li class="CommitLog-item CommitLog-item--empty">{msg desc="informational text for when the log is empty"}No commits.{/msg}</p>
{/template}


/**
 * Single pretty log entry, similar to --pretty=oneline.
 *
 * @param abbrevSha abbreviated SHA-1.
 * @param sha commit SHA-1.
 * @param url URL to commit detail page.
 * @param shortMessage short commit message.
 * @param message list of commit message parts, where each part contains:
 *     text: raw text of the part.
 *     url: optional URL that should be linked to from the part.
 * @param author author information with at least "name" and "relativeTime" keys.
 * @param committer committer information with at least "time" and "relativeTime" keys.
 * @param branches list of branches for this entry, with "name" and "url" keys.
 * @param tags list of tags for this entry, with "name" and "url" keys.
 * @param diffTree unused in this variant.
 * @param rename if this entry was a rename or a copy of the path, an object containg:
 *     changeType: the change type, "RENAME" or "COPY".
 *     oldPath: the old path prior to the rename or copy.
 *     newPath: the new path after the rename or copy.
 *     score: the similarity score of the rename or copy.
 */
{deltemplate gitiles.logEntry variant="'oneline'"}
<a class="u-sha1 u-monospace CommitLog-sha1" href="{$url}">{$abbrevSha}</a>
{sp}<a href="{$url}">{$shortMessage}</a>
{sp}<span class="CommitLog-author" title="{$author.email}">{msg desc="commit author name"}by {$author.name}{/msg}</span>
{sp}<span class="CommitLog-time" title="{$author.time}">· {$author.relativeTime}</span>
{if length($branches)}
  {foreach $branch in $branches}
    {sp}<a class="CommitLog-branchLabel" href="{$branch.url}">{$branch.name}</a>
  {/foreach}
{/if}
{if length($tags)}
  {foreach $tag in $tags}
    {sp}<a class="CommitLog-tagLabel" href="{$tag.url}">{$tag.name}</a>
  {/foreach}
{/if}

{if $rename}
  <span class="CommitLog-rename">
    [
    {switch $rename.changeType}
      {case 'RENAME'}
        Renamed
      {case 'COPY'}
        Copied
    {/switch}
    {if $rename.score != 100}
      {sp}({$rename.score}%)
    {/if}
    {sp}from {$rename.oldPath}]
  </span>
{/if}

{/deltemplate}


/**
 * Default single log entry (oneline format).
 *
 * @param abbrevSha abbreviated SHA-1.
 * @param sha commit SHA-1.
 * @param url URL to commit detail page.
 * @param shortMessage short commit message.
 * @param message list of commit message parts, where each part contains:
 *     text: raw text of the part.
 *     url: optional URL that should be linked to from the part.
 * @param author author information with at least "name" and "relativeTime" keys.
 * @param committer committer information with at least "time" and "relativeTime" keys.
 * @param branches list of branches for this entry, with "name" and "url" keys.
 * @param tags list of tags for this entry, with "name" and "url" keys.
 * @param diffTree unused in this variant.
 * @param rename if this entry was a rename or a copy of the path, an object containg:
 *     changeType: the change type, "RENAME" or "COPY".
 *     oldPath: the old path prior to the rename or copy.
 *     newPath: the new path after the rename or copy.
 *     score: the similarity score of the rename or copy.
 */
{deltemplate gitiles.logEntry variant="'default'"}
{delcall gitiles.logEntry variant="'oneline'" data="all" /}
{/deltemplate}


/**
 * Single pretty log entry, similar to --pretty=full.
 *
 * @param abbrevSha abbreviated SHA-1.
 * @param sha commit SHA-1.
 * @param url URL to commit detail page.
 * @param shortMessage short commit message.
 * @param message list of commit message parts, where each part contains:
 *     text: raw text of the part.
 *     url: optional URL that should be linked to from the part.
 * @param author author information with at least "name" and "relativeTime" keys.
 * @param committer committer information with at least "time" and "relativeTime" keys.
 * @param branches list of branches for this entry, with "name" and "url" keys.
 * @param tags list of tags for this entry, with "name" and "url" keys.
 * @param diffTree unused in this variant.
 * @param rename if this entry was a rename or a copy of the path, an object containg:
 *     changeType: the change type, "RENAME" or "COPY".
 *     oldPath: the old path prior to the rename or copy.
 *     newPath: the new path after the rename or copy.
 *     score: the similarity score of the rename or copy.
 */
{deltemplate gitiles.logEntry variant="'full'"}
<div class="u-monospace Metadata">
<table>
  <tr>
    <th class="Metadata-title">{msg desc="Header for commit SHA entry"}commit{/msg}</th>
    <td class="sha1">
      <a href="{$url}">{$sha}</a>
    </td>
    <td>
      {if length($branches)}
        {foreach $branch in $branches}
          {sp}<a href="{$branch.url}" class="branch-label">{$branch.name}</a>
        {/foreach}
      {/if}
      {if length($tags)}
        {foreach $tag in $tags}
          {sp}<a href="{$tag.url}" class="tag-label">{$tag.name}</a>
        {/foreach}
      {else}
        {sp}
      {/if}
    </td>
  </tr>
  <tr>
    <th class="Metadata-title">{msg desc="Header for commit author"}author{/msg}</th>
    <td>{call .person_ data="$author" /}</td>
    <td>{$author.time}</td>
  </tr>
  <tr>
    <th class="Metadata-title">{msg desc="Header for committer"}committer{/msg}</th>
    <td>{call .person_ data="$committer" /}</td>
    <td>{$committer.time}</td>
  </tr>

  {if $rename}
    <tr>
      <td colspan="3">
        <span class="CommitLog-rename">
          [
          {switch $rename.changeType}
            {case 'RENAME'}
              Renamed
            {case 'COPY'}
              Copied
          {/switch}
          {if $rename.score != 100}
            {sp}({$rename.score}%)
          {/if}
          {sp}from {$rename.oldPath}]
        </span>
      </td>
    </tr>
  {/if}

</table>
</div>
<pre class="u-pre u-monospace MetadataMessage">
  {$message}
</pre>
{/deltemplate}
