Started on making everything a bit less bleh.
broquaint [Mon, 2 Nov 2009 16:21:10 +0000 (16:21 +0000)]
Switched HTML5 in the templates.
Switched from hand-written links to c.uri_for.
Added the Blueprint CSS framework.

21 files changed:
lib/Gitalist/Controller/Root.pm
lib/Gitalist/Model/Git.pm
lib/Gitalist/View/Default.pm
root/static/css/blueprint/ie.css [new file with mode: 0644]
root/static/css/blueprint/print.css [new file with mode: 0644]
root/static/css/blueprint/screen.css [new file with mode: 0644]
root/static/css/site.css
templates/_diff.tt2
templates/_diff_tree.tt2
templates/_heads.tt2
templates/_log_pager.tt2
templates/_shortlog.tt2
templates/_tree.tt2
templates/blob.tt2
templates/commit.tt2
templates/default.tt2
templates/index.tt2
templates/log.tt2
templates/search.tt2
templates/summary.tt2
templates/tree.tt2

index f3e1ae5..caaecbe 100644 (file)
@@ -30,7 +30,8 @@ use IO::Capture::Stdout;
 
 =head2 run_gitweb
 
-The main shim around C<gitweb.pm>.
+The C<gitweb> shim. It should now only be explicitly accessible by
+modifying the URL.
 
 =cut
 
@@ -554,11 +555,25 @@ Attempt to render a view, if needed.
 sub end : ActionClass('RenderView') {
   # Give every view the current HEAD.
   $_[1]->stash->{HEAD} = $_[1]->model('Git')->head_hash;
+  
+  # XXX Move this into a plugin!
+  use DateTime::Format::Human::Duration;
+  $_[1]->stash->{time_since} = sub {
+    my($dt, $now) = ($_[0], DateTime->now);
+
+    my($age) = $dt < (DateTime->now - DateTime::Duration->new(days=>12))
+      ? $dt->ymd
+      : DateTime::Format::Human::Duration->new->format_duration($now - $dt)
+          =~ /^(?:.*?weeks?, )?(\d+ [^\d]+)(?:,|$) /;
+
+    
+    return $age;
+  };
 }
 
 =head1 AUTHOR
 
-Dan Brook,,,
+Dan Brook
 
 =head1 LICENSE
 
index 1a27077..4579f60 100644 (file)
@@ -610,7 +610,6 @@ sub list_revs {
     );
   }
 
