author | Lars Hjemli <hjemli@gmail.com> | 2007-06-17 22:18:42 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2007-06-18 06:29:53 (UTC) |
commit | b8be028a309381b83abe924f5e8e01cf02b121a2 (patch) (unidiff) | |
tree | 669b8ac253e8cc1d8568723167764f5428ae5d83 /ui-shared.c | |
parent | 4a0be586662843382ecfa53af34a13b291312bc0 (diff) | |
download | cgit-b8be028a309381b83abe924f5e8e01cf02b121a2.zip cgit-b8be028a309381b83abe924f5e8e01cf02b121a2.tar.gz cgit-b8be028a309381b83abe924f5e8e01cf02b121a2.tar.bz2 |
Add more menuitems on repo pages
In an attempt to get better usability, a set of 'semistatic' menuitems
are added to the page header on all pages except the repository index.
The menuitems (summary, log, files, commit and diff) honours the current
branch and revision. To switch the current branch one can use the branch
links on the summary page.
The backlink to the repository index page is now available by clicking
the static page heading.
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | ui-shared.c | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/ui-shared.c b/ui-shared.c index 15d8254..383b8ac 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -98,46 +98,50 @@ static char *repolink(char *title, char *class, char *page, char *head, | |||
98 | html_attr(title); | 98 | html_attr(title); |
99 | html("'"); | 99 | html("'"); |
100 | } | 100 | } |
101 | if (class) { | 101 | if (class) { |
102 | html(" class='"); | 102 | html(" class='"); |
103 | html_attr(class); | 103 | html_attr(class); |
104 | html("'"); | 104 | html("'"); |
105 | } | 105 | } |
106 | html(" href='"); | 106 | html(" href='"); |
107 | if (cgit_virtual_root) { | 107 | if (cgit_virtual_root) { |
108 | html_attr(cgit_virtual_root); | 108 | html_attr(cgit_virtual_root); |
109 | if (cgit_virtual_root[strlen(cgit_virtual_root) - 1] != '/') | 109 | if (cgit_virtual_root[strlen(cgit_virtual_root) - 1] != '/') |
110 | html("/"); | 110 | html("/"); |
111 | html_attr(cgit_repo->url); | 111 | html_attr(cgit_repo->url); |
112 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') | 112 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') |
113 | html("/"); | 113 | html("/"); |
114 | html(page); | 114 | if (page) { |
115 | html("/"); | 115 | html(page); |
116 | if (path) | 116 | html("/"); |
117 | html_attr(path); | 117 | if (path) |
118 | html_attr(path); | ||
119 | } | ||
118 | } else { | 120 | } else { |
119 | html(cgit_script_name); | 121 | html(cgit_script_name); |
120 | html("?url="); | 122 | html("?url="); |
121 | html_attr(cgit_repo->url); | 123 | html_attr(cgit_repo->url); |
122 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') | 124 | if (cgit_repo->url[strlen(cgit_repo->url) - 1] != '/') |
123 | html("/"); | 125 | html("/"); |
124 | html(page); | 126 | if (page) { |
125 | html("/"); | 127 | html(page); |
126 | if (path) | 128 | html("/"); |
127 | html_attr(path); | 129 | if (path) |
130 | html_attr(path); | ||
131 | } | ||
128 | delim = "&"; | 132 | delim = "&"; |
129 | } | 133 | } |
130 | if (head && strcmp(head, cgit_repo->defbranch)) { | 134 | if (head && strcmp(head, cgit_repo->defbranch)) { |
131 | html(delim); | 135 | html(delim); |
132 | html("h="); | 136 | html("h="); |
133 | html_attr(head); | 137 | html_attr(head); |
134 | delim = "&"; | 138 | delim = "&"; |
135 | } | 139 | } |
136 | return fmt("%s", delim); | 140 | return fmt("%s", delim); |
137 | } | 141 | } |
138 | 142 | ||
139 | static void reporevlink(char *page, char *name, char *title, char *class, | 143 | static void reporevlink(char *page, char *name, char *title, char *class, |
140 | char *head, char *rev, char *path) | 144 | char *head, char *rev, char *path) |
141 | { | 145 | { |
142 | char *delim; | 146 | char *delim; |
143 | 147 | ||
@@ -266,45 +270,64 @@ void cgit_print_docstart(char *title, struct cacheitem *item) | |||
266 | html("<link rel='stylesheet' type='text/css' href='"); | 270 | html("<link rel='stylesheet' type='text/css' href='"); |
267 | html_attr(cgit_css); | 271 | html_attr(cgit_css); |
268 | html("'/>\n"); | 272 | html("'/>\n"); |
269 | html("</head>\n"); | 273 | html("</head>\n"); |
270 | html("<body>\n"); | 274 | html("<body>\n"); |
271 | } | 275 | } |
272 | 276 | ||
273 | void cgit_print_docend() | 277 | void cgit_print_docend() |
274 | { | 278 | { |
275 | html("</td></tr></table>"); | 279 | html("</td></tr></table>"); |
276 | html("</body>\n</html>\n"); | 280 | html("</body>\n</html>\n"); |
277 | } | 281 | } |
278 | 282 | ||
279 | void cgit_print_pageheader(char *title, int show_search) | 283 | void cgit_print_pageheader(char *title, int show_search) |
280 | { | 284 | { |
281 | html("<table id='layout'>"); | 285 | html("<table id='layout'>"); |
282 | html("<tr><td id='header'>"); | 286 | html("<tr><td id='header'><a href='"); |
283 | html(cgit_root_title); | 287 | html_attr(cgit_rooturl()); |
284 | html("</td><td id='logo'>"); | 288 | html("'>"); |
289 | html_txt(cgit_root_title); | ||
290 | html("</a></td><td id='logo'>"); | ||
285 | html("<a href='"); | 291 | html("<a href='"); |
286 | html_attr(cgit_logo_link); | 292 | html_attr(cgit_logo_link); |
287 | htmlf("'><img src='%s' alt='logo'/></a>", cgit_logo); | 293 | htmlf("'><img src='%s' alt='logo'/></a>", cgit_logo); |
288 | html("</td></tr>"); | 294 | html("</td></tr>"); |
289 | html("<tr><td id='crumb'>"); | 295 | html("<tr><td id='crumb'>"); |
290 | htmlf("<a href='%s'>root</a>", cgit_rooturl()); | ||
291 | if (cgit_query_repo) { | 296 | if (cgit_query_repo) { |
292 | htmlf(" : <a href='%s'>", cgit_repourl(cgit_repo->url)); | ||
293 | html_txt(cgit_repo->name); | 297 | html_txt(cgit_repo->name); |
294 | htmlf("</a> : %s", title); | 298 | html(" ("); |
299 | html_txt(cgit_query_head); | ||
300 | html(") : "); | ||
301 | reporevlink(NULL, "summary", NULL, NULL, cgit_query_head, | ||
302 | NULL, NULL); | ||
303 | html(" "); | ||
304 | cgit_log_link("log", NULL, NULL, cgit_query_head, | ||
305 | cgit_query_sha1, cgit_query_path); | ||
306 | html(" "); | ||
307 | cgit_tree_link("files", NULL, NULL, cgit_query_head, | ||
308 | cgit_query_sha1, cgit_query_path); | ||
309 | html(" "); | ||
310 | cgit_commit_link("commit", NULL, NULL, cgit_query_head, | ||
311 | cgit_query_sha1); | ||
312 | html(" "); | ||
313 | cgit_diff_link("diff", NULL, NULL, cgit_query_head, | ||
314 | cgit_query_sha1, cgit_query_sha2, | ||
315 | cgit_query_path); | ||
316 | } else { | ||
317 | html_txt("Index of repositories"); | ||
295 | } | 318 | } |
296 | html("</td>"); | 319 | html("</td>"); |
297 | html("<td id='search'>"); | 320 | html("<td id='search'>"); |
298 | if (show_search) { | 321 | if (show_search) { |
299 | html("<form method='get' action='"); | 322 | html("<form method='get' action='"); |
300 | html_attr(cgit_currurl()); | 323 | html_attr(cgit_currurl()); |
301 | html("'>"); | 324 | html("'>"); |
302 | if (!cgit_virtual_root) { | 325 | if (!cgit_virtual_root) { |
303 | if (cgit_query_repo) | 326 | if (cgit_query_repo) |
304 | html_hidden("r", cgit_query_repo); | 327 | html_hidden("r", cgit_query_repo); |
305 | if (cgit_query_page) | 328 | if (cgit_query_page) |
306 | html_hidden("p", cgit_query_page); | 329 | html_hidden("p", cgit_query_page); |
307 | } | 330 | } |
308 | if (cgit_query_head) | 331 | if (cgit_query_head) |
309 | html_hidden("h", cgit_query_head); | 332 | html_hidden("h", cgit_query_head); |
310 | if (cgit_query_sha1) | 333 | if (cgit_query_sha1) |