[% INCLUDE inc/syntax_highlight_css.tt2 %]
+
+<h2>Differences</h2>
+
+<div class="differences">
+
[% FOREACH item IN diff %]
-<div class='diff-head'>
- diff --git [%# FIXME %]
- <a href='[% c.uri_for_action("/ref/blob", [Repository.name, Commit.sha1], item.file) %]'>[% item.a %]</a>
- <a href='[% c.uri_for_action("/ref/blob", [Repository.name, Commit.sha1], item.file) %]'>[% item.b %]</a>
+
+<h4 id="diff[% loop.count %]" class='diff-head'>diff --git [%# FIXME %]
+ <a href='[% c.uri_for_action("/ref/blob", [Repository.name, Commit.sha1], item.file) %]' title="Blob">[% item.a %]</a>
+ <a href='[% c.uri_for_action("/ref/blob", [Repository.name, Commit.sha1], item.file) %]' title="Blob">[% item.b %]</a>
+</h4>
+
+
+
+
+<div class='diff-patch'>
+ <pre>[% blobs.${loop.index} %]</pre>
</div>
+
<div class='diff-index'>
- [% item.index %]
-</div>
-<div class='diff-patch'>
- <pre>[% blobs.${loop.index} %]</pre>
+ [% item.index.replace("index","<b>Index</b>") %]
</div>
+
[% END %]
+
+</div>
\ No newline at end of file
+<h2>[% diff_tree.size %] file[% "s" IF diff_tree.size > 1 %] in this commit <span>([%- Commit.sha1 || HEAD -%])</span></h2>
+
<table class='diff-tree listing'>
<thead>
<tr>
- <th>file</th>
- <th>status</th>
- <th>actions</th>
+ <th>File</th>
+ <th>Status</th>
+ <th>Actions</th>
</tr>
</thead>
- <tfoot>
- <tr>
- <td>file</td>
- <td>status</td>
- <td>actions</td>
- </tr>
- </tfoot>
<tbody>
[% FOREACH line IN diff_tree -%]
<tr>
%]
</td>
<td class='action-list'>
- [% IF !line.is_new %]<a href="[% c.uri_for_action("/ref/diff_fancy", [Repository.name, Commit.sha1], line.file.to_path) %]">diff</a>[% END %]
- <a href="[% c.uri_for_action("/ref/blob", [Repository.name, Commit.sha1], line.file.to_path) %]">blob</a>
- [% IF !line.is_new %]<a href="[% c.uri_for("/ref/shortlog", [Repository.name, Commit.sha1], line.file.to_path) %]">history</a>[% END %]
+ [% IF !line.is_new %]<a href="[% c.uri_for_action("/ref/diff_fancy", [Repository.name, Commit.sha1], line.file.to_path) %]#diff[% loop.count %]" title="Difference" class="button diff">diff</a>[% END %]
+ [% IF !line.is_new %]<a href="[% c.uri_for("/ref/shortlog", [Repository.name, Commit.sha1], line.file.to_path) %]" title="History (Short Log)" class="button history">history</a>[% END %]
+ <a href="[% c.uri_for_action("/ref/blob", [Repository.name, Commit.sha1], line.file.to_path) %]" title="Blob" class="button blob">blob</a>
</td>
</tr>
[% END %]
-<div class='commit-message'>
- [%
- short_cmt(Commit.comment) | html;
+<table class="listing">
+<thead>
+<tr>
+ <th>ID (sha1)</th>
+ <th>Last change</th>
+ <th>Message</th>
+ <th>By</th>
+ <th>Role</th>
+</tr>
+</thead>
+<tbody>
+<tr class="invert">
+ <td class='sha1' title='[% Commit.sha1 %]'>[% INCLUDE 'inc/chroma_hash.tt2' sha1 = Commit.sha1.substr(0, 7) %]</td>
+ <td class='time-since'>[% time_since(Commit.authored_time) %]</td>
+ <td rowspan="2">
+ [% Commit.comment | html%]
+ [%
+
INCLUDE '_refs.tt2' object = commit;
- %]
- </div>
+ %]</td>
+ <td class='author'><a href="mailto:[% Commit.author.email %]" title="Email"><img style="float: left; padding-right: 10px" src="[% uri_for_gravatar(Commit.committer.email, 21) %]">[% Commit.author.name | html %]</a></td>
+ <td class='action-list'>Author</td>
+</tr>
+<tr class="invert">
+ <td></td>
+ <td class='time-since'>[% time_since(Commit.committed_time) %]</td>
+ <!-- spanned -->
+ <td class='author'><a href="mailto:[% Commit.committer.email %]" title="Email"><img style="float: left; padding-right: 10px" src="[% uri_for_gravatar(Commit.committer.email, 21) %]">[% Commit.committer.name %]</a></td>
+ <td class='action-list'>Committer</td>
+</tr>
+</tbody>
+</table>
<!-- [% USE dumper; dumper.dump(commit.parents) %] -->
- <dl class='commit-info'>
- <dt>author</dt>
- <dd><img style="float: left; padding-right: 10px" src="[% uri_for_gravatar(Commit.committer.email, 40) %]">[% Commit.author.name | html %] <[% Commit.author.email %]><br/>
- [% time_since(Commit.authored_time) %]</dd>
- <dt style="clear: left">committer</dt>
- <dd><img style="float: left; padding-right: 10px" src="[% uri_for_gravatar(Commit.committer.email, 40) %]">[% Commit.committer.name %] <[% Commit.committer.email %]><br/>
- [% time_since(Commit.committed_time) %]</dd>
- <dt style="clear: left">commit</dt>
- <dd>[% Commit.sha1 %]</dd>
- <dt>tree</dt>
- <dd>[% Commit.tree_sha1 %]
- <span class='action-list'><a href="[% c.uri_for_action("/ref/tree", c.req.captures) %]">tree</a></span>
- </dd>
- [% FOREACH parent IN Commit.parents %]
- <dt>parent</dt>
- <dd>[% parent.sha1 %]
- <span class='action-list'>
- <a href="[% c.uri_for_action('/ref/commit', [Repository.name, parent.sha1]) %]">commit</a>
- <a href="[% c.uri_for_action('/ref/diff_fancy', [Repository.name, parent.sha1]) %]">diff</a>
- </span>
- </dd>
- [% END %]
- </dl>
+
+
+
+<table class="listing summary">
+ <tr>
+ <td class='sha1'>[% INCLUDE 'inc/chroma_hash.tt2' sha1 = Commit.sha1.substr(0, 7), hide_sha1_output = 1 %] <div class="sha1_label">Commit</div></td>
+ <td>[% Commit.sha1 %]</td>
+ <td class='action-list'></td>
+ </tr>
+ <tr>
+ <td class='sha1'>[% INCLUDE 'inc/chroma_hash.tt2' sha1 = Commit.tree_sha1.substr(0, 7), hide_sha1_output = 1 %] <div class="sha1_label">Tree</div></td>
+ <td>[% Commit.tree_sha1 %]</td>
+ <td class='action-list'><a href="[% c.uri_for_action("/ref/tree", c.req.captures) %]" title="Tree" class="button tree">tree</a></td>
+ </tr>
+ [% FOREACH parent IN Commit.parents %]
+ <tr>
+ <td class='sha1'>[% INCLUDE 'inc/chroma_hash.tt2' sha1 = parent.sha1.substr(0, 7), hide_sha1_output = 1 %] <div class="sha1_label">Parent</div></td>
+ <td>[% parent.sha1 %]</td>
+ <td class='action-list'>
+ <a href="[% c.uri_for_action('/ref/commit', [Repository.name, parent.sha1]) %]" title="Commit" class="button commit">commit</a>
+ <a href="[% c.uri_for_action('/ref/diff_fancy', [Repository.name, parent.sha1]) %]" title="Difference" class="button diff">diff</a>
+ </td>
+ </tr>
+[% END %]
+</table>
+
- <pre class='commit-message'>[% Commit.comment | html%]</pre>
[%
# In the case of merge commits there will be no diff tree.
<a href="[% c.uri_for_action('/ref/raw', c.req.captures, c.req.args.to_path(item.file)) %]" title="Raw" class="button raw">raw</a>
<a href="[% c.uri_for_action('/ref/blame', c.req.captures, c.req.args.to_path(item.file)) %]" title="Blame" class="button blame">blame</a>
[% END %]
- <a href="[% c.uri_for_action('/ref/history', c.req.captures, c.req.args.to_path(item.file)) %]" title="Short log" class="button shortlog">Short log</a>
+ <a href="[% c.uri_for_action('/ref/history', c.req.captures, c.req.args.to_path(item.file)) %]" title="History (Short log)" class="button shortlog">Short log</a>
</td>
</tr>
[% END %]
-<div class='content'>
-[% INCLUDE 'inc/log_pager.tt2' %]
- <div id='log'>
- [% FOREACH line IN log_lines %]
- <div class='entry'>
- <div class="message">
- [% message = line.comment | html;
- message.replace("\n", "<br/>") %]
- <div class='chroma-hash'>[% INCLUDE 'inc/chroma_hash.tt2' sha1 = line.sha1 %]</div>
- </div>
- <div class="meta">
- <table class='summary' cellspacing='0' cellpadding='0'>
- <tr><td>author</td><td class='author'>
- <img style="float: left; padding-right: 10px" src="[% uri_for_gravatar(line.author.email, 20) %]">
- [% line.author.name | html %]</td></tr>
- <tr><td>authored time</td><td class='time'>[% time_since(line.authored_time) %]</td></tr>
- [% IF line.author.name != line.committer.name %]
- <tr><td>committer</td><td class='author'>
- <img style="float: left; padding-right: 10px" src="[% uri_for_gravatar(line.author.email, 20) %]">
- [% line.committer.name | html %]
- </td></tr>
- <tr><td>committered time</td><td class='time'>[% line.committed_time %]</td></tr>
- [% END %]
- </table>
- <span class="time-since">[% time_since(line.authored_time) %]</span>
- <div class="action-list">
- <a href="[% c.uri_for_action("/ref/commit", [Repository.name, line.sha1]) %]">commit</a>
- | <a href="[% c.uri_for_action("/ref/diff_fancy", [Repository.name, line.sha1]) %]">commitdiff</a>
- | <a href="[% c.uri_for_action("/ref/tree", [Repository.name, line.sha1]) %]">tree</a>
- </div>
- </div>
- </div>
- [% END %]
- </div>
-[% INCLUDE 'inc/log_pager.tt2' %]
-</div>
+[% INCLUDE 'fragment/repository/shortlog.tt2' longlogformat = 1 %]
\ No newline at end of file
<td class='sha1' title='[% line.sha1 %]'>[% INCLUDE 'inc/chroma_hash.tt2' sha1 = line.sha1.substr(0, 7) %]</td>
<td class='time-since' title='[% line.authored_time %]'>[% time_since(line.authored_time) %]</td>
<td>
- [% short_cmt(line.comment) | html %]
- [% INCLUDE '_refs.tt2' object = line %]
+ [% IF longlogformat %]
+ [% message = line.comment | html; message.replace("\n", "<br/>") %]
+ [% ELSE %]
+ [% short_cmt(line.comment) | html %]
+ [% INCLUDE '_refs.tt2' object = line %]
+ [% END %]
</td>
<td class='author'><img src="[% uri_for_gravatar(line.author.email, 21) %]" />[% line.author.name | html %]</td>
<td class='action-list'>
END;
-%]
-<div class='button sha1_holder[% "_invert" IF loop.count % 2 %]' style="background-color:#[% sha1part %]"></div> <div class="sha1_label">[% sha1part %]</div>
+<div class='button sha1_holder[% "_invert" IF loop.count % 2 %]' style="background-color:#[% sha1part %]"></div>
+[% IF !hide_sha1_output %]
+<div class="sha1_label">[% sha1part %]</div>
+[% END %]
-<div class='path'>
- <a href="[% c.uri_for_action("/ref/tree", [Repository.name, Commit.sha1]) %]">[% Repository.name %]</a>
+ <a href="[% c.uri_for_action("/ref/tree", [Repository.name, Commit.sha1]) %]">[% Repository.name %] (tree)</a>
[% FOREACH part IN filename.split('/') %]
[% path = loop.first ? part : path _ '/' _ part %]
/ <a href="[% action_name = loop.last ? '/ref/blob' : '/ref/tree'; c.uri_for_action(action_name, [Repository.name,Commit.sha1], path.to_path ) %]">[% part %]</a>
[% END %]
-</div>
+
[% INCLUDE inc/syntax_highlight_css.tt2 %]
-<div class='content'>
+<h3>[% INCLUDE 'nav/path.tt2' %]</h3>
+
[% IF object.type == 'commit' %]
<div class='commit-message'>
[% short_cmt(head.comment) %]
</div>
[% END %]
- [% INCLUDE 'nav/path.tt2' %]
- <div>
- <pre class='blob'>[% subinclude('/fragment/ref/blob', c.req.captures, c.req.args.to_path) %]</pre>
- </div>
-</div>
+
+ <pre class='blob'>[% subinclude('/fragment/ref/blob', c.req.captures, c.req.args.to_path) | html %]</pre>
+
+
+
\ No newline at end of file
-<div class='content'>
- <div class='commit-message'>
- [% short_cmt(Commit.comment) | html %]
- </div>
+<table class='listing'>
+<thead>
+<tr>
+ <th>ID (sha1)</th>
+ <th>Last change</th>
+ <th>Message</th>
+ <th>By</th>
+</tr>
+</thead>
+<tbody>
+<tr class="invert">
+ <td class='sha1' title='[% Commit.sha1 %]'>[% INCLUDE 'inc/chroma_hash.tt2' sha1 = Commit.sha1.substr(0, 7) %]</td>
+ <td class='time-since' title='[% Commit.authored_time %]'>[% time_since(Commit.authored_time) %]</td>
+ <td>[% short_cmt(Commit.comment) | html %]</td>
+ <td class='author'><img src="[% uri_for_gravatar(Commit.committer.email, 21) %]" />[% Commit.author.name | html %]</td>
+</tr>
+</tbody>
+</table>
- <div style="padding-bottom: 20px" class='author'>
- <img style="float: left; padding-right: 10px" src="[% uri_for_gravatar(Commit.committer.email, 40) %]">[% Commit.author.name | html %] <br />[% time_since(Commit.authored_time) %]
- </div>
[%
# What I really want is @{ c.req.args }
subinclude('/fragment/' _ c.action, c.req.captures, c.req.args.0 c.req.args.1)
%]
-</div>
a img{
border:0;
}
-div{
- aborder:1px solid red;
-}
/* structure */
.sub_holder{
width:970px;
margin:0 auto;
- aborder:1px solid red;
text-align:left;
}
-#header{
+#header_holder{
margin-top:20px;
- aheight:300px;
}
+#header{
+ height:60px;
+}
+
#content_holder{
background:transparent url(/static/i/bg_content.png) repeat-y center center;
- aborder:1px solid olive;
}
#content{
min-height:200px;
background:transparent url(/static/i/bg_bottom.png) no-repeat center bottom;
}
#content_inner{
- aborder:1px solid blue;
padding-bottom:30px;
background:transparent url(/static/i/bg_top.png) no-repeat;
}
/* nav tabs */
#nav_logs{
+ width:80%;
clear:both;
float:right;
- margin:-18px 50px 0 50px;
+ margin:-5px 50px 0 0;
+}
+#nav_logs ul{
+ margin:0;
+ padding:0;
}
#nav_logs li{
display:block;
- float:left;
+ float:right;
list-style:none;
margin:0;
padding:0;
h1 a:hover{
color:#EAF2F5;
}
+h2{
+ font-size:1.85em;
+ font-weight:normal;
+ color:#666;
+ margin:30px 15px 20px;
+}
+h2 span{
+ color:#ccc;
+}
+h3{
+ margin:0;
+ color:#fff;
+ padding:9px 5px 9px 10px;
+ font-size:1em;
+}
+h3 a{
+ color:#ffffff;
+}
+h4 a{
+ color:#ffffff;
+}
+h4 a:hover{
+ color:#EAF2F5;
+}
p,
td,
a{
float:left;
vertical-align:middle;
margin-right:8px;
- text-indent:-999999999999px;
+ text-indent:-999999px;
width:21px;
height:21px;
+ outline:none;
}
-.commit{
+a.commit{
background:transparent url(/static/i/icons/commit.png) no-repeat;
}
-.diff{
+a.diff{
background:transparent url(/static/i/icons/diff.png) no-repeat;
}
-.tree{
+a.tree{
background:transparent url(/static/i/icons/tree.png) no-repeat;
}
-.shortlog{
+a.shortlog{
background:transparent url(/static/i/icons/shortlog.png) no-repeat;
}
-.longlog{
+a.longlog{
background:transparent url(/static/i/icons/longlog.png) no-repeat;
}
-.blob{
+a.blob{
background:transparent url(/static/i/icons/blob.png) no-repeat;
}
-.blame{
+a.blame{
background:transparent url(/static/i/icons/blame.png) no-repeat;
}
-.history{
+a.history{
background:transparent url(/static/i/icons/history.png) no-repeat;
}
-.raw{
+a.raw{
background:transparent url(/static/i/icons/raw.png) no-repeat;
}
.sha1_holder{
}
+a.rss_logo {
+ float: right;
+ padding: 3px 0px;
+ width: 35px;
+ line-height: 10px;
+ border: 1px solid;
+ border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e;
+ color: #ffffff;
+ background-color: #ff6600;
+ font-weight: bold;
+ font-family: sans-serif;
+ font-size: 70%;
+ font-style: normal;
+ text-align: center;
+ text-decoration: none;
+ margin: 3px;
+}
+
+a.rss_logo:hover {
+ background-color: #ee5500;
+}
+
+
+
/* paging */
.pager{
width:100%;
th a{
color:#fff;
}
+.summary tr{
+ background-color:#FAFAFA;
+ border-bottom:1px solid #fff;
+}
+.summary td{
+ vertical-align:middle !important;
+}
tr.invert{
background-color:#f0f0f0;
}
border-collapse:collapse;
}
.listing td{
+ vertical-align:top;
padding:9px 5px 9px 10px;
}
.action-list{
width:120px;
-}
\ No newline at end of file
+}
+
+.diff-tree{
+ background-color:#f0f0f0;
+}
+.diff-tree th{
+ background-color:#666;
+}
+.diff-tree tr{
+ border-bottom:1px solid #fff;
+}
+.diff-tree td{
+ padding:6px 5px 4px 10px;
+}
+.differences{
+ margin-top:0;
+ padding:0px 15px;
+}
+.differences pre{
+ line-height:140%;
+ font-size:12px;
+ overflow:auto;
+ margin:0;
+ padding:10px;
+ border:1px solid #ddd;
+ background-color:#f0f0f0;
+}
+.diff-head{
+ background-color:#666;
+ color:#fff;
+ margin:10px 0 0 0 !important;
+ border:1px solid #ddd;
+ border-bottom:none;
+ font-family: monospace;
+ padding:10px;
+ font-size:13px;
+}
+.diff-index {
+ margin:0 0 30px 0;
+ border:1px solid #ddd;
+ border-top:none;
+ background-color:#ccc;
+ padding:5px 10px;
+}
+
+
+/* /blame */
+#blame pre, #blame tt {
+ margin: 0;
+ font-size: 0.9em;
+}
+#blame .commit-info {
+}
+#blame .lineno {
+ text-align: right;
+ padding: 0 8px;
+}
+#blame a {
+ text-decoration: none;
+}
+#blame {
+ overflow-x: scroll;
+}
+#blame tr.alt {
+ background-color: #f7f7f7;
+}
+#blame tbody tr:hover {
+ background-color: #fefeaa;
+}
+#blame td {
+ padding: 0 0.2em;
+}
+#blame td.lineno {
+ background-color: #eee;
+}
+#blame td.date, #blame td.author, #blame td.commit-info {
+}
+#blame tbody td.data {
+ padding-left: 5px;
+ background-color: #333;
+ color: #ddd;
+}
+
+/* /blob */
+pre.blob {
+ background-color: #333;
+ color: #ddd;
+ border-left: solid 3px #c33;
+ padding: 5px;
+ padding-left: 15px;
+ margin: 20px 15px 20px;
+ overflow:auto;
+}
+
+/* /blobdiff etc */
+
span.Keyword {
- color: #777;
+ color: #aaa;
font-weight: bold;
}
span.DataType {
+ background-color:#F3E6FF;
color: purple;
}
span.Normal {
- color: gray;
+
}
span.String {
- color: green;
+ background-color:#CCF5CC;
+ padding:2px 0;
+ color: #006F00;
}
span.Others {
- color: red;
+ background-color:#F3CCCC;
+ padding:2px 0;
+ color: #750000;
}
<body>
-<div id="header">
+<div id="header_holder">
<div class="sub_holder">
- <a href="[% c.uri_for('/') %]" id="logo"><img src="[% c.uri_for('/static/i/logo.png') %]" alt="Gitalist" /></a>
-
- <div class="search">
- [% IF Repository; INCLUDE 'nav/search.tt2'; ELSE; %]
-
- <form method="get" action="[% c.uri_for_action('/search') %]" enctype="application/x-www-form-urlencoded">
- <p class="projsearch">Search:
- <input type="text" name="s" value="[% search_text %]" />
- </p>
- </form>
- [% END %]
+ <div id="header">
+ <a href="[% c.uri_for('/') %]" id="logo"><img src="[% c.uri_for('/static/i/logo.png') %]" alt="Gitalist" /></a>
+
+ <div class="search">
+ [% IF Repository; INCLUDE 'nav/search.tt2'; ELSE; %]
+
+ <form method="get" action="[% c.uri_for_action('/search') %]" enctype="application/x-www-form-urlencoded">
+ <p class="projsearch">Search:
+ <input type="text" name="s" value="[% search_text %]" />
+ </p>
+ </form>
+ [% END %]
+ </div>
</div>
<div id="nav_logs" [% 'style="visibility:hidden"' IF c.action.name == "index" %]>
<ul>
[% IF c.req.captures.size == 1; SET path = 'repository'; ELSE; SET path = 'ref'; END %]
- <li [% 'class="selected"' IF c.action.name.match('shortlog') %]><a href="[% c.uri_for_action('/' _ path _ '/shortlog', c.req.captures) %]" id="log_short">Short log</a></li>
<li [% 'class="selected"' IF c.action.name.match('longlog') %]><a href="[% c.uri_for_action('/' _ path _ '/longlog', c.req.captures) %]" id="log_full">Long log</a></li>
+ <li [% 'class="selected"' IF c.action.name.match('shortlog') %]><a href="[% c.uri_for_action('/' _ path _ '/shortlog', c.req.captures) %]" id="log_short">Short log</a></li>
</ul>
</div>
/
- [% c.action.name.replace("_"," ").replace("log", " log").replace("index","Repositories") FILTER ucfirst %]
+ [% c.action.name.replace("_"," ").replace("log", " log").replace("fancy","").replace("index","Repositories") FILTER ucfirst %]
[% USE Dumper %]
<pre>
[% Repository.path %]
- [% Dumper.dump(c.req.action) %]
+ [% Dumper.dump(c.action.name) %]
</pre>
</div>