-  $DB::single=1;
   my $output = $self->run_cmd_in($args{project} || $self->project, 'rev-list',
     '--header',
     (defined $args{ count  } ? "--max-count=$args{count}" : ()),
index 2c65caa..6d8c404 100644 (file)
@@ -4,7 +4,6 @@ use Gitalist; # ->path_to
 use namespace::autoclean;
 
 extends 'Catalyst::View::TT';
-with 'Catalyst::View::ContentNegotiation::XHTML';
 
 use Template::Plugin::Cycle;
 
diff --git a/root/static/css/blueprint/ie.css b/root/static/css/blueprint/ie.css
new file mode 100644 (file)
index 0000000..f336f0e
--- /dev/null
@@ -0,0 +1,35 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 0.9
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* ie.css */
+body {text-align:center;}
+.container {text-align:left;}
+* html .column, * html div.span-1, * html div.span-2, * html div.span-3, * html div.span-4, * html div.span-5, * html div.span-6, * html div.span-7, * html div.span-8, * html div.span-9, * html div.span-10, * html div.span-11, * html div.span-12, * html div.span-13, * html div.span-14, * html div.span-15, * html div.span-16, * html div.span-17, * html div.span-18, * html div.span-19, * html div.span-20, * html div.span-21, * html div.span-22, * html div.span-23, * html div.span-24 {display:inline;overflow-x:hidden;}
+* html legend {margin:0px -8px 16px 0;padding:0;}
+sup {vertical-align:text-top;}
+sub {vertical-align:text-bottom;}
+html>body p code {*white-space:normal;}
+hr {margin:-8px auto 11px;}
+img {-ms-interpolation-mode:bicubic;}
+.clearfix, .container {display:inline-block;}
+* html .clearfix, * html .container {height:1%;}
+fieldset {padding-top:0;}
+textarea {overflow:auto;}
+input.text, input.title, textarea {background-color:#fff;border:1px solid #bbb;}
+input.text:focus, input.title:focus {border-color:#666;}
+input.text, input.title, textarea, select {margin:0.5em 0;}
+input.checkbox, input.radio {position:relative;top:.25em;}
+form.inline div, form.inline p {vertical-align:middle;}
+form.inline label {position:relative;top:-0.25em;}
+form.inline input.checkbox, form.inline input.radio, form.inline input.button, form.inline button {margin:0.5em 0;}
+button, input.button {position:relative;top:0.25em;}
\ No newline at end of file
diff --git a/root/static/css/blueprint/print.css b/root/static/css/blueprint/print.css
new file mode 100644 (file)
index 0000000..fdb8220
--- /dev/null
@@ -0,0 +1,29 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 0.9
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* print.css */
+body {line-height:1.5;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;color:#000;background:none;font-size:10pt;}
+.container {background:none;}
+hr {background:#ccc;color:#ccc;width:100%;height:2px;margin:2em 0;padding:0;border:none;}
+hr.space {background:#fff;color:#fff;visibility:hidden;}
+h1, h2, h3, h4, h5, h6 {font-family:"Helvetica Neue", Arial, "Lucida Grande", sans-serif;}
+code {font:.9em "Courier New", Monaco, Courier, monospace;}
+a img {border:none;}
+p img.top {margin-top:0;}
+blockquote {margin:1.5em;padding:1em;font-style:italic;font-size:.9em;}
+.small {font-size:.9em;}
+.large {font-size:1.1em;}
+.quiet {color:#999;}
+.hide {display:none;}
+a:link, a:visited {background:transparent;font-weight:700;text-decoration:underline;}
+a:link:after, a:visited:after {content:" (" attr(href) ")";font-size:90%;}
\ No newline at end of file
diff --git a/root/static/css/blueprint/screen.css b/root/static/css/blueprint/screen.css
new file mode 100644 (file)
index 0000000..2c2b328
--- /dev/null
@@ -0,0 +1,257 @@
+/* -----------------------------------------------------------------------
+
+
+ Blueprint CSS Framework 0.9
+ http://blueprintcss.org
+
+   * Copyright (c) 2007-Present. See LICENSE for more info.
+   * See README for instructions on how to use Blueprint.
+   * For credits and origins, see AUTHORS.
+   * This is a compressed file. See the sources in the 'src' directory.
+
+----------------------------------------------------------------------- */
+
+/* reset.css */
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
+body {line-height:1.5;}
+table {border-collapse:separate;border-spacing:0;}
+caption, th, td {text-align:left;font-weight:normal;}
+table, td, th {vertical-align:middle;}
+blockquote:before, blockquote:after, q:before, q:after {content:"";}
+blockquote, q {quotes:"" "";}
+a img {border:none;}
+
+/* typography.css */
+html {font-size:100.01%;}
+body {font-size:75%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
+h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
+h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
+h2 {font-size:2em;margin-bottom:0.75em;}
+h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
+h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
+h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
+h6 {font-size:1em;font-weight:bold;}
+h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
+p {margin:0 0 1.5em;}
+p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
+p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
+a:focus, a:hover {color:#000;}
+a {color:#009;text-decoration:underline;}
+blockquote {margin:1.5em;color:#666;font-style:italic;}
+strong {font-weight:bold;}
+em, dfn {font-style:italic;}
+dfn {font-weight:bold;}
+sup, sub {line-height:0;}
+abbr, acronym {border-bottom:1px dotted #666;}
+address {margin:0 0 1.5em;font-style:italic;}
+del {color:#666;}
+pre {margin:1.5em 0;white-space:pre;}
+pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
+li ul, li ol {margin:0;}
+ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;}
+ul {list-style-type:disc;}
+ol {list-style-type:decimal;}
+dl {margin:0 0 1.5em 0;}
+dl dt {font-weight:bold;}
+dd {margin-left:1.5em;}
+table {margin-bottom:1.4em;width:100%;}
+th {font-weight:bold;}
+thead th {background:#c3d9ff;}
+th, td, caption {padding:4px 10px 4px 5px;}
+tr.even td {background:#e5ecf9;}
+tfoot {font-style:italic;}
+caption {background:#eee;}
+.small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
+.large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
+.hide {display:none;}
+.quiet {color:#666;}
+.loud {color:#000;}
+.highlight {background:#ff0;}
+.added {background:#060;color:#fff;}
+.removed {background:#900;color:#fff;}
+.first {margin-left:0;padding-left:0;}
+.last {margin-right:0;padding-right:0;}
+.top {margin-top:0;padding-top:0;}
+.bottom {margin-bottom:0;padding-bottom:0;}
+
+/* forms.css */
+label {font-weight:bold;}
+fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
+legend {font-weight:bold;font-size:1.2em;}
+input[type=text], input[type=password], input.text, input.title, textarea, select {background-color:#fff;border:1px solid #bbb;}
+input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus, select:focus {border-color:#666;}
+input[type=text], input[type=password], input.text, input.title, textarea, select {margin:0.5em 0;}
+input.text, input.title {width:300px;padding:5px;}
+input.title {font-size:1.5em;}
+textarea {width:390px;height:250px;padding:5px;}
+input[type=checkbox], input[type=radio], input.checkbox, input.radio {position:relative;top:.25em;}
+form.inline {line-height:3;}
+form.inline p {margin-bottom:0;}
+.error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
+.error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
+.notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
+.success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
+.error a {color:#8a1f11;}
+.notice a {color:#514721;}
+.success a {color:#264409;}
+
+/* grid.css */
+.container {width:950px;margin:0 auto;}
+.showgrid {background:url(src/grid.png);}
+.column, div.span-1, div.span-2, div.span-3, div.span-4, div.span-5, div.span-6, div.span-7, div.span-8, div.span-9, div.span-10, div.span-11, div.span-12, div.span-13, div.span-14, div.span-15, div.span-16, div.span-17, div.span-18, div.span-19, div.span-20, div.span-21, div.span-22, div.span-23, div.span-24 {float:left;margin-right:10px;}
+.last, div.last {margin-right:0;}
+.span-1 {width:30px;}
+.span-2 {width:70px;}
+.span-3 {width:110px;}
+.span-4 {width:150px;}
+.span-5 {width:190px;}
+.span-6 {width:230px;}
+.span-7 {width:270px;}
+.span-8 {width:310px;}
+.span-9 {width:350px;}
+.span-10 {width:390px;}
+.span-11 {width:430px;}
+.span-12 {width:470px;}
+.span-13 {width:510px;}
+.span-14 {width:550px;}
+.span-15 {width:590px;}
+.span-16 {width:630px;}
+.span-17 {width:670px;}
+.span-18 {width:710px;}
+.span-19 {width:750px;}
+.span-20 {width:790px;}
+.span-21 {width:830px;}
+.span-22 {width:870px;}
+.span-23 {width:910px;}
+.span-24, div.span-24 {width:950px;margin-right:0;}
+input.span-1, textarea.span-1, input.span-2, textarea.span-2, input.span-3, textarea.span-3, input.span-4, textarea.span-4, input.span-5, textarea.span-5, input.span-6, textarea.span-6, input.span-7, textarea.span-7, input.span-8, textarea.span-8, input.span-9, textarea.span-9, input.span-10, textarea.span-10, input.span-11, textarea.span-11, input.span-12, textarea.span-12, input.span-13, textarea.span-13, input.span-14, textarea.span-14, input.span-15, textarea.span-15, input.span-16, textarea.span-16, input.span-17, textarea.span-17, input.span-18, textarea.span-18, input.span-19, textarea.span-19, input.span-20, textarea.span-20, input.span-21, textarea.span-21, input.span-22, textarea.span-22, input.span-23, textarea.span-23, input.span-24, textarea.span-24 {border-left-width:1px!important;border-right-width:1px!important;padding-left:5px!important;padding-right:5px!important;}
+input.span-1, textarea.span-1 {width:18px!important;}
+input.span-2, textarea.span-2 {width:58px!important;}
+input.span-3, textarea.span-3 {width:98px!important;}
+input.span-4, textarea.span-4 {width:138px!important;}
+input.span-5, textarea.span-5 {width:178px!important;}
+input.span-6, textarea.span-6 {width:218px!important;}
+input.span-7, textarea.span-7 {width:258px!important;}
+input.span-8, textarea.span-8 {width:298px!important;}
+input.span-9, textarea.span-9 {width:338px!important;}
+input.span-10, textarea.span-10 {width:378px!important;}
+input.span-11, textarea.span-11 {width:418px!important;}
+input.span-12, textarea.span-12 {width:458px!important;}
+input.span-13, textarea.span-13 {width:498px!important;}
+input.span-14, textarea.span-14 {width:538px!important;}
+input.span-15, textarea.span-15 {width:578px!important;}
+input.span-16, textarea.span-16 {width:618px!important;}
+input.span-17, textarea.span-17 {width:658px!important;}
+input.span-18, textarea.span-18 {width:698px!important;}
+input.span-19, textarea.span-19 {width:738px!important;}
+input.span-20, textarea.span-20 {width:778px!important;}
+input.span-21, textarea.span-21 {width:818px!important;}
+input.span-22, textarea.span-22 {width:858px!important;}
+input.span-23, textarea.span-23 {width:898px!important;}
+input.span-24, textarea.span-24 {width:938px!important;}
+.append-1 {padding-right:40px;}
+.append-2 {padding-right:80px;}
+.append-3 {padding-right:120px;}
+.append-4 {padding-right:160px;}
+.append-5 {padding-right:200px;}
+.append-6 {padding-right:240px;}
+.append-7 {padding-right:280px;}
+.append-8 {padding-right:320px;}
+.append-9 {padding-right:360px;}
+.append-10 {padding-right:400px;}
+.append-11 {padding-right:440px;}
+.append-12 {padding-right:480px;}
+.append-13 {padding-right:520px;}
+.append-14 {padding-right:560px;}
+.append-15 {padding-right:600px;}
+.append-16 {padding-right:640px;}
+.append-17 {padding-right:680px;}
+.append-18 {padding-right:720px;}
+.append-19 {padding-right:760px;}
+.append-20 {padding-right:800px;}
+.append-21 {padding-right:840px;}
+.append-22 {padding-right:880px;}
+.append-23 {padding-right:920px;}
+.prepend-1 {padding-left:40px;}
+.prepend-2 {padding-left:80px;}
+.prepend-3 {padding-left:120px;}
+.prepend-4 {padding-left:160px;}
+.prepend-5 {padding-left:200px;}
+.prepend-6 {padding-left:240px;}
+.prepend-7 {padding-left:280px;}
+.prepend-8 {padding-left:320px;}
+.prepend-9 {padding-left:360px;}
+.prepend-10 {padding-left:400px;}
+.prepend-11 {padding-left:440px;}
+.prepend-12 {padding-left:480px;}
+.prepend-13 {padding-left:520px;}
+.prepend-14 {padding-left:560px;}
+.prepend-15 {padding-left:600px;}
+.prepend-16 {padding-left:640px;}
+.prepend-17 {padding-left:680px;}
+.prepend-18 {padding-left:720px;}
+.prepend-19 {padding-left:760px;}
+.prepend-20 {padding-left:800px;}
+.prepend-21 {padding-left:840px;}
+.prepend-22 {padding-left:880px;}
+.prepend-23 {padding-left:920px;}
+div.border {padding-right:4px;margin-right:5px;border-right:1px solid #eee;}
+div.colborder {padding-right:24px;margin-right:25px;border-right:1px solid #eee;}
+.pull-1 {margin-left:-40px;}
+.pull-2 {margin-left:-80px;}
+.pull-3 {margin-left:-120px;}
+.pull-4 {margin-left:-160px;}
+.pull-5 {margin-left:-200px;}
+.pull-6 {margin-left:-240px;}
+.pull-7 {margin-left:-280px;}
+.pull-8 {margin-left:-320px;}
+.pull-9 {margin-left:-360px;}
+.pull-10 {margin-left:-400px;}
+.pull-11 {margin-left:-440px;}
+.pull-12 {margin-left:-480px;}
+.pull-13 {margin-left:-520px;}
+.pull-14 {margin-left:-560px;}
+.pull-15 {margin-left:-600px;}
+.pull-16 {margin-left:-640px;}
+.pull-17 {margin-left:-680px;}
+.pull-18 {margin-left:-720px;}
+.pull-19 {margin-left:-760px;}
+.pull-20 {margin-left:-800px;}
+.pull-21 {margin-left:-840px;}
+.pull-22 {margin-left:-880px;}
+.pull-23 {margin-left:-920px;}
+.pull-24 {margin-left:-960px;}
+.pull-1, .pull-2, .pull-3, .pull-4, .pull-5, .pull-6, .pull-7, .pull-8, .pull-9, .pull-10, .pull-11, .pull-12, .pull-13, .pull-14, .pull-15, .pull-16, .pull-17, .pull-18, .pull-19, .pull-20, .pull-21, .pull-22, .pull-23, .pull-24 {float:left;position:relative;}
+.push-1 {margin:0 -40px 1.5em 40px;}
+.push-2 {margin:0 -80px 1.5em 80px;}
+.push-3 {margin:0 -120px 1.5em 120px;}
+.push-4 {margin:0 -160px 1.5em 160px;}
+.push-5 {margin:0 -200px 1.5em 200px;}
+.push-6 {margin:0 -240px 1.5em 240px;}
+.push-7 {margin:0 -280px 1.5em 280px;}
+.push-8 {margin:0 -320px 1.5em 320px;}
+.push-9 {margin:0 -360px 1.5em 360px;}
+.push-10 {margin:0 -400px 1.5em 400px;}
+.push-11 {margin:0 -440px 1.5em 440px;}
+.push-12 {margin:0 -480px 1.5em 480px;}
+.push-13 {margin:0 -520px 1.5em 520px;}
+.push-14 {margin:0 -560px 1.5em 560px;}
+.push-15 {margin:0 -600px 1.5em 600px;}
+.push-16 {margin:0 -640px 1.5em 640px;}
+.push-17 {margin:0 -680px 1.5em 680px;}
+.push-18 {margin:0 -720px 1.5em 720px;}
+.push-19 {margin:0 -760px 1.5em 760px;}
+.push-20 {margin:0 -800px 1.5em 800px;}
+.push-21 {margin:0 -840px 1.5em 840px;}
+.push-22 {margin:0 -880px 1.5em 880px;}
+.push-23 {margin:0 -920px 1.5em 920px;}
+.push-24 {margin:0 -960px 1.5em 960px;}
+.push-1, .push-2, .push-3, .push-4, .push-5, .push-6, .push-7, .push-8, .push-9, .push-10, .push-11, .push-12, .push-13, .push-14, .push-15, .push-16, .push-17, .push-18, .push-19, .push-20, .push-21, .push-22, .push-23, .push-24 {float:right;position:relative;}
+.prepend-top {margin-top:1.5em;}
+.append-bottom {margin-bottom:1.5em;}
+.box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
+hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
+hr.space {background:#fff;color:#fff;visibility:hidden;}
+.clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
+.clearfix, .container {display:block;}
+.clear {clear:both;}
\ No newline at end of file
index f62959e..8922c7f 100644 (file)
@@ -1,5 +1,4 @@
-/* XXX A good framework would be handy */
-/* XXX Also colours. Lots of colours. */
+/* XXX Colours. Lots of colours. */
 #body {
   margin: 1em;
 }
@@ -51,6 +50,9 @@ div.commit-message {
 .heads .current {
   text-decoration: underline;
 }
+table.heads {
+       width: 50%;
+}
 
 /* /blob */
 pre.blob {
index 7450a77..a2c93df 100644 (file)
@@ -2,8 +2,8 @@
 [% FOREACH item IN diff %]
 <div class='diff-head'>
  diff --git
- <a href='/blob?p=[% project %];f=[% item.file %];h=[% item.src %]'>[% item.a %]</a>
- <a href='/blob?p=[% project %];f=[% item.file %];h=[% item.dst %]'>[% item.b %]</a>
+ <a href='[% c.uri_for("blob", {h=item.src, f=item.file}) %]'>[% item.a %]</a>
+ <a href='[% c.uri_for("blob", {h=item.dst, f=item.file}) %]'>[% item.b %]</a>
 </div>
 <div class='diff-index'>
  [% item.index %]
index 7544ab4..fc7a91f 100644 (file)
@@ -25,9 +25,9 @@
     %]
    </td>
    <td class='action-list'>
-     [% IF !line.is_new %]<a href="/blobdiff?p=[% project %];f=[% line.file %];h=[% commit.sha1 %];hp=[% commit.parent_sha1 %]">diff</a>[% END %]
-     <a href="/blob?p=[% project %];f=[% line.file %];h=[% line.sha1 %];hb=[% commit.sha1 %]">blob</a>
-     [% IF !line.is_new %]<a href="/shortlog?p=[% project %];f=[% line.file %];hb=[% commit.sha1 %]">history</a>[% END %]
+     [% IF !line.is_new %]<a href="[% c.uri_for("blobdiff", {hp=commit.parent_sha1, h=commit.sha1, f=line.file}) %]">diff</a>[% END %]
+     <a href="[% c.uri_for("blob", {h=line.sha1, hb=commit.sha1, f=line.file}) %]">blob</a>
+     [% IF !line.is_new %]<a href="[% c.uri_for("shortlog", {hb=commit.sha1, f=line.file}) %]">history</a>[% END %]
    </td>
   </tr>
   [% END %]
index c8f4e61..307f95a 100644 (file)
  <tbody>
  [% FOREACH head IN heads %]
   <tr>
-   <td>[% head.last_change %]</td>
+   <td>[% time_since(head.last_change) %]</td>
    <td class='head[% head.sha1 == HEAD ? ' current' : '' %]'>[% head.name %]</td>
    <td class='action-list'>
-     <a href="/shortlog?p=[% project %];h=[% head.sha1 %]">shortlog</a>
-     <a href="/log?p=[% project %];h=[% head.sha1 %]">log</a>
-     <a href="/tree?p=[% project %];h=[% head.sha1 %];hb=[% head.name %]">tree</a>
+     <a href="[% c.uri_for("shortlog", {h=head.sha1}) %]">shortlog</a>
+     <a href="[% c.uri_for("log", {h=head.sha1}) %]">log</a>
+     <a href="[% c.uri_for("tree", {h=head.sha1, hb=head.name}) %]">tree</a>
    </td>
   </tr>
  [% END %]
index 3c4c1d9..8086e8f 100644 (file)
@@ -1,9 +1,9 @@
 <div class='pager'>
- <a href='/[% action %]?p=[% project %];h=[% HEAD %]'>HEAD</a>
+ <a href='[% c.uri_for(action, {h=HEAD}) %]'>HEAD</a>
  [% IF log_lines.size == 50 %]
- <a href='/[% action %]?p=[% project %];h=[% commit.sha1 %];pg=[% page + 1 %]'>next</a>
+ <a href='[% c.uri_for(action, {pg=page + 1, h=commit.sha1}) %]'>next</a>
  [% END %]
  [% IF log_lines.first.sha1 != commit.sha1 %]
- <a href='/[% action %]?p=[% project %];h=[% commit.sha1 %];pg=[% page - 1 %]'>prev</a>
+ <a href='[% c.uri_for(action, {pg=page - 1, h=commit.sha1}) %]'>prev</a>
  [% END %]
 </div>
index 329dcd1..d862829 100644 (file)
  [% FOREACH line IN log_lines %]
   <tr>
    <td>[% line.sha1.substr(0, 6) %]</td>
-   <td>[% line.authored_time %]</td>
+   <td>[% time_since(line.authored_time) %]</td>
    <td>[% line.author.name | html %]</td>
    <td>
-    [% line.comment.substr(0, 50) | html %]
+    [% # XXX This needs to be moved into a Template::Plugin or some such.
+       cmt = line.comment.split("\n").0;
+       (cmt.length > 80 ? cmt.substr(0, 80) _ '...' : cmt) | html %]
     <span class='refs'>
      [% FOREACH ref IN refs.${line.sha1} %]
      <span class='[% ref.search('^remotes/') ? 'remote' : 'head' %]'>
-      <a href='/shortlog?p=[% project %];h=refs/[% ref %]'>[% ref.replace('^(remote|head)s/', '') %]</a>
+      <a href='[% c.uri_for("shortlog", {h='refs/' _ ref}) %]'>[% ref.replace('^(remote|head)s/', '') %]</a>
      </span>
      [% END %]
     </span>
    </td>
    <td class='action-list'>
-     <a href="/commit?p=[% project %];h=[% line.sha1 %]">commit</a>
-     <a href="/commitdiff?p=[% project %];h=[% line.sha1 %]">commitdiff</a>
-     <a href="/tree?p=[% project %];h=[% line.sha1 %];hb=[% line.tree_sha1 %]">tree</a>
+     <a href="[% c.uri_for("commit", {h=line.sha1}) %]">commit</a>
+     <a href="[% c.uri_for("commitdiff", {h=line.sha1}) %]">commitdiff</a>
+     <a href="[% c.uri_for("tree", {h=line.sha1, hb=line.tree_sha1}) %]">tree</a>
    </td>
   </tr>
  [% END %]
index f7f1bb1..78c9b01 100644 (file)
    <td>[% item.modestr %]</td>
    [% theact = item.type == 'tree' ? 'tree' : 'blob' -%]
    <td class='filename'>
-    <a href="/[% theact %]?p=[% project %];h=[% item.object %];hb=[% commit.sha1 %];f=[% IF path; path _ '/'; END; item.file %]">[% item.file %]</a>
+    <a href="[% c.uri_for(theact, {h=item.object, hb=commit.sha1, f=(path ? path _ '/' _ item.file : item.file)}) %]">[% item.file %]</a>
    </td>
    <td class='action-list'>
-     <a href="/[% theact %]?p=[% project %];h=[% item.object %];hb=[% commit.sha1 %];f=[% item.file %]">[% theact %]</a>
-     <a href="/history?p=[% project %];h=[% item.object %]">history</a>
-     <a href="/raw?p=[% project %];h=[% item.object %]">raw</a>
+     <a href="[% c.uri_for(theact, {h=item.object, hb=commit.sha1, f=item.file}) %]">[% theact %]</a>
+     <a href="[% c.uri_for('history', {h=item.object}) %]">history</a>
+     <a href="[% c.uri_for('raw', {h=item.object}) %]">raw</a>
    </td>
   </tr>
   [% END %]
index df95156..58d171f 100644 (file)
 [% head.comment.substr(0, 85) %] ...
 </div>
 <div class='path'>
- <a href="/tree?p=[% project %];hb=[% head.sha1 %]">[% project %]</a>
+ <a href="[% c.uri_for("tree", {hb=head.sha1}) %]">[% project %]</a>
  [% # XXX The last part should link to blob_plain (or something) but doesn't ATM
     FOREACH part IN filename.split('/') %]
- / <a href="/tree?p=[% project %];hb=[% head.sha1 %]">[% part %]</a>
+ / <a href="[% c.uri_for("tree", {hb=head.sha1}) %]">[% part %]</a>
  [% END %]
 </div>
 <div>
  <pre class='blob'>[% blob %]</pre>
 </div>
-
-<!--
-$Git_PurePerl_Object_Blob1 = bless( {
-                               content => "* Fix git_blob_plain i.e don't use the wrapper.\n",
-                               git     => bless( {
-                                            directory => {
-                                                           dirs     => [ '.' ],
-                                                           file_spec_class
-                                                                    => undef,
-                                                           volume   => ''
-                                                         },
-                                            gitdir    => {
-                                                           dirs     => [ '.git' ],
-                                                           file_spec_class
-                                                                    => undef,
-                                                           volume   => ''
-                                                         },
-                                            loose     => bless( { directory => {
-                                                           dirs     => [
-                                                                         '.git',
-                                                                         'objects'
-                                                                       ],
-                                                           file_spec_class
-                                                                    => undef,
-                                                           volume   => ''
-                                                         } }, 'Git::PurePerl::Loose' ),
-                                            packs     => [ bless( {
-                                                           fh      => bless( do{ require Symbol; Symbol::gensym }, 'IO::File' ),
-                                                           filename
-                                                                   => {
-                                                                        dir     => {
-                                                                                     dirs     => [
-                                                                                                   '.git',
-                                                                                                   'objects',
-                                                                                                   'pack'
-                                                                                                 ],
-                                                                                     file_spec_class
-                                                                                              => undef,
-                                                                                     volume   => ''
-                                                                                   },
-                                                                        file    => 'pack-76da0c32a0a4918d1828d110636caad32af6ec6c.pack',
-                                                                        file_spec_class
-                                                                                => undef
-                                                                      },
-                                                           index   => bless( {
-                                                                        fh       => bless( Symbol::gensym, 'IO::File' ),
-                                                                        filename => {
-                                                                                      dir     => {
-                                                                                                   dirs     => [
-                                                                                                                 '.git',
-                                                                                                                 'objects',
-                                                                                                                 'pack'
-                                                                                                               ],
-                                                                                                   file_spec_class
-                                                                                                            => undef,
-                                                                                                   volume   => ''
-                                                                                                 },
-                                                                                      file    => 'pack-76da0c32a0a4918d1828d110636caad32af6ec6c.idx',
-                                                                                      file_spec_class
-                                                                                              => undef
-                                                                                    },
-                                                                        offsets  => [
-                                                                                      ( 0 ) x 23,
-                                                                                      ( 1 ) x 29,
-                                                                                      ( 2 ) x 11,
-                                                                                      ( 3 ) x 6,
-                                                                                      ( 4 ) x 22,
-                                                                                      ( 5 ) x 51,
-                                                                                      ( 6 ) x 78,
-                                                                                      ( 7 ) x 3,
-                                                                                      ( 8 ) x 34
-                                                                                    ],
-                                                                        size     => 8
-                                                                      }, 'Git::PurePerl::PackIndex::Version2' ),
-                                                           index_filename
-                                                                   => {
-                                                                        dir     => {
-                                                                                     dirs     => [
-                                                                                                   '.git',
-                                                                                                   'objects',
-                                                                                                   'pack'
-                                                                                                 ],
-                                                                                     file_spec_class
-                                                                                              => undef,
-                                                                                     volume   => ''
-                                                                                   },
-                                                                        file    => 'pack-76da0c32a0a4918d1828d110636caad32af6ec6c.idx',
-                                                                        file_spec_class
-                                                                                => undef
-                                                                      }
-                                                         }, 'Git::PurePerl::Pack::WithIndex' ) ]
-                                          }, 'Git::PurePerl' ),
-                               kind    => 'blob',
-                               sha1    => '8976ebc7df65475b3def53a1653533c3f61070d0',
-                               size    => 48
-                             }, 'Git::PurePerl::Object::Blob' );
-bless( $Git_PurePerl_Object_Blob1->{git}{directory}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Blob1->{git}{gitdir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Blob1->{git}{loose}{directory}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Blob1->{git}{packs}[0]{filename}{dir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Blob1->{git}{packs}[0]{filename}, 'Path::Class::File' );
-bless( $Git_PurePerl_Object_Blob1->{git}{packs}[0]{index}{filename}{dir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Blob1->{git}{packs}[0]{index}{filename}, 'Path::Class::File' );
-bless( $Git_PurePerl_Object_Blob1->{git}{packs}[0]{index_filename}{dir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Blob1->{git}{packs}[0]{index_filename}, 'Path::Class::File' );
--->
index 3d3d54b..b298762 100644 (file)
@@ -3,7 +3,7 @@
 <div class='commit-message'>
 [% commit.comment.substr(0, 85) %] ...
 [% FOREACH ref IN branches_on %]
- <span class='refs'><a href='/shortlog?p=[% project %];h=[% commit.sha1 %];hb=[% ref %]'>[% ref %]</a></span>
+ <span class='refs'><a href='[% c.uri_for("shortlog", {h=commit.sha1, hb=ref}) %]'>[% ref %]</a></span>
 [% END %]
 </div>
 
   <dd>[% commit.sha1 %]</dd>
  <dt>tree</dt>
   <dd>[% commit.tree_sha1 %]
-      <span class='action-list'><a href="/tree?p=[% project %];h=[% commit.tree_sha1 %];hb=[% commit.sha1 %]">tree</a></span>
+      <span class='action-list'><a href="[% c.uri_for("tree", {h=commit.tree_sha1, hb=commit.sha1}) %]">tree</a></span>
   </dd>
  [% FOREACH parent IN commit.parents %]
  <dt>parent</dt>
   <dd>[% parent %]
     <span class='action-list'>
-        <a href="/commit?p=[% project %];h=[% parent %]">commit</a>
-        <a href="/commitdiff?p=[% project %];h=[% commit.sha1 %];hp=[% parent %]">diff</a>
+        <a href="[% c.uri_for("commit", {h=parent}) %]">commit</a>
+        <a href="[% c.uri_for("commitdiff", {hp=parent, h=commit.sha1}) %]">diff</a>
        </span>
    </dd>
  [% END %]
@@ -39,140 +39,3 @@ IF diff_tree.size > 0;
        INCLUDE '_diff_tree.tt2';
 END;
 %]
-
-<!--
-
-$Git_PurePerl_Object_Commit1 = bless( {
-                                 author   => bless( {
-                                               email => 'broq@cpan.org',
-                                               name  => 'broquaint'
-                                             }, 'Git::PurePerl::Actor' ),
-                                 authored_time
-                                          => {
-                                               DateTime
-                                             },
-                                 comment  => 'The blob action now has simple (but functioning) syntax highlighting (thanks to jrockway\'s Angerwhale for the highlighting code).',
-                                 committed_time
-                                          => {
-                                               DateTime
-                                             },
-                                 committer
-                                          => bless( {
-                                               email => 'broq@cpan.org',
-                                               name  => 'broquaint'
-                                             }, 'Git::PurePerl::Actor' ),
-                                 content  => "tree 278387038d3a42dcc9b3b33d6809c71371caee90\nparent b222ff0a7260cc1777c".
-       "7e455dfcaf22551a512fc\nauthor broquaint <broq\@cpan.org> 1256204829 +0100\n".
-       "committer broquaint <broq\@cpan.org> 1256204829 +0100\n\nThe blob action no".
-       "w has simple (but functioning) syntax highlighting (thanks to jrockway's".
-       " Angerwhale for the highlighting code).\n",
-                                 git      => bless( {
-                                               directory => {
-                                                              dirs     => [ '.' ],
-                                                              file_spec_class
-                                                                       => undef,
-                                                              volume   => ''
-                                                            },
-                                               gitdir    => {
-                                                              dirs     => [ '.git' ],
-                                                              file_spec_class
-                                                                       => undef,
-                                                              volume   => ''
-                                                            },
-                                               loose     => bless( { directory => {
-                                                              dirs     => [
-                                                                            '.git',
-                                                                            'objects'
-                                                                          ],
-                                                              file_spec_class
-                                                                       => undef,
-                                                              volume   => ''
-                                                            } }, 'Git::PurePerl::Loose' ),
-                                               packs     => [ bless( {
-                                                              fh      => bless( do{ require Symbol; Symbol::gensym }, 'IO::File' ),
-                                                              filename
-                                                                      => {
-                                                                           dir     => {
-                                                                                        dirs     => [
-                                                                                                      '.git',
-                                                                                                      'objects',
-                                                                                                      'pack'
-                                                                                                    ],
-                                                                                        file_spec_class
-                                                                                                 => undef,
-                                                                                        volume   => ''
-                                                                                      },
-                                                                           file    => 'pack-76da0c32a0a4918d1828d110636caad32af6ec6c.pack',
-                                                                           file_spec_class
-                                                                                   => undef
-                                                                         },
-                                                              index   => bless( {
-                                                                           fh       => bless( Symbol::gensym, 'IO::File' ),
-                                                                           filename => {
-                                                                                         dir     => {
-                                                                                                      dirs     => [
-                                                                                                                    '.git',
-                                                                                                                    'objects',
-                                                                                                                    'pack'
-                                                                                                                  ],
-                                                                                                      file_spec_class
-                                                                                                               => undef,
-                                                                                                      volume   => ''
-                                                                                                    },
-                                                                                         file    => 'pack-76da0c32a0a4918d1828d110636caad32af6ec6c.idx',
-                                                                                         file_spec_class
-                                                                                                 => undef
-                                                                                       },
-                                                                           offsets  => [
-                                                                                         ( 0 ) x 23,
-                                                                                         ( 1 ) x 29,
-                                                                                         ( 2 ) x 11,
-                                                                                         ( 3 ) x 6,
-                                                                                         ( 4 ) x 22,
-                                                                                         ( 5 ) x 51,
-                                                                                         ( 6 ) x 78,
-                                                                                         ( 7 ) x 3,
-                                                                                         ( 8 ) x 34
-                                                                                       ],
-                                                                           size     => 8
-                                                                         }, 'Git::PurePerl::PackIndex::Version2' ),
-                                                              index_filename
-                                                                      => {
-                                                                           dir     => {
-                                                                                        dirs     => [
-                                                                                                      '.git',
-                                                                                                      'objects',
-                                                                                                      'pack'
-                                                                                                    ],
-                                                                                        file_spec_class
-                                                                                                 => undef,
-                                                                                        volume   => ''
-                                                                                      },
-                                                                           file    => 'pack-76da0c32a0a4918d1828d110636caad32af6ec6c.idx',
-                                                                           file_spec_class
-                                                                                   => undef
-                                                                         }
-                                                            }, 'Git::PurePerl::Pack::WithIndex' ) ]
-                                             }, 'Git::PurePerl' ),
-                                 kind     => 'commit',
-                                 parent_sha1
-                                          => 'b222ff0a7260cc1777c7e455dfcaf22551a512fc',
-                                 parents  => [ 'b222ff0a7260cc1777c7e455dfcaf22551a512fc' ],
-                                 sha1     => '7e54e579e196c6c545fee1030175f65a111039d4',
-                                 size     => 328,
-                                 tree_sha1
-                                          => '278387038d3a42dcc9b3b33d6809c71371caee90'
-                               }, 'Git::PurePerl::Object::Commit' );
-$Git_PurePerl_Object_Commit1->{committed_time}{locale} = $Git_PurePerl_Object_Commit1->{authored_time}{locale};
-bless( $Git_PurePerl_Object_Commit1->{authored_time}, 'DateTime' );
-bless( $Git_PurePerl_Object_Commit1->{committed_time}, 'DateTime' );
-bless( $Git_PurePerl_Object_Commit1->{git}{directory}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Commit1->{git}{gitdir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Commit1->{git}{loose}{directory}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Commit1->{git}{packs}[0]{filename}{dir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Commit1->{git}{packs}[0]{filename}, 'Path::Class::File' );
-bless( $Git_PurePerl_Object_Commit1->{git}{packs}[0]{index}{filename}{dir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Commit1->{git}{packs}[0]{index}{filename}, 'Path::Class::File' );
-bless( $Git_PurePerl_Object_Commit1->{git}{packs}[0]{index_filename}{dir}, 'Path::Class::Dir' );
-bless( $Git_PurePerl_Object_Commit1->{git}{packs}[0]{index_filename}, 'Path::Class::File' );
--->
index b8618e8..74971a1 100644 (file)
@@ -1,18 +1,22 @@
 [%- # git_header_html
 -%]
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
-<!-- git web interface version [% version %], (C) 2005-2006, Kay Sievers <kay.sievers\@vrfy.org>, Christian Gierke -->
-<!-- git core binaries version [% git_version %] -->
+<!DOCTYPE html>
+<html lang="en">
 <head>
-  <meta http-equiv="content-type" content="[% content_type %]; charset=utf-8"/>
+  <!-- git web interface version [% version %], (C) 2005-2006, Kay Sievers <kay.sievers\@vrfy.org>, Christian Gierke -->
+  <!-- git core binaries version [% git_version %] -->
+  <meta charset="utf-8"/>
   <meta name="generator" content="gitweb/[% version %] git/[% git_version %][% mod_perl_version %]"/>
   <meta name="robots" content="index, nofollow"/>
   <title>[% title | html %] (Gitalist)</title>
   [% IF baseurl %]
   <base href="[% baseurl %]" />
   [% END %]
+  <link rel="stylesheet" href="/static/css/blueprint/screen.css" type="text/css" media="screen, projection">
+  <link rel="stylesheet" href="/static/css/blueprint/print.css" type="text/css" media="print">
+  <!--[if lt IE 8]>
+    <link rel="stylesheet" href="/static/css/blueprint/ie.css" type="text/css" media="screen, projection">
+  <![endif]-->  
   <link rel="stylesheet" type="text/css" href="/static/css/site.css"/>
   <link rel="stylesheet" type="text/css" href="[% stylesheet %]"/>
   [% FOR link IN links %]
@@ -35,7 +39,7 @@
   <a title="[% logo_label | url %]" href="[% logo_url | url %]"><img src="[% logo_img %]" alt="git" class="logo"/></a>
   <a href="[% home_link | url %]">[% home_link_str %]</a>
   [%- IF project %]
-  / <a href="/summary?p=[% project %]">[% project %]</a>
+  / <a href="[% c.uri_for('summary') %]">[% project %]</a>
   [% IF action;  " / " _ action; END;
   END %]
 </div>
index 24bcc59..5eb883d 100644 (file)
         <td><a class="list" title="[% p.description %]" href="/summary?p=[% p.name %]">[% p.description.substr(0, 20) %]</a></td>
         <td>[% p.owner %]</td>
         <td class="age2">[% p.last_change %]</td>
-        <td class="link"><a href="/summary?p=[% p.name %]">summary</a>
-            | <a href="/shortlog?p=[% p.name %]">shortlog</a>
-            | <a href="/log?p=[% p.name %]">log</a>
-            | <a href="/tree?p=[% p.name %]">tree</a></td>
+        <td class="link"><a href="[% c.uri_for("summary") %]">summary</a>
+            | <a href="[% c.uri_for("shortlog") %]">shortlog</a>
+            | <a href="[% c.uri_for("log") %]">log</a>
+            | <a href="[% c.uri_for("tree") %]">tree</a></td>
     </tr>
   [% END %]
 </tbody>
index 29dbe96..36d8231 100644 (file)
@@ -13,9 +13,9 @@
 
 <div class="title_text">
  <div class="log_link">
-   <a href="/commit?p=gitweb/.git;h=[% line.sha %]">commit</a>
- | <a href="/commitdiff?p=gitweb/.git;h=[% line.sha1 %]">commitdiff</a>
- | <a href="/tree?p=gitweb/.git;h=[% line.sha1 %];hb=[% line.sha1 %]">tree</a>
+   <a href="[% c.uri_for("commit", {h=line.sha}) %]">commit</a>
+ | <a href="[% c.uri_for("commitdiff", {h=line.sha1}) %]">commitdiff</a>
+ | <a href="[% c.uri_for("tree", {h=line.sha1, hb=line.sha1}) %]">tree</a>
  </div>
  <i>[% line.author.name | html %] [% line.authored_time %]</i>
 </div>
index d1a5654..3391b69 100644 (file)
@@ -13,9 +13,9 @@
 
 <div class="title_text">
  <div class="log_link">
-   <a href="[% c.uri_for('commit', {h=result.sha1}) %]">commit</a>
- | <a href="[% c.uri_for('commitdiff', {h=result.sha1}) %]">commitdiff</a>
- | <a href="[% c.uri_for('tree', {h=result.tree_sha1, hb=line.sha1}) %]">tree</a>
+   <a href="[% c.uri_for("", {h=result.sha1}) %]">commit</a>
+ | <a href="[% c.uri_for("", {h=result.sha1}) %]">commitdiff</a>
+ | <a href="[% c.uri_for("", {h=result.tree_sha1, hb=line.sha1}) %]">tree</a>
  </div>
  <i>[% result.author.name | html %] [% line.authored_time %]</i>
 </div>
index 7ccf7af..f603631 100644 (file)
@@ -8,12 +8,8 @@
 </dl>
 </div>
 
-<div class='shortlog'>
-<h2><a href='[% c.uri_for('shortlog') %]'>shortlog</a></h2>
+<h2><a href='[% c.uri_for("shortlog") %]'>shortlog</a></h2>
 [% INCLUDE '_shortlog.tt2' %]
-</div>
 
-<div class='heads'>
-<h2><a href='[% c.uri_for('heads') %]'>heads</a></h2>
+<h2><a href='[% c.uri_for("heads") %]'>heads</a></h2>
 [% INCLUDE '_heads.tt2' %]
-</div>
index 4419028..da82c74 100644 (file)
@@ -6,10 +6,10 @@
 
 [% IF path -%]
 <div>
- <a href='/tree?p=[% project %];hb=[% commit.sha1 %]'>[% project %]</a>
+ <a href='[% c.uri_for("tree", {hb=commit.sha1}) %]'>[% project %]</a>
  [% fullpath = ''-%]
  [% FOREACH part IN path.split('/') -%]
- / <a href='/tree?p=[% project %];h=[% tree.sha1 %];hb=[% commit.sha1 %];f=[% fullpath _ part %]'>[% part %]</a>
+ / <a href='[% c.uri_for("tree", {h=tree.sha1, hb=commit.sha1, f=fullpath _ part}) %]'>[% part %]</a>
  [% fullpath = fullpath _ part _ '/'; %]
  [% END -%]
 </div>