]> gitweb.ps.run Git - ps-cgit/blob - ui-summary.c
Merge branch 'stable'
[ps-cgit] / ui-summary.c
1 /* ui-summary.c: functions for generating repo summary page
2  *
3  * Copyright (C) 2006 Lars Hjemli
4  * Copyright (C) 2010 Jason A. Donenfeld <Jason@zx2c4.com>
5  *
6  * Licensed under GNU General Public License v2
7  *   (see COPYING for full license text)
8  */
9
10 #include "cgit.h"
11 #include "html.h"
12 #include "ui-log.h"
13 #include "ui-refs.h"
14 #include "ui-blob.h"
15
16 int urls = 0;
17
18 static void print_url(char *base, char *suffix)
19 {
20         if (!base || !*base)
21                 return;
22         if (urls++ == 0) {
23                 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
24                 html("<tr><th class='left' colspan='4'>Clone</th></tr>\n");
25         }
26         if (suffix && *suffix)
27                 base = fmt("%s/%s", base, suffix);
28         html("<tr><td colspan='4'><a href='");
29         html_url_path(base);
30         html("'>");
31         html_txt(base);
32         html("</a></td></tr>\n");
33 }
34
35 static void print_urls(char *txt, char *suffix)
36 {
37         char *h = txt, *t, c;
38
39         while (h && *h) {
40                 while (h && *h == ' ')
41                         h++;
42                 t = h;
43                 while (t && *t && *t != ' ')
44                         t++;
45                 c = *t;
46                 *t = 0;
47                 print_url(h, suffix);
48                 *t = c;
49                 h = t;
50         }
51 }
52
53 void cgit_print_summary()
54 {
55         html("<table summary='repository info' class='list nowrap'>");
56         cgit_print_branches(ctx.cfg.summary_branches);
57         html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
58         cgit_print_tags(ctx.cfg.summary_tags);
59         if (ctx.cfg.summary_log > 0) {
60                 html("<tr class='nohover'><td colspan='4'>&nbsp;</td></tr>");
61                 cgit_print_log(ctx.qry.head, 0, ctx.cfg.summary_log, NULL,
62                                NULL, NULL, 0);
63         }
64         if (ctx.repo->clone_url)
65                 print_urls(ctx.repo->clone_url, NULL);
66         else if (ctx.cfg.clone_prefix)
67                 print_urls(ctx.cfg.clone_prefix, ctx.repo->url);
68         html("</table>");
69 }
70
71 void cgit_print_repo_readme(char *path)
72 {
73         char *slash, *tmp, *colon, *ref = 0;
74
75         if (!ctx.repo->readme)
76                 return;
77
78         if (path) {
79                 slash = strrchr(ctx.repo->readme, '/');
80                 if (!slash) {
81                         slash = strchr(ctx.repo->readme, ':');
82                         if (!slash)
83                                 return;
84                 }
85                 tmp = xmalloc(slash - ctx.repo->readme + 1 + strlen(path) + 1);
86                 strncpy(tmp, ctx.repo->readme, slash - ctx.repo->readme + 1);
87                 strcpy(tmp + (slash - ctx.repo->readme + 1), path);
88         } else
89                 tmp = ctx.repo->readme;
90         colon = strchr(tmp, ':');
91         if (colon && strlen(colon) > 1) {
92                 *colon = '\0';
93                 ref = tmp;
94                 tmp = colon + 1;
95                 while ((*tmp == '/' || *tmp == ':') && *tmp != '\0')
96                         ++tmp;
97                 if (!(*tmp))
98                         return;
99         }
100         html("<div id='summary'>");
101         if (ctx.repo->about_filter)
102                 cgit_open_filter(ctx.repo->about_filter);
103         if (ref)
104                 cgit_print_file(tmp, ref);
105         else
106                 html_include(tmp);
107         if (ctx.repo->about_filter)
108                 cgit_close_filter(ctx.repo->about_filter);
109         html("</div>");
110 }