X-Git-Url: https://gitweb.ps.run/ps-cgit/blobdiff_plain/74620f12e4f7e91cb0a0b4ca731e07272d1b65f6..dc3ac3f76077c5d612d42e8beb4878e43acfc58a:/ui-shared.c diff --git a/ui-shared.c b/ui-shared.c index cb8a8df..c7fbc5e 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -14,9 +14,9 @@ const char cgit_doctype[] = static char *http_date(time_t t) { - static char day[][4] = + static char day[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; - static char month[][4] = + static char month[][4] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Now", "Dec"}; struct tm *tm = gmtime(&t); @@ -25,7 +25,7 @@ static char *http_date(time_t t) tm->tm_hour, tm->tm_min, tm->tm_sec); } -static int ttl_seconds(int ttl) +static long ttl_seconds(long ttl) { if (ttl<0) return 60 * 60 * 24 * 365; @@ -40,6 +40,14 @@ void cgit_print_error(char *msg) html("\n"); } +char *cgit_rooturl() +{ + if (cgit_virtual_root) + return fmt("%s/", cgit_virtual_root); + else + return cgit_script_name; +} + char *cgit_repourl(const char *reponame) { if (cgit_virtual_root) { @@ -49,17 +57,47 @@ char *cgit_repourl(const char *reponame) } } -char *cgit_pageurl(const char *reponame, const char *pagename, +char *cgit_pageurl(const char *reponame, const char *pagename, const char *query) { if (cgit_virtual_root) { - return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, - pagename, query); + if (query) + return fmt("%s/%s/%s/?%s", cgit_virtual_root, reponame, + pagename, query); + else + return fmt("%s/%s/%s/", cgit_virtual_root, reponame, + pagename); } else { - return fmt("?r=%s&p=%s&%s", reponame, pagename, query); + if (query) + return fmt("?r=%s&p=%s&%s", reponame, pagename, query); + else + return fmt("?r=%s&p=%s", reponame, pagename); } } +char *cgit_currurl() +{ + if (!cgit_virtual_root) + return cgit_script_name; + else if (cgit_query_page) + return fmt("%s/%s/%s/", cgit_virtual_root, cgit_query_repo, cgit_query_page); + else if (cgit_query_repo) + return fmt("%s/%s/", cgit_virtual_root, cgit_query_repo); + else + return fmt("%s/", cgit_virtual_root); +} + + +void cgit_print_date(unsigned long secs) +{ + char buf[32]; + struct tm *time; + + time = gmtime(&secs); + strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", time); + html_txt(buf); +} + void cgit_print_docstart(char *title, struct cacheitem *item) { html("Content-Type: text/html; charset=utf-8\n"); @@ -83,15 +121,60 @@ void cgit_print_docstart(char *title, struct cacheitem *item) void cgit_print_docend() { + html(""); html("\n\n"); } -void cgit_print_pageheader(char *title) +void cgit_print_pageheader(char *title, int show_search) { - html(""); + html(""); + html(""); + html(""); + html(""); + html("
"); + htmlf("root", cgit_rooturl()); + if (cgit_query_repo) { + htmlf(" : ", cgit_repourl(cgit_repo->url)); + html_txt(cgit_repo->name); + htmlf(" : %s", title); + } + html("
"); +} + +void cgit_print_snapshot_start(const char *mimetype, const char *filename, + struct cacheitem *item) +{ + htmlf("Content-Type: %s\n", mimetype); + htmlf("Content-Disposition: inline; filename=\"%s\"\n", filename); + 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"); }