@ -26,14 +26,6 @@ static char *http_date(time_t t)
tm - > tm_hour , tm - > tm_min , tm - > tm_sec ) ;
tm - > tm_hour , tm - > tm_min , tm - > tm_sec ) ;
}
}
static long ttl_seconds ( long ttl )
{
if ( ttl < 0 )
return 60 * 60 * 24 * 365 ;
else
return ttl * 60 ;
}
void cgit_print_error ( char * msg )
void cgit_print_error ( char * msg )
{
{
html ( " <div class='error'> " ) ;
html ( " <div class='error'> " ) ;
@ -361,24 +353,34 @@ void cgit_print_age(time_t t, time_t max_relative, char *format)
secs * 1.0 / TM_YEAR ) ;
secs * 1.0 / TM_YEAR ) ;
}
}
void cgit_print_docstart ( char * title , struct cacheitem * item )
void cgit_print_http_headers ( struct cgit_context * ctx )
{
{
html ( " Content-Type: text/html; charset= " PAGE_ENCODING " \n " ) ;
if ( ctx - > page . mimetype & & ctx - > page . charset )
htmlf ( " Last-Modified: %s \n " , http_date ( item - > st . st_mtime ) ) ;
htmlf ( " Content-Type: %s; charset=%s \n " , ctx - > page . mimetype ,
htmlf ( " Expires: %s \n " , http_date ( item - > st . st_mtime +
ctx - > page . charset ) ;
ttl_seconds ( item - > ttl ) ) ) ;
else if ( ctx - > page . mimetype )
htmlf ( " Content-Type: %s \n " , ctx - > page . mimetype ) ;
if ( ctx - > page . filename )
htmlf ( " Content-Disposition: inline; filename= \" %s \" \n " ,
ctx - > page . filename ) ;
htmlf ( " Last-Modified: %s \n " , http_date ( ctx - > page . modified ) ) ;
htmlf ( " Expires: %s \n " , http_date ( ctx - > page . expires ) ) ;
html ( " \n " ) ;
html ( " \n " ) ;
}
void cgit_print_docstart ( struct cgit_context * ctx )
{
html ( cgit_doctype ) ;
html ( cgit_doctype ) ;
html ( " <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'> \n " ) ;
html ( " <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'> \n " ) ;
html ( " <head> \n " ) ;
html ( " <head> \n " ) ;
html ( " <title> " ) ;
html ( " <title> " ) ;
html_txt ( title ) ;
html_txt ( ctx - > page . title ) ;
html ( " </title> \n " ) ;
html ( " </title> \n " ) ;
htmlf ( " <meta name='generator' content='cgit %s'/> \n " , cgit_version ) ;
htmlf ( " <meta name='generator' content='cgit %s'/> \n " , cgit_version ) ;
if ( ctx . cfg . robots & & * ctx . cfg . robots )
if ( ctx - > cfg . robots & & * ctx - > cfg . robots )
htmlf ( " <meta name='robots' content='%s'/> \n " , ctx . cfg . robots ) ;
htmlf ( " <meta name='robots' content='%s'/> \n " , ctx - > cfg . robots ) ;
html ( " <link rel='stylesheet' type='text/css' href=' " ) ;
html ( " <link rel='stylesheet' type='text/css' href=' " ) ;
html_attr ( ctx . cfg . css ) ;
html_attr ( ctx - > cfg . css ) ;
html ( " '/> \n " ) ;
html ( " '/> \n " ) ;
html ( " </head> \n " ) ;
html ( " </head> \n " ) ;
html ( " <body> \n " ) ;
html ( " <body> \n " ) ;
@ -463,7 +465,7 @@ void add_hidden_formfields(int incl_head, int incl_search, char *page)
}
}
}
}
void cgit_print_pageheader ( char * title , int show_search )
void cgit_print_pageheader ( struct cgit_context * ctx )
{
{
static const char * default_info = " This is cgit, a fast webinterface for git repositories " ;
static const char * default_info = " This is cgit, a fast webinterface for git repositories " ;
int header = 0 ;
int header = 0 ;
@ -475,40 +477,40 @@ void cgit_print_pageheader(char *title, int show_search)
html ( " <tr><td class='sidebar'> \n <a href=' " ) ;
html ( " <tr><td class='sidebar'> \n <a href=' " ) ;
html_attr ( cgit_rooturl ( ) ) ;
html_attr ( cgit_rooturl ( ) ) ;
htmlf ( " '><img src='%s' alt='cgit'/></a> \n " ,
htmlf ( " '><img src='%s' alt='cgit'/></a> \n " ,
ctx . cfg . logo ) ;
ctx - > cfg . logo ) ;
html ( " </td></tr> \n <tr><td class='sidebar'> \n " ) ;
html ( " </td></tr> \n <tr><td class='sidebar'> \n " ) ;
if ( ctx . repo ) {
if ( ctx - > repo ) {
html ( " <h1 class='first'> " ) ;
html ( " <h1 class='first'> " ) ;
html_txt ( strrpart ( ctx . repo - > name , 20 ) ) ;
html_txt ( strrpart ( ctx - > repo - > name , 20 ) ) ;
html ( " </h1> \n " ) ;
html ( " </h1> \n " ) ;
html_txt ( ctx . repo - > desc ) ;
html_txt ( ctx - > repo - > desc ) ;
if ( ctx . repo - > owner ) {
if ( ctx - > repo - > owner ) {
html ( " <h1>owner</h1> \n " ) ;
html ( " <h1>owner</h1> \n " ) ;
html_txt ( ctx . repo - > owner ) ;
html_txt ( ctx - > repo - > owner ) ;
}
}
html ( " <h1>navigate</h1> \n " ) ;
html ( " <h1>navigate</h1> \n " ) ;
reporevlink ( NULL , " summary " , NULL , " menu " , ctx . qry . head ,
reporevlink ( NULL , " summary " , NULL , " menu " , ctx - > qry . head ,
NULL , NULL ) ;
NULL , NULL ) ;
cgit_log_link ( " log " , NULL , " menu " , ctx . qry . head , NULL , NULL ,
cgit_log_link ( " log " , NULL , " menu " , ctx - > qry . head , NULL , NULL ,
0 , NULL , NULL ) ;
0 , NULL , NULL ) ;
cgit_tree_link ( " tree " , NULL , " menu " , ctx . qry . head ,
cgit_tree_link ( " tree " , NULL , " menu " , ctx - > qry . head ,
ctx . qry . sha1 , NULL ) ;
ctx - > qry . sha1 , NULL ) ;
cgit_commit_link ( " commit " , NULL , " menu " , ctx . qry . head ,
cgit_commit_link ( " commit " , NULL , " menu " , ctx - > qry . head ,
ctx . qry . sha1 ) ;
ctx - > qry . sha1 ) ;
cgit_diff_link ( " diff " , NULL , " menu " , ctx . qry . head ,
cgit_diff_link ( " diff " , NULL , " menu " , ctx - > qry . head ,
ctx . qry . sha1 , ctx . qry . sha2 , NULL ) ;
ctx - > qry . sha1 , ctx - > qry . sha2 , NULL ) ;
cgit_patch_link ( " patch " , NULL , " menu " , ctx . qry . head ,
cgit_patch_link ( " patch " , NULL , " menu " , ctx - > qry . head ,
ctx . qry . sha1 ) ;
ctx - > qry . sha1 ) ;
for_each_ref ( print_archive_ref , & header ) ;
for_each_ref ( print_archive_ref , & header ) ;
if ( ctx . repo - > clone_url | | ctx . cfg . clone_prefix ) {
if ( ctx - > repo - > clone_url | | ctx - > cfg . clone_prefix ) {
html ( " <h1>clone</h1> \n " ) ;
html ( " <h1>clone</h1> \n " ) ;
if ( ctx . repo - > clone_url )
if ( ctx - > repo - > clone_url )
url = ctx . repo - > clone_url ;
url = ctx - > repo - > clone_url ;
else
else
url = fmt ( " %s%s " , ctx . cfg . clone_prefix ,
url = fmt ( " %s%s " , ctx - > cfg . clone_prefix ,
ctx . repo - > url ) ;
ctx - > repo - > url ) ;
html ( " <a class='menu' href=' " ) ;
html ( " <a class='menu' href=' " ) ;
html_attr ( url ) ;
html_attr ( url ) ;
html ( " ' title=' " ) ;
html ( " ' title=' " ) ;
@ -520,10 +522,10 @@ void cgit_print_pageheader(char *title, int show_search)
html ( " <h1>branch</h1> \n " ) ;
html ( " <h1>branch</h1> \n " ) ;
html ( " <form method='get' action=''> \n " ) ;
html ( " <form method='get' action=''> \n " ) ;
add_hidden_formfields ( 0 , 1 , ctx . qry . page ) ;
add_hidden_formfields ( 0 , 1 , ctx - > qry . page ) ;
// html("<table summary='branch selector' class='grid'><tr><td id='branch-dropdown-cell'>");
// html("<table summary='branch selector' class='grid'><tr><td id='branch-dropdown-cell'>");
html ( " <select name='h' onchange='this.form.submit();'> \n " ) ;
html ( " <select name='h' onchange='this.form.submit();'> \n " ) ;
for_each_branch_ref ( print_branch_option , ctx . qry . head ) ;
for_each_branch_ref ( print_branch_option , ctx - > qry . head ) ;
html ( " </select> \n " ) ;
html ( " </select> \n " ) ;
// html("</td><td>");
// html("</td><td>");
html ( " <noscript><input type='submit' id='switch-btn' value='switch'/></noscript> \n " ) ;
html ( " <noscript><input type='submit' id='switch-btn' value='switch'/></noscript> \n " ) ;
@ -532,22 +534,22 @@ void cgit_print_pageheader(char *title, int show_search)
html ( " <h1>search</h1> \n " ) ;
html ( " <h1>search</h1> \n " ) ;
html ( " <form method='get' action=' " ) ;
html ( " <form method='get' action=' " ) ;
if ( ctx . cfg . virtual_root )
if ( ctx - > cfg . virtual_root )
html_attr ( cgit_fileurl ( ctx . qry . repo , " log " ,
html_attr ( cgit_fileurl ( ctx - > qry . repo , " log " ,
ctx . qry . path , NULL ) ) ;
ctx - > qry . path , NULL ) ) ;
html ( " '> \n " ) ;
html ( " '> \n " ) ;
add_hidden_formfields ( 1 , 0 , " log " ) ;
add_hidden_formfields ( 1 , 0 , " log " ) ;
html ( " <select name='qt'> \n " ) ;
html ( " <select name='qt'> \n " ) ;
html_option ( " grep " , " log msg " , ctx . qry . grep ) ;
html_option ( " grep " , " log msg " , ctx - > qry . grep ) ;
html_option ( " author " , " author " , ctx . qry . grep ) ;
html_option ( " author " , " author " , ctx - > qry . grep ) ;
html_option ( " committer " , " committer " , ctx . qry . grep ) ;
html_option ( " committer " , " committer " , ctx - > qry . grep ) ;
html ( " </select> \n " ) ;
html ( " </select> \n " ) ;
html ( " <input class='txt' type='text' name='q' value=' " ) ;
html ( " <input class='txt' type='text' name='q' value=' " ) ;
html_attr ( ctx . qry . search ) ;
html_attr ( ctx - > qry . search ) ;
html ( " '/> \n " ) ;
html ( " '/> \n " ) ;
html ( " </form> \n " ) ;
html ( " </form> \n " ) ;
} else {
} else {
if ( ! ctx . cfg . index_info | | html_include ( ctx . cfg . index_info ) )
if ( ! ctx - > cfg . index_info | | html_include ( ctx - > cfg . index_info ) )
html ( default_info ) ;
html ( default_info ) ;
}
}
@ -556,18 +558,6 @@ void cgit_print_pageheader(char *title, int show_search)
html ( " <td id='content'> \n " ) ;
html ( " <td id='content'> \n " ) ;
}
}
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 " ) ;
}
void cgit_print_filemode ( unsigned short mode )
void cgit_print_filemode ( unsigned short mode )
{
{
if ( S_ISDIR ( mode ) )
if ( S_ISDIR ( mode ) )