New dark 'gpcf.eu' color scheme, fixed bug with verification. master
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Sun, 16 Oct 2016 09:19:57 +0000 (11:19 +0200)
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>
Sun, 16 Oct 2016 09:19:57 +0000 (11:19 +0200)
gitweb.cgi
static/gitweb.css
static/gpcf.scss [new file with mode: 0644]

index c019b20..eb470b6 100755 (executable)
@@ -92,7 +92,7 @@ our $home_link_str = "projects";
 
 # extra breadcrumbs preceding the home link
 our @extra_breadcrumbs = ();
-
+our $sidebar_links = '<a href="//gpcf.eu"><span class="octicon octicon-globe"></span> gpcf.eu</a>'; #additional sidebar links
 # name of your site or organization to appear in page titles
 # replace this with something more descriptive for clearer bookmarks
 our $site_name = ""
@@ -1733,7 +1733,7 @@ sub project_in_list {
 sub chop_str {
        my $str = shift;
        my $len = shift;
-       my $add_len = shift || 10;
+       my $add_len = shift || 20;
        my $where = shift || 'right'; # 'left' | 'center' | 'right'
 
        # Make sure perl knows it is utf8 encoded so we don't
@@ -3544,14 +3544,13 @@ sub build_commit_sig_table {
   my $commit;
   my $signed;
   my $username;
-  my @things;
-  open TMP, ">/tmp/commit";
+#  open TMP, ">/tmp/commit";
   foreach (@commits) {
-    print TMP $_;
     ($commit,$signed,$username) = split(":",$_);
     if ((defined $commit) and (defined $signed)) {
-      @things = ($signed, $username);
+      my @things = ($signed, $username);
       $ch{$commit} = \@things;
+#      print TMP "$commit:$signed:$username";
     }
   }
   return %ch;
@@ -3560,13 +3559,17 @@ sub build_commit_sig_table {
 
 sub verify_commit {
   my %co = @_;
+  my $signed = "";
+  my $id;
   unless (%sig_table) {
     %sig_table = build_commit_sig_table();
   }
-  if (defined $sig_table{$co{'id'}} and my ($status, $id) = @{$sig_table{$co{'id'}}}) {
-
-    if ($status eq 'U' or $status eq 'G') {
-      return '<span class="verif"><span class="octicon octicon-verified" title="GPG signed commit"></span> <span class="commiter">Signed by: '.$cgi->escapeHTML($id)."</span></span>";
+  if (defined $sig_table{$co{'id'}} and ($signed, $id) = @{$sig_table{$co{'id'}}}) {
+    if ($signed eq 'U' or $signed eq 'G') {
+      return '<span class="verif"><span class="octicon octicon-verified" title="GPG signed commit"></span> <span class="commiter"><span class=\'tail\'>&nbsp;</span>Signed by: '.$cgi->escapeHTML($id)."</span></span>";
+    }
+    else {
+      return '<span class="octicon octicon-unverified" title="Unsigned commit"></span> ';
     }
   }
   return '<span class="octicon octicon-unverified" title="Unsigned commit"></span> ';
@@ -4219,6 +4222,11 @@ EOF
                                         -class => "logo"}));
        }
        print_nav_breadcrumbs(%opts);
+       my $descr = git_get_project_description($project);
+       if (defined $descr) {
+         print "<div class=\"header_desc\">" . esc_html($descr) . "</div>\n";
+       }
+
        print "</div>\n";
 
        my $have_search = gitweb_check_feature('search');
@@ -4247,11 +4255,14 @@ sub git_footer_html {
        my $feed_class = 'rss_logo';
 
        print "<div class=\"page_footer\">\n";
+       if (defined $site_footer && -f $site_footer) {
+               insert_file($site_footer);
+       }
        if (defined $project) {
-               my $descr = git_get_project_description($project);
-               if (defined $descr) {
-                       print "<div class=\"page_footer_text\">" . esc_html($descr) . "</div>\n";
-               }
+               my $descr = git_get_project_description($project);
+               if (defined $descr) {
+               #       print "<div class=\"page_footer_text\">" . esc_html($descr) . "</div>\n";
+               }
 
                my %href_params = get_feed_info();
                if (!%href_params) {
@@ -4290,9 +4301,6 @@ sub git_footer_html {
                print "</div>\n"; # class="page_footer"
        }
 
-       if (defined $site_footer && -f $site_footer) {
-               insert_file($site_footer);
-       }
 
        print qq!<script type="text/javascript" src="!.esc_url($javascript).qq!"></script>\n!;
        if (defined $action &&
@@ -4373,7 +4381,8 @@ sub git_print_page_nav {
        my ($current, $suppress, $head, $treehead, $treebase, $extra) = @_;
        $extra = '' if !defined $extra; # pager or formats
 
-       my @navs = qw(summary shortlog log commit commitdiff tree);
+       #       my @navs = qw(summary shortlog log commit commitdiff tree);
+       my @navs = qw(summary log tree);
        if ($suppress) {
                @navs = grep { $_ ne $suppress } @navs;
        }
@@ -4410,7 +4419,7 @@ sub git_print_page_nav {
                $arg{$label}{'_href'} = $link;
        }
 
-       print "<div class=\"page_nav\">\n" .
+       print "<div class=\"page_nav\">".$sidebar_links . "<a href=\"/\"><span class=\"octicon octicon-home\"></span> All Projects</a>" .
                (join "",
                 map { $_ eq $current ?
                       "<div class=\"current\">$_</div>" : $cgi->a({-href => ($arg{$_}{_href} ? $arg{$_}{_href} : href(%{$arg{$_}}))}, "$_")
@@ -4547,7 +4556,7 @@ sub git_print_authorship {
        my $author = $co->{'author_name'};
 
        my %ad = parse_date($co->{'author_epoch'}, $co->{'author_tz'});
-       print "<$tag class=\"author_date\">" .
+       print "<span class=\"octicon octicon-person\"></span> <$tag class=\"author_date\">" .
              format_search_author($author, "author", esc_html($author)) .
              " [".format_timestamp_html(\%ad)."]".
              git_get_avatar($co->{'author_email'}, -pad_before => 1) .
@@ -5792,7 +5801,7 @@ sub git_project_list_rows {
                }
                print"<td class=\"link\">" .
                      $cgi->a({-href => href(project=>$pr->{'path'}, action=>"summary")}, "summary")   . " | " .
-                     $cgi->a({-href => href(project=>$pr->{'path'}, action=>"shortlog")}, "shortlog") . " | " .
+#                    $cgi->a({-href => href(project=>$pr->{'path'}, action=>"shortlog")}, "shortlog") . " | " .
                      $cgi->a({-href => href(project=>$pr->{'path'}, action=>"log")}, "log") . " | " .
                      $cgi->a({-href => href(project=>$pr->{'path'}, action=>"tree")}, "tree") .
                      ($pr->{'forks'} ? " | " . $cgi->a({-href => href(project=>$pr->{'path'}, action=>"forks")}, "forks") : '') .
@@ -5906,14 +5915,14 @@ sub git_log_body {
                my $ref = format_ref_marker($refs, $commit);
                my $verified = verify_commit(%co);
                git_print_header_div('commit',
-                              "<span class=\"age\">$co{'age_string'}</span>" .$verified.
+                              "<span class=\"age\">$co{'age_string'}</span> " .$verified.
                               esc_html($co{'title'}),
                               $commit, undef, $ref);
                print "<div class=\"title_text\">\n" .
                      "<div class=\"log_link\">\n" .
                      $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") .
                      " | " .
-                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") .
+                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "diff") .
                      " | " .
                      $cgi->a({-href => href(action=>"tree", hash=>$commit, hash_base=>$commit)}, "tree") .
                      "<br/>\n" .
@@ -5954,13 +5963,13 @@ sub git_shortlog_body {
                $alternate ^= 1;
                # git_summary() used print "<td><i>$co{'age_string'}</i></td>\n" .
                print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
-                     format_author_html('td', \%co, 10) . "<td>";
+                     format_author_html('td', \%co, 20) . "<td>";
                print $verified." ".format_subject_html($co{'title'}, $co{'title_short'},
                                          href(action=>"commit", hash=>$commit), $ref);
                print "</td>\n" .
                      "<td class=\"link\">" .
                      $cgi->a({-href => href(action=>"commit", hash=>$commit)}, "commit") . " | " .
-                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff") . " | " .
+                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "diff") . " | " .
                      $cgi->a({-href => href(action=>"tree", hash=>$commit, hash_base=>$commit)}, "tree");
                my $snapshot_links = format_snapshot_links($commit);
                if (defined $snapshot_links) {
@@ -6004,14 +6013,14 @@ sub git_history_body {
                $alternate ^= 1;
                print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
        # shortlog:   format_author_html('td', \%co, 10)
-                     format_author_html('td', \%co, 15, 3) . "<td>";
+                     format_author_html('td', \%co, 20, 3) . "<td>";
                # originally git_history used chop_str($co{'title'}, 50)
                print format_subject_html($co{'title'}, $co{'title_short'},
                                          href(action=>"commit", hash=>$commit), $ref);
                print "</td>\n" .
                      "<td class=\"link\">" .
                      $cgi->a({-href => href(action=>$ftype, hash_base=>$commit, file_name=>$file_name)}, $ftype) . " | " .
-                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "commitdiff");
+                     $cgi->a({-href => href(action=>"commitdiff", hash=>$commit)}, "diff");
 
                if ($ftype eq 'blob') {
                        my $blob_current = $file_hash;
@@ -6498,7 +6507,7 @@ sub git_search_grep_body {
                }
                $alternate ^= 1;
                print "<td title=\"$co{'age_string_age'}\"><i>$co{'age_string_date'}</i></td>\n" .
-                     format_author_html('td', \%co, 15, 5) .
+                     format_author_html('td', \%co, 20, 5) .
                      "<td>" .
                      $cgi->a({-href => href(action=>"commit", hash=>$co{'id'}),
                               -class => "list subject"},
@@ -6559,7 +6568,7 @@ sub git_project_list {
                insert_file($home_text);
                print "</div>\n";
        }
-
+       print '<div class="page_nav">'.$sidebar_links . '<div class="current"><span class="octicon octicon-home"></span> All Projects</div></div>';
        git_project_search_form($searchtext, $search_use_regexp);
        git_project_list_body(\@list, $order);
        git_footer_html();
@@ -7165,6 +7174,9 @@ sub git_blob {
 
        git_header_html(undef, $expires);
        my $formats_nav = '';
+       unless (defined $hash_base) {
+         $hash_base = $hash;
+       }
        if (defined $hash_base && (my %co = parse_commit($hash_base))) {
                if (defined $file_name) {
                        if ($have_blame) {
@@ -7192,7 +7204,7 @@ sub git_blob {
                git_print_header_div('commit', esc_html($co{'title'}), $hash_base);
        } else {
                print "<div class=\"page_nav\">\n" .
-                     "<br/><br/></div>\n" .
+                     $sidebar_links."</div>\n" .
                      "<div class=\"title\">".esc_html($hash)."</div>\n";
        }
        git_print_page_path($file_name, "blob", $hash_base);
index 2ee5fe8..bf19e12 100644 (file)
-@charset "UTF-8";
 @import url("font/octicons.css");
+.title_text {
+  clear: both; }
+
+div.header {
+  background: #ddddff;
+  padding: 6px;
+  margin-bottom: 4px;
+  clear: both; }
+
+.page_header {
+  margin-top: -3em;
+  display: block;
+  background: #ddddff;
+  margin-left: -15em;
+  margin-right: -2em;
+  margin-bottom: 0.7em;
+  padding: 0.5em;
+  padding-bottom: 0.9em; }
+
+.page_header img {
+  float: right; }
+
+.search {
+  float: right;
+  color: #fff;
+  margin-bottom: 0.5em; }
+
 body {
-  font-family: sans-serif;
-  font-size: small;
-  border: solid #ddddff;
-  border-width: 1px;
-  border-radius: 7px;
-  margin: 10px;
-  background-color: #ffffff;
-  color: #000000;
-  box-shadow: 1px 1px 5px #999; }
-
-html {
-  background-color: #e7aaff; }
-
-@media screen and (min-width: 40.5em) {
-  body {
-    margin-left: 10%;
-    margin-right: 10%; } }
-a {
-  color: #0000cc; }
+  font-family: "Liberation Sans", sans-serif;
+  text-align: left;
+  margin: 3em 2em 2em 15em;
+  background-color: #102;
+  color: #657b83; }
+
+div.page_nav, div.page_nav a {
+  list-style: none;
+  display: block;
+  background: #124;
+  padding: 1em; }
 
-a:hover, a:visited, a:active {
-  color: #880000; }
+div.page_nav {
+  width: 12em;
+  margin-left: -15em;
+  position: absolute; }
+
+div.page_nav a, div.page_nav .current {
+  display: block;
+  padding: 0.3em 1em 0.3em 1em;
+  margin: 0 -1em 0 -1em;
+  color: #a57900;
+  text-decoration: none; }
+
+div.page_nav a:hover, ul.langs a:hover {
+  background: #ffeeff; }
+
+div.page_nav .current, ul.langs .current {
+  display: block;
+  color: #978;
+  border-right: .4em solid #645; }
 
-span.cntrl {
-  border: dashed #aaaaaa;
-  border-width: 1px;
-  padding: 0px 2px 0px 2px;
-  margin: 0px 2px 0px 2px; }
+.verif .octicon-verified {
+  color: #070;
+  font-weight: normal; }
 
-img.logo {
+.verif {
+  font-weight: normal;
+  padding: 6px; }
+
+.verif:hover .commiter {
+  background-color: #070;
+  border-radius: 5px;
+  border: 1px solid #bbb;
+  box-shadow: 1px 1px 5px #999;
+  display: inline-block;
+  padding: 10px 18px;
+  margin-left: 9px;
+  margin-right: 17px;
+  position: absolute;
+  vertical-align: top;
+  margin-top: -1.3em; }
+
+.verif:hover .tail {
+  position: absolute;
+  top: 12px;
+  left: -17px;
+  height: 17px;
+  width: 17px;
+  overflow: hidden; }
+
+.verif:hover .tail::before {
+  border: 1px solid #bbb;
+  background-color: #070;
+  box-shadow: 1px 1px 5px #999;
+  content: "\00a0";
+  display: block;
+  position: absolute;
+  top: 0px;
+  left: 12px;
+  height: 12px;
+  width: 12px;
+  transform: skew(-45deg); }
+
+.verif .commiter {
+  display: none;
+  color: #fff; }
+
+/* .verif:hover .octicon-verified { */
+/*     color: #fff; */
+/* } */
+.verif:hover .commiter {
+  display: inline-block;
+  z-index: 1000; }
+
+span.refs > span {
+  padding: 3px 4px;
+  font-size: 90%;
+  font-weight: normal;
+  display: inline-block;
+  border-radius: 3px;
+  margin-bottom: 3px;
+  box-shadow: 1px 1px 5px #999;
+  color: #000; }
+
+span.refs > span + span {
+  margin-top: 2px; }
+
+span.refs {
   float: right;
-  border-width: 0px; }
+  margin-right: 4px;
+  margin-left: 0.7em;
+  text-align: right;
+  padding: 2px;
+  max-width: 30%;
+  margin-top: -5px;
+  vertical-align: top !important; }
 
-img.avatar {
-  vertical-align: middle; }
+span.refs + * {
+  clear: both; }
 
-img.blob {
-  max-height: 100%;
-  max-width: 100%; }
+span.refs span a {
+  text-decoration: none;
+  color: inherit; }
 
-a.list img.avatar {
-  border-style: none; }
+span.refs span a:hover {
+  text-decoration: underline; }
 
-div.page_header {
-  margin-top: -1px;
-  border-radius: 7px 7px 0 0;
-  height: 25px;
-  padding: 8px;
-  font-size: 150%;
-  font-weight: bold;
-  background-color: #ddddff; }
+span.refs span.indirect {
+  font-style: italic; }
 
-div.page_header a:visited, a.header {
-  color: #310044; }
+span.refs span.ref {
+  background-color: #aaaaff;
+  border-color: #ccccff #0033cc #0033cc #ccccff; }
+
+span.refs span.tag {
+  background-color: #ffffaa;
+  border-color: #ffffcc #ffee00 #ffee00 #ffffcc; }
+
+span.refs span.head {
+  background-color: #aaffaa; }
+
+span.refs span.remote {
+  background-color: #aaaaff; }
 
 div.branches_nav a:visited {
   color: #550077; }
@@ -62,374 +168,108 @@ div.branches_nav a:visited {
 div.page_header a:hover {
   color: #880000; }
 
-div.page_nav, div.page_nav_extra, div.branches_nav {
+div.branches_nav {
   padding: 8px; }
 
-div.page_nav, div.branches_nav {
+div.branches_nav {
   border-bottom: 1px solid #ddddff;
   padding-bottom: 0px; }
 
-div.page_nav a:visited, div.page_nav_extra a:visited, div.page_nav a, div.page_nav_extra {
-  color: #550077; }
-
-div.page_nav a, div.page_nav .current, div.branches_nav a, div.branches_nav .current {
+div.branches_nav a, div.branches_nav .current {
   display: inline-block;
   padding: 6px;
   margin: 1px;
   margin-bottom: -1px;
   border-radius: 4px 4px 0 0; }
 
-div.page_nav a, div.branches_nav a {
+div.branches_nav a {
   background: #eee;
   border: 1px solid #ddddff;
   outline: 0; }
 
-div.page_nav a:hover, div.branches_nav a:hover {
+div.branches_nav a:hover {
   text-decoration: none;
   background: #e7aaff; }
 
-div.page_nav .current, div.branches_nav .current {
-  background: #ffffff;
+div.branches_nav .current {
+  background: #ddddff;
   border-left: 1px solid #ddddff;
   border-right: 1px solid #ddddff;
   border-top: 1px solid #ddddff;
-  border-bottom: 1px solid #ffffff; }
-
-tr.metadata_url {
-  border: 1px solid #a0a;
-  display: block;
-  width: 100%; }
-
-div.page_path {
-  padding: 8px;
-  font-weight: bold;
-  border: solid #d9d8d1;
-  border-width: 0px 0px 1px; }
-
-div.page_footer {
-  border-radius: 0 0 7px 7px;
-  margin-bottom: -1px;
-  height: 22px;
-  padding: 4px 8px;
-  background-color: #ddddff; }
-
-div.page_footer_text {
-  line-height: 22px;
-  float: left;
-  color: #555555;
-  font-style: italic; }
-
-div#generating_info {
-  margin: 4px;
-  font-size: smaller;
-  text-align: center;
-  color: #505050; }
-
-div.page_body {
-  padding: 8px;
-  font-family: monospace; }
+  border-bottom: 1px solid #ddddff; }
 
-div.title, a.title {
-  display: block;
-  padding: 6px 8px;
-  font-weight: bold;
-  background-color: #ddddff;
+a {
   text-decoration: none;
-  color: #000000; }
+  color: #2aa198; }
 
-div.readme {
-  padding: 8px; }
+a:visited {
+  color: #2aa198; }
 
-a.title:hover {
-  background-color: #aaaaff; }
+a:hover {
+  color: #859900;
+  text-decoration: underline; }
 
-div.title_text {
-  padding: 6px 0px;
-  border: solid #d9d8d1;
-  border-width: 0px 0px 1px;
-  /*   font-family: monospace;*/ }
+pre, code {
+  color: #777; }
 
-div.log_body {
-  padding: 8px 8px 8px 150px; }
+.num {
+  color: #295899; }
 
-span.age {
-  position: relative;
-  float: left;
-  width: 142px;
+.esc {
+  color: #ff00ff; }
+
+.str {
+  color: #cc0033;
   font-style: italic; }
 
-span.signoff {
-  color: #888888; }
+.dstr {
+  color: #818100; }
 
-div.log_link {
-  padding: 0px 8px;
-  font-size: 70%;
-  font-family: sans-serif;
-  font-style: normal;
-  position: relative;
-  float: left;
-  width: 136px; }
+.slc {
+  color: #838143;
+  font-style: italic; }
 
-div.list_head {
-  padding: 6px 8px 4px;
-  border: solid #d9d8d1;
-  border-width: 1px 0px 0px;
+.com, .co {
+  color: #838143;
   font-style: italic; }
 
-/* .author_date, .author { */
-/*     font-style: italic; */
-/* } */
-div.author_date {
-  padding: 8px;
-  border: solid #d9d8d1;
-  border-width: 0px 0px 1px 0px; }
+.dir {
+  color: #008200; }
 
-a.list {
-  text-decoration: none;
+.sym {
   color: #000000; }
 
-a.subject, a.name {
-  font-weight: bold; }
-
-table.tags a.subject {
-  font-weight: normal; }
-
-a.list:hover {
-  text-decoration: underline;
-  color: #880000; }
-
-a.text {
-  text-decoration: none;
-  color: #0000cc; }
-
-a.text:visited {
-  text-decoration: none;
-  color: #880000; }
-
-a.text:hover {
-  text-decoration: underline;
-  color: #880000; }
-
-table {
-  padding: 8px 4px;
-  border-spacing: 0; }
-
-table.diff_tree {
-  font-family: monospace; }
-
-table.combined.diff_tree th {
-  text-align: center; }
-
-table.combined.diff_tree td {
-  padding-right: 24px; }
-
-table.combined.diff_tree th.link,
-table.combined.diff_tree td.link {
-  padding: 0px 2px; }
-
-table.combined.diff_tree td.nochange a {
-  color: #6666ff; }
-
-table.combined.diff_tree td.nochange a:hover,
-table.combined.diff_tree td.nochange a:visited {
-  color: #d06666; }
-
-table.blame {
-  border-collapse: collapse; }
-
-table.blame td {
-  padding: 0px 5px;
-  font-size: 100%;
-  vertical-align: top; }
-
-th {
-  padding: 2px 5px;
-  font-size: 100%;
-  text-align: left; }
-
-/* do not change row style on hover for 'blame' view */
-tr.light,
-table.blame .light:hover {
-  ebackground-color: #ffffff; }
-
-tr.dark,
-table.blame .dark:hover {
-  background-color: #d9d9d9; }
-
-/* currently both use the same, but it can change */
-tr.light:hover,
-tr.dark:hover {
-  background-color: #ededed; }
+.line {
+  color: #555555; }
 
-/* boundary commits in 'blame' view */
-/* and commits without "previous" */
-tr.boundary td.sha1,
-tr.no-previous td.linenr {
+.kwa, .kw {
+  color: #005500;
   font-weight: bold; }
 
-/* for 'blame_incremental', during processing */
-tr.color1 {
-  background-color: #f6fff6; }
-
-tr.color2 {
-  background-color: #f6f6ff; }
-
-tr.color3 {
-  background-color: #fff6f6; }
-
-td {
-  padding: 2px 5px;
-  font-size: 100%;
-  vertical-align: top; }
-
-td.link, td.selflink {
-  padding: 2px 5px;
-  font-family: sans-serif;
-  font-size: 70%; }
-
-td.selflink {
-  padding-right: 0px; }
-
-td.sha1 {
-  font-family: monospace; }
-
-.error {
-  color: red;
-  background-color: yellow; }
-
-td.current_head {
-  text-decoration: underline; }
+.kwb {
+  color: #830044; }
 
-td.category {
-  background-color: #d9d8d1;
-  border-top: 1px solid #000000;
-  border-left: 1px solid #000000;
+.kwc {
+  color: #995500;
   font-weight: bold; }
 
-table.diff_tree span.file_status.new {
-  color: #008000; }
-
-table.diff_tree span.file_status.deleted {
-  color: #c00000; }
-
-table.diff_tree span.file_status.moved,
-table.diff_tree span.file_status.mode_chnge {
-  color: #777777; }
-
-table.diff_tree span.file_status.copied {
-  color: #70a070; }
-
-/* noage: "No commits" */
-table.project_list td.noage {
-  color: #808080;
-  font-style: italic; }
+.kwd, .ot {
+  color: #999900; }
 
-/* age2: 60*60*24*2 <= age */
-table.project_list td.age2, table.blame td.age2 {
-  font-style: italic; }
+.ppc {
+  color: #7755ff; }
 
-/* age1: 60*60*2 <= age < 60*60*24*2 */
-table.project_list td.age1 {
-  color: #009900;
+.pps {
+  color: #8833ff;
   font-style: italic; }
 
-table.blame td.age1 {
-  color: #009900;
-  background: transparent; }
-
-/* age0: age < 60*60*2 */
-table.project_list td.age0 {
-  color: #009900;
-  font-style: italic;
-  font-weight: bold; }
+.opt {
+  color: #7777ff; }
 
-table.blame td.age0 {
-  color: #009900;
-  background: transparent;
-  font-weight: bold; }
-
-/* table.heads { */
-/*     display: none; */
-/*     width: 100%; */
-/*     min-height: 30px; */
-/*     margin: 0px; */
-/*     background: #090; */
-/*     color: white; */
-/* } */
-/* table.heads .list { */
-/*     color: white */
-/* } */
-/* table.heads tr.dark { */
-/*     padding: 0.4em; */
-/*     background: #080; */
-/* } */
-/* table.heads tr.light { */
-/*     padding: 0.4em; */
-/*     background: #090; */
-/* } */
-/* .header:hover + table.heads, table.heads:hover { */
-/*      display: block; */
-/* } */
-td.pre, div.pre, div.diff {
+.pre, .diff {
   font-family: monospace;
-  font-size: 12px;
-  white-space: pre; }
-
-td.mode {
-  font-family: monospace; }
-
-/* progress of blame_interactive */
-div#progress_bar {
-  height: 2px;
-  margin-bottom: -2px;
-  background-color: #d8d9d0; }
-
-div#progress_info {
-  float: right;
-  text-align: right; }
-
-/* format of (optional) objects size in 'tree' view */
-td.size {
-  font-family: monospace;
-  text-align: right; }
-
-/* styling of diffs (patchsets): commitdiff and blobdiff views */
-div.diff.header,
-div.diff.extended_header {
-  white-space: normal; }
-
-div.diff.header {
-  font-weight: bold;
-  background-color: #edece6;
-  margin-top: 4px;
-  padding: 4px 0px 2px 0px;
-  border: solid #d9d8d1;
-  border-width: 1px 0px 1px 0px; }
-
-div.diff.header a.path {
-  text-decoration: underline; }
-
-div.diff.extended_header,
-div.diff.extended_header a.path,
-div.diff.extended_header a.hash {
-  color: #777777; }
-
-div.diff.extended_header .info {
-  color: #b0b0b0; }
-
-div.diff.extended_header {
-  background-color: #f6f5ee;
-  padding: 2px 0px 2px 0px; }
-
-div.diff a.list,
-div.diff a.path,
-div.diff a.hash {
-  text-decoration: none; }
-
-div.diff a.list:hover,
-div.diff a.path:hover,
-div.diff a.hash:hover {
-  text-decoration: underline; }
+  white-space: pre-wrap;
+  width: 100%; }
 
 div.diff.to_file a.path,
 div.diff.to_file {
@@ -460,70 +300,31 @@ div.diff.chunk_header {
   border-width: 1px 0px 0px 0px;
   margin-top: 2px; }
 
-div.diff.chunk_header span.chunk_info {
-  background-color: #ffeeff; }
-
-div.diff.chunk_header span.section {
-  color: #aa22aa; }
-
-div.diff.incomplete {
-  color: #cccccc; }
-
-div.diff.nodifferences {
-  font-weight: bold;
-  color: #600000; }
-
-/* side-by-side diff */
 div.chunk_block {
   overflow: hidden; }
 
 div.chunk_block div.old {
   float: left;
-  width: 50%;
+  width: 49%;
   overflow: hidden; }
 
 div.chunk_block div.new {
   margin-left: 50%;
   width: 50%; }
 
-div.chunk_block.rem div.old div.diff.rem {
-  background-color: #fff5f5; }
-
-div.chunk_block.add div.new div.diff.add {
-  background-color: #f8fff8; }
-
-div.chunk_block.chg div div.diff {
-  background-color: #fffff0; }
-
-div.chunk_block.ctx div div.diff.ctx {
-  color: #404040; }
-
-div.index_include {
-  border: solid #d9d8d1;
-  border-width: 0px 0px 1px;
-  padding: 12px 8px; }
-
-div.search {
-  font-size: 100%;
-  font-weight: normal;
-  margin: 4px 8px;
-  float: right;
-  top: 56px;
-  right: 12px; }
-
-div.projsearch {
-  text-align: center;
-  margin: 20px 0px; }
-
-div.projsearch form {
-  margin-bottom: 2px; }
+td {
+  vertical-align: top;
+  padding-bottom: 5px; }
 
-td.linenr {
-  text-align: right; }
+footer, .page_footer {
+  margin-top: 3em;
+  text-align: right;
+  padding-top: 0.8em;
+  font-size: 10px;
+  position: relative; }
 
-a.linenr {
-  color: #999999;
-  text-decoration: none; }
+table {
+  margin-top: 0.4em; }
 
 a.rss_logo {
   float: right;
@@ -548,230 +349,4 @@ a.rss_logo.generic {
 a.rss_logo.generic:hover {
   background-color: #ee7700; }
 
-span.refs > span {
-  padding: 3px 4px;
-  font-size: 90%;
-  font-weight: normal;
-  display: inline-block;
-  border-radius: 3px;
-  margin-top: 2px; }
-
-span.refs {
-  float: right;
-  margin-right: 4px;
-  margin-left: 0.7em;
-  text-align: right;
-  padding: 2px;
-  max-width: 30%;
-  vertical-align: top !important; }
-
-span.refs + * {
-  clear: both; }
-
-span.refs span a {
-  text-decoration: none;
-  color: inherit; }
-
-span.refs span a:hover {
-  text-decoration: underline; }
-
-span.refs span.indirect {
-  font-style: italic; }
-
-span.refs span.ref {
-  background-color: #aaaaff;
-  border-color: #ccccff #0033cc #0033cc #ccccff; }
-
-span.refs span.tag {
-  background-color: #ffffaa;
-  border-color: #ffffcc #ffee00 #ffee00 #ffffcc; }
-
-span.refs span.head {
-  background-color: #aaffaa; }
-
-span.refs span.remote {
-  background-color: #aaaaff; }
-
-span.atnight {
-  color: #cc0000; }
-
-span.match {
-  color: #e00000; }
-
-div.binary {
-  font-style: italic; }
-
-div.remote {
-  margin: .5em;
-  border: 1px solid #d9d8d1;
-  display: inline-block; }
-
-/* JavaScript-based timezone manipulation */
-.popup {
-  /* timezone selection UI */
-  position: absolute;
-  /* "top: 0; right: 0;" would be better, if not for bugs in browsers */
-  top: 0;
-  left: 0;
-  border: 1px solid;
-  padding: 2px;
-  background-color: #f0f0f0;
-  font-style: normal;
-  color: #000000;
-  cursor: auto; }
-
-.close-button {
-  /* close timezone selection UI without selecting */
-  /* float doesn't work within absolutely positioned container,
-   * if width of container is not set explicitly */
-  /* float: right; */
-  position: absolute;
-  top: 0px;
-  right: 0px;
-  border: 1px solid green;
-  margin: 1px 1px 1px 1px;
-  padding-bottom: 2px;
-  width: 12px;
-  height: 10px;
-  font-size: 9px;
-  font-weight: bold;
-  text-align: center;
-  background-color: #fff0f0;
-  cursor: pointer; }
-
-div.heads a::before {
-  content: "ᛘ ";
-  font-size: 25px;
-  padding-top: -2px;
-  padding-bottom: -2px;
-  margin-right: 3px; }
-
-/* div.branches_nav a::before, div.branches_nav .current::before { */
-/*     content: "ᛘ"; */
-/*     margin-right: 3px; */
-/*     font-size: 20px; */
-/*     margin-top: -4px; */
-/*     margin-bottom: -4px; */
-/* } */
-/* div.heads:hover a::before { */
-/*     content: "▶"; */
-/*     margin-right: 4px; */
-/* } */
-.verif .octicon-verified {
-  color: #0a0;
-  font-weight: normal; }
-
-.verif {
-  font-weight: normal;
-  padding: 6px; }
-
-/* .verif:hover .commiter{ */
-/*     color: #fff; */
-/*     background: $ver_color; */
-/*     border-radius: 5px; */
-/*     display: block; */
-/*     position: absolute; */
-/*     margin-top: -1em; */
-/*     margin-left: 9px; */
-/* } */
-/* .verif:hover .commiter::after { */
-/*     background-color: #F2F2F2; */
-/*     box-shadow: -2px 2px 2px 0 rgba( 178, 178, 178, .4 ); */
-/*     content: "\00a0"; */
-/*     display: block; */
-/*     height: 20px; */
-/*     left: -10px; */
-/*     position: relative; */
-/*     top: 20px; */
-/*     transform:             rotate( 45deg ); */
-/*     width:  20px; */
-/* } */
-.verif:hover .commiter {
-  background-color: #0a0;
-  border-radius: 5px;
-  border: 1px solid #bbb;
-  box-shadow: 1px 1px 5px #999;
-  display: inline-block;
-  padding: 10px 18px;
-  margin-left: 7px;
-  margin-right: 17px;
-  position: absolute;
-  vertical-align: top;
-  margin-top: -1.3em; }
-
-.verif:hover .tail {
-  position: absolute;
-  top: 12px;
-  left: -17px;
-  height: 17px;
-  width: 17px;
-  overflow: hidden; }
-
-.verif:hover .tail::before {
-  border: 1px solid #bbb;
-  background-color: #0a0;
-  box-shadow: 1px 1px 5px #999;
-  content: "\00a0";
-  display: block;
-  position: absolute;
-  top: 0px;
-  left: 12px;
-  height: 12px;
-  width: 12px;
-  transform: skew(-45deg); }
-
-.verif .commiter {
-  display: none;
-  color: #fff; }
-
-/* .verif:hover .octicon-verified { */
-/*     color: #fff; */
-/* } */
-.verif:hover .commiter {
-  display: inline-block;
-  z-index: 1000; }
-
-/* Style definition generated by highlight 2.4.5, http://www.andre-simon.de/ */
-/* Highlighting theme definition: */
-.num {
-  color: #2928ff; }
-
-.esc {
-  color: #ff00ff; }
-
-.str {
-  color: #ff0000; }
-
-.dstr {
-  color: #818100; }
-
-.slc {
-  color: #838183;
-  font-style: italic; }
-
-.com {
-  color: #838183;
-  font-style: italic; }
-
-.dir {
-  color: #008200; }
-
-.sym {
-  color: #000000; }
-
-.line {
-  color: #555555; }
-
-.kwa {
-  color: #000000;
-  font-weight: bold; }
-
-.kwb {
-  color: #830000; }
-
-.kwc {
-  color: #000000;
-  font-weight: bold; }
-
-.kwd {
-  color: #010181; }
+/*# sourceMappingURL=gitweb.css.map */
diff --git a/static/gpcf.scss b/static/gpcf.scss
new file mode 100644 (file)
index 0000000..afa7dc4
--- /dev/null
@@ -0,0 +1,376 @@
+@import url('font/octicons.css');
+$ver_color: #070;
+$theme_text_color: #550077;
+$theme_sec_color: #ddddff;
+$body_bg: #ffffff;
+$shadow_radius : 5px;
+$shadow : 1px 1px $shadow_radius #999;
+
+
+.title_text {
+    clear: both;
+}
+div.header {
+    background: $theme_sec_color;
+    padding: 6px;
+    margin-bottom: 4px;
+    clear: both;
+}
+
+.page_header {
+    margin-top: -3em;
+    display: block;
+    background: $theme_sec_color;
+    margin-left: -15em;
+    margin-right: -2em;
+    margin-bottom: 0.7em;
+    padding: 0.5em;
+    padding-bottom: 0.9em;
+}
+.page_header img {
+    float: right;
+}
+.search {
+    float: right;
+    color: #fff;
+    margin-bottom: 0.5em;
+}
+
+body {
+       font-family: "Liberation Sans", sans-serif;
+       text-align: left;
+       margin: 3em 2em 2em 15em;
+       background-color: #102;
+       color: #657b83;
+}
+div.page_nav, div.page_nav a {
+
+    list-style: none;   
+    display: block;
+    background: #124;
+    padding: 1em;
+}
+div.page_nav {
+    width: 12em;
+    margin-left: -15em;
+    position: absolute;
+}
+
+div.page_nav a, div.page_nav .current{
+    display: block;
+    padding: 0.3em 1em 0.3em 1em;
+    margin: 0 -1em 0 -1em;
+    color: #a57900;
+    text-decoration: none;
+}
+div.page_nav a:hover, ul.langs a:hover{
+    background: #ffeeff;
+                     }
+
+div.page_nav .current, ul.langs .current {
+    display: block;
+    color: #978;
+    border-right: .4em solid #645;
+}
+.verif .octicon-verified {
+    color: $ver_color;
+    font-weight: normal;
+}
+
+.verif {
+    font-weight: normal;
+    padding: 6px;
+}
+
+
+$nose_size : 12px;
+$border :  1px solid #bbb;
+
+.verif:hover .commiter {
+    background-color: $ver_color;
+    border-radius:    5px;
+    border:           $border;
+    box-shadow:       $shadow;
+    display:          inline-block;
+    padding:          10px 18px;
+    margin-left:     ($shadow_radius + $nose_size - 8px);
+    margin-right:    ($shadow_radius + $nose_size);
+    position:         absolute;
+    vertical-align:   top;
+    margin-top: -1.3em;
+}
+
+.verif:hover .tail {
+    position: absolute;
+    top:      $nose_size;
+    left:   -($shadow_radius + $nose_size);
+    height:  ($shadow_radius + $nose_size);
+    width:   ($shadow_radius + $nose_size);
+    overflow: hidden;
+}
+.verif:hover .tail::before {
+    border:            $border;
+    background-color:  $ver_color;
+    box-shadow:        $shadow;
+    content:           "\00a0";
+
+    display:           block;
+    position:          absolute;
+    top:               0px;
+    left:              $nose_size;
+    height:            $nose_size;
+    width:             $nose_size;
+    transform: skew( -45deg );
+}
+
+
+.verif .commiter {
+    display: none;
+    color: #fff;
+}
+/* .verif:hover .octicon-verified { */
+/*     color: #fff; */
+/* } */
+
+.verif:hover .commiter {
+       display: inline-block;
+       z-index: 1000;
+}
+
+span.refs > span {
+       padding: 3px 4px;
+       font-size: 90%;
+       font-weight: normal;
+       display: inline-block;
+       border-radius: 3px;
+       margin-bottom: 3px;
+       box-shadow: $shadow;
+       color: #000;
+}
+span.refs > span + span {
+    margin-top: 2px;
+}
+
+span.refs {
+    float: right;
+    margin-right: 4px;
+    margin-left: 0.7em;
+    text-align: right;
+    padding: 2px;
+    max-width: 30%;
+    margin-top: -5px;
+    vertical-align:top !important;
+}
+
+span.refs + *  {
+    clear: both;
+}
+
+
+span.refs span a {
+       text-decoration: none;
+       color: inherit;
+}
+
+span.refs span a:hover {
+       text-decoration: underline;
+}
+
+span.refs span.indirect {
+       font-style: italic;
+}
+
+span.refs span.ref {
+       background-color: #aaaaff;
+       border-color: #ccccff #0033cc #0033cc #ccccff;
+}
+
+span.refs span.tag {
+       background-color: #ffffaa;
+       border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
+}
+
+span.refs span.head {
+       background-color: #aaffaa;
+}
+span.refs span.remote {
+       background-color: #aaaaff;
+}
+
+
+div.branches_nav a:visited {
+    color: $theme_text_color;
+}
+div.page_header a:hover {
+       color: #880000;
+}
+
+div.branches_nav {
+    padding: 8px;
+}
+div.branches_nav {
+    border-bottom: 1px solid $theme_sec_color;;
+    padding-bottom: 0px;
+}
+
+div.branches_nav a, div.branches_nav .current {
+    display: inline-block;
+    padding: 6px;
+    margin: 1px;
+    margin-bottom: -1px;
+    border-radius: 4px 4px 0 0;
+}
+
+div.branches_nav a {
+    background: #eee;
+    border: 1px solid $theme_sec_color;
+    outline: 0;
+}
+div.branches_nav a:hover {
+    text-decoration: none;
+    background: lighten($theme_text_color, 60%);
+}
+
+
+
+
+div.branches_nav .current {
+    background: $theme_sec_color;
+    border-left: 1px solid $theme_sec_color;
+    border-right: 1px solid $theme_sec_color;
+    border-top: 1px solid $theme_sec_color;;
+    border-bottom: 1px solid $theme_sec_color;
+}
+
+a {
+       text-decoration: none;
+       color: #2aa198;
+}
+a:visited {
+       color: #2aa198;
+}
+a:hover {
+       color: #859900;
+       text-decoration: underline;
+}
+
+pre, code {color: #777;}
+.num    { color:#295899; }
+.esc    { color:#ff00ff; }
+.str    { color:#cc0033; font-style:italic;}
+.dstr   { color:#818100; }
+.slc    { color:#838143; font-style:italic; }
+.com, .co    { color:#838143; font-style:italic; }
+.dir    { color:#008200; }
+.sym    { color:#000000; }
+.line   { color:#555555; }
+.kwa, .kw    { color:#005500; font-weight:bold; }
+.kwb { color:#830044; }
+.kwc    { color:#995500; font-weight:bold; }
+.kwd, .ot   { color:#999900; }
+.ppc   { color:#7755ff; }
+.pps   { color:#8833ff; font-style:italic;}
+.opt   { color:#7777ff; }
+
+.pre, .diff {
+    font-family: monospace;
+    white-space: pre-wrap;
+    width: 100%;
+}
+
+div.diff.to_file a.path,
+div.diff.to_file {
+       color: #007000;
+}
+
+div.diff.add {
+       color: #008800;
+}
+
+div.diff.add span.marked {
+       background-color: #aaffaa;
+}
+
+div.diff.from_file a.path,
+div.diff.from_file {
+       color: #aa0000;
+}
+
+div.diff.rem {
+       color: #cc0000;
+}
+
+div.diff.rem span.marked {
+       background-color: #ffaaaa;
+}
+
+div.diff.chunk_header a,
+div.diff.chunk_header {
+       color: #990099;
+}
+
+div.diff.chunk_header {
+       border: dotted #ffe0ff;
+       border-width: 1px 0px 0px 0px;
+       margin-top: 2px;
+}
+div.chunk_block {
+       overflow: hidden;
+}
+
+div.chunk_block div.old{
+       float: left;
+       width: 49%;
+       overflow: hidden;
+}
+
+div.chunk_block div.new {
+       margin-left: 50%;
+       width: 50%;
+}
+
+
+
+td {
+    vertical-align: top;
+    padding-bottom: 5px;
+}
+
+footer, .page_footer {
+    margin-top: 3em;
+    text-align: right;
+    padding-top: 0.8em;
+    font-size: 10px;
+    position: relative;
+}
+
+table {
+    margin-top: 0.4em;
+}
+
+a.rss_logo {
+       float: right;
+       padding: 3px 5px;
+       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%;
+       text-align: center;
+       text-decoration: none;
+}
+
+a.rss_logo:hover {
+       background-color: #ee5500;
+}
+
+a.rss_logo.generic {
+       background-color: #ff8800;
+}
+
+a.rss_logo.generic:hover {
+       background-color: #ee7700;
+}