// 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 stricthtml="false"}
{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 stricthtml="false"}
{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 stricthtml="false"}
</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}</li>
{/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}
