-rw-r--r-- | ui-shared.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/ui-shared.c b/ui-shared.c index e795043..cb8a8df 100644 --- a/ui-shared.c +++ b/ui-shared.c | |||
@@ -1,76 +1,97 @@ | |||
1 | /* ui-shared.c: common web output functions | 1 | /* ui-shared.c: common web output functions |
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 "cgit.h" | 9 | #include "cgit.h" |
10 | 10 | ||
11 | const char cgit_doctype[] = | 11 | const char cgit_doctype[] = |
12 | "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" | 12 | "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" |
13 | " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; | 13 | " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; |
14 | 14 | ||
15 | static char *http_date(time_t t) | 15 | static char *http_date(time_t t) |
16 | { | 16 | { |
17 | static char day[][4] = | 17 | static char day[][4] = |
18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | 18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; |
19 | static char month[][4] = | 19 | static char month[][4] = |
20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", | 20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", |
21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; | 21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; |
22 | struct tm *tm = gmtime(&t); | 22 | struct tm *tm = gmtime(&t); |
23 | return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], | 23 | return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], |
24 | tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, | 24 | tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, |
25 | tm->tm_hour, tm->tm_min, tm->tm_sec); | 25 | tm->tm_hour, tm->tm_min, tm->tm_sec); |
26 | } | 26 | } |
27 | 27 | ||
28 | static int ttl_seconds(int ttl) | 28 | static int ttl_seconds(int ttl) |
29 | { | 29 | { |
30 | if (ttl<0) | 30 | if (ttl<0) |
31 | return 60 * 60 * 24 * 365; | 31 | return 60 * 60 * 24 * 365; |
32 | else | 32 | else |
33 | return ttl * 60; | 33 | return ttl * 60; |
34 | } | 34 | } |
35 | 35 | ||
36 | void cgit_print_error(char *msg) | 36 | void cgit_print_error(char *msg) |
37 | { | 37 | { |
38 | html("<div class='error'>"); | 38 | html("<div class='error'>"); |
39 | html_txt(msg); | 39 | html_txt(msg); |
40 | html("</div>\n"); | 40 | html("</div>\n"); |
41 | } | 41 | } |
42 | |||
43 | char *cgit_repourl(const char *reponame) | ||
44 | { | ||
45 | if (cgit_virtual_root) { | ||
46 | return fmt("%s/%s/", cgit_virtual_root, reponame); | ||
47 | } else { | ||
48 | return fmt("?r=%s", reponame); | ||
49 | } | ||
50 | } | ||
51 | |||
52 | char *cgit_pageurl(const char *reponame, const char *pagename, | ||
53 | const char *query) | ||
54 | { | ||
55 | if (cgit_virtual_root) { | ||
56 | return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, | ||
57 | pagename, query); | ||
58 | } else { | ||
59 | return fmt("?r=%s&p=%s&%s", reponame, pagename, query); | ||
60 | } | ||
61 | } | ||
62 | |||
42 | void cgit_print_docstart(char *title, struct cacheitem *item) | 63 | void cgit_print_docstart(char *title, struct cacheitem *item) |
43 | { | 64 | { |
44 | html("Content-Type: text/html; charset=utf-8\n"); | 65 | html("Content-Type: text/html; charset=utf-8\n"); |
45 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); | 66 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); |
46 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + | 67 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + |
47 | ttl_seconds(item->ttl))); | 68 | ttl_seconds(item->ttl))); |
48 | html("\n"); | 69 | html("\n"); |
49 | html(cgit_doctype); | 70 | html(cgit_doctype); |
50 | html("<html>\n"); | 71 | html("<html>\n"); |
51 | html("<head>\n"); | 72 | html("<head>\n"); |
52 | html("<title>"); | 73 | html("<title>"); |
53 | html_txt(title); | 74 | html_txt(title); |
54 | html("</title>\n"); | 75 | html("</title>\n"); |
55 | htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); | 76 | htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); |
56 | html("<link rel='stylesheet' type='text/css' href='"); | 77 | html("<link rel='stylesheet' type='text/css' href='"); |
57 | html_attr(cgit_css); | 78 | html_attr(cgit_css); |
58 | html("'/>\n"); | 79 | html("'/>\n"); |
59 | html("</head>\n"); | 80 | html("</head>\n"); |
60 | html("<body>\n"); | 81 | html("<body>\n"); |
61 | } | 82 | } |
62 | 83 | ||
63 | void cgit_print_docend() | 84 | void cgit_print_docend() |
64 | { | 85 | { |
65 | html("</body>\n</html>\n"); | 86 | html("</body>\n</html>\n"); |
66 | } | 87 | } |
67 | 88 | ||
68 | void cgit_print_pageheader(char *title) | 89 | void cgit_print_pageheader(char *title) |
69 | { | 90 | { |
70 | html("<div id='header'>"); | 91 | html("<div id='header'>"); |
71 | htmlf("<a href='%s'>", cgit_logo_link); | 92 | htmlf("<a href='%s'>", cgit_logo_link); |
72 | htmlf("<img id='logo' src='%s'/>\n", cgit_logo); | 93 | htmlf("<img id='logo' src='%s'/>\n", cgit_logo); |
73 | htmlf("</a>"); | 94 | htmlf("</a>"); |
74 | html_txt(title); | 95 | html_txt(title); |
75 | html("</div>"); | 96 | html("</div>"); |
76 | } | 97 | } |