author | Lars Hjemli <hjemli@gmail.com> | 2008-04-28 22:35:49 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2008-04-28 22:35:49 (UTC) |
commit | 8062817885495b07cf70304c484e8f18c78ab2b5 (patch) (unidiff) | |
tree | 5cb5c13a176ba400dcc65d65cd5b03588b41686d | |
parent | 90f64ad96d2e4490d68db71554ebce7a54206f80 (diff) | |
download | cgit-8062817885495b07cf70304c484e8f18c78ab2b5.zip cgit-8062817885495b07cf70304c484e8f18c78ab2b5.tar.gz cgit-8062817885495b07cf70304c484e8f18c78ab2b5.tar.bz2 |
Move included header-file out of repolist table
When the 'index-header' option is specified in cgitrc we used to print
the included file content inside the repolist table, which is bad style.
This commit makes the included file be printed before the table.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-repolist.c | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/ui-repolist.c b/ui-repolist.c index 98009c0..200640c 100644 --- a/ui-repolist.c +++ b/ui-repolist.c | |||
@@ -1,141 +1,138 @@ | |||
1 | /* ui-repolist.c: functions for generating the repolist page | 1 | /* ui-repolist.c: functions for generating the repolist page |
2 | * | 2 | * |
3 | * Copyright (C) 2006 Lars Hjemli | 3 | * Copyright (C) 2006 Lars Hjemli |
4 | * | 4 | * |
5 | * Licensed under GNU General Public License v2 | 5 | * Licensed under GNU General Public License v2 |
6 | * (see COPYING for full license text) | 6 | * (see COPYING for full license text) |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <time.h> | 9 | #include <time.h> |
10 | 10 | ||
11 | #include "cgit.h" | 11 | #include "cgit.h" |
12 | #include "html.h" | 12 | #include "html.h" |
13 | #include "ui-shared.h" | 13 | #include "ui-shared.h" |
14 | 14 | ||
15 | time_t read_agefile(char *path) | 15 | time_t read_agefile(char *path) |
16 | { | 16 | { |
17 | FILE *f; | 17 | FILE *f; |
18 | static char buf[64], buf2[64]; | 18 | static char buf[64], buf2[64]; |
19 | 19 | ||
20 | if (!(f = fopen(path, "r"))) | 20 | if (!(f = fopen(path, "r"))) |
21 | return -1; | 21 | return -1; |
22 | fgets(buf, sizeof(buf), f); | 22 | fgets(buf, sizeof(buf), f); |
23 | fclose(f); | 23 | fclose(f); |
24 | if (parse_date(buf, buf2, sizeof(buf2))) | 24 | if (parse_date(buf, buf2, sizeof(buf2))) |
25 | return strtoul(buf2, NULL, 10); | 25 | return strtoul(buf2, NULL, 10); |
26 | else | 26 | else |
27 | return 0; | 27 | return 0; |
28 | } | 28 | } |
29 | 29 | ||
30 | static void print_modtime(struct cgit_repo *repo) | 30 | static void print_modtime(struct cgit_repo *repo) |
31 | { | 31 | { |
32 | char *path; | 32 | char *path; |
33 | struct stat s; | 33 | struct stat s; |
34 | 34 | ||
35 | path = fmt("%s/%s", repo->path, ctx.cfg.agefile); | 35 | path = fmt("%s/%s", repo->path, ctx.cfg.agefile); |
36 | if (stat(path, &s) == 0) { | 36 | if (stat(path, &s) == 0) { |
37 | cgit_print_age(read_agefile(path), -1, NULL); | 37 | cgit_print_age(read_agefile(path), -1, NULL); |
38 | return; | 38 | return; |
39 | } | 39 | } |
40 | 40 | ||
41 | path = fmt("%s/refs/heads/%s", repo->path, repo->defbranch); | 41 | path = fmt("%s/refs/heads/%s", repo->path, repo->defbranch); |
42 | if (stat(path, &s) != 0) | 42 | if (stat(path, &s) != 0) |
43 | return; | 43 | return; |
44 | cgit_print_age(s.st_mtime, -1, NULL); | 44 | cgit_print_age(s.st_mtime, -1, NULL); |
45 | } | 45 | } |
46 | 46 | ||
47 | int is_match(struct cgit_repo *repo) | 47 | int is_match(struct cgit_repo *repo) |
48 | { | 48 | { |
49 | if (!ctx.qry.search) | 49 | if (!ctx.qry.search) |
50 | return 1; | 50 | return 1; |
51 | if (repo->url && strcasestr(repo->url, ctx.qry.search)) | 51 | if (repo->url && strcasestr(repo->url, ctx.qry.search)) |
52 | return 1; | 52 | return 1; |
53 | if (repo->name && strcasestr(repo->name, ctx.qry.search)) | 53 | if (repo->name && strcasestr(repo->name, ctx.qry.search)) |
54 | return 1; | 54 | return 1; |
55 | if (repo->desc && strcasestr(repo->desc, ctx.qry.search)) | 55 | if (repo->desc && strcasestr(repo->desc, ctx.qry.search)) |
56 | return 1; | 56 | return 1; |
57 | if (repo->owner && strcasestr(repo->owner, ctx.qry.search)) | 57 | if (repo->owner && strcasestr(repo->owner, ctx.qry.search)) |
58 | return 1; | 58 | return 1; |
59 | return 0; | 59 | return 0; |
60 | } | 60 | } |
61 | 61 | ||
62 | void print_header(int columns) | 62 | void print_header(int columns) |
63 | { | 63 | { |
64 | if (ctx.cfg.index_header) { | ||
65 | htmlf("<tr class='nohover'><td colspan='%d' class='include-block'>", | ||
66 | columns); | ||
67 | html_include(ctx.cfg.index_header); | ||
68 | html("</td></tr>"); | ||
69 | } | ||
70 | html("<tr class='nohover'>" | 64 | html("<tr class='nohover'>" |
71 | "<th class='left'>Name</th>" | 65 | "<th class='left'>Name</th>" |
72 | "<th class='left'>Description</th>" | 66 | "<th class='left'>Description</th>" |
73 | "<th class='left'>Owner</th>" | 67 | "<th class='left'>Owner</th>" |
74 | "<th class='left'>Idle</th>"); | 68 | "<th class='left'>Idle</th>"); |
75 | if (ctx.cfg.enable_index_links) | 69 | if (ctx.cfg.enable_index_links) |
76 | html("<th class='left'>Links</th>"); | 70 | html("<th class='left'>Links</th>"); |
77 | html("</tr>\n"); | 71 | html("</tr>\n"); |
78 | } | 72 | } |
79 | 73 | ||
80 | void cgit_print_repolist() | 74 | void cgit_print_repolist() |
81 | { | 75 | { |
82 | int i, columns = 4, hits = 0, header = 0; | 76 | int i, columns = 4, hits = 0, header = 0; |
83 | char *last_group = NULL; | 77 | char *last_group = NULL; |
84 | 78 | ||
85 | if (ctx.cfg.enable_index_links) | 79 | if (ctx.cfg.enable_index_links) |
86 | columns++; | 80 | columns++; |
87 | 81 | ||
88 | ctx.page.title = ctx.cfg.root_title; | 82 | ctx.page.title = ctx.cfg.root_title; |
89 | cgit_print_http_headers(&ctx); | 83 | cgit_print_http_headers(&ctx); |
90 | cgit_print_docstart(&ctx); | 84 | cgit_print_docstart(&ctx); |
91 | cgit_print_pageheader(&ctx); | 85 | cgit_print_pageheader(&ctx); |
92 | 86 | ||
87 | if (ctx.cfg.index_header) | ||
88 | html_include(ctx.cfg.index_header); | ||
89 | |||
93 | html("<table summary='repository list' class='list nowrap'>"); | 90 | html("<table summary='repository list' class='list nowrap'>"); |
94 | for (i=0; i<cgit_repolist.count; i++) { | 91 | for (i=0; i<cgit_repolist.count; i++) { |
95 | ctx.repo = &cgit_repolist.repos[i]; | 92 | ctx.repo = &cgit_repolist.repos[i]; |
96 | if (!is_match(ctx.repo)) | 93 | if (!is_match(ctx.repo)) |
97 | continue; | 94 | continue; |
98 | if (!header++) | 95 | if (!header++) |
99 | print_header(columns); | 96 | print_header(columns); |
100 | hits++; | 97 | hits++; |
101 | if ((last_group == NULL && ctx.repo->group != NULL) || | 98 | if ((last_group == NULL && ctx.repo->group != NULL) || |
102 | (last_group != NULL && ctx.repo->group == NULL) || | 99 | (last_group != NULL && ctx.repo->group == NULL) || |
103 | (last_group != NULL && ctx.repo->group != NULL && | 100 | (last_group != NULL && ctx.repo->group != NULL && |
104 | strcmp(ctx.repo->group, last_group))) { | 101 | strcmp(ctx.repo->group, last_group))) { |
105 | htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>", | 102 | htmlf("<tr class='nohover'><td colspan='%d' class='repogroup'>", |
106 | columns); | 103 | columns); |
107 | html_txt(ctx.repo->group); | 104 | html_txt(ctx.repo->group); |
108 | html("</td></tr>"); | 105 | html("</td></tr>"); |
109 | last_group = ctx.repo->group; | 106 | last_group = ctx.repo->group; |
110 | } | 107 | } |
111 | htmlf("<tr><td class='%s'>", | 108 | htmlf("<tr><td class='%s'>", |
112 | ctx.repo->group ? "sublevel-repo" : "toplevel-repo"); | 109 | ctx.repo->group ? "sublevel-repo" : "toplevel-repo"); |
113 | html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); | 110 | html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); |
114 | html_txt(ctx.repo->name); | 111 | html_txt(ctx.repo->name); |
115 | html_link_close(); | 112 | html_link_close(); |
116 | html("</td><td>"); | 113 | html("</td><td>"); |
117 | html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); | 114 | html_link_open(cgit_repourl(ctx.repo->url), NULL, NULL); |
118 | html_ntxt(ctx.cfg.max_repodesc_len, ctx.repo->desc); | 115 | html_ntxt(ctx.cfg.max_repodesc_len, ctx.repo->desc); |
119 | html_link_close(); | 116 | html_link_close(); |
120 | html("</td><td>"); | 117 | html("</td><td>"); |
121 | html_txt(ctx.repo->owner); | 118 | html_txt(ctx.repo->owner); |
122 | html("</td><td>"); | 119 | html("</td><td>"); |
123 | print_modtime(ctx.repo); | 120 | print_modtime(ctx.repo); |
124 | html("</td>"); | 121 | html("</td>"); |
125 | if (ctx.cfg.enable_index_links) { | 122 | if (ctx.cfg.enable_index_links) { |
126 | html("<td>"); | 123 | html("<td>"); |
127 | html_link_open(cgit_repourl(ctx.repo->url), | 124 | html_link_open(cgit_repourl(ctx.repo->url), |
128 | NULL, "button"); | 125 | NULL, "button"); |
129 | html("summary</a>"); | 126 | html("summary</a>"); |
130 | cgit_log_link("log", NULL, "button", NULL, NULL, NULL, | 127 | cgit_log_link("log", NULL, "button", NULL, NULL, NULL, |
131 | 0, NULL, NULL); | 128 | 0, NULL, NULL); |
132 | cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL); | 129 | cgit_tree_link("tree", NULL, "button", NULL, NULL, NULL); |
133 | html("</td>"); | 130 | html("</td>"); |
134 | } | 131 | } |
135 | html("</tr>\n"); | 132 | html("</tr>\n"); |
136 | } | 133 | } |
137 | html("</table>"); | 134 | html("</table>"); |
138 | if (!hits) | 135 | if (!hits) |
139 | cgit_print_error("No repositories found"); | 136 | cgit_print_error("No repositories found"); |
140 | cgit_print_docend(); | 137 | cgit_print_docend(); |
141 | } | 138 | } |