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){
f0a9e3b523 2007-11-21       drh:   const char *zLogInOut = "Login";
555911dff5 2007-11-21       drh:   const char *zHeader = db_get("header", zDefaultHeader);
555911dff5 2007-11-21       drh:   struct Subscript *p;
916b6e4b3b 2007-07-21       drh:   login_check_credentials();
555911dff5 2007-11-21       drh: 
555911dff5 2007-11-21       drh:   /* Generate the header up through the main menu */
555911dff5 2007-11-21       drh:   p = SbS_Create();
555911dff5 2007-11-21       drh:   SbS_Store(p, "title", zTitle, 0);
555911dff5 2007-11-21       drh:   SbS_Store(p, "baseurl", g.zBaseURL, 0);
555911dff5 2007-11-21       drh:   if( g.zLogin ){
555911dff5 2007-11-21       drh:     SbS_Store(p, "login", g.zLogin, 0);
f0a9e3b523 2007-11-21       drh:     zLogInOut = "Logout";
5ebcedc33e 2007-07-31       dan:   }
555911dff5 2007-11-21       drh:   SbS_Render(p, zHeader);
555911dff5 2007-11-21       drh:   SbS_Destroy(p);
555911dff5 2007-11-21       drh: 
555911dff5 2007-11-21       drh:   /* Generate the main menu and the submenu (if any) */
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 ){
555911dff5 2007-11-21       drh:     @ <a href="%s(g.zBaseURL)/leaves">Leaves</a>
555911dff5 2007-11-21       drh:     @ <a href="%s(g.zBaseURL)/timeline">Timeline</a>
66f4caa379 2007-07-23       drh:   }
66f4caa379 2007-07-23       drh:   if( g.okRdWiki ){
555911dff5 2007-11-21       drh:     @ <a href="%s(g.zBaseURL)/wiki">Wiki</a>
dbda8d6ce9 2007-07-21       drh:   }
66f4caa379 2007-07-23       drh: #if 0
555911dff5 2007-11-21       drh:   @ <font color="#888888">Search</font>
555911dff5 2007-11-21       drh:   @ <font color="#888888">Ticket</font>
555911dff5 2007-11-21       drh:   @ <font color="#888888">Reports</font>
66f4caa379 2007-07-23       drh: #endif
dbda8d6ce9 2007-07-21       drh:   if( g.okSetup ){
555911dff5 2007-11-21       drh:     @ <a href="%s(g.zBaseURL)/setup">Setup</a>
dbda8d6ce9 2007-07-21       drh:   }
dbda8d6ce9 2007-07-21       drh:   if( !g.noPswd ){
555911dff5 2007-11-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:       if( p->zLink==0 ){
5cd9597428 2007-09-24       jnc:         @ <span class="label">%h(p->zLabel)</span>
dbda8d6ce9 2007-07-21       drh:       }else{
677aa71bca 2007-10-12       drh:         @ <a class="label" href="%s(p->zLink)">%h(p->zLabel)</a>
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: 
dbda8d6ce9 2007-07-21       drh: /*
555911dff5 2007-11-21       drh: ** The default page header.
5cd9597428 2007-09-24       jnc: */
555911dff5 2007-11-21       drh: const char zDefaultHeader[] =
555911dff5 2007-11-21       drh: @ <html>
555911dff5 2007-11-21       drh: @ <head>
555911dff5 2007-11-21       drh: @ <title>Edit CSS</title>
555911dff5 2007-11-21       drh: @ <link rel="alternate" type="application/rss+xml" title="RSS Feed"
555911dff5 2007-11-21       drh: @       href="[baseurl puts]/timeline.rss">
555911dff5 2007-11-21       drh: @ <link rel="stylesheet" href="[baseurl puts]/style.css" type="text/css"
555911dff5 2007-11-21       drh: @       media="screen">
555911dff5 2007-11-21       drh: @ </head>
555911dff5 2007-11-21       drh: @ <body>
555911dff5 2007-11-21       drh: @ <div id="page-title">[title html]</div>
555911dff5 2007-11-21       drh: @ <div id="login-status">
555911dff5 2007-11-21       drh: @ [/login exists enable_output]
555911dff5 2007-11-21       drh: @ logged in as [0 /login get html]
555911dff5 2007-11-21       drh: @ [/login exists not enable_output]
555911dff5 2007-11-21       drh: @ not logged in
555911dff5 2007-11-21       drh: @ [1 enable_output]
555911dff5 2007-11-21       drh: @ </div>
555911dff5 2007-11-21       drh: ;
5cd9597428 2007-09-24       jnc: 
5cd9597428 2007-09-24       jnc: /*
8ffd32c2b7 2007-10-28       drh: ** The default Cascading Style Sheet.
8ffd32c2b7 2007-10-28       drh: **
8ffd32c2b7 2007-10-28       drh: ** Selector order: tags, ids, classes, other
8ffd32c2b7 2007-10-28       drh: ** Content order: margin, borders, padding, fonts, colors, other
8ffd32c2b7 2007-10-28       drh: ** Note: Once things are finialize a bit we can collapse this and
8ffd32c2b7 2007-10-28       drh: **       make it much smaller, if necessary. Right now, it's verbose
8ffd32c2b7 2007-10-28       drh: **       but easy to edit.
5cd9597428 2007-09-24       jnc: */
8ffd32c2b7 2007-10-28       drh: const char zDefaultCSS[] =
8ffd32c2b7 2007-10-28       drh: @ body {
8ffd32c2b7 2007-10-28       drh: @   margin: 0px;
8ffd32c2b7 2007-10-28       drh: @   padding: 0px;
8ffd32c2b7 2007-10-28       drh: @   background-color: white;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #page-title {
8ffd32c2b7 2007-10-28       drh: @   padding: 10px 10px 10px 10px;
8ffd32c2b7 2007-10-28       drh: @   font-size: 1.8em;
8ffd32c2b7 2007-10-28       drh: @   font-weight: bold;
8ffd32c2b7 2007-10-28       drh: @   background-color: #6a7ec7;
8ffd32c2b7 2007-10-28       drh: @   color: #0a1e67;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #login-status {
8ffd32c2b7 2007-10-28       drh: @   padding: 0px 10px 10px 0px;
8ffd32c2b7 2007-10-28       drh: @   font-size: 0.9em;
8ffd32c2b7 2007-10-28       drh: @   text-align: right;
8ffd32c2b7 2007-10-28       drh: @   background-color: #6a7ec7;
8ffd32c2b7 2007-10-28       drh: @   color: white;
8ffd32c2b7 2007-10-28       drh: @   position: absolute;
8ffd32c2b7 2007-10-28       drh: @   top: 10;
8ffd32c2b7 2007-10-28       drh: @   right: 0;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #main-menu {
8ffd32c2b7 2007-10-28       drh: @   padding: 5px 10px 5px 10px;
8ffd32c2b7 2007-10-28       drh: @   font-size: 0.9em;
8ffd32c2b7 2007-10-28       drh: @   font-weight: bold;
8ffd32c2b7 2007-10-28       drh: @   text-align: center;
8ffd32c2b7 2007-10-28       drh: @   letter-spacing: 1px;
8ffd32c2b7 2007-10-28       drh: @   background-color: #414f84;
8ffd32c2b7 2007-10-28       drh: @   color: white;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #sub-menu {
8ffd32c2b7 2007-10-28       drh: @   padding: 3px 10px 3px 0px;
8ffd32c2b7 2007-10-28       drh: @   font-size: 0.9em;
8ffd32c2b7 2007-10-28       drh: @   text-align: center;
8ffd32c2b7 2007-10-28       drh: @   background-color: #414f84;
8ffd32c2b7 2007-10-28       drh: @   color: white;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #main-menu a, #main-menu a:visited, #sub-menu a, #sub-menu a:visited {
8ffd32c2b7 2007-10-28       drh: @   padding: 3px 10px 3px 10px;
8ffd32c2b7 2007-10-28       drh: @   color: white;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #main-menu a:hover, #sub-menu a:hover {
8ffd32c2b7 2007-10-28       drh: @   color: #414f84;
8ffd32c2b7 2007-10-28       drh: @   background-color: white;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #page {
8ffd32c2b7 2007-10-28       drh: @   padding: 10px 20px 10px 20px;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ #style-footer {
8ffd32c2b7 2007-10-28       drh: @   font-size: 0.8em;
8ffd32c2b7 2007-10-28       drh: @   margin-top: 12px;
8ffd32c2b7 2007-10-28       drh: @   padding: 5px 10px 5px 10px;
8ffd32c2b7 2007-10-28       drh: @   text-align: right;
8ffd32c2b7 2007-10-28       drh: @   background-color: #414f84;
8ffd32c2b7 2007-10-28       drh: @   color: white;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ table.label-value th {
8ffd32c2b7 2007-10-28       drh: @   text-align: right;
8ffd32c2b7 2007-10-28       drh: @   vertical-align: top;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: @ div.section-title {
8ffd32c2b7 2007-10-28       drh: @   margin-bottom: 0px;
8ffd32c2b7 2007-10-28       drh: @   padding: 1px 1px 1px 1px;
8ffd32c2b7 2007-10-28       drh: @   font-size: 1.2em;
8ffd32c2b7 2007-10-28       drh: @   font-weight: bold;
8ffd32c2b7 2007-10-28       drh: @   background-color: #6a7ec7;
8ffd32c2b7 2007-10-28       drh: @   color: #0a1e67;
8ffd32c2b7 2007-10-28       drh: @ }
8ffd32c2b7 2007-10-28       drh: ;
5cd9597428 2007-09-24       jnc: 
5cd9597428 2007-09-24       jnc: /*
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{
8ffd32c2b7 2007-10-28       drh:     cgi_append_content(zDefaultCSS, -1);
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>
1ce716b2ec 2007-10-11       drh:   @ g.zTop = %h(g.zTop)<br>
dbda8d6ce9 2007-07-21       drh:   cgi_print_all();
dbda8d6ce9 2007-07-21       drh:   style_footer();
dbda8d6ce9 2007-07-21       drh: }