summaryrefslogtreecommitdiffabout
authorLars Hjemli <hjemli@gmail.com>2007-07-22 22:46:15 (UTC)
committer Lars Hjemli <hjemli@gmail.com>2007-07-22 22:47:18 (UTC)
commitf405d0bf75427c627778027e9900359335d6774e (patch) (side-by-side diff)
tree2db75faf97df382edc7667cd8cd06e833361a937
parenteb45342e735818b3c68cbab9b61b23e79ae74418 (diff)
downloadcgit-f405d0bf75427c627778027e9900359335d6774e.zip
cgit-f405d0bf75427c627778027e9900359335d6774e.tar.gz
cgit-f405d0bf75427c627778027e9900359335d6774e.tar.bz2
Add support for line number in url fragment
With this change, urls like http://hjemli.net/git/cgit/tree/ui-tree.c#43 can be used to jump directly to the specified line number. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--cgit.css9
-rw-r--r--ui-tree.c2
2 files changed, 10 insertions, 1 deletions
diff --git a/cgit.css b/cgit.css
index 43a40a3..54bbfcc 100644
--- a/cgit.css
+++ b/cgit.css
@@ -183,64 +183,73 @@ div.error {
font-weight: bold;
margin: 1em 2em;
}
a.ls-blob, a.ls-dir, a.ls-mod {
font-family: monospace;
}
td.ls-size {
text-align: right;
}
td.ls-size {
font-family: monospace;
}
td.ls-mode {
font-family: monospace;
}
table.blob {
margin-top: 0.5em;
border-top: solid 1px black;
}
table.blob td.no {
border-right: solid 1px black;
color: black;
background-color: #eee;
text-align: right;
}
+table.blob td.no a {
+ color: black;
+}
+
+table.blob td.no a:hover {
+ color: black;
+ text-decoration: none;
+}
+
table.blob td.txt {
white-space: pre;
font-family: monospace;
padding-left: 0.5em;
}
table.nowrap td {
white-space: nowrap;
}
table.commit-info {
border-collapse: collapse;
margin-top: 1.5em;
}
table.commit-info th {
text-align: left;
font-weight: normal;
padding: 0.1em 1em 0.1em 0.1em;
vertical-align: top;
}
table.commit-info td {
font-weight: normal;
padding: 0.1em 1em 0.1em 0.1em;
}
div.commit-subject {
font-weight: bold;
font-size: 125%;
margin: 1.5em 0em 0.5em 0em;
padding: 0em;
diff --git a/ui-tree.c b/ui-tree.c
index 75ce449..634132f 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -14,65 +14,65 @@ int header = 0;
static void print_object(const unsigned char *sha1, char *path)
{
enum object_type type;
unsigned char *buf;
unsigned long size, lineno, start, idx;
type = sha1_object_info(sha1, &size);
if (type == OBJ_BAD) {
cgit_print_error(fmt("Bad object name: %s",
sha1_to_hex(sha1)));
return;
}
buf = read_sha1_file(sha1, &type, &size);
if (!buf) {
cgit_print_error(fmt("Error reading object %s",
sha1_to_hex(sha1)));
return;
}
html(" blob: <a href='");
html_attr(cgit_pageurl(cgit_query_repo, "blob", fmt("id=%s", sha1_to_hex(sha1))));
htmlf("'>%s</a>",sha1_to_hex(sha1));
html("<table class='blob'>\n");
idx = 0;
start = 0;
lineno = 0;
while(idx < size) {
if (buf[idx] == '\n') {
buf[idx] = '\0';
- htmlf("<tr><td class='no'>%d</td><td class='txt'>",
+ htmlf("<tr><td class='no'><a name='%d'>%1$d</a></td><td class='txt'>",
++lineno);
html_txt(buf + start);
html("</td></tr>\n");
start = idx + 1;
}
idx++;
}
html("</table>\n");
}
static int ls_item(const unsigned char *sha1, const char *base, int baselen,
const char *pathname, unsigned int mode, int stage)
{
char *name;
char *fullpath;
enum object_type type;
unsigned long size = 0;
name = xstrdup(pathname);
fullpath = fmt("%s%s%s", cgit_query_path ? cgit_query_path : "",
cgit_query_path ? "/" : "", name);
type = sha1_object_info(sha1, &size);
if (type == OBJ_BAD && !S_ISDIRLNK(mode)) {
htmlf("<tr><td colspan='3'>Bad object: %s %s</td></tr>",
name,
sha1_to_hex(sha1));
return 0;
}
html("<tr><td class='ls-mode'>");