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...
7
media/css/base.css
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -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;
|
||||
}
|
12
media/css/showdown_preview.css
Normal 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
@ -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
@ -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
After Width: | Height: | Size: 2.5 KiB |
BIN
media/img/about/sponsors/logo_2q.png
Normal file
After Width: | Height: | Size: 223 B |
BIN
media/img/about/sponsors/logo_afilias.png
Normal file
After Width: | Height: | Size: 888 B |
BIN
media/img/about/sponsors/logo_cmd.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
media/img/about/sponsors/logo_conovacom.jpg
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
media/img/about/sponsors/logo_credativ.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
media/img/about/sponsors/logo_ds.gif
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
media/img/about/sponsors/logo_edb.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
media/img/about/sponsors/logo_ehpg.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
media/img/about/sponsors/logo_fujitsu.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
media/img/about/sponsors/logo_gp.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
media/img/about/sponsors/logo_huborg.png
Normal file
After Width: | Height: | Size: 733 B |
BIN
media/img/about/sponsors/logo_jfg.png
Normal file
After Width: | Height: | Size: 883 B |
BIN
media/img/about/sponsors/logo_ntt.png
Normal file
After Width: | Height: | Size: 3.1 KiB |
BIN
media/img/about/sponsors/logo_pervasive.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
media/img/about/sponsors/logo_pgsql.png
Normal file
After Width: | Height: | Size: 622 B |
BIN
media/img/about/sponsors/logo_rh.png
Normal file
After Width: | Height: | Size: 722 B |
BIN
media/img/about/sponsors/logo_skype.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
media/img/about/sponsors/logo_sra.png
Normal file
After Width: | Height: | Size: 384 B |
BIN
media/img/about/sponsors/logo_sun.png
Normal file
After Width: | Height: | Size: 1.0 KiB |
BIN
media/img/docs/bg_hdr.png
Normal file
After Width: | Height: | Size: 173 B |
BIN
media/img/docs/hdr_logo.png
Normal file
After Width: | Height: | Size: 4.7 KiB |
BIN
media/img/feature/feature_elephant.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
media/img/feature/feature_gears.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
media/img/ftp/file.png
Normal file
After Width: | Height: | Size: 238 B |
BIN
media/img/ftp/folder.png
Normal file
After Width: | Height: | Size: 253 B |
BIN
media/img/hdr/hdr_feature.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
media/img/hdr/hdr_featureduser.png
Normal file
After Width: | Height: | Size: 966 B |
BIN
media/img/hdr/hdr_latestnews.png
Normal file
After Width: | Height: | Size: 920 B |
BIN
media/img/hdr/hdr_latestreleases.png
Normal file
After Width: | Height: | Size: 882 B |
BIN
media/img/hdr/hdr_planetpg.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
media/img/hdr/hdr_postgresql.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
media/img/hdr/hdr_shortcuts.png
Normal file
After Width: | Height: | Size: 885 B |
BIN
media/img/hdr/hdr_sponsor.png
Normal file
After Width: | Height: | Size: 811 B |
BIN
media/img/hdr/hdr_supportus.png
Normal file
After Width: | Height: | Size: 879 B |
BIN
media/img/hdr/hdr_upcomingevents.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
media/img/hdr/hdr_upcomingtraining.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
media/img/layout/blt_blu_arrow.png
Normal file
After Width: | Height: | Size: 207 B |
BIN
media/img/layout/blt_gry_arrow.png
Normal file
After Width: | Height: | Size: 190 B |
BIN
media/img/layout/box_bottom.gif
Normal file
After Width: | Height: | Size: 85 B |
BIN
media/img/layout/box_top.gif
Normal file
After Width: | Height: | Size: 85 B |
BIN
media/img/layout/feature_bl.gif
Normal file
After Width: | Height: | Size: 102 B |
BIN
media/img/layout/feature_br.gif
Normal file
After Width: | Height: | Size: 361 B |
BIN
media/img/layout/feature_tl.gif
Normal file
After Width: | Height: | Size: 103 B |
BIN
media/img/layout/feature_tr.gif
Normal file
After Width: | Height: | Size: 106 B |
BIN
media/img/layout/hdr_fill.png
Normal file
After Width: | Height: | Size: 335 B |
BIN
media/img/layout/hdr_left.png
Normal file
After Width: | Height: | Size: 3.0 KiB |
BIN
media/img/layout/hdr_right.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
media/img/layout/nav_fill.png
Normal file
After Width: | Height: | Size: 142 B |
BIN
media/img/layout/nav_lft.png
Normal file
After Width: | Height: | Size: 212 B |
BIN
media/img/layout/nav_rgt.png
Normal file
After Width: | Height: | Size: 208 B |
BIN
media/img/layout/nav_tbl_btm.png
Normal file
After Width: | Height: | Size: 218 B |
BIN
media/img/layout/nav_tbl_top.png
Normal file
After Width: | Height: | Size: 212 B |
BIN
media/img/layout/usr_tbl_btm.png
Normal file
After Width: | Height: | Size: 334 B |
BIN
media/img/layout/usr_tbl_top.png
Normal file
After Width: | Height: | Size: 338 B |
BIN
media/img/misc/ico_rss.png
Normal file
After Width: | Height: | Size: 601 B |
43
media/js/showdown_preview.js
Normal 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);
|
||||
}
|
||||
}
|
34
media/showdown/license.txt
Normal 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
@ -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,""");
|
||||
}
|
||||
}
|
||||
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,""");
|
||||
_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,""");
|
||||
url=_2e(url,"*_");
|
||||
var _4e="<img src=\""+url+"\" alt=\""+_4a+"\"";
|
||||
_4d=_4d.replace(/"/g,""");
|
||||
_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,"&");
|
||||
_82=_82.replace(/</g,"<");
|
||||
_82=_82.replace(/>/g,">");
|
||||
_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,"&");
|
||||
_92=_92.replace(/<(?![a-z\/?\$!])/gi,"<");
|
||||
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
@ -0,0 +1,2 @@
|
||||
settings_local.py
|
||||
*.pyc
|
0
pgweb/__init__.py
Normal file
0
pgweb/account/__init__.py
Normal file
3
pgweb/account/models.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
14
pgweb/account/urls.py
Normal 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
@ -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'))
|
||||
|
0
pgweb/contributors/__init__.py
Normal file
5
pgweb/contributors/admin.py
Normal file
@ -0,0 +1,5 @@
|
||||
from django.contrib import admin
|
||||
from models import *
|
||||
|
||||
admin.site.register(ContributorType)
|
||||
admin.site.register(Contributor)
|
52
pgweb/contributors/fixtures/initial_data.yaml
Normal 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
|
||||
}
|
||||
}
|
||||
]
|
30
pgweb/contributors/models.py
Normal 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',)
|
15
pgweb/contributors/views.py
Normal 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
8
pgweb/core/admin.py
Normal 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
@ -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)
|
||||
|
52
pgweb/core/fixtures/initial_data.yaml
Normal 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
@ -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
|
||||
|
0
pgweb/core/templatetags/__init__.py
Normal file
9
pgweb/core/templatetags/pgfilters.py
Normal 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
@ -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
12
pgweb/docs/models.py
Normal 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
@ -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',
|
||||
})
|
||||
|
0
pgweb/downloads/__init__.py
Normal file
3
pgweb/downloads/models.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
97
pgweb/downloads/views.py
Normal 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
4
pgweb/events/admin.py
Normal file
@ -0,0 +1,4 @@
|
||||
from django.contrib import admin
|
||||
from models import *
|
||||
|
||||
admin.site.register(Event)
|
22
pgweb/events/feeds.py
Normal 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
@ -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
@ -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 – %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',)
|
||||
|