A first very basic import.

Contains basic functionality, and an import of most of the static content
from the old site.

There is still plenty more to do...
This commit is contained in:
Magnus Hagander
2009-09-14 14:39:25 +02:00
commit 90b758c247
199 changed files with 6805 additions and 0 deletions

7
media/css/base.css Normal file
View File

@ -0,0 +1,7 @@
@import url("global.css");
@import url("layout.css");
@import url("text.css");
@import url("navigation.css");
@import url("table.css");
@import url("iefixes.css");

210
media/css/docs.css Normal file
View File

@ -0,0 +1,210 @@
/* PostgreSQL.org Documentation Style */
@import url("global.css");
@import url("table.css");
@import url("text.css");
body {
font-size: 76%;
}
/* 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/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: 0px;
margin-left: 20px;
}
#docHeaderLogo img { border: 0px; }
#docNavSearchContainer {
padding-bottom: 2px;
}
#docNav {
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 Mac */
text-align: right; /* need for IE Mac */
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-right: 1px solid #7A7A7A;
border-bottom: 1px solid #7A7A7A;
border-top: 1px solid #7A7A7A;
border-left: 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 {
font-weight: bold;
color: #EC5800;
font-size: 1.4em;
}
h2 {
font-weight: bold;
color: #666;
font-size: 1.2em;
}
h3 {
font-weight: bold;
color: #666;
font-size: 1.1em;
}
/* Text Styles */
.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;
}
/* Link Styles */
#docNav a {
font-weight: bold;
}
a:link { color:#0066A2; text-decoration: underline; }
a:visited { color:#004E66; text-decoration: underline; }
a:active { color:#0066A2; text-decoration: underline; }
a:hover { color:#000000; text-decoration: underline; }
#docFooter a:link { color:#666; text-decoration: underline; }
#docFooter a:visited { color:#666; text-decoration: underline; }
#docFooter a:active { color:#666; text-decoration: underline; }
#docFooter a:hover { color:#000000; text-decoration: underline; }

7
media/css/docs_large.css Normal file
View File

@ -0,0 +1,7 @@
/* PostgreSQL Documentation Style - Large Text Version */
@import url("docs.css");
body {
font-size: 93%;
}

21
media/css/geckofixes.css Normal file
View File

@ -0,0 +1,21 @@
/* Gecko is broken with pre,tt,code sizes */
#pgContainer code, #pgContainer pre, #pgContainer tt {
font-size: 1.2em;
}
#docContainer tt, #docContainer pre, #docContainer code {
font-size: 1.4em;
}
#docContainer tt tt, #docContainer tt code, #docContainer tt pre {
font-size: 1.0em;
}
#docContainer pre code, #docContainer pre tt, #docContainer pre pre {
font-size: 1.0em;
}
#docContainer code code, #docContainer code tt, #docContainer code pre {
font-size: 1.0em;
}

80
media/css/global.css Normal file
View File

@ -0,0 +1,80 @@
/*
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 1.2em 0em;
}
li > p {
margin-top: 0.2em;
}
pre {
font-family: monospace;
font-size: 1.0em;
}
strong, b {
font-weight: bold;
}

138
media/css/iefixes.css Normal file
View File

@ -0,0 +1,138 @@
/*
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*/

656
media/css/layout.css Normal file
View File

@ -0,0 +1,656 @@
/*
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 {
font-size: 0.8em;
background: #FFFFFF;
color: #000000;
border-right: 1px solid #7A7A7A;
border-bottom: 1px solid #7A7A7A;
border-top: 1px solid #7A7A7A;
border-left: 1px solid #7A7A7A;
padding: 1px 4px;
}
#pgSearch form #q {
font-size: 0.8em;
width: 140px;
border: 1px solid #7A7A7A;
background: #FFFFFF;
color: #000000;
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;
}
#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-right: 1px solid #7A7A7A;
border-bottom: 1px solid #7A7A7A;
border-top: 1px solid #7A7A7A;
border-left: 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;
}
/* 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;
}

237
media/css/navigation.css Normal file
View File

@ -0,0 +1,237 @@
/*
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;
}

View File

@ -0,0 +1,12 @@
div.markdownpreview {
margin-top: 2px;
border: 1px solid black;
float: left;
overflow: auto;
}
div.markdownpreview p {
margin-left: 0px !important;
padding-left: 0px !important;
}

100
media/css/table.css Normal file
View File

@ -0,0 +1,100 @@
/*
PostgreSQL.org - Table Styles
*/
div.tblBasic h2 {
margin: 25px 0 .5em 0;
}
div.tblBasic table {
background: #F5F5F5 url(/media/img/layout/gnav_tbl_top_lft.png) top left no-repeat;
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/gnav_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/gnav_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/gnav_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/gnav_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;
}

