author | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 15:38:30 (UTC) |
---|---|---|
committer | Lars Hjemli <hjemli@gmail.com> | 2006-12-11 15:38:30 (UTC) |
commit | 5a106eb09b9b5e189b96cc736046a92b054f6c7f (patch) (side-by-side diff) | |
tree | 7172123df870c07deb882a4993fa991b31fc9008 | |
parent | 51ada4fda2b47710351e6e4da8a95807d6d9f729 (diff) | |
download | cgit-5a106eb09b9b5e189b96cc736046a92b054f6c7f.zip cgit-5a106eb09b9b5e189b96cc736046a92b054f6c7f.tar.gz cgit-5a106eb09b9b5e189b96cc736046a92b054f6c7f.tar.bz2 |
Move common output-functions into ui-shared.c
While at it, replace the cgit_[lib_]error constants with a proper function
Signed-off-by: Lars Hjemli <hjemli@gmail.com>
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | cgit.c | 94 | ||||
-rw-r--r-- | cgit.h | 9 | ||||
-rw-r--r-- | ui-shared.c | 76 |
4 files changed, 99 insertions, 82 deletions
@@ -7,3 +7,3 @@ CACHE_ROOT = /var/cache/cgit EXTLIBS = ../git/libgit.a ../git/xdiff/lib.a -lz -lcrypto -OBJECTS = parsing.o html.o cache.o +OBJECTS = parsing.o html.o cache.o ui-shared.o @@ -12,12 +12,2 @@ const char cgit_version[] = CGIT_VERSION; -const char cgit_doctype[] = -"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" -" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; - -const char cgit_error[] = -"<div class='error'>%s</div>"; - -const char cgit_lib_error[] = -"<div class='error'>%s: %s</div>"; - int htmlfd = 0; @@ -146,59 +136,3 @@ static int cgit_print_branch_cb(const char *refname, const unsigned char *sha1, -/* Sun, 06 Nov 1994 08:49:37 GMT */ -static char *http_date(time_t t) -{ - static char day[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; - static char month[][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; - struct tm *tm = gmtime(&t); - return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], - tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, - tm->tm_hour, tm->tm_min, tm->tm_sec); -} - -static int ttl_seconds(int ttl) -{ - if (ttl<0) - return 60 * 60 * 24 * 365; - else - return ttl * 60; -} - -static void cgit_print_docstart(char *title) -{ - html("Content-Type: text/html; charset=utf-8\n"); - htmlf("Last-Modified: %s\n", http_date(cacheitem.st.st_mtime)); - htmlf("Expires: %s\n", http_date(cacheitem.st.st_mtime + - ttl_seconds(cacheitem.ttl))); - html("\n"); - html(cgit_doctype); - html("<html>\n"); - html("<head>\n"); - html("<title>"); - html_txt(title); - html("</title>\n"); - htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); - html("<link rel='stylesheet' type='text/css' href='"); - html_attr(cgit_css); - html("'/>\n"); - html("</head>\n"); - html("<body>\n"); -} - -static void cgit_print_docend() -{ - html("</body>\n</html>\n"); -} - -static void cgit_print_pageheader(char *title) -{ - html("<div id='header'>"); - htmlf("<a href='%s'>", cgit_logo_link); - htmlf("<img id='logo' src='%s'/>\n", cgit_logo); - htmlf("</a>"); - html_txt(title); - html("</div>"); -} - -static void cgit_print_repolist() +static void cgit_print_repolist(struct cacheitem *item) { @@ -210,3 +144,3 @@ static void cgit_print_repolist() chdir(cgit_root); - cgit_print_docstart(cgit_root_title); + cgit_print_docstart(cgit_root_title, item); cgit_print_pageheader(cgit_root_title); @@ -214,4 +148,4 @@ static void cgit_print_repolist() if (!(d = opendir("."))) { - htmlf(cgit_lib_error, "Unable to scan repository directory", - strerror(errno)); + cgit_print_error(fmt("Unable to scan repository directory: %s", + strerror(errno))); cgit_print_docend(); @@ -381,3 +315,3 @@ static void cgit_print_object(char *hex) if (get_sha1_hex(hex, sha1)){ - htmlf(cgit_error, "Bad hex value"); + cgit_print_error(fmt("Bad hex value: %s", hex)); return; @@ -386,3 +320,3 @@ static void cgit_print_object(char *hex) if (sha1_object_info(sha1, type, NULL)){ - htmlf(cgit_error, "Bad object name"); + cgit_print_error("Bad object name"); return; @@ -392,3 +326,3 @@ static void cgit_print_object(char *hex) if (!buf) { - htmlf(cgit_error, "Error reading object"); + cgit_print_error("Error reading object"); return; @@ -404,3 +338,3 @@ static void cgit_print_object(char *hex) -static void cgit_print_repo_page() +static void cgit_print_repo_page(struct cacheitem *item) { @@ -409,6 +343,6 @@ static void cgit_print_repo_page() char *title = fmt("%s - %s", cgit_root_title, "Bad request"); - cgit_print_docstart(title); + cgit_print_docstart(title, item); cgit_print_pageheader(title); - htmlf(cgit_lib_error, "Unable to scan repository", - strerror(errno)); + cgit_print_error(fmt("Unable to scan repository: %s", + strerror(errno))); cgit_print_docend(); @@ -418,3 +352,3 @@ static void cgit_print_repo_page() char *title = fmt("%s - %s", cgit_repo_name, cgit_repo_desc); - cgit_print_docstart(title); + cgit_print_docstart(title, item); cgit_print_pageheader(title); @@ -435,5 +369,5 @@ static void cgit_fill_cache(struct cacheitem *item) if (cgit_query_repo) - cgit_print_repo_page(); + cgit_print_repo_page(item); else - cgit_print_repolist(); + cgit_print_repolist(item); } @@ -17,2 +17,4 @@ struct cacheitem { +extern const char cgit_version[]; + extern char *cgit_root; @@ -56,3 +58,2 @@ extern void html_link_close(void); - extern int cgit_read_config(const char *filename, configfn fn); @@ -66,2 +67,8 @@ extern int cache_expired(struct cacheitem *item); +extern void cgit_print_error(char *msg); +extern void cgit_print_docstart(char *title, struct cacheitem *item); +extern void cgit_print_docend(); +extern void cgit_print_pageheader(char *title); + + #endif /* CGIT_H */ diff --git a/ui-shared.c b/ui-shared.c new file mode 100644 index 0000000..e795043 --- a/dev/null +++ b/ui-shared.c @@ -0,0 +1,76 @@ +/* ui-shared.c: common web output functions + * + * Copyright (C) 2006 Lars Hjemli + * + * Licensed under GNU General Public License v2 + * (see COPYING for full license text) + */ + +#include "cgit.h" + +const char cgit_doctype[] = +"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n" +" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; + +static char *http_date(time_t t) +{ + static char day[][4] = + {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; + static char month[][4] = + {"Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; + struct tm *tm = gmtime(&t); + return fmt("%s, %02d %s %04d %02d:%02d:%02d GMT", day[tm->tm_wday], + tm->tm_mday, month[tm->tm_mon], 1900+tm->tm_year, + tm->tm_hour, tm->tm_min, tm->tm_sec); +} + +static int ttl_seconds(int ttl) +{ + if (ttl<0) + return 60 * 60 * 24 * 365; + else + return ttl * 60; +} + +void cgit_print_error(char *msg) +{ + html("<div class='error'>"); + html_txt(msg); + html("</div>\n"); +} +void cgit_print_docstart(char *title, struct cacheitem *item) +{ + html("Content-Type: text/html; charset=utf-8\n"); + htmlf("Last-Modified: %s\n", http_date(item->st.st_mtime)); + htmlf("Expires: %s\n", http_date(item->st.st_mtime + + ttl_seconds(item->ttl))); + html("\n"); + html(cgit_doctype); + html("<html>\n"); + html("<head>\n"); + html("<title>"); + html_txt(title); + html("</title>\n"); + htmlf("<meta name='generator' content='cgit v%s'/>\n", cgit_version); + html("<link rel='stylesheet' type='text/css' href='"); + html_attr(cgit_css); + html("'/>\n"); + html("</head>\n"); + html("<body>\n"); +} + +void cgit_print_docend() +{ + html("</body>\n</html>\n"); +} + +void cgit_print_pageheader(char *title) +{ + html("<div id='header'>"); + htmlf("<a href='%s'>", cgit_logo_link); + htmlf("<img id='logo' src='%s'/>\n", cgit_logo); + htmlf("</a>"); + html_txt(title); + html("</div>"); +} |