File Annotation
Not logged in
dbda8d6ce9 2007-07-21       drh: /*
5cd9597428 2007-09-24       jnc: ** Copyright (c) 2006,2007 D. Richard Hipp
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: ** This program is free software; you can redistribute it and/or
dbda8d6ce9 2007-07-21       drh: ** modify it under the terms of the GNU General Public
dbda8d6ce9 2007-07-21       drh: ** License version 2 as published by the Free Software Foundation.
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: ** This program is distributed in the hope that it will be useful,
dbda8d6ce9 2007-07-21       drh: ** but WITHOUT ANY WARRANTY; without even the implied warranty of
dbda8d6ce9 2007-07-21       drh: ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
dbda8d6ce9 2007-07-21       drh: ** General Public License for more details.
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: ** You should have received a copy of the GNU General Public
dbda8d6ce9 2007-07-21       drh: ** License along with this library; if not, write to the
dbda8d6ce9 2007-07-21       drh: ** Free Software Foundation, Inc., 59 Temple Place - Suite 330,
dbda8d6ce9 2007-07-21       drh: ** Boston, MA  02111-1307, USA.
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: ** Author contact information:
dbda8d6ce9 2007-07-21       drh: **   drh@hwaci.com
dbda8d6ce9 2007-07-21       drh: **   http://www.hwaci.com/drh/
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: *******************************************************************************
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: ** This file contains code to implement the basic web page look and feel.
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: */
dbda8d6ce9 2007-07-21       drh: #include "config.h"
dbda8d6ce9 2007-07-21       drh: #include "style.h"
dbda8d6ce9 2007-07-21       drh: 
dbda8d6ce9 2007-07-21       drh: 
dbda8d6ce9 2007-07-21       drh: /*
dbda8d6ce9 2007-07-21       drh: ** Elements of the submenu are collected into the following
dbda8d6ce9 2007-07-21       drh: ** structure and displayed below the main menu by style_header().
dbda8d6ce9 2007-07-21       drh: **
dbda8d6ce9 2007-07-21       drh: ** Populate this structure with calls to style_submenu_element()
dbda8d6ce9 2007-07-21       drh: ** prior to calling style_header().
dbda8d6ce9 2007-07-21       drh: */
dbda8d6ce9 2007-07-21       drh: static struct Submenu {
dbda8d6ce9 2007-07-21       drh:   const char *zLabel;
dbda8d6ce9 2007-07-21       drh:   const char *zTitle;
dbda8d6ce9 2007-07-21       drh:   const char *zLink;
dbda8d6ce9 2007-07-21       drh: } aSubmenu[30];
dbda8d6ce9 2007-07-21       drh: static int nSubmenu = 0;
dbda8d6ce9 2007-07-21       drh: 
dbda8d6ce9 2007-07-21       drh: /*
dbda8d6ce9 2007-07-21       drh: ** Add a new element to the submenu
dbda8d6ce9 2007-07-21       drh: */
dbda8d6ce9 2007-07-21       drh: void style_submenu_element(
dbda8d6ce9 2007-07-21       drh:   const char *zLabel,
dbda8d6ce9 2007-07-21       drh:   const char *zTitle,
dbda8d6ce9 2007-07-21       drh:   const char *zLink
dbda8d6ce9 2007-07-21       drh: ){
dbda8d6ce9 2007-07-21       drh:   assert( nSubmenu < sizeof(aSubmenu)/sizeof(aSubmenu[0]) );
dbda8d6ce9 2007-07-21       drh:   aSubmenu[nSubmenu].zLabel = zLabel;
dbda8d6ce9 2007-07-21       drh:   aSubmenu[nSubmenu].zTitle = zTitle;
dbda8d6ce9 2007-07-21       drh:   aSubmenu[nSubmenu].zLink = zLink;
dbda8d6ce9 2007-07-21       drh:   nSubmenu++;
dbda8d6ce9 2007-07-21       drh: }
dbda8d6ce9 2007-07-21       drh: 
dbda8d6ce9 2007-07-21       drh: /*
dbda8d6ce9 2007-07-21       drh: ** Compare two submenu items for sorting purposes
dbda8d6ce9 2007-07-21       drh: */
dbda8d6ce9 2007-07-21       drh: static int submenuCompare(const void *a, const void *b){
dbda8d6ce9 2007-07-21       drh:   const struct Submenu *A = (const struct Submenu*)a;
50a58adb76 2007-10-10       drh:   const struct Submenu *B = (const struct Submenu*)b;
dbda8d6ce9 2007-07-21       drh:   return strcmp(A->zLabel, B->zLabel);
dbda8d6ce9 2007-07-21       drh: }
dbda8d6ce9 2007-07-21       drh: 
dbda8d6ce9 2007-07-21       drh: /*
dbda8d6ce9 2007-07-21       drh: ** Draw the header.
dbda8d6ce9 2007-07-21       drh: */
66f4caa379 2007-07-23       drh: void style_header(const char *zTitle){
dbda8d6ce9 2007-07-21       drh:   const char *zLogInOut = "Logout";
f3807dbd88 2007-10-10       jnc:   char *zProjectDescr = db_get("project-description", 0);
916b6e4b3b 2007-07-21       drh:   login_check_credentials();
dbda8d6ce9 2007-07-21       drh:   @ <html>
07eaead5dc 2007-09-23       jnc:   @ <head>
07eaead5dc 2007-09-23       jnc:   @ <title>%s(zTitle)</title>
07eaead5dc 2007-09-23       jnc:   @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="%s(g.zBaseURL)/timeline.rss">
5cd9597428 2007-09-24       jnc:   @ <link rel="stylesheet" href="%s(g.zBaseURL)/style.css" type="text/css" media="screen">
f3807dbd88 2007-10-10       jnc:   if( zProjectDescr != 0 ){
f3807dbd88 2007-10-10       jnc:     @ <meta name="description" content="%s(zProjectDescr)">
f3807dbd88 2007-10-10       jnc:   }
07eaead5dc 2007-09-23       jnc:   @ </head>
5cd9597428 2007-09-24       jnc:   @ <body>
5cd9597428 2007-09-24       jnc:   @ <div id="page-title">%s(zTitle)</div>
5cd9597428 2007-09-24       jnc:   @ <div id="login-status">
9c952d247e 2007-07-31       drh:   if( g.zLogin==0 ){
5cd9597428 2007-09-24       jnc:     @ not logged in
dbda8d6ce9 2007-07-21       drh:     zLogInOut = "Login";
dbda8d6ce9 2007-07-21       drh:   }else{
5cd9597428 2007-09-24       jnc:     @ logged in as %h(g.zLogin)
66f4caa379 2007-07-23       drh:   }
5cd9597428 2007-09-24       jnc:   @ </div>
5cd9597428 2007-09-24       jnc:   @ <div id="main-menu">
50a58adb76 2007-10-10       drh:   @ <a href="%s(g.zBaseURL)/home">Home</a>
fd36718ad9 2007-07-31       drh:   if( g.okRead ){
afcdc7ec97 2007-08-01       drh:     @ | <a href="%s(g.zBaseURL)/leaves">Leaves</a>
afcdc7ec97 2007-08-01       drh:     @ | <a href="%s(g.zBaseURL)/timeline">Timeline</a>
dbda8d6ce9 2007-07-21       drh:   }
66f4caa379 2007-07-23       drh: #if 0
dbda8d6ce9 2007-07-21       drh:   @ | <font color="#888888">Search</font>
dbda8d6ce9 2007-07-21       drh:   @ | <font color="#888888">Ticket</font>
dbda8d6ce9 2007-07-21       drh:   @ | <font color="#888888">Reports</font>
66f4caa379 2007-07-23       drh: #endif
dbda8d6ce9 2007-07-21       drh:   if( g.okSetup ){
dbda8d6ce9 2007-07-21       drh:     @ | <a href="%s(g.zBaseURL)/setup">Setup</a>
dbda8d6ce9 2007-07-21       drh:   }
dbda8d6ce9 2007-07-21       drh:   if( !g.noPswd ){
dbda8d6ce9 2007-07-21       drh:     @ | <a href="%s(g.zBaseURL)/login">%s(zLogInOut)</a>
dbda8d6ce9 2007-07-21       drh:   }
5cd9597428 2007-09-24       jnc:   @ </div>
dbda8d6ce9 2007-07-21       drh:   if( nSubmenu>0 ){
dbda8d6ce9 2007-07-21       drh:     int i;
64569b3a7a 2007-09-25       drh:     @ <div id="sub-menu">
dbda8d6ce9 2007-07-21       drh:     qsort(aSubmenu, nSubmenu, sizeof(aSubmenu[0]), submenuCompare);
dbda8d6ce9 2007-07-21       drh:     for(i=0; i<nSubmenu; i++){
dbda8d6ce9 2007-07-21       drh:       struct Submenu *p = &aSubmenu[i];
dbda8d6ce9 2007-07-21       drh:       char *zTail = i<nSubmenu-1 ? " | " : "";
dbda8d6ce9 2007-07-21       drh:       if( p->zLink==0 ){
5cd9597428 2007-09-24       jnc:         @ <span class="label">%h(p->zLabel)</span>
5cd9597428 2007-09-24       jnc:         @ <span class="tail">%s(zTail)</span>
dbda8d6ce9 2007-07-21       drh:       }else{
5cd9597428 2007-09-24       jnc:         @ <a class="label" href="%T(p->zLink)">%h(p->zLabel)</a>
5cd9597428 2007-09-24       jnc:         @ <span class="tail">%s(zTail)</span>
dbda8d6ce9 2007-07-21       drh:       }
dbda8d6ce9 2007-07-21       drh:     }
01ce2cf3dc 2007-09-24       jnc:     @ </div>
dbda8d6ce9 2007-07-21       drh:   }
5cd9597428 2007-09-24       jnc:   @ <div id="page">
dbda8d6ce9 2007-07-21       drh:   g.cgiPanic = 1;
dbda8d6ce9 2007-07-21       drh: }
dbda8d6ce9 2007-07-21       drh: 
dbda8d6ce9 2007-07-21       drh: /*
dbda8d6ce9 2007-07-21       drh: ** Draw the footer at the bottom of the page.
dbda8d6ce9 2007-07-21       drh: */
dbda8d6ce9 2007-07-21       drh: void style_footer(void){
5cd9597428 2007-09-24       jnc:   /* end the <div id="page"> from style_header() */
5cd9597428 2007-09-24       jnc:   @ </div>
5cd9597428 2007-09-24       jnc:   @ <div id="style-footer">
c2d1e3c70a 2007-09-22       drh:   @ Fossil version %s(MANIFEST_VERSION) %s(MANIFEST_DATE)
5cd9597428 2007-09-24       jnc:   @ </div>
dbda8d6ce9 2007-07-21       drh: }
dbda8d6ce9 2007-07-21       drh: 
5cd9597428 2007-09-24       jnc: 
dbda8d6ce9 2007-07-21       drh: /*
5cd9597428 2007-09-24       jnc: ** WEBPAGE: style.css
dbda8d6ce9 2007-07-21       drh: */
5cd9597428 2007-09-24       jnc: void page_style_css(void){
50a58adb76 2007-10-10       drh:   char *zCSS = 0;
5cd9597428 2007-09-24       jnc: 
5cd9597428 2007-09-24       jnc:   cgi_set_content_type("text/css");
50a58adb76 2007-10-10       drh:   zCSS = db_get("css",0);
50a58adb76 2007-10-10       drh:   if( zCSS ){
50a58adb76 2007-10-10       drh:     cgi_append_content(zCSS, -1);
4f641e7e4e 2007-09-02       drh:   }else{
5cd9597428 2007-09-24       jnc:     /* No CSS file found, use our own */
5cd9597428 2007-09-24       jnc:     /*
5cd9597428 2007-09-24       jnc:     ** Selector order: tags, ids, classes, other
5cd9597428 2007-09-24       jnc:     ** Content order: margin, borders, padding, fonts, colors, other
5cd9597428 2007-09-24       jnc:     ** Note: Once things are finialize a bit we can collapse this and
5cd9597428 2007-09-24       jnc:     **       make it much smaller, if necessary. Right now, it's verbose
5cd9597428 2007-09-24       jnc:     **       but easy to edit.
5cd9597428 2007-09-24       jnc:     */
5cd9597428 2007-09-24       jnc:     @ body {
5cd9597428 2007-09-24       jnc:     @   margin: 0px;
5cd9597428 2007-09-24       jnc:     @   padding: 0px;
5cd9597428 2007-09-24       jnc:     @   background-color: white;
5cd9597428 2007-09-24       jnc:     @ }
5cd9597428 2007-09-24       jnc:     @ #page-title {
5cd9597428 2007-09-24       jnc:     @   padding: 10px 10px 10px 10px;
99eabf9b0c 2007-09-25       jnc:     @   font-size: 1.8em;
5cd9597428 2007-09-24       jnc:     @   font-weight: bold;
99eabf9b0c 2007-09-25       jnc:     @   background-color: #6a7ec7;
99eabf9b0c 2007-09-25       jnc:     @   color: #0a1e67;
5cd9597428 2007-09-24       jnc:     @ }
5cd9597428 2007-09-24       jnc:     @ #login-status {
5cd9597428 2007-09-24       jnc:     @   padding: 0px 10px 10px 0px;
5cd9597428 2007-09-24       jnc:     @   font-size: 0.9em;
5cd9597428 2007-09-24       jnc:     @   text-align: right;
99eabf9b0c 2007-09-25       jnc:     @   background-color: #6a7ec7;
99eabf9b0c 2007-09-25       jnc:     @   color: white;
5cd9597428 2007-09-24       jnc:     @   position: absolute;
5cd9597428 2007-09-24       jnc:     @   top: 10;
5cd9597428 2007-09-24       jnc:     @   right: 0;
5cd9597428 2007-09-24       jnc:     @ }
5cd9597428 2007-09-24       jnc:     @ #main-menu {
99eabf9b0c 2007-09-25       jnc:     @   padding: 5px 10px 5px 10px;
5cd9597428 2007-09-24       jnc:     @   font-size: 0.9em;
99eabf9b0c 2007-09-25       jnc:     @   font-weight: bold;
5cd9597428 2007-09-24       jnc:     @   text-align: center;
99eabf9b0c 2007-09-25       jnc:     @   letter-spacing: 1px;
99eabf9b0c 2007-09-25       jnc:     @   background-color: #414f84;
99eabf9b0c 2007-09-25       jnc:     @   color: white;
5cd9597428 2007-09-24       jnc:     @ }
5cd9597428 2007-09-24       jnc:     @ #sub-menu {
5cd9597428 2007-09-24       jnc:     @   padding: 3px 10px 3px 0px;
5cd9597428 2007-09-24       jnc:     @   font-size: 0.9em;
5cd9597428 2007-09-24       jnc:     @   text-align: center;
99eabf9b0c 2007-09-25       jnc:     @   background-color: #414f84;
99eabf9b0c 2007-09-25       jnc:     @   color: white;
99eabf9b0c 2007-09-25       jnc:     @ }
99eabf9b0c 2007-09-25       jnc:     @ #main-menu a, #main-menu a:visited, #sub-menu a, #sub-menu a:visited {
99eabf9b0c 2007-09-25       jnc:     @   padding: 3px 10px 3px 10px;
99eabf9b0c 2007-09-25       jnc:     @   color: white;
5cd9597428 2007-09-24       jnc:     @ }
99eabf9b0c 2007-09-25       jnc:     @ #main-menu a:hover, #sub-menu a:hover {
99eabf9b0c 2007-09-25       jnc:     @   color: #414f84;
99eabf9b0c 2007-09-25       jnc:     @   background-color: white;
5cd9597428 2007-09-24       jnc:     @ }
5cd9597428 2007-09-24       jnc:     @ #page {
5cd9597428 2007-09-24       jnc:     @   padding: 10px 20px 10px 20px;
5cd9597428 2007-09-24       jnc:     @ }
5cd9597428 2007-09-24       jnc:     @ #style-footer {
5cd9597428 2007-09-24       jnc:     @   font-size: 0.8em;
5cd9597428 2007-09-24       jnc:     @   margin-top: 12px;
99eabf9b0c 2007-09-25       jnc:     @   padding: 5px 10px 5px 10px;
99eabf9b0c 2007-09-25       jnc:     @   text-align: right;
99eabf9b0c 2007-09-25       jnc:     @   background-color: #414f84;
99eabf9b0c 2007-09-25       jnc:     @   color: white;
99eabf9b0c 2007-09-25       jnc:     @ }
cfc7984ede 2007-09-25       jnc:     @ table.label-value th {
cfc7984ede 2007-09-25       jnc:     @   text-align: right;
cfc7984ede 2007-09-25       jnc:     @   vertical-align: top;
cfc7984ede 2007-09-25       jnc:     @ }
cfc7984ede 2007-09-25       jnc:     @ div.section-title {
cfc7984ede 2007-09-25       jnc:     @   margin-bottom: 0px;
cfc7984ede 2007-09-25       jnc:     @   padding: 1px 1px 1px 1px;
cfc7984ede 2007-09-25       jnc:     @   font-size: 1.2em;
cfc7984ede 2007-09-25       jnc:     @   font-weight: bold;
cfc7984ede 2007-09-25       jnc:     @   background-color: #6a7ec7;
cfc7984ede 2007-09-25       jnc:     @   color: #0a1e67;
5cd9597428 2007-09-24       jnc:     @ }
4f641e7e4e 2007-09-02       drh:   }
dbda8d6ce9 2007-07-21       drh: }
dbda8d6ce9 2007-07-21       drh: 
dbda8d6ce9 2007-07-21       drh: /*
dbda8d6ce9 2007-07-21       drh: ** WEBPAGE: test_env
dbda8d6ce9 2007-07-21       drh: */
dbda8d6ce9 2007-07-21       drh: void page_test_env(void){
66f4caa379 2007-07-23       drh:   style_header("Environment Test");
218577e3af 2007-10-11       drh:   @ g.zBaseURL = %h(g.zBaseURL)<br>
218577e3af 2007-10-11       drh:   @ g.zTop = %h(g.zTop)<hr>
dbda8d6ce9 2007-07-21       drh:   cgi_print_all();
dbda8d6ce9 2007-07-21       drh:   style_footer();
dbda8d6ce9 2007-07-21       drh: }