Update pgarchives to use new styles.
authorJonathan S. Katz <jonathan.katz@excoventures.com>
Sun, 25 Mar 2018 21:11:04 +0000 (17:11 -0400)
committerJonathan S. Katz <jonathan.katz@excoventures.com>
Wed, 18 Apr 2018 15:57:08 +0000 (11:57 -0400)
"base.html" is equivalent to pgweb/.../base.html other than the
top "shoutbox" bar, which will dynamically load the latest news
from PGDG. As this is not yet implemented, it is commented out.

26 files changed:
django/archives/mailarchives/templates/404.html
django/archives/mailarchives/templates/500.html
django/archives/mailarchives/templates/base.html
django/archives/mailarchives/templates/datelist.html
django/archives/mailarchives/templates/datelist_topandbottom.html
django/archives/mailarchives/templates/index.html
django/archives/mailarchives/templates/message.html
django/archives/mailarchives/templates/message_flat.html
django/archives/mailarchives/templates/monthlist.html
django/archives/mailarchives/templates/page.html [new file with mode: 0644]
django/archives/mailarchives/templates/searchform.html
django/archives/mailarchives/views.py
django/archives/urls.py
django/media/css/archives.css [deleted file]
django/media/css/base.css [new file with mode: 0644]
django/media/css/docs.css [new file with mode: 0644]
django/media/css/global.css [deleted file]
django/media/css/iefixes.css [deleted file]
django/media/css/layout.css [deleted file]
django/media/css/main.css [new file with mode: 0644]
django/media/css/navigation.css [deleted file]
django/media/css/table.css [deleted file]
django/media/css/text.css [deleted file]
django/media/img/about/press/elephant.png [new file with mode: 0644]
django/media/img/atpostgresql.png [new file with mode: 0755]
django/media/img/git.png [new file with mode: 0644]

index 7cc5b9457df8669b162d5cef4be23f0e6d66022a..6560bd426debb8de7553c66796e2edffc3de3e77 100644 (file)
@@ -1,4 +1,4 @@
-{%extends "base.html"%}
+{%extends "page.html"%}
 {%block title%}Not found{%endblock%}
 {%block contents%}
 <h1>Not Found</h1>
index 4904ef7a827ffb4b3f3c60d6b1f986ad260a18f4..357c303468f17fd7b46ff07de0dedac6bfbc52f1 100644 (file)
@@ -1,9 +1,8 @@
-{%extends "base.html"%}
+{%extends "page.html"%}
 {%block title%}Server error{%endblock%}
 {%block contents%}
 <h1>Server Error</h1>
 <p>
 An internal server error occurred.
 </p>
-</h1>
 {%endblock%}
index c4468f6443aa285d2adf9b51f44c40f3b8fc9970..28bf6e057934bf11add8f88e843e8c1e8be79b9e 100644 (file)
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" dir="ltr">
+<!doctype html>
+<html lang="en">
  <head>
