Line numbers on blob pages - stagit-gopher - A git gopher frontend. (mirror)
 (HTM) git clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 0a4451bc150154cfb0390f242860d4b66930e1bd
 (DIR) parent 3f77fb211d696b8d768fdd1f0a015cde3faa6cfe
 (HTM) Author: Eivind Uggedal <eivind@uggedal.com>
       Date:   Thu, 10 Dec 2015 22:24:18 +0000
       
       Line numbers on blob pages
       
       Diffstat:
         M style.css                           |      15 ++++++++++++++-
         M urmoms.c                            |      29 ++++++++++++++++++++++++-----
       
       2 files changed, 38 insertions(+), 6 deletions(-)
       ---
 (DIR) diff --git a/style.css b/style.css
       @@ -21,6 +21,15 @@ a:hover {
                text-decoration: underline;
        }
        
       +#blob a {
       +        color: #777;
       +}
       +
       +#blob a:hover {
       +        color: blue;
       +        text-decoration: none;
       +}
       +
        table thead td {
                font-weight: bold;
        }
       @@ -29,10 +38,14 @@ table td {
                padding: 0 0.4em;
        }
        
       -#content table tr:hover td {
       +#log tr:hover td, #files tr:hover td {
                background-color: #eee;
        }
        
       +td.num {
       +        text-align: right;
       +}
       +
        .desc {
                color: #777;
        }
 (DIR) diff --git a/urmoms.c b/urmoms.c
       @@ -241,7 +241,28 @@ printtimeshort(FILE *fp, const git_time *intime)
        void
        writeblobhtml(FILE *fp, const git_blob *blob)
        {
       -        xmlencode(fp, git_blob_rawcontent(blob), (size_t)git_blob_rawsize(blob));
       +        off_t i = 0;
       +        size_t n = 1;
       +        char *nfmt = "<a href=\"#l%d\" id=\"l%d\">%d</a>\n";
       +        const char *s = git_blob_rawcontent(blob);
       +        git_off_t len = git_blob_rawsize(blob);
       +
       +        fputs("<table id=\"blob\"><tr><td class=\"num\"><pre>\n", fp);
       +
       +        if (len) {
       +                fprintf(fp, nfmt, n, n, n);
       +                while (i < len - 1) {
       +                        if (s[i] == '\n') {
       +                                n++;
       +                                fprintf(fp, nfmt, n, n, n);
       +                        }
       +                        i++;
       +                }
       +        }
       +
       +        fputs("</pre></td><td><pre>\n", fp);
       +        xmlencode(fp, s, (size_t)len);
       +        fputs("</pre></td></tr></table>\n", fp);
        }
        
        void
       @@ -392,7 +413,7 @@ writelog(FILE *fp)
                git_revwalk_simplify_first_parent(w);
        
                /* TODO: also make "expanded" log ? (with message body) */
       -        fputs("<table><thead>\n<tr><td>Age</td><td>Commit message</td><td>Author</td>"
       +        fputs("<table id=\"log\"><thead>\n<tr><td>Age</td><td>Commit message</td><td>Author</td>"
                      "<td>Files</td><td>+</td><td>-</td></tr>\n</thead><tbody>\n", fp);
                while (!git_revwalk_next(&id, w)) {
                        relpath = "";
       @@ -553,11 +574,9 @@ writeblob(const git_index_entry *entry)
                if (git_blob_is_binary((git_blob *)obj)) {
                        fprintf(fp, "<p>Binary file</p>\n");
                } else {
       -                fputs("<pre>\n", fp);
                        writeblobhtml(fp, (git_blob *)obj);
                        if (ferror(fp))
                                err(1, "fwrite");
       -                fputs("</pre>\n", fp);
                }
                git_object_free(obj);
                writefooter(fp);
       @@ -575,7 +594,7 @@ writefiles(FILE *fp)
                git_index *index;
                size_t count, i;
        
       -        fputs("<table><thead>\n"
       +        fputs("<table id=\"files\"><thead>\n"
                      "<tr><td>Mode</td><td>Name</td><td>Size</td></tr>\n"
                      "</thead><tbody>\n", fp);