// 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}

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