162
media/css/text.css Normal file
View File

@ -0,0 +1,162 @@
/*
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;
}

BIN
media/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 888 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 883 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 622 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
media/img/docs/bg_hdr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

BIN
media/img/docs/hdr_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
media/img/ftp/file.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

BIN
media/img/ftp/folder.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 966 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 882 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 811 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

BIN
media/img/misc/ico_rss.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 601 B

View File

@ -0,0 +1,43 @@
// Functions to generate showdown previews for
// the django admin interface
var converter = null;
function attach_showdown_preview(objid) {
if (!converter) {
converter = new Showdown.converter();
}
obj = document.getElementById(objid);
if (!obj) {
alert('Could not locate object ' + objid + ' in DOM');
return;
}
obj.style.cssFloat = 'left';
obj.style.marginRight = '10px';
newdiv = document.createElement('div');
newdiv.className = 'markdownpreview';
obj.style.width = newdiv.style.width = "400px";
obj.style.height = newdiv.style.height = "200px";
obj.parentNode.insertBefore(newdiv, obj.nextSibling);
update_markdown(obj, newdiv);
window.onkeyup = obj.onkeyup = function() {
/* Using a timer make sure we only update max 4 times / second */
if (obj.current_timeout) {
clearTimeout(obj.current_timeout);
}
obj.current_timeout = setTimeout(function() {
update_markdown(obj, newdiv);
}, 250);
};
}
function update_markdown(src, dest) {
if (src.value != src.lastvalue) {
src.lastvalue = src.value;
dest.innerHTML = converter.makeHtml(src.value);
}
}

View File

@ -0,0 +1,34 @@
Copyright (c) 2007, John Fraser
<http://www.attacklab.net/>
All rights reserved.
Original Markdown copyright (c) 2004, John Gruber
<http://daringfireball.net/>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name "Markdown" nor the names of its contributors may
be used to endorse or promote products derived from this software
without specific prior written permission.
This software is provided by the copyright holders and contributors "as
is" and any express or implied warranties, including, but not limited
to, the implied warranties of merchantability and fitness for a
particular purpose are disclaimed. In no event shall the copyright owner
or contributors be liable for any direct, indirect, incidental, special,
exemplary, or consequential damages (including, but not limited to,
procurement of substitute goods or services; loss of use, data, or
profits; or business interruption) however caused and on any theory of
liability, whether in contract, strict liability, or tort (including
negligence or otherwise) arising in any way out of the use of this
software, even if advised of the possibility of such damage.

419
media/showdown/showdown.js Normal file
View File

