Check-in [5cd9597428]
Not logged in
Overview

SHA1 Hash:5cd959742854ddf2fcd21f4a8b0be5099954f16e
Date: 2007-09-24 04:37:18
User: jnc
Comment:Added style.css page that get's from the repo or uses a built in style.css. Removed static formatting in header/footer, replaced with divs, spans and ids which the style.css can totally control. The default style.css is simple, uses blue colors from timeline date area. Fixed minor bug on setup_ulist where it would display footer at top.
Timelines: ancestors | descendants | both | trunk
Other Links: files | ZIP archive | manifest

Tags And Properties
Changes
[hide diffs]

Modified src/setup.c from [5bcc525b3b] to [10731e95e7].

@@ -79,11 +79,10 @@
 ** screen for that user.
 */
 void setup_ulist(void){
   Stmt s;
 
-  style_footer();
   login_check_credentials();
   if( !g.okSetup ){
     login_needed();
     return;
   }

Modified src/style.c from [74f0d8458f] to [f0dc6f508b].

@@ -1,7 +1,7 @@
 /*
-** Copyright (c) 2006 D. Richard Hipp
+** Copyright (c) 2006,2007 D. Richard Hipp
 **
 ** This program is free software; you can redistribute it and/or
 ** modify it under the terms of the GNU General Public
 ** License version 2 as published by the Free Software Foundation.
 **
@@ -74,23 +74,23 @@
   login_check_credentials();
   @ <html>
   @ <head>
   @ <title>%s(zTitle)</title>
   @ <link rel="alternate" type="application/rss+xml" title="RSS Feed" href="%s(g.zBaseURL)/timeline.rss">
+  @ <link rel="stylesheet" href="%s(g.zBaseURL)/style.css" type="text/css" media="screen">
   @ </head>
-  @ <body bgcolor="white">
-  @ <hr size="1">
-  @ <table border="0" cellpadding="0" cellspacing="0" width="100%%">
-  @ <tr><td valign="top" align="left">
-  @ <big><big><b>%s(zTitle)</b></big></big><br>
+  @ <body>
+  @ <div id="page-title">%s(zTitle)</div>
+  @ <div id="login-status">
   if( g.zLogin==0 ){
-    @ <small>not logged in</small>
+    @ not logged in
     zLogInOut = "Login";
   }else{
-    @ <small>logged in as %h(g.zLogin)</small>
+    @ logged in as %h(g.zLogin)
   }
-  @ </td><td valign="top" align="right">
+  @ </div>
+  @ <div id="main-menu">
   @ <a href="%s(g.zBaseURL)/index">Home</a>
   if( g.okRead ){
     @ | <a href="%s(g.zBaseURL)/leaves">Leaves</a>
     @ | <a href="%s(g.zBaseURL)/timeline">Timeline</a>
   }
@@ -106,37 +106,41 @@
     @ | <a href="%s(g.zBaseURL)/setup">Setup</a>
   }
   if( !g.noPswd ){
     @ | <a href="%s(g.zBaseURL)/login">%s(zLogInOut)</a>
   }
+  @ </div>
+  @ <div id="sub-menu">
   if( nSubmenu>0 ){
     int i;
-    @ <br>
     qsort(aSubmenu, nSubmenu, sizeof(aSubmenu[0]), submenuCompare);
     for(i=0; i<nSubmenu; i++){
       struct Submenu *p = &aSubmenu[i];
       char *zTail = i<nSubmenu-1 ? " | " : "";
       if( p->zLink==0 ){
-        @ <font color="#888888">%h(p->zLabel)</font> %s(zTail)
+        @ <span class="label">%h(p->zLabel)</span>
+        @ <span class="tail">%s(zTail)</span>
       }else{
-        @ <a href="%T(p->zLink)">%h(p->zLabel)</a> %s(zTail)
+        @ <a class="label" href="%T(p->zLink)">%h(p->zLabel)</a>
+        @ <span class="tail">%s(zTail)</span>
       }
     }
   }
-  @ </td></tr></table>
-  @ <hr size="1">
+  @ </div>
+  @ <div id="page">
   g.cgiPanic = 1;
 }
 
 /*
 ** Draw the footer at the bottom of the page.
 */
 void style_footer(void){
-  @ <hr>
-  @ <p align="left"><font size="1">
+  /* end the <div id="page"> from style_header() */
+  @ </div>
+  @ <div id="style-footer">
   @ Fossil version %s(MANIFEST_VERSION) %s(MANIFEST_DATE)
-  @ </font></p>
+  @ </div>
 }
 
 /*
 ** WEBPAGE: index
 ** WEBPAGE: home
@@ -150,10 +154,141 @@
     wiki_page();
   }else{
     style_header("Main Title Page");
     @ No homepage configured for this server
     style_footer();
+  }
+}
+
+/*
+** TODO: COPIED FROM WIKI.C... BAD
+*/
+/*
+** Create a fake replicate of the "vfile" table as a TEMP table
+** using the manifest identified by manid.
+*/
+static void style_create_fake_vfile(int manid){
+  static const char zVfileDef[] =
+    @ CREATE TEMP TABLE vfile(
+    @   id INTEGER PRIMARY KEY,     -- ID of the checked out file
+    @   vid INTEGER REFERENCES blob, -- The version this file is part of.
+    @   chnged INT DEFAULT 0,       -- 0:unchnged 1:edited 2:m-chng 3:m-add
+    @   deleted BOOLEAN DEFAULT 0,  -- True if deleted
+    @   rid INTEGER,                -- Originally from this repository record
+    @   mrid INTEGER,               -- Based on this record due to a merge
+    @   pathname TEXT,              -- Full pathname
+    @   UNIQUE(pathname,vid)
+    @ );
+    ;
+  db_multi_exec(zVfileDef);
+  load_vfile_from_rid(manid);
+}
+
+
+/*
+** WEBPAGE: style.css
+*/
+void page_style_css(void){
+  Stmt q;
+  int id = 0;
+  int rid = 0;
+  int chnged = 0;
+  char *zPathname = 0;
+  char *z;
+
+  cgi_set_content_type("text/css");
+
+  login_check_credentials();
+  if( !g.localOpen ){
+    int headid = db_int(0,
+       "SELECT cid FROM plink ORDER BY mtime DESC LIMIT 1"
+    );
+    style_create_fake_vfile(headid);
+  }
+
+  db_prepare(&q,
+     "SELECT id, rid, chnged, pathname FROM vfile"
+     " WHERE (pathname='style.css' OR pathname LIKE '%%/style.css')"
+     "   AND NOT deleted"
+  );
+  if( db_step(&q)==SQLITE_ROW ){
+    id = db_column_int(&q, 0);
+    rid = db_column_int(&q, 1);
+    chnged = db_column_int(&q, 2);
+    if( chnged || rid==0 ){
+      zPathname = db_column_malloc(&q, 3);
+    }
+  }
+  db_finalize(&q);
+  if( id ){
+    Blob src;
+    blob_zero(&src);
+    if( zPathname ){
+      zPathname = mprintf("%s/%z", g.zLocalRoot, zPathname);
+      blob_read_from_file(&src, zPathname);
+      free(zPathname);
+    }else{
+      content_get(rid, &src);
+    }
+
+    z = blob_str(&src);
+    @ %s(z)
+  }else{
+    /* No CSS file found, use our own */
+    /*
+    ** Selector order: tags, ids, classes, other
+    ** Content order: margin, borders, padding, fonts, colors, other
+    ** Note: Once things are finialize a bit we can collapse this and
+    **       make it much smaller, if necessary. Right now, it's verbose
+    **       but easy to edit.
+    */
+    @ body {
+    @   margin: 0px;
+    @   padding: 0px;
+    @   background-color: white;
+    @ }
+    @ #page-title {
+    @   padding: 10px 10px 10px 10px;
+    @   font-size: 2em;
+    @   font-weight: bold;
+    @   background-color: #d0d9f4;
+    @ }
+    @ #login-status {
+    @   padding: 0px 10px 10px 0px;
+    @   font-size: 0.9em;
+    @   text-align: right;
+    @   background-color: #d0d9f4;
+    @   position: absolute;
+    @   top: 10;
+    @   right: 0;
+    @ }
+    @ #main-menu {
+    @   border-top: 2px solid #a0b5f4;
+    @   padding: 3px 10px 1px 0px;
+    @   font-size: 0.9em;
+    @   text-align: center;
+    @   background-color: #d0d9f4;
+    @ }
+    @ #sub-menu {
+    @   border-bottom: 2px solid #a0b5f4;
+    @   padding: 3px 10px 3px 0px;
+    @   font-size: 0.9em;
+    @   text-align: center;
+    @   background-color: #d0d9f4;
+    @ }
+    @ #main-menu a:visited, #sub-menu a:visited {
+    @   color: blue;
+    @ }
+    @ #page {
+    @   padding: 10px 20px 10px 20px;
+    @ }
+    @ #style-footer {
+    @   font-size: 0.8em;
+    @   margin-top: 12px;
+    @   padding-top: 5px;
+    @   border-top: 1px solid black;
+    @ }
   }
 }
 
 /*
 ** WEBPAGE: test_env