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

import * as common from 'com/google/gitiles/templates/Common.soy';
import * as objDetail from 'com/google/gitiles/templates/ObjectDetail.soy';

/**
 * Detail page showing a shortlog for a commit.
 */
{template logDetail stricthtml="false"}
  {@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. */
  {call common.header data="all" /}

{if $tags}
  {for $tag in $tags}
    {call objDetail.tagDetail data="$tag" /}
  {/for}
{/if}

{call common.streamingPlaceholder /}

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


/**
 * Header for list of log entries.
 */
{template logEntriesHeader stricthtml="false"}
  {@param? previousUrl: ?}  /** URL for the previous page of results. */
{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.
 */
{template logEntryWrapper}
  {@param variant: ?}  /** variant name for log entry template. */
  {@param entry: ?}  /** log entry; see .logEntry. */
<li class="CommitLog-item CommitLog-item--{$variant}">
  {delcall gitiles.logEntry variant="$variant ?: 'default'" data="$entry" /}
</li>
{/template}


/**
 * Footer for the list of log entries.
 */
{template logEntriesFooter stricthtml="false"}
  {@param? nextUrl: ?}  /** URL for the next page of results. */
  {@param? nextText: ?}  /** text for next page link. */
</ol>
{if $nextUrl}
  <nav class="LogNav">
    <a class="LogNav-next" href="{$nextUrl}">{$nextText} &raquo;</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.
 */
{deltemplate gitiles.logEntry variant="'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.
      */
<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)}
  {for $branch in $branches}
    {sp}<a class="CommitLog-branchLabel" href="{$branch.url}">{$branch.name}</a>
  {/for}
{/if}
{if length($tags)}
  {for $tag in $tags}
    {sp}<a class="CommitLog-tagLabel" href="{$tag.url}">{$tag.name}</a>
  {/for}
{/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).
 */
{deltemplate gitiles.logEntry variant="'default'"}
  {@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.
      */
{delcall gitiles.logEntry variant="'oneline'" data="all" /}
{/deltemplate}


/**
 * Single pretty log entry, similar to --pretty=full.
 */
{deltemplate gitiles.logEntry variant="'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.
      */
<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)}
        {for $branch in $branches}
          {sp}<a href="{$branch.url}" class="branch-label">{$branch.name}</a>
        {/for}
      {/if}
      {if length($tags)}
        {for $tag in $tags}
          {sp}<a href="{$tag.url}" class="tag-label">{$tag.name}</a>
        {/for}
      {else}
        {sp}
      {/if}
    </td>
  </tr>
  <tr>
    <th class="Metadata-title">{msg desc="Header for commit author"}author{/msg}</th>
    <td>
      {call objDetail.person_ data="$author" /}
    </td>
    <td>{$author.time}</td>
  </tr>
  <tr>
    <th class="Metadata-title">{msg desc="Header for committer"}committer{/msg}</th>
    <td>
      {call objDetail.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}
