cgit

commit a90e2aa4e1bd5c3a9657ce7d675943f4a265cc9f

Author: Onne Gorter <onne.gorter@avinity.net>

changed objects are outputted, allowing for selections of code only

 cgit.css | 27 ++++++++++++++++-----------
 tests/t0104-tree.sh | 4 ++--
 ui-tree.c | 31 ++++++++++++++++---------------


diff --git a/cgit.css b/cgit.css
index 7928c2f4f86f0b597a3b992ff7815adca1d4bef0..068c37b8bf5f9d1cbd76284fbad758c05a2eafff 100644
--- a/cgit.css
+++ b/cgit.css
@@ -236,26 +236,31 @@ 	margin-top: 0.5em;
 	border-top: solid 1px black;
 }
 
-table.blob td.no {
-	border-right: solid 1px black;
+table.blob td.lines {
+	margin: 0; padding: 0;
+	vertical-align: top;
 	color: black;
+}
+
+table.blob td.linenumbers {
+	margin: 0; padding: 0;
+	vertical-align: top;
+	border-right: 1px solid gray;
 	background-color: #eee;
-	text-align: right;
 }
 
-table.blob td.no a {
-	color: black;
+table.blob pre {
+	padding: 0; margin: 0;
 }
 
-table.blob td.no a:hover {
-	color: black;
+table.blob a.no {
+	color: gray;
+	text-align: right;
 	text-decoration: none;
 }
 
-table.blob td.txt {
-	white-space: pre;
-	font-family: monospace;
-	padding-left: 0.5em;
+table.blob a.no a:hover {
+	color: black;
 }
 
 table.nowrap td {




diff --git a/tests/t0104-tree.sh b/tests/t0104-tree.sh
index 33f4eb00ff2808e9f4335b397e809d695b464301..2ce1251cbf56d06cc0f940cb36bd18b4537c78ef 100755
--- a/tests/t0104-tree.sh
+++ b/tests/t0104-tree.sh
@@ -11,11 +11,11 @@
 run_test 'generate bar/tree/file-50' 'cgit_url "bar/tree/file-50" >trash/tmp'
 
 run_test 'find line 1' '
-	grep -e "<a id=.n1. name=.n1. href=.#n1.>1</a>" trash/tmp
+	grep -e "<a class=.no. id=.n1. name=.n1. href=.#n1.>1</a>" trash/tmp
 '
 
 run_test 'no line 2' '
-	! grep -e "<a id=.n2. name=.n2. href=.#n2.>2</a>" trash/tmp
+	! grep -e "<a class=.no. id=.n2. name=.n2. href=.#n2.>2</a>" trash/tmp
 '
 
 run_test 'generate foo+bar/tree' 'cgit_url "foo%2bbar/tree" >trash/tmp'




diff --git a/ui-tree.c b/ui-tree.c
index 9876c9972e9558f82632d03280997cc8db234fac..2a8625c29e1bba45c0160b856fa4602f08cd3b93 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -18,8 +18,8 @@ static void print_object(const unsigned char *sha1, char *path)
 {
 	enum object_type type;
 	char *buf;
-	unsigned long size, lineno, start, idx;
-	const char *linefmt = "<tr><td class='no'><a id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a></td><td class='txt'>";
+	unsigned long size, lineno, idx;
+	const char *numberfmt = "<a class='no' id='n%1$d' name='n%1$d' href='#n%1$d'>%1$d</a>\n";
 
 	type = sha1_object_info(sha1, &size);
 	if (type == OBJ_BAD) {
@@ -38,27 +38,28 @@
 	html(" (");
 	cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
 		        curr_rev, path);
-	htmlf(")<br/>blob: %s", sha1_to_hex(sha1));
+	htmlf(")<br/>blob: %s\n", sha1_to_hex(sha1));
 
 	html("<table summary='blob content' class='blob'>\n");
+	html("<tr>\n");
+
+	html("<td class='linenumbers'><pre>");
 	idx = 0;
-	start = 0;
 	lineno = 0;
-	while(idx < size) {
+	htmlf(numberfmt, ++lineno);
+	while(idx < size - 1) { // skip absolute last newline
 		if (buf[idx] == '\n') {
-			buf[idx] = '\0';
-			htmlf(linefmt, ++lineno);
-			html_txt(buf + start);
-			html("</td></tr>\n");
-			start = idx + 1;
+			htmlf(numberfmt, ++lineno);
 		}
 		idx++;
 	}
-	if (start < idx) {
-		htmlf(linefmt, ++lineno);
-		html_txt(buf + start);
-	}
-	html("</td></tr>\n");
+	html("</pre></td>\n");
+
+	html("<td class='lines'><pre><code>");
+	html_txt(buf);
+	html("</code></pre></td>\n");
+
+	html("</tr>\n");
 	html("</table>\n");
 }