gitprep / templates / network / graph.html.ep /
491d2d8 10 years ago
1 contributor
96 lines | 3.18kb
<%
  my $user = param('user');
  my $project = param('project');
  my $branch = param('rev1');
  my $rev2_abs = param('rev2_abs');
  my ($remote_user, $remote_project, $remote_branch) = split /\//, $rev2_abs, 3;
  
  my $commits = app->git->get_commits($user, $project, $branch, 100);
  my $remote_commits = app->git->get_commits(
    $remote_user,
    $remote_project,
    $remote_branch,
    100
  );
  
  my $merged_commits_h = {};
  for my $commit (@$commits) {
    my $id = $commit->{id};
    $merged_commits_h->{$id} ||= {};
    $merged_commits_h->{$id}{age} = $commit->{age};
    $merged_commits_h->{$id}{age_string_date_local} = $commit->{age_string_date_local};
    $merged_commits_h->{$id}{title} = $commit->{title};
    $merged_commits_h->{$id}{type} = 'local';
  }
  for my $commit (@$remote_commits) {
    my $id = $commit->{id};
    if ($merged_commits_h->{$id}) {
      $merged_commits_h->{$id}{type} = 'same';
    }
    else {
      $merged_commits_h->{$id} ||= {};
      $merged_commits_h->{$id}{age} = $commit->{age};
      $merged_commits_h->{$id}{age_string_date_local} = $commit->{age_string_date_local};
      $merged_commits_h->{$id}{title} = $commit->{title};
      $merged_commits_h->{$id}{type} = 'remote';
    }
  }
  
  my $merged_commits = [];
  for my $id (
    sort { $merged_commits_h->{$b}{age} <=> $merged_commits_h->{$a}{age}}
    keys %$merged_commits_h)
  {
    my $commit = {%{$merged_commits_h->{$id}}};
    $commit->{id} = $id;
    push @$merged_commits, $commit;
  }
%>

% layout 'common', title => "Network Graph $user/$project/$branch...$rev2_abs";
  %= include 'include/header';
  
  %= javascript begin
    $('document').ready(function () {
      // Scroll to right
      $('#graph').scrollLeft(1000);
    });
  % end
  
  <div class="container">
    %= include '/include/project_header';
    <h3>Graph</h3>
    <div style="margin-bottom:20px">Compare 100 commits.</div>
    <div style="margin-bottom:10px">
      <span style="color:blue;font-size:22px"><%= "$user / $project / $branch" %></span>
    </div>
    <div id="graph" class="well" style="width:800px;overflow:auto;padding-left:10px;padding-right:10px">
      <table>
        % for my $type (qw/local same remote/) {
          <tr style="height:40px">
            % for (my $i = 0; $i < @$merged_commits; $i++) {
              % my $commit = $merged_commits->[$i];
              % my $color
              %   = $type eq 'local' ? 'blue'
              %   : $type eq 'same' ? 'gray'
              %   : 'green';

              % if ($commit->{type} eq $type) {
                <td>
                  <a style="color:<%= $color %>" href="<%= url_for("/$user/$project/commit/$commit->{id}") %>" title="<%= "$commit->{title}($commit->{age_string_date_local})" %>">●</a>
                </td>
              % } else {
                <td></td>
              % }
              <td style="color:#ddd">-</td>
            % }
          </tr>
        % }
      </table>
    </div>
    <div style="margin-bottom:30px">
      <span style="color:green;font-size:22px"><%= "$remote_user / $remote_project / $remote_branch" %></span>
    </div>
  </div>
  
  %= include '/include/footer';