-  <title>{%block title%}{%endblock%}</title>
+  <title>PostgreSQL: {%block title%}{%endblock%}</title>
+  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
-{%block meta%}{%endblock%} {# used for custom meta tags such as description which we don't want for every page #}
+  {%block meta%}{%endblock%} {# used for custom meta tags such as description which we don't want for every page #}
+  <meta name="theme-color" content="#336791"/>
   <meta name="copyright" content="The PostgreSQL Global Development Group" />
+  <link href="/media-archives/css/fontawesome.css?{{gitrev}}" rel="stylesheet">
+  <link rel="stylesheet" href="/media-archives/css/bootstrap.min.css?{{gitrev}}">
   <link rel="shortcut icon" href="/favicon.ico" />
-  <link rel="alternate" type="application/rss+xml" title="PostgreSQL News" href="https://www.postgresql.org/news.rss" />
-  <link rel="alternate" type="application/rss+xml" title="PostgreSQL Events" href="https://www.postgresql.org/events.rss" />
-  <link rel="stylesheet" type="text/css" media="screen" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/themes/smoothness/jquery-ui.css" />
-  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
-  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
-  <script type="text/javascript" src="/media-archives/js/jquery/jquery.ui.selectmenu.js"></script>
-  <link rel="stylesheet" type="text/css" media="screen" href="/media-archives/css/jquery/jquery.ui.selectmenu.css" />
-  <style type="text/css" media="screen">@import url("/media-archives/css/archives.css");</style>
-  <script type="text/javascript">
-  var _gaq = _gaq || [];
-  _gaq.push(['_setAccount', 'UA-1345454-2']);
-  _gaq.push(['_trackPageview']);
-  (function() {
-    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
-    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
-    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
-  })();
-</script>
-{%block extrahead%}{%endblock%}
- </head>
- <body>
-  <div id="pgContainerWrap">
-   <div id="pgContainer">
-    <span class="txtOffScreen"><a href="#pgContent" title="Skip site navigation" accesskey="1">Skip site navigation</a> (1)</span>
-    <span class="txtOffScreen"><a href="#pgContentWrap" title="Skip section navigation" accesskey="2">Skip section navigation</a> (2)</span>
-    <div id="pgHeaderContainer">
-     <div id="pgSearch">
-      <form method="get" action="https://www.postgresql.org/search/">
-       <div>
-        <h2 class="pgBlockHide"><label for="q">Search</label></h2>
-        <input id="q" name="q" type="text" size="20" maxlength="255" onfocus="if( this.value==this.defaultValue ) this.value='';" value="Search" accesskey="s" /><input name="a" type="hidden" value="1"/><input id="submit" name="submit" type="submit" value="Search" />
-       </div>
-      </form>
-      <h2 class="pgBlockHide">Peripheral Links</h2>
-      <div id="pgSearchNav">
-       <ul id="pgSearchNavList">
-        <li>
-          <a href="/about/donate">Donate</a>
-        </li>
-        <li>
-          <a href="/about/contact">Contact</a>
-        </li>
-       </ul>
+  {%if newstags %}
+    {%comment%}Default RSS links are only shown on pages that have newstags set{%endcomment%}
+    <link rel="alternate" type="application/rss+xml" title="All PostgreSQL News" href="/news.rss" />
+    {%for t in newstags%}
+      <link rel="alternate" type="application/rss+xml" title="PostgreSQL News about {{t.name}}" href="/news/{{t.urlname}}.rss" />
+    {%endfor%}
+    <link rel="alternate" type="application/rss+xml" title="PostgreSQL Events" href="/events.rss" />
+  {%endif%}
+  <style type="text/css" media="screen" title="Normal Text">@import url("/dyncss/base.css?{{gitrev}}");</style>
+  {%block extrahead%}{%endblock%}
+  </head>
+  <body>
+    <div class="container-fluid">
+      <div class="row justify-content-md-center">
+        <div class="col">
+          <!-- Header -->
+          <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
+            <a class="navbar-brand p-0" href="/">
+              <img class="logo" src="/media-archives/img/about/press/elephant.png" alt="PostgreSQL Elephant Logo">
+            </a>
+            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#pgNavbar" aria-controls="pgNavbar" aria-expanded="false" aria-label="Toggle navigation">
+              <span class="navbar-toggler-icon"></span>
+            </button>
+            <div class="collapse navbar-collapse" id="pgNavbar">
+              <ul class="navbar-nav mr-auto">
+                <li class="nav-item p-2"><a href="/" title="Home">Home</a></li>
+                <li class="nav-item p-2"><a href="/about/" title="About">About</a></li>
+                <li class="nav-item p-2"><a href="/download/" title="Download">Download</a></li>
+                <li class="nav-item p-2"><a href="/docs/" title="Documentation">Documentation</a></li>
+                <li class="nav-item p-2"><a href="/community/" title="Community">Community</a></li>
+                <li class="nav-item p-2"><a href="/developer/" title="Developers">Developers</a></li>
+                <li class="nav-item p-2"><a href="/support/" title="Support">Support</a></li>
+                <li class="nav-item p-2"><a href="/about/donate/" title="Donate">Donate</a></li>
+                <li class="nav-item p-2"><a href="/account/" title="Your account">Your account</a></li>
+              </ul>
+             <form role="search" method="get" action="/search/">
+               <div class="input-group">
+                 <input id="q" name="q" type="text" size="20" maxlength="255" accesskey="s"  class="form-control" placeholder="Search for...">
+                 <span class="input-group-btn">
+                   <button class="btn btn-default" type="submit"><i class="fas fa-search"></i></button>
+                 </span>
+               </div><!-- /input-group -->
+             </form>
+            </div>
+          </nav>
+        </div>
       </div>
-     </div>
-        <div id="pgHeader">
-         <div id="pgHeaderLogoLeft">
-          <a href="https://www.postgresql.org/"><img alt="PostgreSQL" height="80" width="230" src="/media/img/layout/hdr_left.png" /></a>
-         </div>
-         <div id="pgHeaderLogoRight">
-          <a href="/"><img width="210" height="80" alt="The world's most advanced open source database." src="/media/img/layout/hdr_right.png" /></a>
-         </div>
-        </div> <!-- pgHeader -->
-
-        <div id="pgTopNav">
-         <div id="pgTopNavLeft"><img width="7" height="23" alt="" src="/media/img/layout/nav_lft.png" /></div>
-         <div id="pgTopNavRight"><img width="7" height="23" alt="" src="/media/img/layout/nav_rgt.png" /></div>
-         <ul id="pgTopNavList">
-          <li><a href="https://www.postgresql.org/" title="Home">Home</a></li>
-          <li><a href="https://www.postgresql.org/about" title="About">About</a></li>
-          <li><a href="https://www.postgresql.org/download" title="Download">Download</a></li>
-          <li><a href="https://www.postgresql.org/docs" title="Documentation">Documentation</a></li>
-          <li><a href="https://www.postgresql.org/community" title="Community">Community</a></li>
-          <li><a href="https://www.postgresql.org/developer" title="Developers">Developers</a></li>
-          <li><a href="https://www.postgresql.org/support" title="Support">Support</a></li>
-          <li><a href="https://www.postgresql.org/account" title="Your account">Your account</a></li>
-         </ul>
-        </div> <!-- pgTopNav -->
-       </div> <!-- pgHeaderContainer -->
-       <div id="pgContent">
-         <div id="pgSideWrap">
-          <div id="pgSideNav">
-           <ul>
-            <li><a href="https://www.postgresql.org/community/">Community</a></li>
-            <li><a href="https://www.postgresql.org/community/contributors/">Contributors</a></li>
-            <li><a href="/list/">Mailing Lists</a>
-              <ul>
-                <li><a href="/community/lists/subscribe/">Subscribe</a></li>
-{%for g in listgroups%}
-                <li><a href="/{{g.homelink}}/">{{g.groupname}}</a>
-{%if g.lists%}
-                <ul>
-{%for l in g.lists%}
-                  <li><a href="/list/{{l.listname}}/">{{l.shortdesc}}</a></li>
-{%endfor%}
-                </ul>
-{%endif%}
-               </li>
-{%endfor%}
-               </ul>
-            </li>
-            <li><a href="https://www.postgresql.org/community/irc">IRC</a></li>
-            <li><a href="https://www.postgresql.org/community/user-groups/">Local User Groups</a></li>
-            <li><a href="https://www.postgresql.org/about/users">Featured Users</a></li>
-            <li><a href="https://www.postgresql.org/community/international">International Sites</a></li>
-            <li><a href="https://www.postgresql.org/community/propaganda">Propaganda</a></li>
-            <li><a href="https://www.postgresql.org/community/resources">Resources</a></li>
-           </ul>
+      {% comment %}
+      <!-- NOTE: This content is currently hard coded, which makes some challenges
+      when updating deploys.  A future iteration will enable us to load this content
+      dynamically from the pgweb database, amd this we can uncomment this line.
+      This also would make base.html in pgarchives equivalent to base.html in pgweb
+      -->
+      <div class="row justify-content-center pg-shout-box">
+        <div class="col text-white text-center">
+          1st March 2018: <a href="/about/news/1834/">PostgreSQL 10.3 Released</a>!
+        </div>
+      </div>
+      {% endcomment %}
+    </div>
+    {%block layoutblock%}{%endblock%}
+    <!-- Footer -->
+    <footer id="footer">
+      <div class="container">
+        <div class="row">
+          <div class="col-md-12">
+            <ul>
+              <li><a href="https://twitter.com/postgresql"><img src="/media-archives/img/atpostgresql.png" alt="@postgresql"></a></li>
+              <li><a href="https://git.postgresql.org/gitweb/"><img src="/media-archives/img/git.png" alt="Git"></a></li>
+            </ul>
           </div>
-        </div> <!-- pgSideWrap -->
-        <div id="pgContentWrap">
-{%block contents%}{%endblock%}
-        </div> <!-- pgContentWrap-->
-     <br class="pgClearBoth" />
-    </div> <!-- pgContent -->
-       <div id="pgFooter">
-         <a class="navFooter" href="https://www.postgresql.org/about/privacypolicy">Privacy Policy</a> |
-         <a class="navFooter" href="https://www.postgresql.org/about/">About PostgreSQL</a><br/>
-        Copyright &copy; 1996-{% now "Y" %} The PostgreSQL Global Development Group
-       </div> <!-- pgFooter -->
-   </div>
-  </div> <!-- pgContainerWrap -->
- </body>
+        </div>
+      </div>
+      <!-- Copyright -->
+      <div class="container">
+        <a href="/about/privacypolicy">Privacy Policy</a> |
+        <a href="/about/">About PostgreSQL</a> |
+        <a href="/about/contact/">Contact</a><br/>
+        <p>Copyright &copy; 1996-{% now "Y" %} The PostgreSQL Global Development Group</p>
+      </div>
+    </footer>
+    <script src="/media-archives/js/jquery-3.2.1.slim.min.js?{{gitrev}}"></script>
+    <script src="/media-archives/js/popper.min.js?{{gitrev}}"></script>
+    <script src="/media-archives/js/bootstrap.min.js?{{gitrev}}"></script>
+    <script type="text/javascript">
+      var _gaq = _gaq || [];
+      _gaq.push(['_setAccount', 'UA-1345454-1']);
+      _gaq.push(['_trackPageview']);
+      (function() {
+        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+      })();
+    </script>
+    <script type="text/javascript">
+      var shiftWindow = function() { scrollBy(0, -80) };
+      if (location.hash) shiftWindow();
+      window.addEventListener("hashchange", shiftWindow);
+    </script>
+  </body>
 </html>
index 079942068bebf25c034f3a9bf7234e2363606ec2..1d4793605c1b2076b3d5ac746d19a7f6201bdfe2 100644 (file)
@@ -1,24 +1,45 @@
-{%extends "base.html"%}
+{%extends "page.html"%}
 {%block title%}PostgreSQL Mailing Lists: {{title}}{%endblock%}
 {%block extrahead%}<meta name="robots" content="noindex" />{%endblock%}
 {%load pgfilters%}
+
 {%block contents%}
-<h1>{{title}}</h1>
+<h1>{{title}} <i class="far fa-envelope"></i></h1>
+<p>{{list.description}}</p>
+
 {%include "searchform.html"%}
+
 {%include "datelist_topandbottom.html"%}
+
 {%for m in messages%}
-{%ifchanged m.date.date%}
-{%if not forloop.first%}
-</ul>
-{%endif%}
-<h3>{{m.date.date}}</h3>
-<ul>
-{%endifchanged%}
-  <li><a href="/message-id/{{m.messageid|urlencode}}">{{m.subject|default:"[No subject]"}}</a> {{m.mailfrom|nameonly}} ({{m.date.time|time:"H:i"}})</li>
-{%if forloop.last%}
-</ul>
-<p></p>
-{%endif%}
+  {%ifchanged m.date.date%}
+    {%if not forloop.first%}
+        </tbody>
+      </table>
+    {%endif%}
+    <h2>{{m.date.date}}</h2>
+    <table class="table table-striped table-sm">
+      <thead>
+        <tr>
+          <th scope="col">Thread</th>
+          <th scope="col">Author</th>
+          <th scope="col">Time</th>
+        </tr>
+      </thead>
+      <tbody>
+  {%endifchanged%}
+  <tr>
+    <th scope="row">
+      <a href="/message-id/{{m.messageid|urlencode}}">{{m.subject|default:"[No subject]"}}</a>
+    </th>
+    <td>{{m.mailfrom|nameonly}}</td>
+    <td>{{m.date.time|time:"H:i"}}</td>
+  </tr>
+  {%if forloop.last%}
+      </tbody>
+    </table>
+  {%endif%}
 {%endfor%}
+
 {%include "datelist_topandbottom.html"%}
 {%endblock%}
index 5cfbba0585a26c4d5907c7d68bbef9c27138a130..097f1389de1e4052c5d24d6ca995f62288b6d09b 100644 (file)
@@ -1,4 +1,5 @@
 {%if messages%}
+<h3>Browse Archives</h3>
 {%with messages|first as firstmsg%}
 <a href="/list/{{list.listname}}/before/{{firstmsg.shortdate}}">Prev</a>
 {%endwith%}
index 148bdb8bdff82349cd175ec7467fd3cff5d78ec9..ef1d8c61845d5496cec850b6d41361b83e4dc3a5 100644 (file)
@@ -1,52 +1,72 @@
-{%extends "base.html"%}
+{%extends "page.html"%}
 {%block title%}PostgreSQL Mailing List Archives{%endblock%}
 {%load pgfilters%}
 {%block contents%}
-<h1>PostgreSQL Mailing Lists</h1>
+<h1>PostgreSQL Mailing Lists <i class="far fa-envelope"></i></h1>
 
-<h3>How to Subscribe or Unsubscribe</h3>
+<h2>What are the PostgreSQL Mailing Lists?</h2>
 
-<p><b>Note 1:</b> Please ensure you read the <a 
-href="https://wiki.postgresql.org/wiki/Archives_Policy">Archive Policy</a>
-before posting to the lists.</p>
+The <a href="https://lists.postgresql.org/" target="_blank">PostgreSQL mailing lists</a> are one of the primary ways to interact with the PostgreSQL community. The mailing lists are an effective way to communicate and contribute to PostgreSQL and there are a lists that cover a variety of topics, including:
 
-<p><b>Note 2:</b> Please do not subscribe to mailing lists using e-mail 
-accounts protected by mail-back anti-spam systems. These are extremely annoying 
-to the list maintainers and other members, and you may be automatically unsubscribed.
+<ul>
+  <li>Ongoing PostgreSQL development</li>
+  <li>General support</li>
+  <li>Product release &amp; event announcements</li>
+  <li>Coordinate community outreach</li>
+</ul>
+
+and many more.
+
+<h2>How to Subscribe or Unsubscribe</h2>
+
+<p>To help ensure you have a productive experience on the PostgreSQL experience, we have a few tips to get you started on your journey:</p>
+
+<h3>Tip #1: Read The Archives Policy</h3>
+
+<p>The PostgreSQL mailing lists are available in a public archive and are independently syndicated across the web. We want you to feel comfortable posting to our public mailing lists, so please ensure you read our <a
+ href="https://wiki.postgresql.org/wiki/Archives_Policy" target="_blank">Archive Policy</a> prior to your initial post.</p>
+
+<h3>Tip #2: Avoid Mail-Back Anti-Spam Systems</h3>
+
+<p>If your email address is protected by a mail-back anti-spam system, this could cause some issues with our mailing list system. If it is discovered that your email address has implemented one of these systems, we mave have to automatically unsubscribe your account.
 </p>
 
+<h3>Subscribing to a PostgreSQL Mailing List</h3>
+
 <p>
-To subscribe to one of the PostgreSQL mailinglist, please use the system at
-<a href="https://lists.postgresql.org/">lists.postgresql.org</a>.
+Ready to join the PostgreSQL community? You can subscribe to one of our mailing lists at <a href="https://lists.postgresql.org/" target="_blank">lists.postgresql.org</a>.
 </p>
-<h3>Archives</h3>
-<p>Before posting to a list, you may wish to search the archives to see if
-your question has already been answered.</p>
+
+<h2>Mailing List Archives</h2>
+
+<p>The PostgreSQL Mailing list public archives provide a rich history of the PostgreSQL project, all the way back to 1997! We keep a public record of the mailing list to help provide a searchable resource to help answer your questions, as well as in the spirit of building an open community.</p>
+
+<p>Need a question answered? The archive are fully searchable.  Can't find the answer you are looking for? If it is a general usage question, we recommended subscribing to the <strong>pgsql-general@postgresql.org</strong> mailing list. If it is a more technical question about how PostgreSQL internals work, we recommended subscribing to the <strong>pgsql-hackers@postgresql.org</strong> mailing list.</p>
 
 {%include "searchform.html" %}
 
+<h3>View All Archives</h3>
 
 {%for g in groups%}
-{%if not forloop.first%}
</table>
-</div>
-{%endif%}
-<h2>{{g.groupname}}</h2>
-<div class="tblBasic">
-<table border="0" cellpadding="0" cellspacing="0" class="tblBasicGrey">
-<tr>
-       <th class="colFirst">List</th>
-       <th class="colLast">Description</th>
-</tr>
-
-{%for l in g.lists%}
-<tr>
-    <td class="colFirst"><a href="/list/{{l.listname}}/">{{l.maybe_shortdesc}}</a></td>
-    <td class="colLast">{{l.description|safe}}</td>
-</tr>
-{%endfor%}
+  {%if not forloop.first%}
     </tbody>
+    </table>
+  {%endif%}
+  <h5>{{g.groupname}}</h5>
+  <table class="table table-striped">
+    <thead class="thead-light">
+      <tr>
+        <th>List</th>
+        <th>Description</th>
+      </tr>
+      <tbody>
+        {%for l in g.lists%}
+          <tr>
+            <th scope="row"><a href="/list/{{l.listname}}/">{{l.maybe_shortdesc}}</a></th>
+            <td>{{l.description|safe}}</td>
+          </tr>
+        {%endfor%}
 {%endfor%}
- </table>
-</div>
+</table>
 
 {%endblock%}
index 2215338e6565e1672ff2d08ed57684266f98872a..ce7c89a9c6a025df2ffc6457b77788a824aa6297 100644 (file)
@@ -1,6 +1,7 @@
-{%extends "base.html"%}
+{%extends "page.html"%}
 {%block title%}{%if not msg.hiddenstatus%}{{msg.subject}}{%endif%}{%endblock%}
 {%load pgfilters%}
+
 {%block extrahead%}
 <script type="text/javascript">
 function onThreadSelect() {
@@ -18,100 +19,146 @@ $(function(){
 });
 </script>
 {%endblock%}
+
 {%block contents%}
-<h2>{%if not msg.hiddenstatus%}{{msg.subject}}{%endif%}</h2>
-<table class="message">
+{%if not msg.hiddenstatus%}
+<h1 class="subject">{{msg.subject}}</h1>
+{%endif%}
+<table class="table table-sm table-responsive">
  <tr>
-  <th>From:</th>
+  <th scope="row">From:</th>
   <td>{{msg.mailfrom|hidemail}}</td>
  </tr>
  <tr>
-  <th>To:</th>
+  <th scope="row">To:</th>
   <td>{{msg.to|hidemail}}</td>
  </tr>
 {%if msg.cc%}
  <tr>
-  <th>Cc:</th>
+  <th scope="row">Cc:</th>
   <td>{{msg.cc|hidemail}}</td>
  </tr>
 {%endif%}
  <tr>
-  <th>Subject:</th>
+  <th scope="row">Subject:</th>
   <td>{%if not msg.hiddenstatus%}{{msg.subject}}{%endif%}</td>
  </tr>
  <tr>
-  <th>Date:</th>
+  <th scope="row">Date:</th>
   <td>{{msg.printdate}}</td>
  </tr>
  <tr>
-  <th>Message-ID:</th>
-  <td><a href="/message-id/{{msg.messageid|urlencode}}">{{msg.messageid}}</a> (view <a href="/message-id/raw/{{msg.messageid|urlencode}}">raw</a>, <a href="/message-id/flat/{{msg.messageid|urlencode}}">whole thread</a> or download <a href="/message-id/mbox/{{msg.messageid|urlencode}}">thread mbox</a>)</td>
+  <th scope="row">Message-ID:</th>
+  <td><a href="/message-id/{{msg.messageid|urlencode}}">{{msg.messageid}}</a></td>
  </tr>
  <tr>
-  <th>Thread:</th>
+   <th class="align-middle" scope="row">Views:</th>
+   <td>
+     <a class="btn btn-sm btn-secondary" href="/message-id/raw/{{msg.messageid|urlencode}}">Raw Message</a>
+     <a class="btn btn-sm btn-secondary" href="/message-id/flat/{{msg.messageid|urlencode}}">Whole Thread</a>
+     <a class="btn btn-sm btn-secondary" href="/message-id/mbox/{{msg.messageid|urlencode}}">Download mbox</a>
+   </td>
+ </tr>
+ <tr>
+  <th class="align-middle" scope="row">Thread:</th>
   <td>
-   <select id="thread_select" onchange="onThreadSelect()">
+   <select id="thread_select" class="custom-select" onchange="onThreadSelect()">
 {%for m in threadstruct%}{%if m.id%}<option value="{{m.messageid|urlencode}}"{%if m.id == msg.id%} selected="selected"{%endif%}{%if m.hasattachment%} class="hasatt"{%endif%}>{{m.indent|safe}}{{m.printdate}} from {{m.mailfrom|hidemail}}</option>{%endif%}
 {%endfor%}
    </select>
   </td>
  </tr>
  <tr>
-  <th>Lists:</th>
+  <th scope="row">Lists:</th>
   <td>{%for l in lists %}<span class="listname"><a href="/list/{{l.listname}}/since/{{msg.shortdate}}">{{l.listname}}</a></span>{%endfor%}</td>
  </tr>
 </table>
-<div class="bodywrapper">
 {%if msg.hiddenstatus%}
-<pre>{{msg.hiddenreason}}</pre>
+<pre style="font-size: 0.85rem; line-height: 1.1rem;">{{msg.hiddenreason}}</pre>
 {%else%}
-<pre>{{msg.bodytxt|hideallemail|urlize}}</pre>
+<pre style="font-size: 0.85rem; line-height: 1.1rem;">{{msg.bodytxt|hideallemail|urlize}}</pre>
 
 {%if msg.has_attachment%}
-{%for a in msg.attachments%}
-{%if a.inlineable%}<a href="/message-id/attachment/{{a.id}}/{{a.filename}}"><img class="attachedimage" src="/message-id/attachment/{{a.id}}/{{a.filename}}" /></a>{%endif%}
-{%if forloop.last%}<hr/>{%endif%}
-{%endfor%}
-
-{%for a in msg.attachments%}
-<div>
-<b>Attachment: <a href="/message-id/attachment/{{a.id}}/{{a.filename}}">{{a.filename}}</a></b><br/>
-Description: {{a.contenttype}} ({{a.len|filesizeformat}}) {%if a.inlineable%}(inlined above){%endif%}
-</div>
-{%endfor%}
+  <h5>Attachments</h5>
+  <table class="table table-sm table-responsive">
+    <thead>
+      <tr>
+        <th scope="col">Attachment</th>
+        <th scope="col">Content-Type</th>
+        <th scope="col">Size</th>
+      </tr>
+    </thead>
+    <tbody>
+      {%for a in msg.attachments%}
+        <tr>
+          <th scope="row">
+            {% if a.inlineable %}
+              <a href="/message-id/attachment/{{a.id}}/{{a.filename}}">
+                <img class="attachedimage" src="/message-id/attachment/{{a.id}}/{{a.filename}}" />
+              </a>
+            {% else %}
+              <a href="/message-id/attachment/{{a.id}}/{{a.filename}}">{{a.filename}}</a>
+            {% endif %}
+          </th>
+          <td>{{ a.contenttype }}</td>
+          <td>{{a.len|filesizeformat}}</td>
+        </tr>
+      {%endfor%}
+    </tbody>
+  </table>
 {%endif%}
+
 {%if parent%}
-<h3>In response to</h3>
-<ul>
-<li><a href="/message-id/{{parent.messageid|urlencode}}">{{parent.subject}}</a> at {{parent.printdate}} from {{parent.mailfrom|nameonly}}</li>
-</ul>
+  <h3>In response to</h3>
+  <ul>
+    <li><a href="/message-id/{{parent.messageid|urlencode}}">{{parent.subject}}</a> at {{parent.printdate}} from {{parent.mailfrom|nameonly}}</li>
+  </ul>
 {%endif%}
-{%if responses %}
-<h3>Responses</h3>
-<ul>
-{%for m in responses%}
-<li><a href="/message-id/{{m.messageid|urlencode}}">{{m.subject}}</a> at {{m.printdate}} from {{m.mailfrom|nameonly}}</li>
-{%endfor%}
-</ul>
+
+{%if responses%}
+  <h3>Responses</h3>
+  <ul>
+    {%for m in responses%}
+      <li>
+        <a href="/message-id/{{m.messageid|urlencode}}">{{m.subject}}</a> at {{m.printdate}} from {{m.mailfrom|nameonly}}
+      </li>
+    {%endfor%}
+  </ul>
 {%endif%}
+
 {%if nextprev%}
-{%for list, info in nextprev.items %}
-<h3>{{list}} by date</h3>
-<blockquote>
- <table border="0">
-  {%if info.next%}
-   <tr><td><a href="/message-id/{{info.next.msgid|urlencode}}">Next</a>:</td><td><b>From:</b> {{info.next.from|nameonly}}</td><td><b>Date:</b> {{info.next.date}}</td></tr>
-   <tr><td></td><td colspan="2"><b>Subject</b>: {{info.next.subject}}</td></tr>
-  {%endif%}
-  {%if info.prev%}
-   <tr><td><a href="/message-id/{{info.prev.msgid|urlencode}}">Previous</a>:</td><td><b>From</b>: {{info.prev.from|nameonly}}</td><td><b>Date</b>: {{info.prev.date}}</td></tr>
-   <tr><td></td><td colspan="2"><b>Subject</b>: {{info.prev.subject}}</td></tr>
-  {%endif%}
- </table>
-</blockquote>
-{%endfor%}
+  {%for list, info in nextprev.items %}
+    <h3>Browse {{list}} by date</h3>
+    <table class="table table-sm table-responsive">
+      <thead>
+        <tr>
+          <th scope="col">&nbsp;</th>
+          <th scope="col">From</th>
+          <th scope="col">Date</th>
+          <th scope="col">Subject</th>
+        </tr>
+      </thead>
+      <tbody>
+        {%if info.next%}
+          <tr>
+            <th scope="row"><a href="/message-id/{{info.next.msgid|urlencode}}">Next Message</a></th>
+            <td>{{info.next.from|nameonly}}</td>
+            <td>{{info.next.date}}</td>
+            <td><a href="/message-id/{{info.next.msgid|urlencode}}">{{info.next.subject}}</a></td>
+          </tr>
+        {%endif%}
+        {%if info.prev%}
+          <tr>
+            <th scope="row"><a href="/message-id/{{info.prev.msgid|urlencode}}">Previous Message</a></th>
+            <td>{{info.prev.from|nameonly}}</td>
+            <td>{{info.prev.date}}</td>
+            <td><a href="/message-id/{{info.prev.msgid|urlencode}}">{{info.prev.subject}}</a></td>
+          </tr>
+        {%endif%}
+      </tbody>
+    </table>
+  {%endfor%}
 {%endif%}
 
 {%endif%}{%comment%}hidden{%endcomment%}
-</div>
 {%endblock%}
index fe04ede596fc9be8797e8e67ea2b8976907d01da..fe7e69f4c0e64ca555754bbe9968f1cbabdd93ca 100644 (file)
@@ -1,4 +1,4 @@
-{%extends "base.html"%}
+{%extends "page.html"%}
 {%block title%}{%if not msg.hiddenstatus%}{{msg.subject}}{%endif%}{%endblock%}
 {%load pgfilters%}
 {%block extrahead%}
@@ -13,55 +13,84 @@ window.onload = load;
 </script>
 {%endblock%}
 {%block contents%}
-<h2>{%if not msg.hiddenstatus%}{{msg.subject}}{%endif%}</h2>
+{%if not msg.hiddenstatus%}
+<h1 class="subject">{{msg.subject}}</h1>
+{%endif%}
 {%for m in allmsg %}
-<div class="msgwrap">
 <a name="{{m.messageid|urlencode}}"></a>
-<table class="message">
+<table class="table table-sm table-responsive">
  <tr>
-  <th>From:</th>
+  <th scope="row">From:</th>
   <td>{{m.mailfrom|hidemail}}</td>
  </tr>
  <tr>
-  <th>To:</th>
+  <th scope="row">To:</th>
   <td>{{m.to|hidemail}}</td>
  </tr>
 {%if m.cc%}
  <tr>
-  <th>Cc:</th>
+  <th scope="row">Cc:</th>
   <td>{{m.cc|hidemail}}</td>
  </tr>
 {%endif%}
  <tr>
-  <th>Subject:</th>
-  <td>{%if not msg.hiddenstatus%}{{m.subject}}{%endif%}</td>
+  <th scope="row">Subject:</th>
+  <td>{%if not m.hiddenstatus%}{{m.subject}}{%endif%}</td>
  </tr>
  <tr>
-  <th>Date:</th>
+  <th scope="row">Date:</th>
   <td>{{m.printdate}}</td>
  </tr>
  <tr>
-  <th>Message-ID:</th>
-  <td><a href="/message-id/{{m.messageid|urlencode}}">{{m.messageid}}</a> (view <a href="/message-id/raw/{{m.messageid|urlencode}}">raw</a> or download <a href="/message-id/mbox/{{allmsg.0.messageid|urlencode}}">thread mbox</a>)</td>
+  <th scope="row">Message-ID:</th>
+  <td><a href="/message-id/{{m.messageid|urlencode}}">{{m.messageid}}</a></td>
+ </tr>
+ <tr>
+   <th class="align-middle" scope="row">Views:</th>
+   <td>
+     <a class="btn btn-sm btn-secondary" href="/message-id/raw/{{m.messageid|urlencode}}">Raw Message</a>
+     <a class="btn btn-sm btn-secondary" href="/message-id/{{m.messageid|urlencode}}">Original Message</a>
+     <a class="btn btn-sm btn-secondary" href="/message-id/mbox/{{m.messageid|urlencode}}">Download mbox</a>
+   </td>
  </tr>
 </table>
-<div class="bodywrapper">
+
 {%if m.hiddenstatus%}
-<pre>{{m.hiddenreason}}</pre>
+<pre style="font-size: 0.85rem; line-height: 1.1rem;">{{m.hiddenreason}}</pre>
 {%else%}
-<pre>{{m.bodytxt|hideallemail|urlize}}</pre>
+<pre style="font-size: 0.85rem; line-height: 1.1rem;">{{m.bodytxt|hideallemail|urlize}}</pre>
 
 {%if m.has_attachment%}
-{%for a in m.attachments.all%}
-<div>
-<b>Attachment: <a href="/message-id/attachment/{{a.id}}/{{a.filename}}">{{a.filename}}</a></b><br/>
-Description: {{a.contenttype}} ({{a.len|filesizeformat}})
-</div>
-{%endfor%}
+  <h5>Attachments</h5>
+  <table class="table table-sm table-responsive">
+    <thead>
+      <tr>
+        <th scope="col">Attachment</th>
+        <th scope="col">Content-Type</th>
+        <th scope="col">Size</th>
+      </tr>
+    </thead>
+    <tbody>
+      {%for a in m.attachments%}
+        <tr>
+          <th scope="row">
+            {% if a.inlineable %}
+              <a href="/message-id/attachment/{{a.id}}/{{a.filename}}">
+                <img class="attachedimage" src="/message-id/attachment/{{a.id}}/{{a.filename}}" />
+              </a>
+            {% else %}
+              <a href="/message-id/attachment/{{a.id}}/{{a.filename}}">{{a.filename}}</a>
+            {% endif %}
+          </th>
+          <td>{{ a.contenttype }}</td>
+          <td>{{a.len|filesizeformat}}</td>
+        </tr>
+      {%endfor%}
+    </tbody>
+  </table>
 {%endif%}
-</div>
 
 {%endif%}{%comment%}hidden{%endcomment%}
-</div>
+<hr />
 {%endfor%}
 {%endblock%}
index 91d1dd6e57e47d840f668b5cc70800af8a4a5291..2af962163485c67ac51db5a17b49647840885802 100644 (file)
@@ -1,20 +1,33 @@
-{%extends "base.html"%}
+{%extends "page.html"%}
 {%block title%}PostgreSQL Mailing Lists: {{list.listname}}{%endblock%}
 {%block extrahead%}<meta name="robots" content="noindex" />{%endblock%}
 {%load pgfilters%}
+
 {%block contents%}
-<h1>{{list.listname}}</h1>
+<h1>{{list.listname}} <i class="far fa-envelope"></i></h1>
+<p>{{list.description}}</p>
+
 {%include "searchform.html" %}
+
+<h2>View Archives</h2>
+
 {%regroup months by year as yearmonth %}
-<ul>
-{%for year in yearmonth%}
- <li>{{year.grouper}}
-  <ul>
-   {%for month in year.list%}
-    <li><a href="/list/{{list.listname}}/{{month.year}}-{{month.month|stringformat:"02d"}}/">{{month.date|date:"F"}}</a> (<a href="/list/{{list.listname}}/mbox/{{list.listname}}.{{month.year}}{{month.month|stringformat:"02d"}}">mbox</a>)</li>
-   {%endfor%}
-  </ul>
- </li>
-{%endfor%}
-</ul>
+<table class="table table-striped">
+  <tbody>
+    {% for year in yearmonth %}
+      <tr>
+        <th colspan="3">{{ year.grouper }}</th>
+      </tr>
+      {% for month in year.list %}
+        <tr>
+          <th scope="row">
+            <a href="/list/{{list.listname}}/{{month.year}}-{{month.month|stringformat:"02d"}}/">{{month.date|date:"F Y"}}</a>
+          </th>
+          <td><a href="/list/{{list.listname}}/{{month.year}}-{{month.month|stringformat:"02d"}}/">View Archives</a></td>
+          <td><a href="/list/{{list.listname}}/mbox/{{list.listname}}.{{month.year}}{{month.month|stringformat:"02d"}}">Download mbox</a></td>
+        </tr>
+      {% endfor %}
+    {% endfor %}
+  </tbody>
+</table>
 {%endblock%}
diff --git a/django/archives/mailarchives/templates/page.html b/django/archives/mailarchives/templates/page.html
new file mode 100644 (file)
index 0000000..0957776
--- /dev/null
@@ -0,0 +1,28 @@
+{%extends "base.html" %}
+{%block layoutblock%}
+<div class="container-fluid margin">
+  <div class="row">
+    <div class="col-lg-2">
+      <div id="pgSideWrap">
+       <div id="pgSideNav">
+         <h2>Quick Links</h2>
+         <ul>
+            <li><a href="/community/">Community</a></li>
+            <li><a href="/community/contributors/">Contributors</a></li>
+            <li><a href="/list/">Mailing Lists</a></li>
+            <li><a href="/community/irc/">IRC</a></li>
+            <li><a href="https://postgres-slack.herokuapp.com/">Slack</a></li>
+            <li><a href="/community/user-groups/">Local User Groups</a></li>
+            <li class="last-child"><a href="/community/international/">International Sites</a></li>
+         </ul>
+       </div>
+      </div> <!-- pgSideWrap -->
+    </div>
+    <div class="col-lg-10">
+      <div id="pgContentWrap">
+        {%block contents%}{%endblock%}
+      </div> <!-- pgContentWrap -->
+    </div>
+  </div>
+</div>
+{%endblock%}
index 9a8e6f4376e78065a448a9ccd2ecc0dfb1b566aa..76baab9a625bd18aaeefa844b9c6306e19c565dc 100644 (file)
@@ -1,21 +1,24 @@
-<p>
-</p>
-<form name="searchform" method="get" action="https://www.postgresql.org/search/">
- <input type="hidden" name="m" value="1" />
-{%if searchform_listname%} <input type="hidden" name="ln" value="{{searchform_listname}}"/>{%endif%}
- <div class="tblBasic">
-  <table border="0" cellpadding="0" cellspacing="0" class="tblBasicGrey">
-   <tr>
-      <th class="colFirst" style="vertical-align: middle">Search archives</th>
-      <th class="colLast" colspan="2">
-       <input type="text" name="q" size="25" value=""/> <input type="submit" value="Search" />
-      </th>
-   </tr>
-   <tr class="lastrow">
-    <td class="colFirst"></td>
-    <td>(enter a message-id to go directly to that message)</td>
-    <td class="colLast" align="right"><a href="https://www.postgresql.org/search/?m=1{%if searchform_listname%}&amp;ln={{searchform_listname}}{%endif%}">Advanced Search</a></td>
-   </tr>
-  </table>
- </div>
+<h3>Search the Archives</h3>
+
+<form method="get" action="/search/">
+  <input type="hidden" name="m" value="1">
+  {%if searchform_listname%} <input type="hidden" name="ln" value="{{searchform_listname}}"/>{%endif%}
+  <div class="row">
+    <div class="col-lg-6">
+      <div class="input-group">
+        <input type="text" name="q" value="{{query}}" class="form-control" placeholder="Search the archives for for...">
+        <span class="input-group-btn">
+          <button class="btn btn-default" type="submit">
+            <i class="fas fa-search"></i>
+          </button>
+        </span>
+      </div><!-- /input-group -->
+      <div class="input-group">
+        <small class="form-text text-muted">(enter a message-id to go directly to that message)</small>
+      </div>
+      <div class="input-group">
+        <a href="https://www.postgresql.org/search/?m=1{%if searchform_listname%}&amp;ln={{searchform_listname}}{%endif%}">Advanced Search</a>
+      </div>
+    </div><!-- /.col-lg-6 -->
+  </div><!-- /.row -->
 </form>
index 47ef35f9e95381a11d3919a5a1880fef08a25f98..e52c221e7fe2200b86fbaac37e5d5cd2b14d64f0 100644 (file)
@@ -706,19 +706,55 @@ def legacy(request, listname, year, month, msgnum):
                raise Http404('Message does not exist')
        return HttpResponsePermanentRedirect('/message-id/%s' % r[0][0])
 
+# dynamic CSS serving, meaning we merge a number of different CSS into a
+# single one, making sure it turns into a single http response. We do this
+# dynamically, since the output will be cached.
+_dynamic_cssmap = {
+       'base': ['media/css/main.css',
+                        'media/css/normalize.css',],
+       'docs': ['media/css/global.css',
+                        'media/css/table.css',
+                        'media/css/text.css',
+                    'media/css/docs.css'],
+       }
+
 @cache(hours=8)
-def base_css(request):
-       # Generate a hardcoded list of CSS imports. This will only be used
-       # in development installs - in production, it will use the CSS from
-       # the main website.
-       return HttpResponse("""@import url("/media/css/global.css");
-@import url("/media/css/layout.css");
-@import url("/media/css/text.css");
-@import url("/media/css/navigation.css");
-@import url("/media/css/table.css");
-
-@import url("/media/css/iefixes.css");
-""", content_type='text/css')
+def dynamic_css(request, css):
+       if not _dynamic_cssmap.has_key(css):
+               raise Http404('CSS not found')
+       files = _dynamic_cssmap[css]
+       resp = HttpResponse(content_type='text/css')
+
+       # We honor if-modified-since headers by looking at the most recently
+       # touched CSS file.
+       latestmod = 0
+       for fn in files:
+               try:
+                       stime = os.stat(fn).st_mtime
+                       if latestmod < stime:
+                               latestmod = stime
+               except OSError:
+                       # If we somehow referred to a file that didn't exist, or
+                       # one that we couldn't access.
+                       raise Http404('CSS (sub) not found')
+       if request.META.has_key('HTTP_IF_MODIFIED_SINCE'):
+               # This code is mostly stolen from django :)
+               matches = re.match(r"^([^;]+)(; length=([0-9]+))?$",
+                                                  request.META.get('HTTP_IF_MODIFIED_SINCE'),
+                                                  re.IGNORECASE)
+               header_mtime = parse_http_date(matches.group(1))
+               # We don't do length checking, just the date
+               if int(latestmod) <= header_mtime:
+                       return HttpResponseNotModified(content_type='text/css')
+       resp['Last-Modified'] = http_date(latestmod)
+
+       for fn in files:
+               with open(fn) as f:
+                       resp.write("/* %s */\n" % fn)
+                       resp.write(f.read())
+                       resp.write("\n")
+
+       return resp
 
 # Redirect to the requested url, with a slash first. This is used to remove
 # trailing slashes on messageid links by doing a permanent redirect. This is
@@ -728,7 +764,6 @@ def base_css(request):
 def slash_redirect(request, url):
        return HttpResponsePermanentRedirect("/%s" % url)
 
-
 # Redirect the requested URL to whatever happens to be in the regexp capture.
 # This is used for user agents that generate broken URLs that are easily
 # captured using regexp.
index 6b42f03af59c98334d3d47038e76323d725defdf..cc80874403365f81fdb25c9c5d6ad23cb9778790 100644 (file)
@@ -61,7 +61,7 @@ urlpatterns = [
 
     # Normally served off www.postgresql.org, but manually handled here for
     # development installs.
-    url(r'^dyncss/base.css', archives.mailarchives.views.base_css),
+    url(r'^dyncss/(?P<css>base|docs).css$', archives.mailarchives.views.dynamic_css),
 ]
 
 if not settings.PUBLIC_ARCHIVES:
@@ -73,4 +73,3 @@ if not settings.PUBLIC_ARCHIVES:
                url(r'^accounts/logout/?$', archives.auth.logout),
                url(r'^auth_receive/$', archives.auth.auth_receive),
        ]
-
diff --git a/django/media/css/archives.css b/django/media/css/archives.css
deleted file mode 100644 (file)
index 1c0504b..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* replacement for base.css used on archives */
-@import url("/dyncss/base.css");
-
-a                               { text-decoration: underline; }
-
-a:link                          { color:#0085B0; }
-a:visited                       { color:#004E66; }
-a:active                        { color:#0085B0; }
-a:hover                         { color:#000000; }
-
-select a                        { text-decoration: none }
-
-#pgFooter a                     { color:#666; }
-#pgFooter a:hover               { color:#000; }
-
-#txtFrontUserName a             { color:#666; }
-#txtFrontUserName a:hover       { color:#000; }
-
-.bodywrapper a:visited         { color:#00536E; }
-.bodywrapper pre,
-.bodywrapper tt {
-  word-wrap: break-word;
-  white-space: pre-wrap;
-  font-size: 1.2em;
-  padding: 1em 0 1em 2em;
-  border-width: 2px 0;
-  border-color: lightGray;
-  border-style: solid;
-}
-
-
-table.message th,
-table.message td
-{
-       vertical-align: top;
-}
-table.message th
-{
-       width: 8em;
-}
-
-table.message
-{
-       width: 100%;
-}
-
-table.message select
-{
-       width: 100%;
-}
-
-table.message span.listname
-{
-       line-height: 1.4em;
-       float: left;
-}
-
-.msgwrap table.message
-{
-       border-width: 0;
-}
-
-div.msgwrap {
-   border: 2px solid lightGray;
-   margin-bottom: 10px;
-}
-
-span.listname {
-   background-color: #F7F7F7;
-   padding: 0.2em;
-   border: 1px solid #CFCFCF;
-}
-a.ui-selectmenu {
-   text-decoration: none;
-   color: black;
-}
-.ui-selectmenu-status {
-   font-weight: bold;
-}
-.ui-widget {
-   font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
-   font-size: 1em;
-}
-.ui-selectmenu-menu, .ui-selectmenu-status {
-   white-space: nowrap;
-}
-.ui-selectmenu-menu-dropdown a {
-   color: black;
-}
-
-.ui-selectmenu-menu ul {
-    overflow-x: auto;
-}
-
-img.attachedimage {
-   max-width: 600px;
-}
\ No newline at end of file
diff --git a/django/media/css/base.css b/django/media/css/base.css
new file mode 100644 (file)
index 0000000..ac1a60e
--- /dev/null
@@ -0,0 +1 @@
+@import url("main.css");
diff --git a/django/media/css/docs.css b/django/media/css/docs.css
new file mode 100644 (file)
index 0000000..1bea4c1
--- /dev/null
@@ -0,0 +1,534 @@
+/* PostgreSQL.org Documentation Style */
+
+/*
+ * Documentation generated by XSL stylesheets has lower-case class
+ * names, older documentation generated by DSSSL stylesheets has
+ * upper-case class names, so we need to support both for a while.  In
+ * some cases, the elements and classes differ further between the two
+ * stylesheets.
+ */
+
+/* requires global.css, table.css and text.css to be loaded before this file! */
+body {
+  font-size: 76%;
+}
+
+.navheader table,
+.NAVHEADER table {
+  margin-left: 0;
+}
+
+/* Container Definitions */
+
+#docContainerWrap {
+  text-align: center; /* Win IE5 */
+}
+
+#docContainer {
+  margin: 0 auto;
+  width: 90%;
+  padding-bottom: 2em;
+  display: block;
+  text-align: left; /* Win IE5 */
+}
+
+#docHeader {
+  background-image: url("/media-archives/img/docs/bg_hdr.png");
+  height: 83px;
+  margin: 0px;
+  padding: 0px;
+  display: block;
+}
+
+#docHeaderLogo {
+  position: relative;
+  width: 206px;
+  height: 83px;
+  border: 0px;
+  padding: 0px;
+  margin: 0 0 0 20px;
+}
+
+#docHeaderLogo img {
+  border: 0px;
+}
+
+#docNavSearchContainer {
+  padding-bottom: 2px;
+}
+
+#docNav, #docVersions {
+  position: relative;
+  text-align: left;
+  margin-left: 10px;
+  margin-top: 5px;
+  color: #666;
+  font-size: 0.95em;
+}
+
+#docSearch {
+  position: relative;
+  text-align: right;
+  padding: 0;
+  margin: 0;
+  color: #666;
+}
+
+#docTextSize {
+  text-align: right;
+  white-space: nowrap;
+  margin-top: 7px;
+  font-size: 0.95em;
+}
+
+#docSearch form {
+  position: relative;
+  top: 5px;
+  right: 0;
+  margin: 0; /* need for IE 5.5 OSX */
+  text-align: right; /* need for IE 5.5 OSX */
+  white-space: nowrap; /* for Opera */
+}
+
+#docSearch form label {
+  color: #666;
+  font-size: 0.95em;
+}
+
+#docSearch form input {
+  font-size: 0.95em;
+}
+
+#docSearch form #submit {
+  font-size: 0.95em;
+  background: #7A7A7A;
+  color: #fff;
+  border: 1px solid #7A7A7A;
+  padding: 1px 4px;
+}
+
+#docSearch form #q {
+  width: 170px;
+  font-size: 0.95em;
+  border:  1px solid #7A7A7A;
+  background: #E1E1E1;
+  color: #000000;
+  padding: 2px;
+}
+
+.frmDocSearch {
+  padding: 0;
+  margin: 0;
+  display: inline;
+}
+
+.inpDocSearch {
+  padding: 0;
+  margin: 0;
+  color: #000;
+}
+
+#docContent {
+  position: relative;
+  margin-left: 10px;
+  margin-right: 10px;
+  margin-top: 40px;
+}
+
+#docFooter {
+  position: relative;
+  font-size: 0.9em;
+  color: #666;
+  line-height: 1.3em;
+  margin-left: 10px;
+  margin-right: 10px;
+}
+
+#docComments {
+  margin-top: 10px;
+}
+
+#docClear {
+  clear: both;
+  margin: 0;
+  padding: 0;
+}
+
+/* Heading Definitions */
+
+h1, h2, h3 {
+  font-weight: bold;
+  margin-top: 2ex;
+}
+
+h1 {
+  font-size: 1.4em;
+}
+
+h2 {
+  font-size: 1.2em !important;
+}
+
+h3 {
+  font-size: 1.1em;
+}
+
+h1 a:hover {
+  color: #EC5800;
+  text-decoration: none;
+}
+
+h2 a:hover,
+h3 a:hover,
+h4 a:hover {
+  color: #666666;
+  text-decoration: none;
+}
+
+/*
+ * Change color of h2 chunk titles in XSL build.  (In DSSSL build,
+ * these will be h1, which is already handled elsewhere.)
+ */
+.titlepage h2.title,
+.refnamediv h2 {
+  color: #EC5800;
+}
+
+/* Text Styles */
+
+div.sect2,
+div.SECT2 {
+  margin-top: 4ex;
+}
+
+div.sect3,
+div.SECT3 {
+  margin-top: 3ex;
+  margin-left: 3ex;
+}
+
+.txtCurrentLocation {
+  font-weight: bold;
+}
+
+p, ol, ul, li {
+  line-height: 1.5em;
+}
+
+.txtCommentsWrap {
+  border: 2px solid #F5F5F5;
+  width: 100%;
+}
+
+.txtCommentsContent {
+  background: #F5F5F5;
+  padding: 3px;
+}
+
+.txtCommentsPoster {
+  float: left;
+}
+
+.txtCommentsDate {
+  float: right;
+}
+
+.txtCommentsComment {
+  padding: 3px;
+}
+
+#docContainer pre code,
+#docContainer pre tt,
+#docContainer pre pre,
+#docContainer tt tt,
+#docContainer tt code,
+#docContainer tt pre {
+  font-size: 1em;
+}
+
+pre.literallayout,
+.screen,
+.synopsis,
+.programlisting,
+.refsynopsisdiv p,
+.caution,
+.warning,
+.note,
+.tip,
+.table table,
+.informaltable table,
+pre.LITERALLAYOUT,
+.SCREEN,
+.SYNOPSIS,
+.PROGRAMLISTING,
+.REFSYNOPSISDIV p,
+table.CAUTION,
+table.WARNING,
+blockquote.NOTE,
+blockquote.TIP,
+table.CALSTABLE {
+  -moz-box-shadow: 3px 3px 5px #DFDFDF;
+  -webkit-box-shadow: 3px 3px 5px #DFDFDF;
+  -khtml-box-shadow: 3px 3px 5px #DFDFDF;
+  -o-box-shadow: 3px 3px 5px #DFDFDF;
+  box-shadow: 3px 3px 5px #DFDFDF;
+}
+
+pre.literallayout,
+.screen,
+.synopsis,
+.programlisting,
+.refsynopsisdiv p,
+.caution,
+.warning,
+.note,
+.tip,
+pre.LITERALLAYOUT,
+.SCREEN,
+.SYNOPSIS,
+.PROGRAMLISTING,
+.REFSYNOPSISDIV p,
+table.CAUTION,
+table.WARNING,
+blockquote.NOTE,
+blockquote.TIP {
+  color: black;
+  border-width: 1px;
+  border-style: solid;
+  padding: 2ex;
+  margin: 2ex 0 2ex 2ex;
+  overflow: auto;
+  -moz-border-radius: 8px;
+  -webkit-border-radius: 8px;
+  -khtml-border-radius: 8px;
+  border-radius: 8px;
+}
+
+pre.literallayout,
+pre.synopsis,
+pre.programlisting,
+.refsynopsisdiv p,
+.screen,
+pre.LITERALLAYOUT,
+pre.SYNOPSIS,
+pre.PROGRAMLISTING,
+.REFSYNOPSISDIV p,
+.SCREEN {
+  border-color: #CFCFCF;
+  background-color: #F7F7F7;
+}
+
+.note,
+.tip,
+blockquote.NOTE,
+blockquote.TIP {
+  border-color: #DBDBCC;
+  background-color: #EEEEDD;
+  padding: 14px;
+  width: 572px;
+}
+
+.note,
+.tip,
+.caution,
+.warning,
+blockquote.NOTE,
+blockquote.TIP,
+table.CAUTION,
+table.WARNING {
+  margin: 4ex auto;
+}
+
+.note p,
+.tip p,
+blockquote.NOTE p,
+blockquote.TIP p {
+  margin: 0;
+}
+
+.note pre,
+.note code,
+.tip pre,
+.tip code,
+blockquote.NOTE pre,
+blockquote.NOTE code,
+blockquote.TIP pre,
+blockquote.TIP code {
+  margin-left: 0;
+  margin-right: 0;
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+  -khtml-box-shadow: none;
+  -o-box-shadow: none;
+  box-shadow: none;
+}
+
+.caution,
+.warning {
+  max-width: 600px;
+}
+
+.tip h3,
+.note h3,
+.caution h3,
+.warning h3 {
+  text-align: center;
+}
+
+.emphasis,
+.c2 {
+  font-weight: bold;
+}
+
+.replaceable,
+.REPLACEABLE {
+  font-style: italic;
+}
+
+/* Table Styles */
+
+table {
+  margin-left: 2ex;
+}
+
+.table table td,
+.table table th,
+.informaltable table td,
+.informaltable table th,
+table.CALSTABLE td,
+table.CALSTABLE th,
+table.CAUTION td,
+table.CAUTION th,
+table.WARNING td,
+table.WARNING th {
+  border-style: solid;
+}
+
+.table table,
+.informaltable table,
+table.CALSTABLE,
+table.CAUTION,
+table.WARNING {
+  border-spacing: 0;
+  border-collapse: collapse;
+}
+
+.table table,
+.informaltable table,
+table.CALSTABLE
+{
+  margin: 2ex 0 2ex 2ex;
+  background-color: #E0ECEF;
+  border: 2px solid #A7C6DF;
+}
+
+.table table tr:hover td,
+.informaltable table tr:hover td,
+table.CALSTABLE tr:hover td
+{
+  background-color: #EFEFEF;
+}
+
+.table table td,
+.informaltable table td,
+table.CALSTABLE td {
+  background-color: #FFF;
+}
+
+.table table td,
+.table table th,
+.informaltable table td,
+.informaltable table th,
+table.CALSTABLE td,
+table.CALSTABLE th {
+  border: 1px solid #A7C6DF;
+  padding: 0.5ex 0.5ex;
+}
+
+table.CAUTION,
+table.WARNING {
+  border-collapse: separate;
+  display: block;
+  padding: 0;
+  max-width: 600px;
+}
+
+.caution,
+table.CAUTION {
+  background-color: #F5F5DC;
+  border-color: #DEDFA7;
+}
+
+.warning,
+table.WARNING {
+  background-color: #FFD7D7;
+  border-color: #DF421E;
+}
+
+table.CAUTION td,
+table.CAUTION th,
+table.WARNING td,
+table.WARNING th {
+  border-width: 0;
+  padding-left: 2ex;
+  padding-right: 2ex;
+}
+
+table.CAUTION td,
+table.CAUTION th {
+  border-color: #F3E4D5
+}
+
+table.WARNING td,
+table.WARNING th {
+  border-color: #FFD7D7;
+}
+
+td.c1,
+td.c2,
+td.c3,
+td.c4,
+td.c5,
+td.c6 {
+  font-size: 1.1em;
+  font-weight: bold;
+  border-bottom: 0px solid #FFEFEF;
+  padding: 1ex 2ex 0;
+}
+
+/* Link Styles */
+
+#docNav a {
+  font-weight: bold;
+}
+
+a:link,
+a:visited,
+a:active,
+a:hover {
+  text-decoration: underline;
+}
+
+a:link,
+a:active {
+  color:#0066A2;
+}
+
+a:visited {
+  color:#004E66;
+}
+
+a:hover {
+  color:#000000;
+}
+
+#docFooter a:link,
+#docFooter a:visited,
+#docFooter a:active {
+  color:#666;
+}
+
+#docContainer code.function tt,
+#docContainer code.FUNCTION tt {
+  font-size: 1em;
+}
diff --git a/django/media/css/global.css b/django/media/css/global.css
deleted file mode 100644 (file)
index 1706e11..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
-  PostgreSQL.org - Global Styles
-*/
-
-body {
-  margin: 0;
-  padding: 0;
-  font-family: verdana, sans-serif;
-  font-size: 69%;
-  color: #000;
-  background-color: #fff;
-}
-
-h1 {
-  font-size: 1.4em;
-  font-weight: bold;
-  margin-top: 0em;
-  margin-bottom: 0em;
-}
-
-h2 {
-  font-size: 1.2em;
-  margin: 1.2em 0em 1.2em 0em;
-  font-weight: bold;
-}
-
-h3 {
-  font-size: 1.0em;
-  margin: 1.2em 0em 1.2em 0em;
-  font-weight: bold;
-}
-
-h4 {
-  font-size: 0.95em;
-  margin: 1.2em 0em 1.2em 0em;
-  font-weight: normal;
-}
-
-h5 {
-  font-size: 0.9em;
-  margin: 1.2em 0em 1.2em 0em;
-  font-weight: normal;
-}
-
-h6 {
-  font-size: 0.85em;
-  margin: 1.2em 0em 1.2em 0em;
-  font-weight: normal;
-}
-
-img {
-  border: 0;
-}
-
-ol, ul, li {/*
-  list-style: none;*/
-  font-size: 1.0em;
-  line-height: 1.2em;
-  margin-top: 0.2em;
-  margin-bottom: 0.1em; 
-}
-
-p {
-  font-size: 1.0em;
-  line-height: 1.2em;
-  margin: 1.2em 0em;
-}
-
-td p {
-  margin: 0em 0em 1.2em;
-}
-
-li > p {
-  margin-top: 0.2em;
-}
-
-pre {
-  font-family: monospace;
-  font-size: 1.0em;
-}
-
-div#pgContentWrap code {
-  font-size: 1.2em;
-  padding: 1em;
-  margin: 2ex 0 2ex 2ex;
-  background: #F7F7F7;
-  border: 1px solid #CFCFCF;
-  -moz-border-radius: 8px;
-  -webkit-border-radius: 8px;
-  -khtml-border-radius: 8px;
-  border-radius: 8px;
-  display: block;
-  overflow: auto;
-}
-
-strong, b {
-  font-weight: bold;
-}
diff --git a/django/media/css/iefixes.css b/django/media/css/iefixes.css
deleted file mode 100644 (file)
index 8601bc1..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-  PostgreSQL.org - Fixes for Internet Explorer
-*/
-
-/*Win IE fix \*/
-* html #pgHeaderContainer { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgHeader { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgTopNav { height: 1%; margin-top: 0px; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgTopNavLeft { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgTopNavRight { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgTopNavList { height: 1%; margin-bottom: -2px; }
-* html #pgTopNavList li { margin: 0 0.5em 0 -0.5em; }
-
-/*End Win IE fix*/
-
-
-/*Win IE fix \*/
-* html #pgSearchNavList { height: 1%; margin-right: 0.5em; }
-* html #pgSearchNavList li { margin: 0 0 0 0.5em; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgContent { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontContainer { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontMain { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontFeature { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontFeatureLink { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontNewsEventsContainer { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontNews { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontEvents { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html .pgNewsEventsList { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontUSSContainer { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontUser { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontSupportUs { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontShortcuts { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontShortcutsWrap { height: 1%; margin-top: 7px; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontShortcutsList { height: 1%; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgFrontNewsEventsContainer h3 img { height: 1%; margin-bottom: 4px; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgSideWrap { /* margin-top: 11px; */ }
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgContentWrap {margin-left: 165px; /* margin-top: 11px; */ }
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #pgSideNav { height: 1%; position: static; }
-
-/*End Win IE fix*/
-
-/*Win IE fix \*/
-* html #txtArchives pre { font-size: 100%; }
-/*End Win IE fix*/
diff --git a/django/media/css/layout.css b/django/media/css/layout.css
deleted file mode 100644 (file)
index 3de23e2..0000000
+++ /dev/null
@@ -1,688 +0,0 @@
-/*
-  PostgreSQL.org - Layout Styles
-*/
-
-/* Container Definitions */
-
-/* Page Container */
-
-#pgContainerWrap {
-  text-align: center; /* Win IE5 */
-}
-
-#pgContainer {
-  margin: 0em auto;
-  width: 765px;
-  padding: 0;
-  padding-top: 4px;
-  padding-bottom: 10px;
-  text-align: left; /* Win IE5 */
-}
-
-
-/* Header Container */
-#pgHeaderContainer {
-  padding-bottom: 2px;
-}
-
-#pgHeader {
-  position: relative;
-  background: url("/media/img/layout/hdr_fill.png") repeat-x;
-  height: 80px;
-  margin: 0;
-  padding: 0;
-  clear: both;
-}
-
-#pgHeaderLogoLeft {
-  position: relative;
-  width: 230px;
-  height: 80px;
-  border: 0px;
-  padding: 0px;
-  margin: 0px;
-  float: left;
-}
-
-#pgHeaderLogoLeft img { 
-  border: 0px; 
-}
-
-#pgHeaderLogoRight {
-  position: relative;
-  width: 210px;
-  height: 80px;
-  border: 0px;
-  padding: 0px;
-  margin: 0px;
-  float: right;
-}
-
-#pgHeaderLogoRight img {
-  border: 0px;
-}
-
-#pgSearch {
-  position: relative;
-  text-align: right;
-  padding: 0;
-  margin: 0;
-  color: #666;
-}
-
-#pgSearch form {
-  position: relative;
-  top: 5px;
-  right: 0;
-  margin: 0; /* need for IE Mac */
-  text-align: right; /* need for IE Mac */
-  white-space: nowrap; /* for Opera */
-}
-
-#pgSearch form label { 
-  color: #666; 
-  font-size: 0.8em; 
-}
-
-#pgSearch form input { 
-  font-size: 0.8em; 
-}
-
-#pgSearch form #submit,
-#pgSearch form #q {
-  font-size: 0.8em;
-  background: #FFFFFF;
-  color: #000000;
-  border: 1px solid #7A7A7A;
-}
-
-#pgSearch form #submit {
-
-  padding: 1px 4px;
-}
-
-#pgSearch form #q {
-  width: 140px;
-  padding: 2px;
-}
-
-/* Content Container */
-#pgContent {
-  clear: both;
-  display: block;
-}
-
-#pgFrontContainer {
-  width: 100%;
-  float: left;
-  margin-right: -220px;
-}
-
-#pgFrontMain {
-  margin-right: 220px;
-  margin-top: 10px;
-}
-
-#pgFrontFeature {
-  position: relative;
-  background: #F5F5F5 url(/media/img/feature/feature_elephant.png) right bottom no-repeat;
-  /* Also see pgFrontFeatureContent for image size */
-  padding: 15px;
-  margin-bottom: 1em;
-  font-size: 1.0em;
-}
-
-#pgFrontFeature:before {
-  line-height: 0.1;
-  font-size: 1px;
-  background: transparent url("/media/img/layout/feature_tr.gif") no-repeat top right;
-  margin: -15px -15px 0 -15px;
-  height: 15px;
-  display: block;
-  border: none;
-  content: url("/media/img/layout/feature_tl.gif");
-}
-
-#pgFrontFeature:after {
-  display: block;
-  clear: both;
-  padding-top: 15px;
-  line-height: 0.1;
-  font-size: 1px;
-  content:  url("/media/img/layout/feature_bl.gif");
-  margin: -15px;
-  height: 8px;
-  background: transparent url("/media/img/layout/feature_br.gif") scroll no-repeat bottom right ;
-}
-
-#pgFrontFeature h2{
-  border: none;
-  margin-top: 0;
-}
-
-#pgFrontFeature p {
-  margin: 0 0 1em 0;
-}
-
-#pgFrontFeature #pgFrontFeatureContent {
-    /* This padding controls the size of the text in the front blurb, and needs to be
-     * adjusted whenever the image is changed. */
-  padding: 6px 132px 16px 10px; 
-}
-
-#pgFrontRightContainer {
-  float: right;
-  width: 200px;
-/*  border-left: 1px solid #E1E1E1;*/
-  margin: 0;
-  padding: 0;
-
-  padding-left: 10px;
-}
-
-#pgFrontBottomContainer {
-  clear: both;
-  width: 100%;
-  padding-top: 0.7em;
-  margin-bottom: 15px;
-}
-
-#pgFrontNews {
-  float:left;
-  width: 230px;
-  margin-right: 10px;
-}
-
-#pgFrontEvents {
-  width: 240px;
-  border-left: 1px solid #E1E1E1;
-  margin: 0;
-  padding: 0;
-  padding-left: 10px;
-  margin-left: 250px;
-  margin-right: 250px;
-}
-
-.pgNewsEventsWrap {
-  padding-left: 5px;
-}
-
-.pgRSSBottomList {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-  display: inline;
-}
-
-.pgRSSBottomList img.pgRSSImage {
-  display: inline;
-  border: 0;
-  vertical-align: bottom;
-}
-
-.pgRSSBottomList li {
-  padding: 0 0.5em 0 0.5em;
-  display: inline;
-  border-right: 1px solid #E1E1E1;
-}
-
-.pgRSSBottomList li a {
-}
-
-/* Uncomment when IE/Validator supports last-child
-
-.pgRSSBottomList li:last-child {
-  border-right: 0;
-  padding-right: 0;
-}
-
-*/
-
-.pgRSSBottomList li.last-child {
-  border-right: 0;
-  padding-right: 0;
-}
-
-/* Used in pgRSSBottomList */
-img.pgArrowImage {
-  padding: 0;
-  margin: 0;
-  display: inline;
-  border: 0;
-}
-
-#pgFrontUSSContainer {
-}
-
-/* Featured User Box */
-
-#pgFrontUser {
-  width: 545px;
-  padding-top: 7px;
-  float: left;
-  background: url(/media/img/layout/usr_tbl_top.png) top right no-repeat;
-  margin-bottom: 15px;
-}
-
-#pgFrontUserInner {
-  background: url(/media/img/layout/usr_tbl_btm.png) bottom left no-repeat;
-  width: 100%;
-  padding-bottom: 7px;
-}
-
-#pgFrontUserWrap {
-  padding: 11px 14px 12px 15px;
-  border-left: 1px solid #DADADA;
-  border-right: 1px solid #DADADA;
-}
-
-#pgFrontUserContent {
-  margin-left: 4px;
-}
-
-#pgFrontSupportUs {
-}
-
-#pgFrontSupportUs h2 {
-   margin-bottom: 0.7em;
-}
-
-#pgFrontSupportUsWrap {
-  margin-left: 8px;
-  color: #666;
-}
-
-#pgFrontShortcuts h2 {
-   margin-bottom: 0.7em;
-}
-
-#pgFrontShortcutsWrap {
-  font-size: 0.9em;
-  margin-left: 12px;
-  margin-top: 10px;
-  color: #666;
-}
-
-#pgFrontShortcutsWrap img {
-  padding-right: 7px;
-}
-
-#pgFrontShortcutsList {
-  margin: 0;
-  padding: 0;
-  list-style: none;
-}
-
-#pgFrontShortcutsList li {
-  margin: 0;
-  padding-left: 12px;
-  background-image: url(/media/img/layout/blt_blu_arrow.png);
-  background-repeat: no-repeat;
-  background-position: 0px 0.5em;
-}
-
-#pgFrontPlanet {
-  float: right;
-  width: 230px;
-  border-left: 1px solid #E1E1E1;
-  margin: 0;
-  padding: 0;
-  padding-left: 10px;
-}
-
-#pgFrontPlanetWrap {
-  margin-left: 8px;
-  font-size: 0.9em;
-}
-
-#pgFrontPlanetList {
-  margin: 0;
-  padding: 0;
-}
-
-#pgFrontLatestReleases h2 {
-   margin-bottom: 0.7em;
-}
-
-#pgFrontLatestReleasesWrap {
-  font-size: 0.9em;
-  margin-left: 12px;
-  margin-top: 10px;
-  color: #666;
-}
-
-#pgFrontLatestReleasesNote {
-  font-size: 0.9em;
-  margin-left: 12px;
-  margin-top: 10px;
-  color: #666;
-  vertical-align: bottom;
-}
-
-#pgFrontLatestReleasesNote IMG {
-    vertical-align: bottom;
-}
-
-#pgFrontTrainingSummary {
-  font-size: 1.1em;
-  color: #666;
-}
-
-/* Secondary Pages */
-
-#pgSideWrap {
-  float: left;
-  width: 166px;
-  margin-top: 10px;
-  margin-right: -165px;
-}
-
-#pgContentWrap {
-  margin-left: 165px;
-  padding-top: 10px;
-}
-
-#pgContentWrap dd.quote_source {
-  font-weight: bold;
-  margin-bottom: 18px;
-}
-
-#pgAdminWrap {
-  padding-top: 10px;
-  padding-bottom: 10px;
-}
-
-#pgCommunityWrap {
-  margin-right: -420px;
-  float: left;
-  width: 100%;
-}
-
-#pgCommunity {
-  margin-right: 210px;
-}
-
-#pgSurveyWrap {
-  float: right;
-  width: 200px;
-  margin-left: 210px;
-  padding: 0;
-  border: 0;
-  top: 0px;
-
-  padding-left: 10px;
-}
-
-#pgSurvey dl {
-  width: 200px;
-  margin: 0;
-  padding: 0;
-  background: #F5F5F5 url(/media/img/layout/box_bottom.gif) no-repeat bottom left;
-  padding-bottom: 10px;
-}
-
-#pgSurvey dt {
-  margin: 0 0 10px 0;
-  padding: 10px;
-  font-weight: bold;
-  color: #666;
-  border-bottom: 1px solid #EFEFEF;
-  background: #F5F5F5 url(/media/img/layout/box_top.gif) no-repeat top left;
-}
-       
-#pgSurvey dd {
-  margin: 0 0 0 10px;
-  padding: 0 10px 0 0;
-  color: #666;
-  font-size: 0.9em;
-}
-
-#pgSurvey form #surveySubmit {
-  font-size: 0.9em;
-  background: #F5F5F5;
-  color: #000000;
-  border: 1px solid #7A7A7A;
-  padding: 1px 4px;
-}
-
-#pgPlanetWrap {
-  float: right;
-  width: 200px;
-  margin-left: 210px;
-  padding: 0;
-  border: 0;
-  margin-top: 10px;
-
-  padding-left: 5px;
-}
-
-#pgPlanet dl {
-  width: 200px;
-  margin: 0;
-  padding: 0;
-  background: #F5F5F5 url(/media/img/layout/box_bottom.gif) no-repeat bottom left;
-  padding-bottom: 10px;
-}
-
-#pgPlanet dt {
-  margin: 0 0 10px 0;
-  padding: 10px;
-  font-weight: bold;
-  color: #666;
-  border-bottom: 1px solid #EFEFEF;
-  background: #F5F5F5 url(/media/img/layout/box_top.gif) no-repeat top left;
-}
-
-#pgPlanet dd {
-  margin: 0 0 0 10px;
-  padding: 0 10px 0 0;
-  color: #666;
-  font-size: 0.9em;
-}
-
-#pgPlanet dd ul {
-   margin-left: 0px;
-   padding-left: 10px;
-   margin-bottom: 10px;
-}
-
-#pgDocsWrap {
-  margin-right: -420px;
-  float: left;
-  width: 100%;
-}
-
-#pgDocs {
-  margin-right: 210px;
-}
-
-#pgQuickDocsWrap {
-  float: right;
-  width: 200px;
-  margin-left: 210px;
-  padding: 0;
-  border: 0;
-  top: 0px;
-
-  padding-left: 10px;
-}
-
-#pgQuickDocs dl {
-  width: 200px;
-  margin: 0;
-  padding: 0;
-  background: #F5F5F5 url(/media/img/layout/box_bottom.gif) no-repeat bottom left;
-  padding-bottom: 10px;
-}
-
-#pgQuickDocs dt {
-  margin: 0 0 10px 0;
-  padding: 10px;
-  font-weight: bold;
-  color: #666;
-  border-bottom: 1px solid #EFEFEF;
-  background: #F5F5F5 url(/media/img/layout/box_top.gif) no-repeat top left;
-}
-       
-#pgQuickDocs dd {
-  margin: 0 0 0 10px;
-  padding: 0 10px 0 0;
-  color: #666;
-  font-size: 0.9em;
-}
-
-#pgCommunityDocsFooter table tr td ul {
-  padding-left: 0px;
-  list-style: none;
-}
-
-#pgCommunityDocsHeader table tr.firstrow td {
-  border-bottom: none;
-}
-
-#pgCommunityDocsHeader table tr.lastrow {
-  height: 1px;
-}
-
-#pgCommunityDocsBreadcrumbs {
-  margin-left: 10px;
-  margin-top: 5px;
-  margin-bottom: 10px;
-}
-
-#pgCommunityDocsPageContent {
-  margin-top: 5px;
-  margin-bottom: 20px;
-}
-
-.pgCommunityDocsCurrentMenu {
-  font-weight: bold;    
-}
-
-#pgDownloadsWrap {
-  margin-right: -420px;
-  float: left;
-  width: 100%;
-}
-
-#pgDownloads {
-  margin-right: 210px;
-}
-
-#pgQuickDownloadsWrap {
-  float: right;
-  width: 200px;
-  margin-left: 210px;
-  padding: 0;
-  border: 0;
-  top: 0px;
-
-  padding-left: 10px;
-}
-
-#pgQuickDownloads dl {
-  width: 200px;
-  margin: 0;
-  padding: 0;
-  background: #F5F5F5 url(/media/img/layout/box_bottom.gif) no-repeat bottom left;
-  padding-bottom: 10px;
-}
-
-#pgQuickDownloads dt {
-  margin: 0 0 10px 0;
-  padding: 10px;
-  font-weight: bold;
-  color: #666;
-  border-bottom: 1px solid #EFEFEF;
-  background: #F5F5F5 url(/media/img/layout/box_top.gif) no-repeat top left;
-}
-       
-#pgQuickDownloads dd {
-  margin: 0 0 0 10px;
-  padding: 0 10px 0 0;
-  color: #666;
-  font-size: 0.9em;
-}
-
-#pgFtpContent table tr td {
-  vertical-align: bottom;
-}
-
-#pgProfPage div.tblBasic table td {
-  color: black;
-  padding: 3px 5px;
-}
-
-#pgPressContacts dt {
-  font-weight: bold;
-}
-
-#pgPressContacts dd {
-  margin-bottom: 10px;
-  
-}
-
-#pgArchiveWrap {
-  margin-top: 13px;
-}
-
-/* Footer Container */
-#pgFooter {
-  font-size: 0.9em; 
-  color: #666; 
-  line-height: 1.3em; 
-  padding-top: 5px;
-  clear: both;
-}
-
-/* Generic forms class */
-TABLE.pgGenericFormTable TR {
-   vertical-align: top;
-}
-
-TABLE.pgGenericFormTable TR TD INPUT,
-TABLE.pgGenericFormTable TR TD SELECT,
-TABLE.pgGenericFormTable TR TD TEXTAREA,
-TABLE.pgGenericFormTable TR TD DIV.markdownpreview {
-   width: 100%;
-}
-
-TABLE.pgGenericFormTable TR.error {
-   background-color: red;
-   color: white;
-}
-
-TABLE.pgGenericFormTable TR.errorinfo {
-   background-color: #FFFFCC;
-}
-
-TABLE.pgGenericFormTable TR.errorheader TD {
-   background-color: #FFFFCC;
-   border: 1px solid red;
-   padding: 2px;
-}
-
-TABLE.pgGenericFormTable TR TH SPAN.formfieldhelp {
-   font-weight: normal;
-   font-style: italic;
-}
-
-/* Misc Classes */
-
-.pgClearBoth {
-  clear: both;
-  margin: 0;
-  padding: 0;
-}
-
-.pgBlockHide {
-       display: none;
-       height: 0;
-       width: 0;
-       overflow: hidden;
-       position: absolute;  /* IE5 Mac */
-}
-
-img {
-  border: 0;
-}
diff --git a/django/media/css/main.css b/django/media/css/main.css
new file mode 100644 (file)
index 0000000..4d8747e
--- /dev/null
@@ -0,0 +1,815 @@
+/**
+* -----------------------------------------
+* REFERENCE COLORS:
+* (in order from lightest to darkest)
+*
+* #e7eae8: Extremely light gray, used for alternating color boxes such as on mailinglists.html
+* #d7dad8: Medium gray, used in Dropotron
+* #666: Dark gray, official PostgreSQL gray color and equivalent to RGB(102,102,102)
+* #688297: Grayish blue, used in Dropotron
+* #336791: Medium blue, official PostgreSQL blue color
+* #264d6d: Dark blue
+*
+* -----------------------------------------
+* All padding: 0 0 0 0; and margin: 0 0 0 0; definitions are top, right, bottom, left specifications, respectively.
+*/
+
+/** CUSTOM FONTS */
+@import url('https://fonts.googleapis.com/css?family=Open+Sans');
+@import url('https://fonts.googleapis.com/css?family=Maven+Pro');
+
+/** GLOBAL CONFIGURATION */
+body {
+    font-family: 'Open Sans', sans-serif;
+    font-weight: 400;
+    color: #515151;
+    font-size: 11.5pt;
+    line-height: 1.8rem;
+    padding-top: 60px; /** this is to account for the fixed navbar blocking content */
+}
+
+p {
+  margin-bottom: 0.5rem;
+}
+
+dl, ol, ul {
+  margin-bottom: 0.5rem;
+}
+
+.table td, .table th {
+  padding: 0.5rem;
+}
+
+h1, h2, h3, h4, h5, h6 {
+    font-family: 'Maven Pro', sans-serif;
+    font-weight: 700;
+    text-transform: uppercase;
+    color: #515151;
+    /*margin: 0 0 0.5em 0;*/
+}
+
+h2 {
+    font-size: 1.6em;
+    margin: 1em 0;
+}
+
+h3 {
+    font-size: 1.4em;
+    font-weight: initial;
+}
+
+#pgContentWrap h2:after, #pgSideNav h2:after {
+    background-color: #e7eae8;
+    content: '\a0';
+    flex-grow: 1;
+    height: 2px;
+    position: relative;
+    margin: .5em 0 .5em .75em;
+}
+
+#pgContentWrap h2, #pgSideNav h2 {
+    display: flex;
+    flex-direction: row;
+}
+
+h2.centered-lines {
+    display: flex;
+    flex-direction: row;
+    justify-content: center;
+    text-align: center;
+}
+
+h2.centered-lines:after, h2.centered-lines:before {
+    background-color: #e7eae8;
+    content: '\a0';
+    flex-grow: 1;
+    height: 2px;
+    position: relative;
+    margin: 0.5em 0;
+}
+
+h2.centered-lines:after {
+    margin-left: 0.75em;
+}
+
+h2.centered-lines:before {
+    margin-right: 0.75em;
+}
+
+h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
+         text-decoration: none;
+         color: inherit;
+}
+
+a, .news a {
+         color: #336791;
+    font-weight: 600;
+         text-decoration: none;
+    -moz-transition: color .2s ease-in-out;
+    -webkit-transition: color .2s ease-in-out;
+    -ms-transition: color .2s ease-in-out;
+    transition: color .2s ease-in-out;
+}
+
+a:hover, a:active {
+    color: #515151;
+         text-decoration: none;
+}
+
+b, strong {
+         font-weight: 700;
+       color: #515151;
+}
+
+i, em {
+         font-style: italic;
+}
+
+sub {
+         position: relative;
+         top: 0.5em;
+         font-size: 0.8em;
+}
+
+sup {
+       position: relative;
+       top: -0.5em;
+       font-size: 0.8em;
+}
+
+hr {
+       border: 0;
+         border-top: solid 2px #E7EAE8;
+         margin: 0 0 3em 0;
+}
+
+.image {
+  width: 100%;
+  margin: 1em 0 2em 0;
+}
+
+/**
+p, ul, ol, dl, table {
+         margin-bottom: 3em;
+}*/
+
+/** Global styles */
+
+.pg-bg-blue {
+    background-color: #336791;
+}
+
+.pg-bg-light-blue {
+    background-color: #008bb9;
+}
+
+.pg-bg-purple {
+    background-color: #e6E6fa;
+}
+
+.pg-bg-gray {
+    background-color: #e7eae8;
+}
+
+.pg-border-color-blue {
+    border-color: #336791;
+}
+
+.pg-text-blue {
+    color: #336791;
+}
+
+.pg-text-light-blue {
+    color: #008bb9;
+}
+
+.pgFrontFeature {
+    background: #F5F5F5 url(/media-archives/img/feature/feature_elephant.png) right bottom no-repeat;
+    /* background: #F5F5F5 url(/media-archives/img/feature/feature_gears.png) right bottom no-repeat; */
+}
+
+.pgFrontContainer {
+    padding: 1em 2em;
+}
+
+/* #BLOCKQUOTE */
+
+blockquote {
+         border-left: solid 5px #E7EAE8;
+         padding: 1em 4em 3em .5em;
+         font-style: italic;
+}
+
+.item blockquote {
+         border-left: none;
+         margin: 0;
+}
+
+.item blockquote img {
+       margin-bottom: 10px;
+}
+
+.item blockquote p:before {
+       content: "\f10d";
+         font-family: 'Fontawesome';
+         float: left;
+       margin-right: 10px;
+}
+
+/* # CAROUSEL */
+
+.col-center {
+       margin: 0 auto;
+       float: none !important;
+}
+.carousel {
+       margin: 0 auto 4rem auto;
+       padding: 0 3rem;
+}
+.carousel .item {
+  text-align: center;
+  overflow: hidden;
+  min-height: 12rem;
+}
+.carousel .item .img-box {
+       width: 135px;
+       height: 135px;
+       margin: 0 auto;
+       padding: 5px;
+       border: 1px solid #ddd;
+       border-radius: 50%;
+}
+.carousel .img-box img {
+       width: 100%;
+       height: 100%;
+       display: block;
+       border-radius: 50%;
+}
+.carousel .testimonial {
+    margin-top: 4rem;
+    padding: 0 1rem;
+}
+.carousel .overview {
+       font-style: italic;
+  color: #999;
+}
+.carousel .overview b {
+       text-transform: uppercase;
+       color: #336791;
+}
+.carousel .carousel-control {
+       width: 40px;
+    height: 40px;
+    margin-top: -20px;
+    top: 50%;
+       background: none;
+}
+.carousel-control i {
+  font-size: 68px;
+  line-height: 42px;
+  position: absolute;
+  display: inline-block;
+  color: rgba(0, 0, 0, 0.8);
+  text-shadow: 0 3px 3px #e6e6e6, 0 0 0 #000;
+}
+.carousel .carousel-indicators {
+       bottom: -40px;
+}
+.carousel-indicators li, .carousel-indicators li.active {
+       width: 10px;
+       height: 10px;
+       margin: 1px 3px;
+       border-radius: 50%;
+}
+.carousel-indicators li {
+       background: #999;
+       border-color: transparent;
+       box-shadow: inset 0 2px 1px rgba(0,0,0,0.2);
+}
+.carousel-indicators li.active {
+       background: #555;
+       box-shadow: inset 0 2px 1px rgba(0,0,0,0.2);
+}
+
+/* #FEATURED SECTIONS */
+
+.community {
+  width: 1em !important;
+  margin: 0 5px 0 0 !important;
+  display: inline-block;
+}
+
+.feature {
+  text-align: center;
+  padding: 2em;
+}
+
+.feature ul, ul.feature {
+  padding: 0;
+}
+
+.feature li {
+  list-style-type: none;
+  padding-left: 0.3em;
+  text-align: left;
+}
+
+.feature i {
+  font-size: 2.5em;
+  margin: 20px 0;
+  color: #336791;
+}
+
+.feature img {
+  width: 2.5em;
+  margin: 20px 0;
+}
+
+.feature p {
+  text-align: left;
+}
+
+.feature-grid {
+    background-color: #336791;
+    text-align: center;
+    padding: 3em 0;
+    border: solid 1px #fff;
+}
+
+.feature-grid h3 {
+    color: #fff;
+}
+
+.feature button.btn.btn-center.btn-primary {
+    position: relative;
+    bottom: 0;
+    margin: 0 auto;
+}
+
+.text {
+  margin-bottom: 2.5em;
+}
+
+li.non-badged {
+  padding-left: 2em;
+}
+
+/* #LIST */
+
+#footer ul {
+       cursor: default;
+    padding: 0;
+}
+
+a.icon {
+    text-decoration: none !important;
+}
+
+footer img {
+    height: 2rem;
+    margin-bottom: 1rem;
+}
+
+#footer ul li {
+    list-style-type: none;
+    display: inline-block;
+    margin: 0 .2em;
+    font-size: 2em;
+}
+
+#footer li:hover a.fa-twitter {
+       color: #2DAAE4;
+}
+
+#footer a.fa-twitter {
+    color: #000;
+}
+
+#footer li:hover a.fa-github {
+         color: #000;
+}
+
+#footer li:hover a.fa-google-plus-g {
+         color: #DA2713;
+}
+
+ul.errorlist {
+    color: #bd4147;
+    font-weight: 600;
+    list-style-type: none;
+    padding: 0;
+}
+
+ul.meta {
+         font-size: 0.85em;
+    padding-left: 0;
+}
+
+ul.meta li {
+         display: inline-block;
+    margin-right: 1em;
+}
+
+ul.meta li i {
+    margin-right: 4px;
+}
+
+ul.divided > li {
+         border-top: solid 2px #e7eae8;
+         padding-top: 1.35em;
+         margin-top: 1.35em;
+    list-style: none;
+}
+
+ul.divided > li:first-child {
+         border-top: 0;
+         padding-top: 0;
+         margin-top: 0;
+}
+
+.divided h3 {
+  font-size: 1.2em;
+}
+
+ul.bold {
+  font-weight: 600;
+  list-style-type: none;
+  padding-left: 0;
+}
+
+/* #ICONS */
+
+.icon {
+               position: relative;
+               text-decoration: none;
+}
+
+.icon:before {
+               -moz-osx-font-smoothing: grayscale;
+               -webkit-font-smoothing: antialiased;
+               font-family: FontAwesome;
+               font-style: normal;
+               font-weight: normal;
+               text-transform: none !important;
+}
+
+.icon > .label {
+               display: none;
+}
+
+/** BASE STYLES */
+
+/** SHOUTOUT BOX */
+.pg-shout-box {
+    background-color: #336791;
+    font-weight: 600;
+}
+
+.pg-shout-box a {
+    color: white;
+    text-decoration: underline;
+}
+
+.pg-shout-box a:hover {
+    text-decoration: underline;
+}
+
+/* #JUMBOTRON */
+
+.pg-jumbotron {
+    background-image: linear-gradient( rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5) ), url("/media/img/misc/banner.jpg");
+    background-position: center;
+    background-repeat: no-repeat;
+    background-size: cover;
+    z-index: 1;
+    margin: 0;
+    text-align: center;
+}
+
+.pg-jumbotron-header {
+  font-size: 2.5rem;
+}
+
+/* #CTA */
+
+.cta {
+  background-position: center;
+  background-repeat: no-repeat;
+  background-size: cover;
+  z-index: 1;
+  margin: 0;
+}
+
+.cta-text {
+  padding: 4em;
+  text-align: center;
+  color: #fff;
+  background-color: #336791;
+}
+
+.cta-text h2 {
+  color: #fff;
+}
+
+.cta-1 {
+
+}
+
+.cta-2 {
+  background-image: url("/media/img/misc/bugs.jpg");
+}
+
+.cta-3 {
+  background-image: url("/media/img/misc/training.jpg");
+}
+
+/* #MARGIN */
+
+.margin {
+    margin: 0 auto 4em auto;
+}
+
+/* #FOOTER */
+
+#footer {
+    text-align: center;
+    padding: 5em 0 2em 0;
+}
+
+#footer a {
+               color: inherit;
+}
+
+/* #LIST DESKTOP */
+
+ul.actions {
+               text-align: center;
+               margin: 2em 0 0 0;
+}
+
+/* #SIDEBAR DESKTOP */
+
+.sidebar {
+               padding-top: 6em;
+}
+
+.col-lg-7 {
+    padding-top: 4em;
+}
+
+.navbar .logo {
+    height: 2rem;
+    margin-left: 0;
+    margin-bottom: 0;
+}
+
+.logo {
+    height: 2rem;
+    margin-left: 5px;
+    margin-bottom: 5px;
+}
+
+.navbar {
+  box-shadow: 0px 3px 15px rgba(0,0,0,0.2);
+}
+
+/* #SIDEBAR UL STYLING */
+
+#pgSideNav {
+    padding: 1em;
+}
+
+#pgSideNav ul {
+    list-style-type: circle;
+    padding-left: 1.3em;
+}
+
+/* #PGCONTENTWRAP */
+
+#pgContentWrap {
+  padding: 1em 2em;
+}
+
+#pgContentWrap h3 {
+  margin: 1em 0;
+}
+
+#pgContentWrap .fa, #pgContentWrap .far, #pgContentWrap .fas, #pgContentWrap .fab {
+  color: #336791;
+  margin: 0 5px;
+}
+
+i.fas.fa-search {
+    color: #336791;
+}
+
+/* #CODE */
+pre.code {
+    padding: .2rem .4rem;
+    font-size: 90%;
+    color: #bd4147;
+    background-color: #f8f9fa;
+    border-radius: .25rem;
+}
+
+/* #STYLEDSELECT */
+
+/**
+* Used on mailinglists.html as part of the mailinglist subscribe functionality.
+*/
+
+.styledSelect, .styledInput {
+       width: 100%;
+         height: 34px;
+         overflow: hidden;
+         background-color: #fff;
+         border: solid 2px #e7eae8;
+}
+
+.styledInput[name="search"] {
+    width: 98%;
+    height: 3.6em;
+}
+
+/* Buttons */
+
+.btn {
+  width: 14em;
+  margin: 1em auto;
+}
+
+.btn-center {
+  text-align: center;
+  display: block;
+}
+
+.btn-primary {
+  background-color: #336791;
+  border-color: #336791;
+  color: #fff;
+}
+
+.btn-primary:hover, .btn-primary:active, .btn-primary:focus, .btn-primary.active, .btn:active:focus, .btn.active:focus {
+  background-color: #666;
+  border-color: #666;
+  cursor: pointer;
+}
+
+.form-row .btn-primary {
+  margin: 0.5em 0;
+}
+
+button.btn.btn-default {
+    color: #333;
+    background-color: #fff;
+    border-color: #ccc;
+    width: initial;
+    margin: auto 0;
+    height: 100%;
+    cursor: pointer;
+}
+
+/* Input */
+
+input#allsites {
+    margin-top: 10px;
+    margin-left: 0;
+}
+
+input.form-control {
+    height: 2.5em;
+    margin: auto 0;
+}
+
+input#q {
+    font-size: 1em;
+    font-family: 'Open Sans', sans-serif;
+}
+
+input {
+    padding-left: 0.5em;
+}
+
+input[type=checkbox] {
+    vertical-align: middle;
+    margin-left: 5px;
+}
+
+.custom-select {
+  margin: 2px;
+}
+
+th.formfieldnamecontainer {
+    padding-right: 1em;
+}
+
+.pgGenericFormTable input, .pgGenericFormTable textarea {
+    margin: 0.5em 0;
+}
+
+.form-check-input[type=radio] {
+    margin-top: .4rem;
+}
+
+.form-check.search {
+    padding-left: 0;
+}
+
+.form-check.search label.form-check-label {
+    margin-left: 1rem;
+    vertical-align: middle;
+}
+
+.text-center.fixed-height h3 {
+    height: 3.5em;
+}
+
+/* Message Subjects */
+h1.subject {
+    text-transform: none;
+}
+
+/** ALL RESPONSIVE QUERIES HERE */
+/* Small devices (landscape phones, 576px and up)*/
+@media (min-width: 576px) {
+    /** NAVBAR */
+    .nav-item > a {
+        font-size: 0.95rem;
+        font-weight: 600;
+    }
+}
+@media (max-width: 575px) {
+    /** HOMEPAGE JUMBOTRON */
+    .pg-jumbotron-header {
+        font-size: 1.5rem;
+    }
+}
+
+@media (max-width: 1200px) {
+}
+
+@media (max-width: 992px) {
+
+}
+
+@media (max-width: 768px) {
+
+  body {
+    padding-top: 55px;
+  }
+
+  .jumbotron.jumbotron-fluid.pg-jumbotron {
+    padding: 4em;
+  }
+
+  .pg-jumbotron .btn, button.btn.btn-primary {
+    margin: 5px auto;
+  }
+
+  .text {
+    height: initial;
+  }
+
+  .cta-text {
+    padding: 4em;
+  }
+
+  .cta {
+    padding: 6em;
+  }
+
+  ul.divided, ul.menu, #footer ul {
+    padding: 0;
+    text-align: center;
+  }
+
+  ul.feature {
+    padding: 0 0 1em 0 !important;
+  }
+
+  .feature-grid {
+    padding: 0;
+  }
+
+  #pgSideNav {
+    padding: 1em 0;
+  }
+
+  #pgSideNav ul {
+    padding: 0;
+    margin: 1em 0 0 1em;
+  }
+
+  #pgSideNav ul ul {
+    margin: 0;
+  }
+
+  #pgContentWrap {
+    padding: 0;
+  }
+
+  #pgContentWrap ul {
+    padding-left: 1em;
+  }
+
+}
diff --git a/django/media/css/navigation.css b/django/media/css/navigation.css
deleted file mode 100644 (file)
index e8ddae5..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
-  PostgreSQL.org - Navigation (and List) Styles
-*/
-
-/* Site Navigation */
-
-#pgTopNav {
-  text-align: left;
-  color: #666;
-  font-size: 0.9em;
-  margin: 0;
-  padding: 0;
-  height: 23px;
-  background: #B7B7B7 url("/media/img/layout/nav_fill.png") top left repeat-x;
-  overflow: visible;
-  margin-top: 2px;
-}
-
-#pgTopNavLeft {
-  width: 7px;
-  height: 23px;
-  border: 0px;
-  padding-right: 10px;
-  margin: 0px;
-  float: left;
-}
-
-#pgTopNavLeft img {
-  border: 0px;
-  margin: 0;
-  padding: 0;
-}
-
-#pgTopNavRight {
-  width: 7px;
-  height: 23px;
-  border: 0px;
-  padding: 0px;
-  margin: 0px;
-  float: right;
-}
-
-#pgTopNavRight img {
-  border: 0px;
-  margin: 0;
-  padding: 0;
-}
-
-#pgTopNavList {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-
-  height: 23px;
-  padding-top: 5px;
-}
-
-#pgTopNavList li {
-  padding: 0 1em 0 1.2em;
-  display: inline;
-  border-left: 1px solid #C8C8C8;
-}
-
-#pgTopNavList li a {
-  color: #fff;
-  font-weight: bold; 
-  text-decoration: none;
-}
-
-#pgTopNavList li:first-child {
-  border-left: 0;
-  padding-left: 0;
-}
-
-#pgLoginLink {
-  margin: 0;
-  padding: 0;
-}
-#pgLoginlink a {
-  float: right;
-  color: #fff;
-  font-weight: bold;
-  text-decoration: none;
-  padding: 5px 1em 0 1.2em;
-  margin: 0;
-  height: 23px;
-}
-
-/* The search navigation is the list of links next to the search box. */
-
-#pgSearchNav {
-  position: relative;
-  float: right;
-  text-align: right;
-  color: #666;
-  font-size: 0.9em;
-  margin: 0px 0px 0px 0px;
-  top: -11px;
-  right: 209px;
-  padding: 0;
-}
-
-#pgSearchNavList {
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-
-#pgSearchNavList li {
-  padding: 0 0.5em 0 0.5em;
-  display: inline;
-  border-right: 1px solid #C8C8C8;
-}
-
-#pgSearchNavList li a {
-  color: #666;
-  text-decoration: none;
-}
-
-#pgSearchNavList li a:hover {
-  color: #000;
-}
-
-/* Category Navigation */
-
-#pgSideNav:before {
-  line-height: 0.1;
-  font-size: 1px;
-  margin: 0;
-  display: block;
-}
-
-#pgSideNav:after {
-  line-height: 0.1;
-  font-size: 1px;
-  margin: 0;
-  display: block;
-}
-
-#pgSideNav, #pgSideNav ul, #pgSideNav ul ul {
-  margin: 0;
-  padding: 0;
-  list-style: none;
-  font-size: 1.0em;
-}
-
-#pgSideNav {
-  width: 150px;
-  background-color: #F5F5F5;
-  background-image: url(/media/img/layout/nav_tbl_top.png);
-  background-position: top right;
-  background-repeat: no-repeat;
-}
-
-#pgSideNav ul {
-  background-image: url(/media/img/layout/nav_tbl_btm.png);
-  background-position: bottom left;
-  background-repeat: no-repeat;
-  padding: 10px 0 10px 0;
-}
-
-#pgSideNav ul ul {
-  background: none;
-  background-color: #F5F5F5;
-  margin: 0;
-  padding: 0;
-  list-style: none;
-}
-
-#pgSideNav ul ul li {
-  background: none;
-  border: none;
-}
-
-#pgSideNav ul li {
-  border-bottom: 1px solid #EFEFEF;
-  margin: 0;
-  padding-left: 12px;
-  background-image: url(/media/img/layout/blt_gry_arrow.png);
-  background-repeat: no-repeat;
-  background-position: 12px 0.65em;
-}
-
-/* Uncomment when IE/Validator supports last-child
-
-#pgSideNav ul li:last-child {
-  border-bottom: 1px solid #F5F5F5;
-}
-
-*/
-
-#pgSideNav ul li.last-child {
-  border-bottom: 1px solid #F5F5F5;
-}
-
-#pgSideNav ul li.active {
-  font-weight: bold;
-}
-
-#pgSideNav ul li.active span {
-  display: none;
-}
-
-#pgSideNav ul li a {
-  display: block;
-  color: #666;
-  text-decoration: none;
-  padding: 3px 5px 3px 15px;
-  margin: 0;
-}
-
-#pgSideNav ul ul li a.active {
-  font-weight: bold;
-}
-
-/* Uncomment when IE/Validator supports last-child
-
-#pgSideNav ul ul li:last-child {
-  border-bottom: none;
-}
-
-*/
-
-#pgSideNav ul ul li.last-child {
-  border-bottom: none;
-}
-
-#pgSideNav ul ul li a {
-  display: block;
-  /* padding: 3px 5px 3px 12px; */
-  padding-left: 12px;
-  margin: 0;
-}
-
-#pgSideNav ul li a:hover {
-  color: #333;
-}
diff --git a/django/media/css/table.css b/django/media/css/table.css
deleted file mode 100644 (file)
index c8ac492..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-  PostgreSQL.org - Table Styles
-*/
-
-div.tblBasic h2 {
-        margin: 25px 0 .5em 0;
-}
-
-div.tblBasic table {
-        background: #F5F5F5 url(/media/img/layout/nav_tbl_top_lft.png) top left no-repeat;
-       margin-left: 2ex;
-        margin-bottom: 15px;
-}
-
-div.tblBasic table th {
-        padding-top: 20px;
-        border-bottom: 1px solid #EFEFEF;
-        vertical-align: bottom;
-}
-
-div.tblBasic table td {
-        border-bottom: 1px solid #EFEFEF;
-}
-
-div.tblBasic table th,
-div.tblBasic table td {
-        padding: 8px 11px;
-        color: #555555;
-}
-
-div.tblBasic table td.indented {
-        text-indent: 30px;
-}
-
-div.tblBasic table.tblCompact td {
-        padding: 3px 3px;
-}
-
-div.tblBasic table tr.lastrow td {
-        border-bottom: none;
-        padding-bottom: 13px;
-}
-
-div.tblBasic table.tblCompact tr.lastrow td {
-        padding-bottom: 3px;
-}
-
-div.tblBasic table tr.lastrow td.colFirstT,
-div.tblBasic table tr.lastrow td.colFirst {
-        background: url(/media/img/layout/nav_tbl_btm_lft.png) bottom left no-repeat;
-}
-
-div.tblBasic table.tblBasicGrey th.colLast,
-div.tblBasic table.tblCompact th.colLast {
-        background: #F5F5F5 url(/media/img/layout/nav_tbl_top_rgt.png) top right no-repeat;
-}
-
-div.tblBasic table.tblBasicGrey tr.lastrow td.colLastT,
-div.tblBasic table.tblBasicGrey tr.lastrow td.colLast,
-div.tblBasic table.tblCompact tr.lastrow td.colLast,
-div.tblBasic table.tblCompact tr.lastrow td.colLastT{
-        background: #F5F5F5 url(/media/img/layout/nav_tbl_btm_rgt.png) bottom right no-repeat;
-}
-
-div.tblBasic table.tblBasicGrey tr.firstrow td.colLastT,
-div.tblBasic table.tblBasicGrey tr.firstrow td.colLast,
-div tblBasic table.tblCompact tr.firstrow td.colLast {
-        background: #F5F5F5 url(/media/img/layout/nav_tbl_top_rgt.png) top right no-repeat;
-}
-
-div.tblBasic table th.colMid,
-div.tblBasic table td.colMid,
-div.tblBasic table th.colLast,
-div.tblBasic table td.colLast {
-        background-color: #F5F5F5 ;
-}
-
-div.tblBasic table th.colLastC,
-div.tblBasic table td.colFirstC,
-div.tblBasic table td.colLastC {
-        text-align: center;
-}
-
-div.tblBasic table th.colLastR,
-div.tblBasic table td.colFirstR,
-div.tblBasic table td.colLastR {
-        text-align: right;
-}
-
-div.tblBasic table td.colFirstT,
-div.tblBasic table td.colMidT,
-div.tblBasic table td.colLastT {
-        vertical-align: top;
-}
-
-div.tblBasic table th.colLastRT,
-div.tblBasic table td.colFirstRT,
-div.tblBasic table td.colLastRT {
-        text-align: right;
-        vertical-align: top;
-}
diff --git a/django/media/css/text.css b/django/media/css/text.css
deleted file mode 100644 (file)
index 902a118..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-  PostgreSQL.org - Text Styles
-*/
-
-/* Heading Definitions */
-
-h1 {
-  color: #EC5800;
-}
-
-h2 {
-  color: #666; 
-}
-
-h3 { 
-  color: #666; 
-}
-
-h4 { 
-  color: #666; 
-}
-
-/* Text Styles */
-
-.txtColumn1 {
-  width: 50%;
-  line-height: 1.3em;
-}
-
-.txtColumn2 {
-  width: 50%;
-  line-height: 1.5em;
-}
-
-.txtCurrentLocation {
-  font-weight: bold;
-}
-
-.txtDivider { 
-  font-size: 0.8em; 
-  color: #E1E1E1; 
-  padding-left: 4px; 
-  padding-right: 4px; 
-}
-
-.txtNewsEvent { 
-  font-size: 0.9em; 
-  color: #0094C7; 
-}
-
-.txtDate { 
-  font-size: 0.9em;
-  color: #666; 
-}
-
-.txtMediumGrey { 
-  color: #666; 
-}
-
-.txtFormLabel { 
-  color: #666; 
-  font-weight: bold; 
-  text-align: right; 
-  vertical-align: top;
-}
-
-.txtRequiredField {
-  color: #EC5800;
-}
-
-.txtImportant {
-  color: #EC5800;
-}
-
-.txtOffScreen {
-  position: absolute;
-  left: -1999px;
-  width: 1990px;
-}
-
-#txtFrontFeatureHeading {
-  padding-bottom: 1.1em;
-}
-
-#txtFrontFeatureLink a {
-  font-size: 1.2em;
-  font-weight: bold;
-  padding-left: 5px;
-}
-
-#txtFrontUserText {
-  font-size: 1.0em; 
-  color: #666; 
-  margin-top: 12px; 
-}
-
-#txtFrontUserName { 
-  font-size: 0.9em; 
-  color: #666; 
-  margin-top: 9px; 
-  font-weight: bold; 
-}
-
-#txtFrontUserLink { 
-  font-size: 0.9em; 
-  color: #666; 
-  margin-top: 11px; 
-  margin-left: 1px; 
-}
-
-#txtFrontUserLink img {
-  padding-right: 5px;
-}
-
-#txtFrontSupportUsText { 
-  font-size: 1.0em;
-  margin-top: 9px; 
-}
-
-#txtFrontSupportUsLink { 
-  font-size: 0.9em;
-  margin-top: 6px; 
-}
-
-#txtFrontSupportUsLink img {
-  padding-right: 7px;
-} 
-
-/* Link Styles */
-
-a:link                          { color:#0085B0; text-decoration: underline; }
-a:visited                       { color:#004E66; text-decoration: underline; }
-a:active                        { color:#0085B0; text-decoration: underline; }
-a:hover                         { color:#000000; text-decoration: underline; }
-
-#pgFooter a:link                { color:#666; text-decoration: underline; }
-#pgFooter a:visited             { color:#666; text-decoration: underline; }
-#pgFooter a:active              { color:#666; text-decoration: underline; }
-#pgFooter a:hover               { color:#000000; text-decoration: underline; }
-
-#txtFrontUserName a:link                { color:#666; text-decoration: underline; }
-#txtFrontUserName a:visited             { color:#666; text-decoration: underline; }
-#txtFrontUserName a:active              { color:#666; text-decoration: underline; }
-#txtFrontUserName a:hover               { color:#000; text-decoration: underline; }
-
-#txtArchives a:visited { color:#00536E; text-decoration: underline; }
-#txtArchives pre       { word-wrap: break-word; font-size: 150%; }
-#txtArchives tt        { word-wrap: break-word; font-size: 150%; }
-
-#pgFrontUSSContainer h2, #pgFrontUSSContainer h3 {
-  margin: 0;
-  padding: 0;
-}
-
-#pgFrontNewsEventsContainer h2, #pgFrontNewsEventsContainer h3 {
-  margin: 0;
-  padding: 0;
-}
-
-#pgFrontNewsEventsContainer h3 img {
-  margin-bottom: 10px;
-}
diff --git a/django/media/img/about/press/elephant.png b/django/media/img/about/press/elephant.png
new file mode 100644 (file)
index 0000000..d765318
Binary files /dev/null and b/django/media/img/about/press/elephant.png differ
diff --git a/django/media/img/atpostgresql.png b/django/media/img/atpostgresql.png
new file mode 100755 (executable)
index 0000000..fd8f0b5
Binary files /dev/null and b/django/media/img/atpostgresql.png differ
diff --git a/django/media/img/git.png b/django/media/img/git.png
new file mode 100644 (file)
index 0000000..51f4ae5
Binary files /dev/null and b/django/media/img/git.png differ