@ -0,0 +1,419 @@
/*
A A L Source code at:
T C A <http://www.attacklab.net/>
T K B
*/
var Showdown={};
Showdown.converter=function(){
var _1;
var _2;
var _3;
var _4=0;
this.makeHtml=function(_5){
_1=new Array();
_2=new Array();
_3=new Array();
_5=_5.replace(/~/g,"~T");
_5=_5.replace(/\$/g,"~D");
_5=_5.replace(/\r\n/g,"\n");
_5=_5.replace(/\r/g,"\n");
_5="\n\n"+_5+"\n\n";
_5=_6(_5);
_5=_5.replace(/^[ \t]+$/mg,"");
_5=_7(_5);
_5=_8(_5);
_5=_9(_5);
_5=_a(_5);
_5=_5.replace(/~D/g,"$$");
_5=_5.replace(/~T/g,"~");
return _5;
};
var _8=function(_b){
var _b=_b.replace(/^[ ]{0,3}\[(.+)\]:[ \t]*\n?[ \t]*<?(\S+?)>?[ \t]*\n?[ \t]*(?:(\n*)["(](.+?)[")][ \t]*)?(?:\n+|\Z)/gm,function(_c,m1,m2,m3,m4){
m1=m1.toLowerCase();
_1[m1]=_11(m2);
if(m3){
return m3+m4;
}else{
if(m4){
_2[m1]=m4.replace(/"/g,"&quot;");
}
}
return "";
});
return _b;
};
var _7=function(_12){
_12=_12.replace(/\n/g,"\n\n");
var _13="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del";
var _14="p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math";
_12=_12.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math|ins|del)\b[^\r]*?\n<\/\2>[ \t]*(?=\n+))/gm,_15);
_12=_12.replace(/^(<(p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|script|noscript|form|fieldset|iframe|math)\b[^\r]*?.*<\/\2>[ \t]*(?=\n+)\n)/gm,_15);
_12=_12.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,_15);
_12=_12.replace(/(\n\n[ ]{0,3}<!(--[^\r]*?--\s*)+>[ \t]*(?=\n{2,}))/g,_15);
_12=_12.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,_15);
_12=_12.replace(/\n\n/g,"\n");
return _12;
};
var _15=function(_16,m1){
var _18=m1;
_18=_18.replace(/\n\n/g,"\n");
_18=_18.replace(/^\n/,"");
_18=_18.replace(/\n+$/g,"");
_18="\n\n~K"+(_3.push(_18)-1)+"K\n\n";
return _18;
};
var _9=function(_19){
_19=_1a(_19);
var key=_1c("<hr />");
_19=_19.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm,key);
_19=_19.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm,key);
_19=_19.replace(/^[ ]{0,2}([ ]?\_[ ]?){3,}[ \t]*$/gm,key);
_19=_1d(_19);
_19=_1e(_19);
_19=_1f(_19);
_19=_7(_19);
_19=_20(_19);
return _19;
};
var _21=function(_22){
_22=_23(_22);
_22=_24(_22);
_22=_25(_22);
_22=_26(_22);
_22=_27(_22);
_22=_28(_22);
_22=_11(_22);
_22=_29(_22);
_22=_22.replace(/ +\n/g," <br />\n");
return _22;
};
var _24=function(_2a){
var _2b=/(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|<!(--.*?--\s*)+>)/gi;
_2a=_2a.replace(_2b,function(_2c){
var tag=_2c.replace(/(.)<\/?code>(?=.)/g,"$1`");
tag=_2e(tag,"\\`*_");
return tag;
});
return _2a;
};
var _27=function(_2f){
_2f=_2f.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,_30);
_2f=_2f.replace(/(\[((?:\[[^\]]*\]|[^\[\]])*)\]\([ \t]*()<?(.*?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,_30);
_2f=_2f.replace(/(\[([^\[\]]+)\])()()()()()/g,_30);
return _2f;
};
var _30=function(_31,m1,m2,m3,m4,m5,m6,m7){
if(m7==undefined){
m7="";
}
var _39=m1;
var _3a=m2;
var _3b=m3.toLowerCase();
var url=m4;
var _3d=m7;
if(url==""){
if(_3b==""){
_3b=_3a.toLowerCase().replace(/ ?\n/g," ");
}
url="#"+_3b;
if(_1[_3b]!=undefined){
url=_1[_3b];
if(_2[_3b]!=undefined){
_3d=_2[_3b];
}
}else{
if(_39.search(/\(\s*\)$/m)>-1){
url="";
}else{
return _39;
}
}
}
url=_2e(url,"*_");
var _3e="<a href=\""+url+"\"";
if(_3d!=""){
_3d=_3d.replace(/"/g,"&quot;");
_3d=_2e(_3d,"*_");
_3e+=" title=\""+_3d+"\"";
}
_3e+=">"+_3a+"</a>";
return _3e;
};
var _26=function(_3f){
_3f=_3f.replace(/(!\[(.*?)\][ ]?(?:\n[ ]*)?\[(.*?)\])()()()()/g,_40);
_3f=_3f.replace(/(!\[(.*?)\]\s?\([ \t]*()<?(\S+?)>?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g,_40);
return _3f;
};
var _40=function(_41,m1,m2,m3,m4,m5,m6,m7){
var _49=m1;
var _4a=m2;
var _4b=m3.toLowerCase();
var url=m4;
var _4d=m7;
if(!_4d){
_4d="";
}
if(url==""){
if(_4b==""){
_4b=_4a.toLowerCase().replace(/ ?\n/g," ");
}
url="#"+_4b;
if(_1[_4b]!=undefined){
url=_1[_4b];
if(_2[_4b]!=undefined){
_4d=_2[_4b];
}
}else{
return _49;
}
}
_4a=_4a.replace(/"/g,"&quot;");
url=_2e(url,"*_");
var _4e="<img src=\""+url+"\" alt=\""+_4a+"\"";
_4d=_4d.replace(/"/g,"&quot;");
_4d=_2e(_4d,"*_");
_4e+=" title=\""+_4d+"\"";
_4e+=" />";
return _4e;
};
var _1a=function(_4f){
_4f=_4f.replace(/^(.+)[ \t]*\n=+[ \t]*\n+/gm,function(_50,m1){
return _1c("<h1>"+_21(m1)+"</h1>");
});
_4f=_4f.replace(/^(.+)[ \t]*\n-+[ \t]*\n+/gm,function(_52,m1){
return _1c("<h2>"+_21(m1)+"</h2>");
});
_4f=_4f.replace(/^(\#{1,6})[ \t]*(.+?)[ \t]*\#*\n+/gm,function(_54,m1,m2){
var _57=m1.length;
return _1c("<h"+_57+">"+_21(m2)+"</h"+_57+">");
});
return _4f;
};
var _58;
var _1d=function(_59){
_59+="~0";
var _5a=/^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm;
if(_4){
_59=_59.replace(_5a,function(_5b,m1,m2){
var _5e=m1;
var _5f=(m2.search(/[*+-]/g)>-1)?"ul":"ol";
_5e=_5e.replace(/\n{2,}/g,"\n\n\n");
var _60=_58(_5e);
_60=_60.replace(/\s+$/,"");
_60="<"+_5f+">"+_60+"</"+_5f+">\n";
return _60;
});
}else{
_5a=/(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/g;
_59=_59.replace(_5a,function(_61,m1,m2,m3){
var _65=m1;
var _66=m2;
var _67=(m3.search(/[*+-]/g)>-1)?"ul":"ol";
var _66=_66.replace(/\n{2,}/g,"\n\n\n");
var _68=_58(_66);
_68=_65+"<"+_67+">\n"+_68+"</"+_67+">\n";
return _68;
});
}
_59=_59.replace(/~0/,"");
return _59;
};
_58=function(_69){
_4++;
_69=_69.replace(/\n{2,}$/,"\n");
_69+="~0";
_69=_69.replace(/(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+([^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm,function(_6a,m1,m2,m3,m4){
var _6f=m4;
var _70=m1;
var _71=m2;
if(_70||(_6f.search(/\n{2,}/)>-1)){
_6f=_9(_72(_6f));
}else{
_6f=_1d(_72(_6f));
_6f=_6f.replace(/\n$/,"");
_6f=_21(_6f);
}
return "<li>"+_6f+"</li>\n";
});
_69=_69.replace(/~0/g,"");
_4--;
return _69;
};
var _1e=function(_73){
_73+="~0";
_73=_73.replace(/(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g,function(_74,m1,m2){
var _77=m1;
var _78=m2;
_77=_79(_72(_77));
_77=_6(_77);
_77=_77.replace(/^\n+/g,"");
_77=_77.replace(/\n+$/g,"");
_77="<pre><code>"+_77+"\n</code></pre>";
return _1c(_77)+_78;
});
_73=_73.replace(/~0/,"");
return _73;
};
var _1c=function(_7a){
_7a=_7a.replace(/(^\n+|\n+$)/g,"");
return "\n\n~K"+(_3.push(_7a)-1)+"K\n\n";
};
var _23=function(_7b){
_7b=_7b.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,function(_7c,m1,m2,m3,m4){
var c=m3;
c=c.replace(/^([ \t]*)/g,"");
c=c.replace(/[ \t]*$/g,"");
c=_79(c);
return m1+"<code>"+c+"</code>";
});
return _7b;
};
var _79=function(_82){
_82=_82.replace(/&/g,"&amp;");
_82=_82.replace(/</g,"&lt;");
_82=_82.replace(/>/g,"&gt;");
_82=_2e(_82,"*_{}[]\\",false);
return _82;
};
var _29=function(_83){
_83=_83.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g,"<strong>$2</strong>");
_83=_83.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g,"<em>$2</em>");
return _83;
};
var _1f=function(_84){
_84=_84.replace(/((^[ \t]*>[ \t]?.+\n(.+\n)*\n*)+)/gm,function(_85,m1){
var bq=m1;
bq=bq.replace(/^[ \t]*>[ \t]?/gm,"~0");
bq=bq.replace(/~0/g,"");
bq=bq.replace(/^[ \t]+$/gm,"");
bq=_9(bq);
bq=bq.replace(/(^|\n)/g,"$1 ");
bq=bq.replace(/(\s*<pre>[^\r]+?<\/pre>)/gm,function(_88,m1){
var pre=m1;
pre=pre.replace(/^ /mg,"~0");
pre=pre.replace(/~0/g,"");
return pre;
});
return _1c("<blockquote>\n"+bq+"\n</blockquote>");
});
return _84;
};
var _20=function(_8b){
_8b=_8b.replace(/^\n+/g,"");
_8b=_8b.replace(/\n+$/g,"");
var _8c=_8b.split(/\n{2,}/g);
var _8d=new Array();
var end=_8c.length;
for(var i=0;i<end;i++){
var str=_8c[i];
if(str.search(/~K(\d+)K/g)>=0){
_8d.push(str);
}else{
if(str.search(/\S/)>=0){
str=_21(str);
str=str.replace(/^([ \t]*)/g,"<p>");
str+="</p>";
_8d.push(str);
}
}
}
end=_8d.length;
for(var i=0;i<end;i++){
while(_8d[i].search(/~K(\d+)K/)>=0){
var _91=_3[RegExp.$1];
_91=_91.replace(/\$/g,"$$$$");
_8d[i]=_8d[i].replace(/~K\d+K/,_91);
}
}
return _8d.join("\n\n");
};
var _11=function(_92){
_92=_92.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g,"&amp;");
_92=_92.replace(/<(?![a-z\/?\$!])/gi,"&lt;");
return _92;
};
var _25=function(_93){
_93=_93.replace(/\\(\\)/g,_94);
_93=_93.replace(/\\([`*_{}\[\]()>#+-.!])/g,_94);
return _93;
};
var _28=function(_95){
_95=_95.replace(/<((https?|ftp|dict):[^'">\s]+)>/gi,"<a href=\"$1\">$1</a>");
_95=_95.replace(/<(?:mailto:)?([-.\w]+\@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi,function(_96,m1){
return _98(_a(m1));
});
return _95;
};
var _98=function(_99){
function char2hex(ch){
var _9b="0123456789ABCDEF";
var dec=ch.charCodeAt(0);
return (_9b.charAt(dec>>4)+_9b.charAt(dec&15));
}
var _9d=[function(ch){
return "&#"+ch.charCodeAt(0)+";";
},function(ch){
return "&#x"+char2hex(ch)+";";
},function(ch){
return ch;
}];
_99="mailto:"+_99;
_99=_99.replace(/./g,function(ch){
if(ch=="@"){
ch=_9d[Math.floor(Math.random()*2)](ch);
}else{
if(ch!=":"){
var r=Math.random();
ch=(r>0.9?_9d[2](ch):r>0.45?_9d[1](ch):_9d[0](ch));
}
}
return ch;
});
_99="<a href=\""+_99+"\">"+_99+"</a>";
_99=_99.replace(/">.+:/g,"\">");
return _99;
};
var _a=function(_a3){
_a3=_a3.replace(/~E(\d+)E/g,function(_a4,m1){
var _a6=parseInt(m1);
return String.fromCharCode(_a6);
});
return _a3;
};
var _72=function(_a7){
_a7=_a7.replace(/^(\t|[ ]{1,4})/gm,"~0");
_a7=_a7.replace(/~0/g,"");
return _a7;
};
var _6=function(_a8){
_a8=_a8.replace(/\t(?=\t)/g," ");
_a8=_a8.replace(/\t/g,"~A~B");
_a8=_a8.replace(/~B(.+?)~A/g,function(_a9,m1,m2){
var _ac=m1;
var _ad=4-_ac.length%4;
for(var i=0;i<_ad;i++){
_ac+=" ";
}
return _ac;
});
_a8=_a8.replace(/~A/g," ");
_a8=_a8.replace(/~B/g,"");
return _a8;
};
var _2e=function(_af,_b0,_b1){
var _b2="(["+_b0.replace(/([\[\]\\])/g,"\\$1")+"])";
if(_b1){
_b2="\\\\"+_b2;
}
var _b3=new RegExp(_b2,"g");
_af=_af.replace(_b3,_94);
return _af;
};
var _94=function(_b4,m1){
var _b6=m1.charCodeAt(0);
return "~E"+_b6+"E";
};
};

2
pgweb/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
settings_local.py
*.pyc

0
pgweb/__init__.py Normal file
View File

View File

3
pgweb/account/models.py Normal file
View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

14
pgweb/account/urls.py Normal file
View File

@ -0,0 +1,14 @@
from django.conf.urls.defaults import *
from django.contrib.auth.views import logout_then_login
urlpatterns = patterns('',
(r'^$', 'account.views.home'),
# News & Events
(r'^news/(.*)/$', 'news.views.form'),
(r'^events/(.*)/$', 'events.views.form'),
# Log out
(r'^logout/$', logout_then_login, {'login_url': '/' }),
)

19
pgweb/account/views.py Normal file
View File

@ -0,0 +1,19 @@
from django.contrib.auth.models import User
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response
from django.contrib.auth.decorators import login_required
from pgweb.util.contexts import NavContext
from pgweb.news.models import NewsArticle
from pgweb.events.models import Event
@login_required
def home(request):
myarticles = NewsArticle.objects.filter(submitter=request.user)
myevents = Event.objects.filter(submitter=request.user)
return render_to_response('account/index.html', {
'newsarticles': myarticles,
'events': myevents,
}, NavContext(request, 'account'))

View File

View File

@ -0,0 +1,5 @@
from django.contrib import admin
from models import *
admin.site.register(ContributorType)
admin.site.register(Contributor)

View File

@ -0,0 +1,52 @@
[
{
"pk": 1,
"model": "contributors.contributortype",
"fields": {
"detailed": true,
"typename": "Core Team",
"extrainfo": "",
"sortorder": 100
}
},
{
"pk": 2,
"model": "contributors.contributortype",
"fields": {
"detailed": true,
"typename": "Major Contributors",
"extrainfo": "",
"sortorder": 200
}
},
{
"pk": 4,
"model": "contributors.contributortype",
"fields": {
"detailed": false,
"typename": "Contributors",
"extrainfo": "",
"sortorder": 300
}
},
{
"pk": 3,
"model": "contributors.contributortype",
"fields": {
"detailed": true,
"typename": "Hackers Emeritus",
"extrainfo": "The following hackers were previously part of the core team. Although they no longer work on the project, they are included here in recognition of their valuable contributions over the years.",
"sortorder": 400
}
},
{
"pk": 5,
"model": "contributors.contributortype",
"fields": {
"detailed": false,
"typename": "Past Contributors",
"extrainfo": "",
"sortorder": 500
}
}
]

View File

@ -0,0 +1,30 @@
from django.db import models
class ContributorType(models.Model):
typename = models.CharField(max_length=32, null=False, blank=False)
sortorder = models.IntegerField(null=False, default=100)
extrainfo = models.TextField(null=True, blank=True)
detailed = models.BooleanField(null=False, default=True)
def __unicode__(self):
return self.typename
class Meta:
ordering = ('sortorder',)
class Contributor(models.Model):
ctype = models.ForeignKey(ContributorType)
lastname = models.CharField(max_length=100, null=False, blank=False)
firstname = models.CharField(max_length=100, null=False, blank=False)
email = models.EmailField(null=False, blank=False)
company = models.CharField(max_length=100, null=True, blank=True)
companyurl = models.URLField(max_length=100, null=True, blank=True)
location = models.CharField(max_length=100, null=True, blank=True)
contribution = models.TextField(null=True, blank=True)
def __unicode__(self):
return "%s %s" % (self.firstname, self.lastname)
class Meta:
ordering = ('lastname', 'firstname',)

View File

@ -0,0 +1,15 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import TemplateDoesNotExist, loader, Context
from django.contrib.auth.decorators import login_required
from pgweb.util.contexts import NavContext
from models import Contributor, ContributorType
def completelist(request):
contributortypes = list(ContributorType.objects.all())
return render_to_response('contributors/list.html', {
'contributortypes': contributortypes,
}, NavContext(request, 'community'))

0
pgweb/core/__init__.py Normal file
View File

8
pgweb/core/admin.py Normal file
View File

@ -0,0 +1,8 @@
from django.contrib import admin
from django import forms
from django.db import connection
from django.http import HttpResponseRedirect, HttpResponse
from pgweb.core.models import *
admin.site.register(Version)

23
pgweb/core/feeds.py Normal file
View File

@ -0,0 +1,23 @@
from django.contrib.syndication.feeds import Feed
from models import Version
from datetime import datetime, time
class VersionFeed(Feed):
title = "PostgreSQL latest versions"
link = "http://www.postgresql.org/"
description = "PostgreSQL latest versions"
description_template = 'core/version_rss_description.html'
title_template = 'core/version_rss_title.html'
def items(self):
return Version.objects.all()
def item_link(self, obj):
return "http://www.postgresql.org/docs/%s/static/%s" % (obj.tree, obj.relnotes)
def item_pubdate(self, obj):
return datetime.combine(obj.reldate,time.min)

View File

@ -0,0 +1,52 @@
[
{
"pk": 1,
"model": "core.version",
"fields": {
"relnotes": "release-8-4.html",
"tree": "8.4",
"reldate": "2009-07-01",
"latestminor": 0
}
},
{
"pk": 2,
"model": "core.version",
"fields": {
"relnotes": "release-8-3-7.html",
"tree": "8.3",
"reldate": "2009-03-17",
"latestminor": 7
}
},
{
"pk": 3,
"model": "core.version",
"fields": {
"relnotes": "release-8-2-13.html",
"tree": "8.2",
"reldate": "2009-03-17",
"latestminor": 13
}
},
{
"pk": 4,
"model": "core.version",
"fields": {
"relnotes": "release.html#RELEASE-8-1-17",
"tree": "8.1",
"reldate": "2009-03-17",
"latestminor": 17
}
},
{
"pk": 5,
"model": "core.version",
"fields": {
"relnotes": "release.html#RELEASE-8-0-21",
"tree": "8.0",
"reldate": "2009-03-17",
"latestminor": 21
}
}
]

30
pgweb/core/models.py Normal file
View File

@ -0,0 +1,30 @@
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import pre_save
class Version(models.Model):
tree = models.DecimalField(max_digits=3, decimal_places=1, null=False, blank=False)
latestminor = models.IntegerField(null=False, blank=False, default=0)
reldate = models.DateField(null=False, blank=False)
relnotes = models.CharField(max_length=32, null=False, blank=False)
def __unicode__(self):
return "%s.%s" % (self.tree, self.latestminor)
class Meta:
ordering = ('-tree', )
class Country(models.Model):
name = models.CharField(max_length=100, null=False, blank=False)
tld = models.CharField(max_length=3, null=False, blank=False)
class Meta:
db_table = 'countries'
ordering = ('name',)
verbose_name = 'Country'
verbose_name_plural = 'Countries'
def __unicode__(self):
return self.name

View File

View File

@ -0,0 +1,9 @@
from django.template.defaultfilters import stringfilter
from django import template
register = template.Library()
@register.filter(name='hidemail')
@stringfilter
def hidemail(value):
return value.replace('@', ' at ')

46
pgweb/core/views.py Normal file
View File

@ -0,0 +1,46 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, Http404
from django.template import TemplateDoesNotExist, loader, Context
from pgweb.util.contexts import NavContext
# models needed for the pieces on the frontpage
from news.models import NewsArticle
from events.models import Event
from quotes.models import Quote
from models import Version
# Front page view
def home(request):
news = NewsArticle.objects.filter(approved=True)[:3]
events = Event.objects.select_related('country').filter(approved=True).filter(training=False)[:3]
quote = Quote.objects.filter(approved=True).order_by('?')[0]
versions = Version.objects.all()
return render_to_response('index.html', {
'title': 'The world\'s most advanced open source database',
'news': news,
'events': events,
'quote': quote,
'versions': versions,
})
# Generic fallback view for static pages
def fallback(request, url):
if url.find('..') > -1:
raise Http404('Page not found.')
try:
t = loader.get_template('pages/%s.html' % url)
except TemplateDoesNotExist, e:
raise Http404('Page not found.')
# Guestimate the nav section by looking at the URL and taking the first
# piece of it.
try:
navsect = url.split('/',2)[0]
except:
navsect = ''
return HttpResponse(t.render(NavContext(request, navsect)))

0
pgweb/docs/__init__.py Normal file
View File

12
pgweb/docs/models.py Normal file
View File

@ -0,0 +1,12 @@
from django.db import models
class DocPage(models.Model):
id = models.AutoField(null=False, primary_key=True)
file = models.CharField(max_length=64, null=False, blank=False)
version = models.DecimalField(max_digits=3, decimal_places=1, null=False)
title = models.CharField(max_length=256, null=True, blank=True)
content = models.TextField(null=True, blank=True)
class Meta:
db_table = 'docs'

25
pgweb/docs/views.py Normal file
View File

@ -0,0 +1,25 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import TemplateDoesNotExist, loader, Context
from django.contrib.auth.decorators import login_required
from pgweb.util.contexts import NavContext
from models import DocPage
def docpage(request, version, typ, filename):
if version == 'current':
#FIXME: get from settings
ver = '8.4'
else:
ver = version
page = get_object_or_404(DocPage, version=ver, file="%s.html" % filename)
return render_to_response('docs/docspage.html', {
'title': page.title,
'doc_nav_version': version,
'doc_type': typ,
'page_content': page.content,
'doc_index_filename': 'index.html',
})

View File

View File

@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

97
pgweb/downloads/views.py Normal file
View File

@ -0,0 +1,97 @@
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.template import TemplateDoesNotExist, loader, Context
from django.contrib.auth.decorators import login_required
from django.conf import settings
import os
from datetime import datetime
from pgweb.util.contexts import NavContext
def _getfiledata(root, paths):
for path in paths:
fn = "%s/%s" % (root,path)
if not os.path.isfile(fn):
continue
stat = os.stat(fn)
yield {
'name':path,
'mtime': datetime.fromtimestamp(stat.st_mtime),
'size': stat.st_size,
}
def _getdirectorydata(root, paths):
for path in paths:
fn = "%s/%s" % (root,path)
if not os.path.isdir(fn):
continue
if os.path.islink(fn):
# This is a link, so change the url to point directly
# to the link target. We'll just assume the link
# is safe. Oh, and links must be relative
yield {
'link': path,
'url': os.readlink(fn),
}
else:
yield {
'link': path,
'url': path,
}
def _getfile(root, filename):
fn = "%s/%s" % (root,filename)
if os.path.isfile(fn):
f = open(fn)
r = f.read()
f.close()
return r
return None
def ftpbrowser(request, subpath):
if subpath:
# An actual path has been selected. Fancy!
if subpath.find('..') > -1:
# Just claim it doesn't exist if the user tries to do this
# type of bad thing
raise Http404
fspath = os.path.join(settings.FTP_ROOT, subpath)
else:
fspath = settings.FTP_ROOT
subpath=""
if not os.path.isdir(fspath):
raise Http404
everything = [n for n in os.listdir(fspath) if not n.startswith('.')]
directories = list(_getdirectorydata(fspath, everything))
if subpath:
directories.append({'link':'[Parent Directory]', 'url':'..'})
files = list(_getfiledata(fspath, everything))
breadcrumbs = []
if subpath:
breadroot = ""
for pathpiece in subpath.split('/'):
if not pathpiece:
# Trailing slash will give out an empty pathpiece
continue
if breadroot:
breadroot = "%s/%s" % (breadroot, pathpiece)
else:
breadroot = pathpiece
breadcrumbs.append({'name': pathpiece, 'path': breadroot});
return render_to_response('downloads/ftpbrowser.html', {
'basepath': subpath.rstrip('/'),
'directories': sorted(directories),
'files': sorted(files),
'breadcrumbs': breadcrumbs,
'readme': _getfile(fspath, 'README'),
'messagesfile': _getfile(fspath, '.messages'),
'maintainer': _getfile(fspath, 'CURRENT_MAINTAINER'),
}, NavContext(request, 'download'))

0
pgweb/events/__init__.py Normal file
View File

4
pgweb/events/admin.py Normal file
View File

@ -0,0 +1,4 @@
from django.contrib import admin
from models import *
admin.site.register(Event)

22
pgweb/events/feeds.py Normal file
View File

@ -0,0 +1,22 @@
from django.contrib.syndication.feeds import Feed
from models import Event
from datetime import datetime, time
class EventFeed(Feed):
title = description = "PostgreSQL events"
link = "http://www.postgresql.org/"
description_template = 'events/rss_description.html'
title_template = 'events/rss_title.html'
def items(self):
return Event.objects.filter(approved=True).filter(training=False)[:10]
def item_link(self, obj):
return "http://www.postgresql.org/about/event/%s/" % obj.id
def item_pubdate(self, obj):
return datetime.combine(obj.startdate,time.min)

8
pgweb/events/forms.py Normal file
View File

@ -0,0 +1,8 @@
from django import forms
from models import Event
class EventForm(forms.ModelForm):
class Meta:
model = Event
exclude = ('submitter', 'approved', )

44
pgweb/events/models.py Normal file
View File

@ -0,0 +1,44 @@
from django.db import models
from django.contrib.auth.models import User
from datetime import date
from pgweb.util.bases import PgModel
from core.models import Country
class Event(models.Model, PgModel):
submitter = models.ForeignKey(User, null=False, blank=False)
approved = models.BooleanField(null=False, blank=False, default=False)
org = models.CharField(max_length=50, null=False, blank=False)
title = models.CharField(max_length=100, null=False, blank=False)
city = models.CharField(max_length=50, null=False, blank=False)
state = models.CharField(max_length=50, null=False, blank=True)
country = models.ForeignKey(Country, null=False, blank=False)
training = models.BooleanField(null=False, blank=False, default=False)
startdate = models.DateField(null=False, blank=False)
enddate = models.DateField(null=False, blank=False)
summary = models.TextField(blank=False, null=False)
details = models.TextField(blank=False, null=False)
send_notification = True
def __unicode__(self):
return "%s: %s" % (self.startdate, self.title)
@property
def displaydate(self):
if self.startdate == self.enddate:
return self.startdate
else:
return "%s &ndash; %s" % (self.startdate, self.enddate)
@property
def locationstring(self):
#FIXME, deal with state etc
return "%s, %s" % (self.city, self.country)
class Meta:
ordering = ('startdate',)

Some files were not shown because too many files have changed in this diff Show More