diff options
Diffstat (limited to 'ui-shared.c')
-rw-r--r-- | ui-shared.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/ui-shared.c b/ui-shared.c new file mode 100644 index 0000000..e795043 --- /dev/null +++ b/ui-shared.c | |||
@@ -0,0 +1,76 @@ | |||
1 | /* ui-shared.c: common web output functions | ||
2 | * | ||
3 | * Copyright (C) 2006 Lars Hjemli | ||
4 | * | ||
5 | * Licensed under GNU General Public License v2 | ||
6 | * (see COPYING for full license text) | ||
7 | */ | ||
8 | |||
9 | #include "cgit.h" | ||
10 | |||
11 | const char cgit_doctype[] = | ||
12 | "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" | ||
13 | " \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; | ||
14 | |||
15 | static char *http_date(time_t t) | ||
16 | { | ||
17 | static char day[][4] = | ||
18 | {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; | ||
19 | static char month[][4] = | ||
20 | {"Jan", "Feb", "Mar", "Apr", "May", "Jun", | ||
21 | "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; | ||
22 | struct tm *tm = gmtime(&t); | ||
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, | ||
25 | tm->tm_hour, tm->tm_min, tm->tm_sec); | ||
26 | } | ||
27 | |||
28 | static int ttl_seconds(int ttl) | ||
29 | { | ||
30 | if (ttl<0) | ||
31 | return 60 * 60 * 24 * 365; | ||
32 | else | ||
33 | return ttl * 60; | ||
34 | } | ||
35 | |||
36 | void cgit_print_error(char *msg) | ||
37 | { | ||
38 | html("<div class='error'>"); | ||
39 | html_txt(msg); | ||
40 | html("</div>\n"); | ||
41 | } | ||
42 | void cgit_print_docstart(char *title, struct cacheitem *item) | ||
43 | { | ||
44 | html("Content-Type: text/html; charset=utf-8\n"); | ||
45 | htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); | ||
46 | htmlf("Expires: %s\n", http_date(item->st.st_mtime + | ||
47 | ttl_seconds(item->ttl))); | ||
48 | html("\n"); | ||
49 | html(cgit_doctype); | ||
50 | html("<html>\n"); | ||
51 | html("<head>\n"); | ||
52 | html("<title>"); | ||
53 | html_txt(title); | ||
54 | html("</title>\n"); | ||
55 | htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); | ||
56 | html("<link rel='stylesheet' type='text/css' href='"); | ||
57 | html_attr(cgit_css); | ||
58 | html("'/>\n"); | ||
59 | html("</head>\n"); | ||
60 | html("<body>\n"); | ||
61 | } | ||
62 | |||
63 | void cgit_print_docend() | ||
64 | { | ||
65 | html("</body>\n</html>\n"); | ||
66 | } | ||
67 | |||
68 | void cgit_print_pageheader(char *title) | ||
69 | { | ||
70 | html("<div id='header'>"); | ||
71 | htmlf("<a href='%s'>", cgit_logo_link); | ||
72 | htmlf("<img id='logo' src='%s'/>\n", cgit_logo); | ||
73 | htmlf("</a>"); | ||
74 | html_txt(title); | ||
75 | html("</div>"); | ||
76 | } | ||