summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMagnus Hagander2008-11-12 16:34:40 +0000
committerMagnus Hagander2008-11-12 16:34:40 +0000
commitc74cc83d35469de005bc8a516f94d2c919a04357 (patch)
tree7a0eafd22b1cfbe217eca9aad20ae07e31af0d4e
Initial commit so people can see and comment on it.
Not at all ready yet.
-rw-r--r--media/css/base.css7
-rw-r--r--media/css/geckofixes.css21
-rw-r--r--media/css/global.css80
-rw-r--r--media/css/iefixes.css138
-rw-r--r--media/css/layout.css182
-rw-r--r--media/css/navigation.css237
-rw-r--r--media/css/table.css100
-rw-r--r--media/css/text.css162
-rw-r--r--media/img/layout/blt_blu_arrow.pngbin0 -> 207 bytes
-rw-r--r--media/img/layout/blt_gry_arrow.pngbin0 -> 190 bytes
-rw-r--r--media/img/layout/box_bottom.gifbin0 -> 85 bytes
-rw-r--r--media/img/layout/box_top.gifbin0 -> 85 bytes
-rw-r--r--media/img/layout/hdr_fill.pngbin0 -> 335 bytes
-rw-r--r--media/img/layout/hdr_left.pngbin0 -> 3040 bytes
-rw-r--r--media/img/layout/hdr_right.pngbin0 -> 1863 bytes
-rw-r--r--media/img/layout/nav_fill.pngbin0 -> 142 bytes
-rw-r--r--media/img/layout/nav_lft.pngbin0 -> 212 bytes
-rw-r--r--media/img/layout/nav_rgt.pngbin0 -> 208 bytes
-rw-r--r--media/img/layout/nav_tbl_btm.pngbin0 -> 218 bytes
-rw-r--r--media/img/layout/nav_tbl_top.pngbin0 -> 212 bytes
-rw-r--r--media/img/layout/usr_tbl_btm.pngbin0 -> 334 bytes
-rw-r--r--media/img/layout/usr_tbl_top.pngbin0 -> 338 bytes
-rw-r--r--postgresqleu/.gitignore1
-rw-r--r--postgresqleu/__init__.py0
-rwxr-xr-xpostgresqleu/manage.py11
-rw-r--r--postgresqleu/settings.py78
-rw-r--r--postgresqleu/static/__init__.py0
-rw-r--r--postgresqleu/static/models.py3
-rw-r--r--postgresqleu/static/views.py23
-rw-r--r--postgresqleu/urls.py27
-rw-r--r--template/base.html50
-rw-r--r--template/index.html6
-rw-r--r--template/login.html26
-rw-r--r--template/nav_about.html8
-rw-r--r--template/nav_community.html4
-rw-r--r--template/nav_donate.html4
-rw-r--r--template/nav_events.html5
-rw-r--r--template/nav_merchandise.html4
-rw-r--r--template/nav_sponsors.html5
-rw-r--r--template/navbase.html13
-rw-r--r--template/pages/about.html13
-rw-r--r--template/pages/about/board.html15
-rw-r--r--template/pages/about/contact.html18
-rw-r--r--template/pages/about/history.html9
-rw-r--r--template/pages/about/statutes.html255
-rw-r--r--template/pages/community.html9
-rw-r--r--template/pages/donate.html9
-rw-r--r--template/pages/events.html35
-rw-r--r--template/pages/merchandise.html9
-rw-r--r--template/pages/sponsors.html11
50 files changed, 1578 insertions, 0 deletions
diff --git a/media/css/base.css b/media/css/base.css
new file mode 100644
index 00000000..66eec858
--- /dev/null
+++ b/media/css/base.css
@@ -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");
diff --git a/media/css/geckofixes.css b/media/css/geckofixes.css
new file mode 100644
index 00000000..96313fc4
--- /dev/null
+++ b/media/css/geckofixes.css
@@ -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;
+}
diff --git a/media/css/global.css b/media/css/global.css
new file mode 100644
index 00000000..16ec0acf
--- /dev/null
+++ b/media/css/global.css
@@ -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;
+}
diff --git a/media/css/iefixes.css b/media/css/iefixes.css
new file mode 100644
index 00000000..8601bc1e
--- /dev/null
+++ b/media/css/iefixes.css
@@ -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*/
diff --git a/media/css/layout.css b/media/css/layout.css
new file mode 100644
index 00000000..e1a12baa
--- /dev/null
+++ b/media/css/layout.css
@@ -0,0 +1,182 @@
+/*
+ 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;
+}
+
+/* Uncomment when IE/Validator supports last-child
+
+.pgRSSBottomList li:last-child {
+ border-right: 0;
+ padding-right: 0;
+}
+
+*/
+
+/* 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;
+}
+
+/* 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;
+}
diff --git a/media/css/navigation.css b/media/css/navigation.css
new file mode 100644
index 00000000..e8ddae5f
--- /dev/null
+++ b/media/css/navigation.css
@@ -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;
+}
diff --git a/media/css/table.css b/media/css/table.css
new file mode 100644
index 00000000..98c91958
--- /dev/null
+++ b/media/css/table.css
@@ -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;
+}
diff --git a/media/css/text.css b/media/css/text.css
new file mode 100644
index 00000000..902a1186
--- /dev/null
+++ b/media/css/text.css
@@ -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;
+}
diff --git a/media/img/layout/blt_blu_arrow.png b/media/img/layout/blt_blu_arrow.png
new file mode 100644
index 00000000..32ae5e3e
--- /dev/null
+++ b/media/img/layout/blt_blu_arrow.png
Binary files differ
diff --git a/media/img/layout/blt_gry_arrow.png b/media/img/layout/blt_gry_arrow.png
new file mode 100644
index 00000000..ce9b38e9
--- /dev/null
+++ b/media/img/layout/blt_gry_arrow.png
Binary files differ
diff --git a/media/img/layout/box_bottom.gif b/media/img/layout/box_bottom.gif
new file mode 100644
index 00000000..5d29384b
--- /dev/null
+++ b/media/img/layout/box_bottom.gif
Binary files differ
diff --git a/media/img/layout/box_top.gif b/media/img/layout/box_top.gif
new file mode 100644
index 00000000..a4d927d4
--- /dev/null
+++ b/media/img/layout/box_top.gif
Binary files differ
diff --git a/media/img/layout/hdr_fill.png b/media/img/layout/hdr_fill.png
new file mode 100644
index 00000000..ed2e57cb
--- /dev/null
+++ b/media/img/layout/hdr_fill.png
Binary files differ
diff --git a/media/img/layout/hdr_left.png b/media/img/layout/hdr_left.png
new file mode 100644
index 00000000..c483920f
--- /dev/null
+++ b/media/img/layout/hdr_left.png
Binary files differ
diff --git a/media/img/layout/hdr_right.png b/media/img/layout/hdr_right.png
new file mode 100644
index 00000000..d3de11c0
--- /dev/null
+++ b/media/img/layout/hdr_right.png
Binary files differ
diff --git a/media/img/layout/nav_fill.png b/media/img/layout/nav_fill.png
new file mode 100644
index 00000000..124a783a
--- /dev/null
+++ b/media/img/layout/nav_fill.png
Binary files differ
diff --git a/media/img/layout/nav_lft.png b/media/img/layout/nav_lft.png
new file mode 100644
index 00000000..f0aa5ff3
--- /dev/null
+++ b/media/img/layout/nav_lft.png
Binary files differ
diff --git a/media/img/layout/nav_rgt.png b/media/img/layout/nav_rgt.png
new file mode 100644
index 00000000..4eadb0a9
--- /dev/null
+++ b/media/img/layout/nav_rgt.png
Binary files differ
diff --git a/media/img/layout/nav_tbl_btm.png b/media/img/layout/nav_tbl_btm.png
new file mode 100644
index 00000000..ec897afc
--- /dev/null
+++ b/media/img/layout/nav_tbl_btm.png
Binary files differ
diff --git a/media/img/layout/nav_tbl_top.png b/media/img/layout/nav_tbl_top.png
new file mode 100644
index 00000000..3a223683
--- /dev/null
+++ b/media/img/layout/nav_tbl_top.png
Binary files differ
diff --git a/media/img/layout/usr_tbl_btm.png b/media/img/layout/usr_tbl_btm.png
new file mode 100644
index 00000000..b62d0c11
--- /dev/null
+++ b/media/img/layout/usr_tbl_btm.png
Binary files differ
diff --git a/media/img/layout/usr_tbl_top.png b/media/img/layout/usr_tbl_top.png
new file mode 100644
index 00000000..42eaab0d
--- /dev/null
+++ b/media/img/layout/usr_tbl_top.png
Binary files differ
diff --git a/postgresqleu/.gitignore b/postgresqleu/.gitignore
new file mode 100644
index 00000000..0d20b648
--- /dev/null
+++ b/postgresqleu/.gitignore
@@ -0,0 +1 @@
+*.pyc
diff --git a/postgresqleu/__init__.py b/postgresqleu/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/postgresqleu/__init__.py
diff --git a/postgresqleu/manage.py b/postgresqleu/manage.py
new file mode 100755
index 00000000..5e78ea97
--- /dev/null
+++ b/postgresqleu/manage.py
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+from django.core.management import execute_manager
+try:
+ import settings # Assumed to be in the same directory.
+except ImportError:
+ import sys
+ sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
+ sys.exit(1)
+
+if __name__ == "__main__":
+ execute_manager(settings)
diff --git a/postgresqleu/settings.py b/postgresqleu/settings.py
new file mode 100644
index 00000000..ecad5e1c
--- /dev/null
+++ b/postgresqleu/settings.py
@@ -0,0 +1,78 @@
+# Django settings for postgresqleu project.
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = (
+ ('postgresql.eu webmaster', 'webmaster@postgresql.eu'),
+)
+
+MANAGERS = ADMINS
+
+DATABASE_ENGINE = 'postgresql_psycopg2' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+DATABASE_NAME = 'postgresqleu' # Or path to database file if using sqlite3.
+DATABASE_USER = 'postgresqleu' # Not used with sqlite3.
+DATABASE_PASSWORD = '' # Not used with sqlite3.
+DATABASE_HOST = '/tmp' # Set to empty string for localhost. Not used with sqlite3.
+DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'GMT'
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'en-us'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = False
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+#MEDIA_ROOT = '/home/mha/djangolab/postgresqleu/media'
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
+#MEDIA_URL = '/media/'
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/", "/media/".
+ADMIN_MEDIA_PREFIX = '/admin_media/'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = 'zya5w8sfr)i(7q^p3s50-3hk5&4=k(&z6+*1x!#lt#8h%!sizu'
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.load_template_source',
+# 'django.template.loaders.app_directories.load_template_source',
+# 'django.template.loaders.eggs.load_template_source',
+)
+
+MIDDLEWARE_CLASSES = (
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+)
+
+ROOT_URLCONF = 'postgresqleu.urls'
+
+TEMPLATE_DIRS = (
+ '../template',
+)
+
+INSTALLED_APPS = (
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+ 'postgresqleu.static',
+)
diff --git a/postgresqleu/static/__init__.py b/postgresqleu/static/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/postgresqleu/static/__init__.py
diff --git a/postgresqleu/static/models.py b/postgresqleu/static/models.py
new file mode 100644
index 00000000..71a83623
--- /dev/null
+++ b/postgresqleu/static/models.py
@@ -0,0 +1,3 @@
+from django.db import models
+
+# Create your models here.
diff --git a/postgresqleu/static/views.py b/postgresqleu/static/views.py
new file mode 100644
index 00000000..108d9424
--- /dev/null
+++ b/postgresqleu/static/views.py
@@ -0,0 +1,23 @@
+from django.shortcuts import render_to_response
+from django.http import HttpResponse, Http404
+from django.template import TemplateDoesNotExist, loader, Context
+
+# Fallback handler for URLs not matching anything else. Fall them
+# back to a static template. If that one is not found, send a 404
+# error.
+def static_fallback(request, url):
+ try:
+ # Disallow all URLs that back-step
+ if url.find('..') > -1:
+ raise TemplateDoesNotExist
+
+ t = loader.get_template('pages/%s.html' % url)
+ return HttpResponse(t.render(Context()))
+
+ except TemplateDoesNotExist, e:
+ raise Http404('Page not found')
+
+# Handle the frontpage
+def index(request):
+ return render_to_response('index.html')
+
diff --git a/postgresqleu/urls.py b/postgresqleu/urls.py
new file mode 100644
index 00000000..e8f26e96
--- /dev/null
+++ b/postgresqleu/urls.py
@@ -0,0 +1,27 @@
+from django.conf.urls.defaults import *
+from django.conf import settings
+from django.contrib.auth.views import login, logout_then_login
+
+
+import postgresqleu.static.views
+
+# Uncomment the next two lines to enable the admin:
+# from django.contrib import admin
+# admin.autodiscover()
+
+urlpatterns = patterns('',
+ # Frontpage
+ (r'^$', postgresqleu.static.views.index),
+
+ # Log in/log out
+ (r'^login/?$', login, {'template_name':'login.html'}),
+ (r'^logout/?$', logout_then_login, {'login_url':'/'}),
+
+ # This should not happen in production - serve by apache!
+ url(r'^media/(.*)$', 'django.views.static.serve', {
+ 'document_root': '../media',
+ }),
+
+ # Fallback - send everything nonspecific to the static handler
+ (r'^(.*)$', postgresqleu.static.views.static_fallback),
+)
diff --git a/template/base.html b/template/base.html
new file mode 100644
index 00000000..d0bbee41
--- /dev/null
+++ b/template/base.html
@@ -0,0 +1,50 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en" dir="ltr">
+ <head>
+ <title>{%block title%}{%endblock%} - PostgreSQL Europe</title>
+ <meta http-equiv="Content-Type" content="text/xhtml; charset=utf-8" />
+ <link rel="shortcut icon" href="/favicon.ico" />
+ <style type="text/css" media="screen" title="Normal Text">@import url("/media/css/base.css");</style>
+ <style type="text/css" media="screen" title="Normal Text">@import url("/media/css/geckofixes.css");</style>
+ </head>
+ <body>
+ <div id="pgContainerWrap">
+ <div id="pgContainer">
+ <div id="pgHeaderContainer">
+ <div id="pgHeader">
+ <div id="pgHeaderLogoLeft">
+ <a href="http://www.postgresql.eu/"><img alt="PostgreSQL Europe" height="80" width="230" src="/media/img/layout/hdr_left.png" /></a>
+ </div>
+ <div id="pgHeaderLogoRight">
+ <a href="/"><img width="210" height="80" alt="PostgreSQL Europe" src="/media/img/layout/hdr_right.png" /></a>
+ </div>
+ </div> <!-- pgHeader -->
+
+ <div id="pgTopNav">
+ <div id="pgTopNavLeft"><img width="7" height="23" alt="" src="/media/img/layout/nav_lft.png" /></div>
+ <div id="pgTopNavRight"><img width="7" height="23" alt="" src="/media/img/layout/nav_rgt.png" /></div>
+ <div id="pgLoginlink">{%if user.is_authenticated%}<a href="/logout" title="Log out">Log out</a>{%else%}<a href="/login" title="Log in">Log in</a>{%endif%}</div>
+ <ul id="pgTopNavList">
+ <li><a href="/" title="Home">Home</a></li>
+ <li><a href="/about" title="About">About</a></li>
+ <li><a href="/events" title="Events">Events</a></li>
+ <li><a href="/sponsors" title="Sponsors">Sponsors</a></li>
+ <li><a href="/community" title="Community">Community</a></li>
+ <li><a href="/donate" title="Donate">Donate</a></li>
+ <li><a href="/merchandise" title="Merchandise">Merchandise</a></li>
+ </ul>
+ </div> <!-- pgTopNav -->
+ </div> <!-- pgHeaderContainer -->
+ <div id="pgContent">
+{%block layoutblock%}{%endblock%}
+ <br class="pgClearBoth" />
+ </div> <!-- pgContent -->
+ <div id="pgFooter">
+ <a class="navFooter" href="/about/privacypolicy">Privacy Policy</a><br/>
+ Copyright &copy; 2008 PostgreSQL Europe
+ </div> <!-- pgFooter -->
+ </div>
+ </div> <!-- pgContainerWrap -->
+ </body>
+</html>
diff --git a/template/index.html b/template/index.html
new file mode 100644
index 00000000..01ab4f7b
--- /dev/null
+++ b/template/index.html
@@ -0,0 +1,6 @@
+{%extends "base.html" %}
+{%block title%}Welcome{%endblock%}
+{%block layoutblock%}
+Hello index
+{%endblock%}
+
diff --git a/template/login.html b/template/login.html
new file mode 100644
index 00000000..810aa2b5
--- /dev/null
+++ b/template/login.html
@@ -0,0 +1,26 @@
+{% extends "base.html" %}
+
+{% block layoutblock%}
+
+ {% if form.errors %}
+ <p style="color:red;">Sorry, that's not a valid username or password</p>
+ {% endif %}
+
+ <p>
+Logins are integrated with PostgreSQL community accounts.
+If you do not have one, please go to the main
+website and <a href="http://www.postgresql.org/community/signup">sign up</a>,
+and then return to this site to proceed.
+ </p>
+ <form action='/login' method='post'>
+ <label for="username">User name:</label>
+ <input type="text" name="username" value="" id="username">
+ <label for="password">Password:</label>
+ <input type="password" name="password" value="" id="password">
+
+ <input type="submit" value="login" />
+ <input type="hidden" name="next" value="{{ next|escape }}" />
+ <form action='.' method='post'>
+
+{% endblock %}
+
diff --git a/template/nav_about.html b/template/nav_about.html
new file mode 100644
index 00000000..f9458685
--- /dev/null
+++ b/template/nav_about.html
@@ -0,0 +1,8 @@
+{%extends "navbase.html"%}
+{%block navblock%}
+<li><a href="/about">About</a></li>
+<li><a href="/about/contact">Contact Us</a></li>
+<li><a href="/about/board">Board</a></li>
+<li><a href="/about/statutes">Statutes</a></li>
+<li class="last-child"><a href="/about/history">History</a></li>
+{%endblock%}
diff --git a/template/nav_community.html b/template/nav_community.html
new file mode 100644
index 00000000..0c93e6b5
--- /dev/null
+++ b/template/nav_community.html
@@ -0,0 +1,4 @@
+{%extends "navbase.html"%}
+{%block navblock%}
+<li class="last-child"><a href="/community">Community</a></li>
+{%endblock%}
diff --git a/template/nav_donate.html b/template/nav_donate.html
new file mode 100644
index 00000000..4efb36f8
--- /dev/null
+++ b/template/nav_donate.html
@@ -0,0 +1,4 @@
+{%extends "navbase.html"%}
+{%block navblock%}
+<li class="last-child"><a href="/donate">Donate</a></li>
+{%endblock%}
diff --git a/template/nav_events.html b/template/nav_events.html
new file mode 100644
index 00000000..cb57b256
--- /dev/null
+++ b/template/nav_events.html
@@ -0,0 +1,5 @@
+{%extends "navbase.html"%}
+{%block navblock%}
+<li><a href="/events">Events</a></li>
+<li class="last-child"><a href="http://www.pgday.org/en/">PGDay.EU 2008</a></li>
+{%endblock%}
diff --git a/template/nav_merchandise.html b/template/nav_merchandise.html
new file mode 100644
index 00000000..fd67a5c4
--- /dev/null
+++ b/template/nav_merchandise.html
@@ -0,0 +1,4 @@
+{%extends "navbase.html"%}
+{%block navblock%}
+<li class="last-child"><a href="/merchandise">Merchandise</a></li>
+{%endblock%}
diff --git a/template/nav_sponsors.html b/template/nav_sponsors.html
new file mode 100644
index 00000000..1fd03141
--- /dev/null
+++ b/template/nav_sponsors.html
@@ -0,0 +1,5 @@
+{%extends "navbase.html"%}
+{%block navblock%}
+<li><a href="/sponsors">Sponsors</a></li>
+<li class="last-child"><a href="/sponsors/become">Become a sponsor</a></li>
+{%endblock%}
diff --git a/template/navbase.html b/template/navbase.html
new file mode 100644
index 00000000..5b27116b
--- /dev/null
+++ b/template/navbase.html
@@ -0,0 +1,13 @@
+{%extends "base.html"%}
+{%block layoutblock%}
+<div id="pgSideWrap">
+ <div id="pgSideNav">
+ <ul>
+{%block navblock%}{%endblock%}
+ </ul>
+ </div>
+</div> <!-- pgSideWrap -->
+<div id="pgContentWrap">
+ {%block content%}{%endblock%}
+</div> <!-- pgContentWrap -->
+{%endblock%}
diff --git a/template/pages/about.html b/template/pages/about.html
new file mode 100644
index 00000000..5796e039
--- /dev/null
+++ b/template/pages/about.html
@@ -0,0 +1,13 @@
+{%extends "nav_about.html"%}
+{%block title%}About{%endblock%}
+{%block content%}
+<h1>About PostgreSQL Europe</h1>
+
+<p>
+PostgreSQL Europe is an "umbrella group" for all user groups in Europe.
+Our ideas is that all the PostgreSQL national european groups have
+somehow the same needs and must share their experiences, but also
+their ressources. This way, we will help each other to grow, and all
+newcomers to set up their own national PostgreSQL users group.
+</p>
+{%endblock%}
diff --git a/template/pages/about/board.html b/template/pages/about/board.html
new file mode 100644
index 00000000..8814ab5a
--- /dev/null
+++ b/template/pages/about/board.html
@@ -0,0 +1,15 @@
+{%extends "nav_about.html"%}
+{%block title%}Board of directors{%endblock%}
+{%block content%}
+<h1>Board of directors</h1>
+
+<p>
+As of 2008-02-24, the board consist of the following directors:
+<ul>
+ <li><b>President:</b> Magnus Hagander, Sweden</li>
+ <li><b>Vice-president:</b> Gabriele Bartolini, Italy</li>
+ <li><b>Secretary:</b> Andreas Scherbaum, Germany</li>
+ <li><b>Treasurer:</b> Jean-Paul Argudo, France</li>
+</ul>
+</p>
+{%endblock%}
diff --git a/template/pages/about/contact.html b/template/pages/about/contact.html
new file mode 100644
index 00000000..c3df9eb0
--- /dev/null
+++ b/template/pages/about/contact.html
@@ -0,0 +1,18 @@
+{%extends "nav_about.html"%}
+{%block title%}Contact{%endblock%}
+{%block content%}
+<h1>Contact</h1>
+
+<p>
+To contact the board of directors, please send an email to
+<b>board(at)postgresql.eu</b>. You can also contact
+<a href="/about/board">one of the directors</a> directly.
+</p>
+
+<p>
+Also, if you want you communication to be public, we encourage
+the use of the <a href="/community">open mailinglist</a> when
+possible.
+</p>
+
+{%endblock%}
diff --git a/template/pages/about/history.html b/template/pages/about/history.html
new file mode 100644
index 00000000..fc94847f
--- /dev/null
+++ b/template/pages/about/history.html
@@ -0,0 +1,9 @@
+{%extends "nav_about.html"%}
+{%block title%}History{%endblock%}
+{%block content%}
+<h1>History</h1>
+
+<p>
+This is where we write about our history!
+</p>
+{%endblock%}
diff --git a/template/pages/about/statutes.html b/template/pages/about/statutes.html
new file mode 100644
index 00000000..4c75f6d9
--- /dev/null
+++ b/template/pages/about/statutes.html
@@ -0,0 +1,255 @@
+{%extends "nav_about.html"%}
+{%block title%}Statutes{%endblock%}
+{%block content%}
+<h1>Statutes</h1>
+
+<h2>Article 1 - Constitution</h2>
+
+<p>
+An association, governed by the French law of July 1, 1901 and the
+French decree of August 16, 1901, is instituted between the
+undersigned and any individuals or legal entities adhering to the
+present statutes.
+</p>
+
+<p>
+The association shall be called : "PostgreSQL Europe".
+</p>
+
+<h2>Article 2 - Objectives</h2>
+<p>
+The association has as its objectives the promotion, the support for
+deployment and the development of the open-source software PostgreSQL and
+its derivatives (and related projects) in Europe.
+</p>
+
+<h2>Article 3 - Registered Office</h2>
+<p>
+The registered office of the association is at Carpeaux Diem, 13 rue du square carpeaux, 75018 Paris, France.
+</p>
+<p>
+This registered office can be transferred by simple decision of the
+Board of Directors. The decision must be ratified by the General Assembly.
+</p>
+
+<h2>Article 4 - Duration</h2>
+<p>
+The duration of the association is unlimited.
+</p>
+
+<h2>Article 5 - Members of the association</h2>
+<p>
+The association is composed of:
+<ul>
+<li>Active members;</li>
+<li>Honorary members;</li>
+<li>Benefactor members;</li>
+</ul>
+</p>
+<p>
+Any individual can be an active member of the
+association, provided he/she signs a membership application form. The Board of Directors has to approve the membership request for it to be valid.
+</p>
+<p>
+Honorary members are those who have rendered services to the
+association. They are appointed by decision of the Board of
+Directors, to be validated by the following General Assembly.
+</p>
+<p>
+Benefactor members are individuals or legal entities who pay an annual
+contribution determined by the General Assembly.
+</p>
+
+
+
+
+<h2>Article 6 - Loss of membership</h2>
+<p>
+Membership is lost by
+<ul>
+<li>sending a letter of resignation to the President;</li>
+<li>death;</li>
+<li>being excluded by decision of the Board of Directors for some serious reason, after having been given an opportunity to offer explanations to the Board.</li>
+</ul>
+</p>
+
+
+<h2>Article 7 - General Assembly</h2>
+<p>
+The supreme body of the association is the General Assembly of the
+active members, which meets in ordinary session once a year.
+Furthermore the General Assembly meets as often as necessary in extraordinary session when convened by the President of the association, at the request of the majority of the Board of Directors, or at the request of at least 25% of active members.
+</p>
+<p>
+The General Assembly can be arranged, as chosen by the Board of
+Directors, either in the form of a gathering of people or in the form
+of a remote meeting. Meetings by teleconference or Internet Relay Chat
+(IRC) are valid.
+</p>
+<p>
+The activities report, the financial report and budget, as well as any
+information relating to the agenda will be sent to members by email or otherwise at least
+7 days before the meeting.
+</p>
+<p>
+Any member of the association may place an item on the agenda; any item for the agenda must be received by the Secretary no later than 8 days before the meeting. The General Assembly deliberates on all the items on the agenda as amended.
+</p>
+<p>
+The decisions of the General Assembly shall be taken by a majority of full members participating, represented, or voting by mail. In the event of a tie, the President shall have
+a casting vote. Any active member may be represented by another active member provided he is granted his authority to act. A secret ballot is required if any member asks for it.
+</p>
+<p>
+For the General Assembly to be validly constituted a quorum of 30% of the total number of members must be present or represented. If the General Assembly is expected to deliberate on the continued existence of the association, the quorum must be 50%. In the absence of a quorum, a new General Assembly will be held after at least 7 days and within 30 days, and it will then deliberate without quorum.
+</p>
+<p>
+The General Assembly will receive the activities report and the financial report for the past year and decide on their approval. It elects the Board of Directors. It approves the budget estimation presented by the Treasurer.
+</p>
+
+
+<h2>Article 8 - Board of Directors</h2>
+<p>
+The Board of Directors ensures that the decisions taken by the General Assembly are executed.
+</p>
+<p>
+The association is managed by its Board of Directors, composed of a
+least 3 members and at most 16 members, elected by the General
+Assembly from among the active members.
+</p>
+<p>
+Members of the Board of Directors are elected for 2 years. Retiring directors are eligible for re-election.
+</p>
+<p>
+In the event of a vacancy, the Board of Directors provides for
+temporary replacement of its members by cooption. Cooptions
+have to be ratified by the next General Assembly to become
+permanent. A coopted member's mandate comes to an end at the end of the mandate of the
+member he replaces.
+</p>
+<p>
+The decisions of the Board of Directors shall be taken by a simple majority of present or represented members. In the event of a tie for any action, the President shall have
+a casting vote.
+</p>
+<p>
+The Board of Directors must approve any contract signed between the association and individuals or legal entities.
+</p>
+<p>
+Any member of the Board of Directors can be removed at any time by the General Assembly, meeting in ordinary or extraordinary session.
+A member of the Board of Directors shall be automatically removed after three unexplained absences from meetings of the Board of Directors.
+</p>
+<p>
+Any members of the association, or any outsiders, may attend meetings of the Board of Directors at their request, if the Board of Directors considers their presence is required. These persons have only an advisory capacity, and therefore do not participate in the voting.
+</p>
+<p>
+The first Board of Directors is composed of :
+<ul>
+<li>Jean-Paul ARGUDO, born January 08th, 1974 in Avignon (France), of French nationality, DBA</li>
+<li>Gabriele BARTOLINI, born April 27th, 1975 in Prato (Italy), of Italian nationality, employee</li>
+<li>Magnus Hagander, born February 19th, 1976 in Sollentuna (Sweden), of Swedish nationality, employee</li>
+<li>Andrea Scherbaum, born April 6th, 1976 in Schönebeck (Germany), of German nationality, independant worker</li>
+</ul>
+</p>
+
+
+<h2>Article 9 - Executive Committee</h2>
+<p>
+The Executive Committee is responsible for the management and administration of the association.
+</p>
+<p>
+The Board of Directors elects from among its members an Executive Committee composed of :
+<ul>
+<li>A President;</li>
+<li>A Treasurer;</li>
+<li>A Secretary.</li>
+</ul>
+</p>
+<p>
+The members of the Executive Committee are elected for a term of one year, renewable.
+</p>
+<p>
+The outgoing Executive Committee continues to carry out its duties until the election
+of a new Executive Committee.
+</p>
+<p>
+At any time the Board of Directors can be called by any of its members
+to hold an election of a new Executive Committee.
+</p>
+<p>
+The decisions of the Executive Committee are made by a simple majority. In the event of a tie for any action, the President shall have a casting vote.
+</p>
+<p>
+In the event of a vacancy on the Executive Committee, for whatever reason, the outgoing member shall be replaced at the next meeting of the Board of Directors. The end of the replacement's mandate shall be the same as that of the outgoing member.
+</p>
+<p>
+The President shall manage the association, and call and preside over the General Assemblies.
+The President directs and also calls meetings of the Board of Directors and Executive Committee.
+</p>
+<p>
+Only the President has the power to sign any document committing the association. He may grant partial delegations of authority to any member of the Executive Committee or any other person, to empower them to sign documents and manage the accounts of the association.
+</p>
+<p>
+The president represents the association in all acts of civil life, and is vested with the necessary powers. He concludes any agreement with individuals or legal persons, provided that he has the authorization of the Board of Directors. In this capacity, he signs contracts on behalf
+of the association. The president is entitled to conduct any dealings with any public body, particularly in tax matters, and to open any bank or post office account. He acts in legal matters on behalf of the
+association, with the permission of the Executive Committee, whether to make claims on behalf of the association or to defend it.
+</p>
+<p>
+In case of absence or illness, he is replaced by the Treasurer, or failing him, one of the other members of the Executive Committee.
+</p>
+<p>
+The Treasurer is responsible for keeping the association's accounts under his own control. He collects revenues and makes payments, subject to authorization by the President. He presents an annual statement of accounts to the General Assembly. In his absence, the treasurer is replaced by another member of the Board of Directors appointed by the President.
+</p>
+<p>
+The Secretary is responsible in particular for keeping the minutes of the Board of Directors meetings and to keep the register required by law. In his absence, he is replaced by a member of the Board of Directors appointed by the President.
+</p>
+<p>
+The first Executive Committee is composed of:
+<ul>
+<li>Magnus HAGANDER, President;</li>
+<li>Jean-Paul ARGUDO, Treasurer;</li>
+<li>Andreas SCHERBAUM, Secretary</li>
+</ul>
+</p>
+
+<h2>Article 10-Free mandate</h2>
+<p>
+Members of the association shall not receive any compensation for performing their duties. However they can obtain the payment of expenses incurred on behalf of the association, provided these expenses are justified and approved by the Executive Committee
+</p>
+
+<h2>Article 11 - Resources and subscriptions==
+<p>
+The resources of the association come from membership contributions, donations, grants, participation of associate members, as well as potential products of its activity.
+</p>
+
+<h2>Article 12 - Use of the logo of the Association</h2>
+<p>
+Members of the association may refer to their membership in the association, provided that they respect the association's aims and ethics.
+</p>
+
+
+<h2>Article 13 - Representation and benefits</h2>
+<p>
+Any act or service to be performed for the benefit of third parties on behalf of the association by one of its members must be authorized by the President. If an act or service on behalf of the association is paid, any monies received must be paid to the Treasurer, who is the sole person authorised to receive money for the association.
+</p>
+<p>
+The remuneration of services performed on behalf of the association must be authorised by the president, or any person authorized by him.
+</p>
+
+<h2>Article 14 - Statutes</h2>
+<p>
+No modification of or addition to these statutes shall be made except by a majority of not less than 2/3 of members voting at a meeting of the General Assembly of the association
+</p>
+
+
+
+
+
+<h2>Article 15 - Dissolution</h2>
+<p>
+The dissolution of the association may be pronounced only by an extraordinary General Assembly, called specifically for this purpose.
+</p>
+<p>
+To do this, a majority of 2/3 of the voters must be obtained. One or more liquidators will be appointed by the General Assembly, who will give the assets of the Association to one or more non-profit organizations pursuing similar goals.
+</p>
+<p>
+Brussels, Belgium, February 24th, 2008
+</p>
+{%endblock%}
diff --git a/template/pages/community.html b/template/pages/community.html
new file mode 100644
index 00000000..6dc342ce
--- /dev/null
+++ b/template/pages/community.html
@@ -0,0 +1,9 @@
+{%extends "nav_community.html"%}
+{%block title%}Community{%endblock%}
+{%block content%}
+<h1>Community</h1>
+
+<p>
+This section has not been written yet.
+</p>
+{%endblock%}
diff --git a/template/pages/donate.html b/template/pages/donate.html
new file mode 100644
index 00000000..dccb7ea2
--- /dev/null
+++ b/template/pages/donate.html
@@ -0,0 +1,9 @@
+{%extends "nav_donate.html"%}
+{%block title%}Donate{%endblock%}
+{%block content%}
+<h1>Donate</h1>
+
+<p>
+This section has not been written yet.
+</p>
+{%endblock%}
diff --git a/template/pages/events.html b/template/pages/events.html
new file mode 100644
index 00000000..280bd746
--- /dev/null
+++ b/template/pages/events.html
@@ -0,0 +1,35 @@
+{%extends "nav_events.html"%}
+{%block title%}Events{%endblock%}
+{%block content%}
+<h1>Events</h1>
+
+<p>
+PostgreSQL Europe is currently involved in organising presence
+for the following events. We also recommend you check out the
+<a href="http://www.postgresql.org/about/eventarchive">global community</a>
+list of events!
+</p>
+
+<h2>FOSDEM 2009</h2>
+<p>
+<b>Location: Brussels, Belguim</b><br/>
+<b>Date: February 2009, exact date to be determined</b>
+</p>
+<p>
+PostgreSQL Europe plans a large presence at FOSDEM 2009, with
+both a booth and a devroom. Further details will be announced
+later.
+</p>
+
+<h2>PGDay.EU 2009</h2>
+<p>
+<b>Location: Paris, France</b><br/>
+<b>Date: To be determined</b>
+</p>
+<p>
+This is the largest European PostgreSQL conference of 2009. This year,
+it will be held in cooperation with <a href="http://www.postgresqlfr.org">PostgreSQLFr</a>.
+Further details will be announced later.
+</p>
+
+{%endblock%}
diff --git a/template/pages/merchandise.html b/template/pages/merchandise.html
new file mode 100644
index 00000000..90e680b4
--- /dev/null
+++ b/template/pages/merchandise.html
@@ -0,0 +1,9 @@
+{%extends "nav_merchandise.html"%}
+{%block title%}Merchandise{%endblock%}
+{%block content%}
+<h1>Merchandise</h1>
+
+<p>
+Our merchandise store is not yet available.
+</p>
+{%endblock%}
diff --git a/template/pages/sponsors.html b/template/pages/sponsors.html
new file mode 100644
index 00000000..cebab44b
--- /dev/null
+++ b/template/pages/sponsors.html
@@ -0,0 +1,11 @@
+{%extends "nav_sponsors.html"%}
+{%block title%}Sponsors{%endblock%}
+{%block content%}
+<h1>Sponsors</h1>
+
+<p>
+This section has not been written yet. The idea is that sponsors are companies
+making donations, maybe require regular? Certainly require more than what
+those under Donate do.
+</p>
+{%endblock%}