merge of '121808a5ac9448d6bd4f2caec2eaa1231f698c6e'

and '7b23527da8ebc68e389aecd5d696957a0c56b2b7'
This commit is contained in:
zzz
2015-06-01 23:36:53 +00:00
10 changed files with 1028 additions and 924 deletions

View File

@ -43,6 +43,11 @@ with this suffix will be visible at their post URL, but will not be shown in
the blog index. To publish the draft post, change the filename to remove the
'.draft' suffix.
Creating shortlinks
-------------------
See the comments in shortlinks.py.
How to make a release notice
----------------------------

View File

@ -0,0 +1,12 @@
############
# Shortlinks
#
# To create the URL https://geti2p.net/b/<shortlink>
# linking to https://geti2p.net/en/blog/post/<slug>,
# add a new line below containing
#
# '<shortlink>': '<slug>',
BLOG_SHORTLINKS = {
'toronto': '2015/05/25/Toronto-Meetup',
}

View File

@ -1,8 +1,9 @@
from flask import abort, render_template, request
from flask import abort, g, redirect, render_template, request, url_for
from werkzeug.contrib.atom import AtomFeed
from i2p2www import BLOG_DIR, BLOG_POSTS_PER_FEED, BLOG_POSTS_PER_PAGE, cache
from i2p2www.blog.helpers import get_blog_posts, get_blog_feed_items, get_date_from_slug, get_metadata_from_meta, render_blog_post
from i2p2www.blog.shortlinks import BLOG_SHORTLINKS
from i2p2www.helpers import Pagination, get_for_page
@ -38,6 +39,19 @@ def blog_post(slug):
else:
abort(404)
@cache.memoize(600)
def blog_post_shortlink(shortlink):
lang = 'en'
if hasattr(g, 'lang') and g.lang:
lang = g.lang
try:
slug = BLOG_SHORTLINKS[shortlink]
except KeyError:
abort(404)
return redirect(url_for('blog_post', lang=lang, slug=slug))
def blog_rss():
# TODO: implement
pass

View File

@ -5,6 +5,7 @@
{%- else -%}{{ url_for('blog_index', lang=lang) }}
{%- endif -%}
{%- elif request.endpoint == 'blog_post' -%}{{ url_for('blog_post', lang=lang, slug=slug) }}
{%- elif request.endpoint == 'blog_post_shortlink' -%}{{ url_for('blog_post_shortlink', lang=lang, shortlink=shortlink) }}
{%- elif request.endpoint == 'meetings_show' -%}{{ url_for('meetings_show', lang=lang, id=id) }}
{%- elif request.endpoint == 'downloads_debian' -%}{{ url_for('downloads_debian', lang=lang) }}
{%- elif request.endpoint == 'downloads_select' -%}{{ url_for('downloads_select', lang=lang, version=version, file=file) }}

View File

@ -1,424 +1,440 @@
@import url('reset.css');
body {
font-family: Droid Sans, Helvetica, sans-serif;
font-size: 10px;
background-color: #ffffdd;
min-height:800px;
width:100%;
background:-moz-radial-gradient(50% 30% , circle , #fffff9, #ffffcc) no-repeat scroll 0 0 #ffffcc;
background:-webkit-radial-gradient(50% 30% , circle , #fffff9, #ffffcc) no-repeat scroll 0 0 #ffffcc;
}
a {
color:#d00e0e;
text-decoration:none;
}
a:hover {
color:#f00e0e;
}
div.hide {
display:none;
}
div#topbar {
width:80%;
/*margin:1em auto;*/
margin: 1em auto;
position:relative;
}
div#topbar #logo {
float: left;
}
div#topbar #logo img:hover {
filter:alpha(opacity=60);
-moz-opacity: 0.6;
opacity: 0.6;
}
nav {
clear: both;
}
div#content {
display:block;
}
/**
* The .main class is for content wrapper on the home page (with the big banner)
*/
div#content .main {
background:url('../../images/dots.png') 0 10% no-repeat rgba(171, 204, 113, 0.6);
background-size:100% auto;
width:auto;
padding:4em 10% 4em 10%;
position:relative;
margin:0 auto;
text-shadow:1px 1px 1px rgba(255,255,255,.5);
font-size:1.6em;
line-height:1.5em;
border:2px solid #abcc71;
border-left:none;
border-right:none;
box-shadow:0px 2px 8px rgba(0,0,0,.2)
}
div#content .main h1 {
font-family:"URW Gothic L", "Century Gothic", sans-serif;
font-size:2.5em;
text-shadow:1px 1px 2px rgba(0,0,0,.3);
color:white;
margin-bottom:.5em;
}
.main .get-i2p {
display:block;
top:50%;
padding:.5em;
line-height:1em;
font-size:2em;
color:white;
font-family:Arial, Helvetica, sans-serif;
font-weight:bold;
text-transform:uppercase;
text-decoration:none;
text-align:center;
background:green;
border-radius:.3em;
text-shadow:1px 1px 1px rgba(0,0,0,.2);
box-shadow:2px 2px 4px rgba(0, 0, 0, 0.3), 1em 3em 2em 0.5em rgba(255, 255, 255, 0.3) inset, inset -.2em -.5em 1em -0em rgba(0,0,0,.3)
}
div#content .aside-wrap {
width:80%;
margin:2em auto;
}
div#content .aside {
position:relative;
display:inline-block;
vertical-align:top;
font-size:1.2em
}
div#content .aside a {
font-weight:bold;
}
div#content .aside h1 {
padding:1em 0;
border-bottom:1px solid rgba(171, 204, 113, 0.6);
font-size:1.4em;
color:#222200;
text-shadow:1px 1px 1px rgba(0,0,0,.3)
}
div#content .aside p {
margin:1em 0;
}
div#content .aside ul {
margin:1em 0;
}
div#content .aside ul li {
list-style-type:none;
margin:1em 0;
line-height:1.3em;
}
div#content .feed-icon {
background-image: url('../../images/feed-icon-28x28.png');
display: block;
float: right;
height: 28px;
margin: 1em;
text-indent: -9999px;
width: 28px;
}
div#content .lastupdated {
background-color: #ffffdd;
border-radius: 0 0 5px 5px;
padding: 2px 4px;
position: relative;
left: 8%;
text-align: right;
width: 80%;
}
/**
* The .inner class is for the content wrapper on inner pages (as opposed to the home page)
*/
div#content .inner {
width:auto;
margin: 0 5%;
padding: 0 5% 0.1em;
position:relative;
background: rgba(171, 204, 113, 0.6);
border-top:2px solid #abcc71;
border-left: 2px solid #abcc71;
border-right: 2px solid #abcc71;
border-radius: 5px 5px 0 0;
color:black;
font-size:1.2em;
line-height:1.4em;
}
div#content .inner h1, div#content .inner h2, div#content .inner h3, div#content .inner h4 {
color:white;
text-shadow:1px 1px 1px rgba(0,0,0,.3);
margin:1em 0 .5em;
padding-bottom:.2em;
clear:both;
line-height: 110%;
}
div#content .inner h2, div#content .inner h3, div#content .inner h4 {
border-bottom:1px solid white;
}
div#content .inner h1 {
font-size:2.2em;
margin:1em 0 0.5em;
text-align: center;
width:auto;
}
div#content .inner h2 {
font-size:1.6em;
}
div#content .inner h3 {
font-size:1.4em;
}
div#content .inner h4 {
font-size:1.2em;
font-style: italic;
}
div#content .inner ol {
margin:1.5em;
}
div#content .inner ul {
margin:1.5em; 1em;
}
div#content .inner p {
margin:1em 0;
}
div#content .inner th {
padding:2px 5px;
}
div#content .inner td {
border: 1px solid;
padding:2px 5px;
}
div#content .inner td.blue {
border: 2px solid blue;
color: blue;
}
/*
* Download page
*/
.package {
border: 6px solid rgba(171, 204, 113, 0.7);
border-radius: 5px;
margin: 10px;
padding: 10px;
}
.os {
color: white;
font-size: 1.6em;
font-weight: bold;
text-align: center;
text-decoration: underline;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
}
.file {
margin-bottom: 10px;
}
.file > a, .filedownload {
padding: 5px;
background-color: rgba(255,255,255,0.2);
box-shadow: -1px -1px 1px 1px rgb(51, 51, 51) inset;
text-align: center;
}
.file .default {
border-radius: 5px 5px 0 0;
display: block;
overflow: hidden;
padding: 10px;
}
.file .default .name {
font-size: 1.6em;
}
.file .mirrors, .file .sig {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
display: inline-block;
width: 50%;
}
.file .mirrors {
border-radius: 0 0 0 5px;
}
.file .sig {
border-radius: 0 0 5px 0;
vertical-align: top;
}
.details .hash:before {
content: 'SHA256: ';
}
.warning {
background-color: rgba(171, 204, 113, 0.7);
border: 1px dashed rgb(208, 14, 14);
border-radius: 5px;
margin: 5px;
padding: 5px;
}
.filedownload {
border-radius: 5px;
text-align: center;
}
/*
* Threat model
*/
div#content .inner ul.DREAD {
border: 2px solid red;
float: left;
list-style: none;
margin: 1em 1.5em 1em 0;
padding: 0.5em;
}
/*
* Additions to syntax.css
*/
.highlight {
overflow: auto;
}
/*
* Blog
*/
#posts {
list-style: none;
margin: 1.5em 0 !important;
}
#posts article {
border: 2px solid #d00e0e;
border-radius: 5px;
margin: 10px 0;
padding: 10px;
}
#posts header {
font-size: 1.6em;
}
#posts header:before {
content: "»";
}
#posts footer {
font-style: italic;
}
#post-info {
list-style: none;
margin: 0 !important;
}
.system-messages {
background-color: rgba(171, 204, 113, 0.7);
border: 1px dashed rgb(208, 14, 14);
border-radius: 5px;
margin: 5px;
padding: 5px;
}
.system-messages > h1 {
font-size: 1.2em !important;
text-align: left !important;
}
/*
* Footer
*/
#global-footer {
width:auto;
border-top:3px
solid #883333;
background:#552222;
box-shadow:0px -4px 8px rgba(0,0,0,.3);
padding:1em 10%;
background:-moz-linear-gradient(#883333, #772222);
}
#global-footer .aside {
display:inline-block;
vertical-align:top;
}
#global-footer .aside h1 {
color:#ffdd88;
font-size:1.2em;
text-shadow:-1px -1px 1px rgba(0,0,0,.2);
border-bottom:1px solid #ccaa66;
margin:1em 0;
line-height:1.3em;
}
#global-footer .aside ul {
margin:0;
padding:0;
}
#global-footer .aside ul li {
color:#ffdd88;
list-style-type:none;
line-height:1.5em;
}
#global-footer .aside ul li a {
color:#ccaa66;
font-weight:bold;
}
#global-footer .aside ul li a:hover {
text-decoration:underline;
}
#global-footer a.button {
padding:.5em 2em;
background-color:#cc2222;
border:1px solid #bb2222;
border-radius:3px;
display:inline-block;
color:white;
margin:1em auto;
text-align:center;
width:auto;
font-weight:bold;
}
@import url('reset.css');
body {
font-family: Droid Sans, Helvetica, sans-serif;
font-size: 10px;
background-color: #ffffdd;
min-height: 800px;
width: 100%;
background: -moz-radial-gradient(50% 30% , circle , #fffff9, #ffffcc) no-repeat scroll 0 0 #ffffcc;
background: -webkit-radial-gradient(50% 30% , circle , #fffff9, #ffffcc) no-repeat scroll 0 0 #ffffcc;
}
a {
color: #d00e0e;
text-decoration: none;
}
a:hover {
color: #f00e0e
}
div.hide {
display: none
}
div#topbar {
width: 80%;
/*margin: 1em auto;*/
margin: 1em auto;
position: relative;
}
div#topbar #logo {
float: left
}
div#topbar #logo img:hover {
filter: alpha(opacity=60);
-moz-opacity: 0.6;
opacity: 0.6;
}
nav {
clear: both
}
div#content {
display: block
}
/**
* The .main class is for content wrapper on the home page (with the big banner)
*/
div#content .main {
background: url('../../images/dots.png') 0 10% no-repeat rgba(171, 204, 113, 0.6);
background-size: 100% auto;
width: auto;
padding: 4em 10% 4em 10%;
position: relative;
margin: 0 auto;
text-shadow: 1px 1px 1px rgba(255,255,255,.5);
font-size: 1.6em;
line-height: 1.5em;
border: 2px solid #abcc71;
border-left: none;
border-right: none;
box-shadow: 0px 2px 8px rgba(0,0,0,.2);
}
div#content .main h1 {
font-family: "URW Gothic L", "Century Gothic", sans-serif;
font-size: 2.5em;
text-shadow: 1px 1px 2px rgba(0,0,0,.3);
color: white;
margin-bottom: .5em;
}
.main .get-i2p {
display: block;
top: 50%;
padding: .5em;
line-height: 1em;
font-size: 2em;
color: white;
font-family: Arial, Helvetica, sans-serif;
font-weight: bold;
text-transform: uppercase;
text-decoration: none;
text-align: center;
background: green;
border-radius: .3em;
text-shadow: 1px 1px 1px rgba(0,0,0,.2);
box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3), 1em 3em 2em 0.5em rgba(255, 255, 255, 0.3) inset, inset -.2em -.5em 1em -0em rgba(0,0,0,.3);
}
div#content .aside-wrap {
width: 80%;
margin: 2em auto;
}
div#content .aside {
position: relative;
display: inline-block;
vertical-align: top;
font-size: 1.2em;
}
div#content .aside a {
font-weight: bold
}
div#content .aside h1 {
padding: 1em 0;
border-bottom: 1px solid rgba(171, 204, 113, 0.6);
font-size: 1.4em;
color: #222200;
text-shadow: 1px 1px 1px rgba(0,0,0,.3);
}
div#content .aside p {
margin: 1em 0
}
div#content .aside ul {
margin: 1em 0
}
div#content .aside ul li {
list-style-type: none;
margin: 1em 0;
line-height: 1.3em;
}
div#content .feed-icon {
background-image: url('../../images/feed-icon-28x28.png');
display: block;
float: right;
height: 28px;
margin: 1em;
text-indent: -9999px;
width: 28px;
}
div#content .lastupdated {
background-color: #ffffdd;
border-radius: 0 0 5px 5px;
padding: 2px 4px;
position: relative;
left: 8%;
text-align: right;
width: 80%;
}
/**
* The .inner class is for the content wrapper on inner pages (as opposed to the home page)
*/
div#content .inner {
width: auto;
margin: 0 5%;
padding: 0 5% 0.1em;
position: relative;
background: rgba(171, 204, 113, 0.6);
border-top: 2px solid #abcc71;
border-left: 2px solid #abcc71;
border-right: 2px solid #abcc71;
border-radius: 5px 5px 0 0;
color: black;
font-size: 1.2em;
line-height: 1.4em;
}
div#content .inner h1,
div#content .inner h2,
div#content .inner h3,
div#content .inner h4 {
color: white;
text-shadow: 1px 1px 1px rgba(0,0,0,.3);
margin: 1em 0 .5em;
padding-bottom: .2em;
clear: both;
line-height: 110%;
}
div#content .inner h2,
div#content .inner h3,
div#content .inner h4 {
border-bottom: 1px solid white
}
div#content .inner h1 {
font-size: 2.2em;
margin: 1em 0 0.5em;
text-align: center;
width: auto;
}
div#content .inner h2 {
font-size: 1.6em
}
div#content .inner h3 {
font-size: 1.4em
}
div#content .inner h4 {
font-size: 1.2em;
font-style: italic;
}
div#content .inner ol {
margin: 1.5em
}
div#content .inner ul {
margin: 1.5em 1em;
}
div#content .inner p {
margin: 1em 0
}
div#content .inner th {
padding: 2px 5px
}
div#content .inner td {
border: 1px solid;
padding: 2px 5px;
}
div#content .inner td.blue {
border: 2px solid blue;
color: blue;
}
/*
* Download page
*/
.package {
border: 6px solid rgba(171, 204, 113, 0.7);
border-radius: 5px;
margin: 10px;
padding: 10px;
}
.os {
color: white;
font-size: 1.6em;
font-weight: bold;
text-align: center;
text-decoration: underline;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
}
.file {
margin-bottom: 10px
}
.file > a,
.filedownload {
padding: 5px;
background-color: rgba(255,255,255,0.2);
box-shadow: -1px -1px 1px 1px rgb(51, 51, 51) inset;
text-align: center;
}
.file .default {
border-radius: 5px 5px 0 0;
display: block;
overflow: hidden;
padding: 10px;
}
.file .default .name {
font-size: 1.6em
}
.file .mirrors,
.file .sig {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
display: inline-block;
width: 50%;
}
.file .mirrors {
border-radius: 0 0 0 5px
}
.file .sig {
border-radius: 0 0 5px 0;
vertical-align: top;
}
.details .hash:before {
content: 'SHA256: '
}
.warning {
background-color: rgba(171, 204, 113, 0.7);
border: 1px dashed rgb(208, 14, 14);
border-radius: 5px;
margin: 5px;
padding: 5px;
}
.filedownload {
border-radius: 5px;
text-align: center;
}
/*
* Threat model
*/
div#content .inner ul.DREAD {
border: 2px solid red;
float: left;
list-style: none;
margin: 1em 1.5em 1em 0;
padding: 0.5em;
}
/*
* Additions to syntax.css
*/
.highlight {
overflow: auto
}
/*
* Blog
*/
#posts {
list-style: none;
margin: 1.5em 0 !important;
}
#posts article {
border: 2px solid #d00e0e;
border-radius: 5px;
margin: 10px 0;
padding: 10px;
}
#posts header {
font-size: 1.6em
}
#posts header:before {
content: "»"
}
#posts footer {
font-style: italic
}
#post-info {
list-style: none;
margin: 0 !important;
}
.system-messages {
background-color: rgba(171, 204, 113, 0.7);
border: 1px dashed rgb(208, 14, 14);
border-radius: 5px;
margin: 5px;
padding: 5px;
}
.system-messages > h1 {
font-size: 1.2em !important;
text-align: left !important;
}
/*
* Footer
*/
#global-footer {
width: auto;
border-top: 3px solid #883333;
background: #552222;
box-shadow: 0px -4px 8px rgba(0,0,0,.3);
padding: 1em 10%;
background: -moz-linear-gradient(#883333, #772222);
}
#global-footer .aside {
display: inline-block;
vertical-align: top;
}
#global-footer .aside h1 {
color: #ffdd88;
font-size: 1.2em;
text-shadow: -1px -1px 1px rgba(0,0,0,.2);
border-bottom: 1px solid #ccaa66;
margin: 1em 0;
line-height: 1.3em;
}
#global-footer .aside ul {
margin: 0;
padding: 0;
}
#global-footer .aside ul li {
color: #ffdd88;
list-style-type: none;
line-height: 1.5em;
}
#global-footer .aside ul li a {
color: #ccaa66;
font-weight: bold;
}
#global-footer .aside ul li a:hover {
text-decoration: underline
}
#global-footer a.button {
padding: .5em 2em;
background-color: #cc2222;
border: 1px solid #bb2222;
border-radius: 3px;
display: inline-block;
color: white;
margin: 1em auto;
text-align: center;
width: auto;
font-weight: bold;
}

View File

@ -1,9 +1,11 @@
/** Topbar **/
div#topbar #logo {
float: right;
}
/** Frontpage **/
div#content .feed-icon {
float: left;
}
/** Topbar **/
div#topbar #logo {
float: right
}
/** Frontpage **/
div#content .feed-icon {
float: left
}

View File

@ -1,290 +1,326 @@
body {
font-family:Droid Sans, Helvetica, sans-serif; font-size:10px;
background-color:#ffffdd;
min-height:800px; width:100%; padding-top:1em;
background:-moz-radial-gradient(50% 30% , circle , #fffff9, #ffffcc) no-repeat scroll 0 0 #ffffcc;
background:-webkit-radial-gradient(50% 30% , circle , #fffff9, #ffffcc) no-repeat scroll 0 0 #ffffcc;
}
a {color:#d00e0e; text-decoration:none;}
a:hover {color:#f00e0e;}
div.hide {display:none;}
div#topbar {width:80%; /*margin:1em auto;*/ margin: 1em auto 0; position:relative;}
div#topbar #logo img:hover {
filter:alpha(opacity=60);
-moz-opacity: 0.6;
opacity: 0.6;
}
div#topbar .title {
font-family:"URW Gothic L", "Century Gothic", sans-serif; text-transform:uppercase; font-size:3.5em;
font-weight:bold; text-shadow:1px 1px 1px rgba(0,0,0,.2); color:#333333;
/*position:absolute;*/ top:0; right:0; line-height:41px; vertical-align:middle;
/*max-width: 70%;*/ text-align: right;
}
div#topbar .languages {
display: none;
}
div.navigation {position:relative;}
ul.languages {margin: 0 2px !important;}
ul.languages li {display:inline-block; *display:inline; *zoom:1; margin: 0 -2px !important;}
.langname {
background: green;
display: none;
padding: 0.5em;
position: absolute;
right: 0;
text-align: center;
top: 4em;
z-index: 1;
}
/* Dropdown menu CSS */
menu ul,
#cssmenu li,
#cssmenu span,
#cssmenu div.menuitem {
margin: 0;
padding: 0;
position: relative;
}
#cssmenu {
height: 40px;
}
#cssmenu:after,
#cssmenu ul:after {
content: '';
display: block;
clear: both;
}
#cssmenu div.menuitem {
color: #d00e0e;
display: inline-block;
font-family: "URW Gothic L", "Century Gothic", sans-serif;
font-size: 2em;
font-weight: bold;
text-shadow: 1px 1px 1px rgba(100,20,20,.2);
line-height: 40px;
padding: 0 10px;
text-decoration: none;
}
#cssmenu ul {
list-style: none;
}
#cssmenu > ul {
float: left;
padding: 0 10%;
}
#cssmenu > ul > li {
float: left;
}
#cssmenu > ul > li.right {
position: absolute;
right: 10%;
}
#cssmenu > ul > li:hover:after {
content: '';
display: block;
width: 0;
height: 0;
position: absolute;
left: 50%;
bottom: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-bottom: 10px solid #abcc71;
margin-left: -10px;
}
#cssmenu > ul > li > div.menuitem {
border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-radius: 5px 5px 0 0;
}
#cssmenu > ul > li.active > div.menuitem {
box-shadow: inset 0 0 3px #000000;
-moz-box-shadow: inset 0 0 3px #000000;
-webkit-box-shadow: inset 0 0 3px #000000;
background: #070707;
background: -moz-linear-gradient(top, #26262c 0%, #070707 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #26262c), color-stop(100%, #070707));
background: -webkit-linear-gradient(top, #26262c 0%, #070707 100%);
background: -o-linear-gradient(top, #26262c 0%, #070707 100%);
background: -ms-linear-gradient(top, #26262c 0%, #070707 100%);
background: linear-gradient(to bottom, #26262c 0%, #070707 100%);
filter: progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#26262c', EndColorStr='#070707', GradientType=0);
}
#cssmenu .has-sub {
z-index: 1;
}
#cssmenu .has-sub:hover > ul {
display: block;
}
#cssmenu .has-sub ul {
display: none;
position: absolute;
width: 200px;
top: 100%;
left: 0;
}
#cssmenu .has-sub ul li {
border-left: 1px solid #ffffcc;
}
#cssmenu .has-sub ul li.has-sub > div.menuitem:after {
content: "►";
color: rgba(255,255,255,.5);
float: right;
}
#cssmenu .has-sub ul li div.menuitem {
background: #abcc71;
border-bottom: 1px dotted #ffffcc;
color: #ffffff;
font-size: 9pt;
display: block;
line-height: 120%;
padding: 10px;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
}
#cssmenu .has-sub ul li div.menuitem:hover .langname {
display: block;
}
#cssmenu .has-sub ul li:hover > div.menuitem,
#cssmenu .has-sub ul li:hover > a > div.menuitem {
background: #8bbc51;
}
#cssmenu .has-sub .has-sub:hover > ul {
display: block;
}
#cssmenu .has-sub .has-sub ul {
display: none;
position: absolute;
left: 100%;
top: 0;
}
#cssmenu .has-sub .has-sub ul li:first-child {
border-left: none;
}
/* End of dropdown menu CSS */
div#content {display:block;}
/**
* The .main class is for content wrapper on the home page (with the big banner)
*/
div#content .main {
background:url('../../images/dots.png') 0 10% no-repeat rgba(171, 204, 113, 0.6); background-size:100% auto; width:auto; padding:4em 35% 4em 10%; position:relative;
margin:0 auto; text-shadow:1px 1px 1px rgba(255,255,255,.5); font-size:1.6em; line-height:1.5em;
border:2px solid #abcc71; border-left:none; border-right:none; box-shadow:0px 2px 8px rgba(0,0,0,.2)}
div#content .main h1 {font-family:"URW Gothic L", "Century Gothic", sans-serif; font-size:2.5em;
text-shadow:1px 1px 2px rgba(0,0,0,.3); color:white; margin-bottom:.5em;}
.main .get-i2p {
position:absolute; display:block; top:50%; right: 10%;
margin-top:-1em; max-width:20%; padding:.5em; line-height:1em;
font-size:2em; color:white; font-family:Arial, Helvetica, sans-serif; font-weight:bold;
text-transform:uppercase; text-decoration:none; text-align:center;
background:green; border-radius:.3em; -moz-transform:rotate(-5deg);
transform:rotate(-5deg); -webkit-transform:rotate(-5deg);
-ms-transform:rotate(-5deg); -o-transform:rotate(-5deg);
text-shadow:1px 1px 1px rgba(0,0,0,.2);
box-shadow:2px 2px 4px rgba(0, 0, 0, 0.3), 1em 3em 2em 0.5em rgba(255, 255, 255, 0.3) inset, inset -.2em -.5em 1em -0em rgba(0,0,0,.3)}
.main .get-i2p:hover {box-shadow:2px 2px 2px rgba(0, 0, 0, 0.3), inset 0 -2.2em 2.2em rgba(255, 255, 255, 0.3), inset .2em .5em 1em 0em rgba(0,0,0,.3);}
div#content .aside-wrap {width:80%; margin:2em auto;}
div#content .aside {position:relative; width:30.9%; margin-left:3%; display:inline-block; vertical-align:top; font-size:1.3em}
div#content .aside:first-child {margin-left:0%;}
div#content .aside a {font-weight:bold;}
div#content .aside h1 {padding:1em 0; border-bottom:1px solid rgba(171, 204, 113, 0.6); font-size:1.4em; color:#222200; text-shadow:1px 1px 1px rgba(0,0,0,.3)}
div#content .aside p {margin:1em 0;}
div#content .aside ul {margin:1em 0;}
div#content .aside ul li {list-style-type:none; margin:1em 0; line-height:1.3em;}
div#content .feed-icon {
background-image: url('../../images/feed-icon-28x28.png');
display: block;
float: right;
height: 28px;
margin: 1em;
text-indent: -9999px;
width: 28px;
}
div#content .lastupdated {
left: auto;
position: absolute;
right: 10%;
text-align: right;
top: 0;
width: 200px;
}
/**
* The .inner class is for the content wrapper on inner pages (as opposed to the home page)
*/
div#content .inner {
width:auto; margin: 0 5%; padding: 4em 5% 2em; position:relative;
background: rgba(171, 204, 113, 0.6); border-top:2px solid #abcc71;
border-left: 2px solid #abcc71; border-right: 2px solid #abcc71; border-radius: 5px 5px 0 0;
color:black; font-size:1.3em; line-height:1.4em;
}
div#content .inner > .title {
display: none;
}
div#content .inner ol {margin:1.5em;}
div#content .inner ul {margin:1.5em; 1em;}
div#content .inner p {margin:1em 0;}
div#content .inner td {padding:2px 5px;}
/* CSS for downloads list */
.package {
overflow: hidden;
}
.package .os {
float: left;
width: 20%;
}
.package .details {
float: right;
width: 80%;
}
.file {
float: left;
width: 40%;
}
.file > a:hover {
box-shadow: 1px 1px 1px 1px rgb(51, 51, 51) inset;
}
.details .hash {
float: right;
overflow: auto;
width: 50%;
}
.details > p, .details > ol {
clear: both;
}
.filedownload {
margin-left: 29%;
}
/* End of downloads list CSS */
.biblinks {
left: auto;
position: absolute;
right: 10%;
top: 0;
}
#global-footer {width:auto; border-top:3px solid #883333; background:#552222; box-shadow:0px -4px 8px rgba(0,0,0,.3); padding:1em 10%; background:-moz-linear-gradient(#883333, #772222);}
#global-footer .aside {display:inline-block; width:15%; margin-left:1%; vertical-align:top;}
#global-footer .aside.first {margin-left:0;}
#global-footer .aside.third, div##global-footer .aside.fifth {margin-left:2.5%}
#global-footer .aside h1 {color:#ffdd88; font-size:1.2em; text-shadow:-1px -1px 1px rgba(0,0,0,.2); border-bottom:1px solid #ccaa66; margin:1em 0; line-height:1.3em;}
#global-footer .aside ul {margin:0; padding:0;}
#global-footer .aside ul li {list-style-type:none; line-height:1.5em;}
#global-footer .aside ul li a {color:#ccaa66; font-weight:bold;}
#global-footer .aside ul li a:hover {text-decoration:underline;}
#global-footer a.button {padding:.5em 2em; background-color:#cc2222; border:1px solid #bb2222; border-radius:3px; display:inline-block; color:white; margin:1em auto; text-align:center; width:auto; font-weight:bold;}
body {
padding-top: 1em;
}
div#topbar {
margin: 1em auto 0;
}
div#topbar #logo img:hover {
filter: alpha(opacity=60);
-moz-opacity: 0.6;
opacity: 0.6;
}
div#topbar .title {
font-family: "URW Gothic L", "Century Gothic", sans-serif;
text-transform: uppercase;
font-size: 3.5em;
font-weight: bold;
text-shadow: 1px 1px 1px rgba(0,0,0,.2);
color: #333333;
/*position: absolute;*/
top:0;
right:0;
line-height:41px;
vertical-align:middle;
/*max-width: 70%;*/
text-align: right;
}
div#topbar .languages {
display: none
}
div.navigation {
position: relative
}
ul.languages {
margin: 0 2px !important
}
ul.languages li {
display: inline-block;
*display: inline;
*zoom: 1;
margin: 0 -2px !important;
}
.langname {
background: green;
display: none;
padding: 0.5em;
position: absolute;
right: 0;
text-align: center;
top: 4em;
z-index: 1;
}
/* Dropdown menu CSS */
menu ul,
#cssmenu li,
#cssmenu span,
#cssmenu div.menuitem {
margin: 0;
padding: 0;
position: relative;
}
#cssmenu {
height: 40px
}
#cssmenu:after,
#cssmenu ul:after {
content: '';
display: block;
clear: both;
}
#cssmenu div.menuitem {
color: #d00e0e;
display: inline-block;
font-family: "URW Gothic L", "Century Gothic", sans-serif;
font-size: 2em;
font-weight: bold;
text-shadow: 1px 1px 1px rgba(100,20,20,.2);
line-height: 40px;
padding: 0 10px;
text-decoration: none;
}
#cssmenu ul {
list-style: none
}
#cssmenu > ul {
float: left;
padding: 0 10%;
}
#cssmenu > ul > li {
float: left
}
#cssmenu > ul > li.right {
position: absolute;
right: 10%;
}
#cssmenu > ul > li:hover:after {
content: '';
display: block;
width: 0;
height: 0;
position: absolute;
left: 50%;
bottom: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-bottom: 10px solid #abcc71;
margin-left: -10px;
}
#cssmenu > ul > li > div.menuitem {
border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-border-radius: 5px 5px 0 0;
}
#cssmenu > ul > li.active > div.menuitem {
box-shadow: inset 0 0 3px #000000;
-moz-box-shadow: inset 0 0 3px #000000;
-webkit-box-shadow: inset 0 0 3px #000000;
background: #070707;
background: -moz-linear-gradient(top, #26262c 0%, #070707 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #26262c), color-stop(100%, #070707));
background: -webkit-linear-gradient(top, #26262c 0%, #070707 100%);
background: -o-linear-gradient(top, #26262c 0%, #070707 100%);
background: -ms-linear-gradient(top, #26262c 0%, #070707 100%);
background: linear-gradient(to bottom, #26262c 0%, #070707 100%);
filter: progid:DXImageTransform.Microsoft.Gradient(StartColorStr='#26262c', EndColorStr='#070707', GradientType=0);
}
#cssmenu .has-sub {
z-index: 1
}
#cssmenu .has-sub:hover > ul {
display: block
}
#cssmenu .has-sub ul {
display: none;
position: absolute;
width: 200px;
top: 100%;
left: 0;
}
#cssmenu .has-sub ul li {
border-left: 1px solid #ffffcc
}
#cssmenu .has-sub ul li.has-sub > div.menuitem:after {
content: "►";
color: rgba(255,255,255,.5);
float: right;
}
#cssmenu .has-sub ul li div.menuitem {
background: #abcc71;
border-bottom: 1px dotted #ffffcc;
color: #ffffff;
font-size: 9pt;
display: block;
line-height: 120%;
padding: 10px;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
}
#cssmenu .has-sub ul li div.menuitem:hover .langname {
display: block
}
#cssmenu .has-sub ul li:hover > div.menuitem,
#cssmenu .has-sub ul li:hover > a > div.menuitem {
background: #8bbc51
}
#cssmenu .has-sub .has-sub:hover > ul {
display: block
}
#cssmenu .has-sub .has-sub ul {
display: none;
position: absolute;
left: 100%;
top: 0;
}
#cssmenu .has-sub .has-sub ul li:first-child {
border-left: none
}
/* End of dropdown menu CSS */
/**
* The .main class is for content wrapper on the home page (with the big banner)
*/
div#content .main {
padding: 4em 35% 4em 10%;
}
.main .get-i2p {
position: absolute;
right: 10%;
margin-top: -1em;
max-width: 20%;
-moz-transform: rotate(-5deg);
transform: rotate(-5deg);
-webkit-transform: rotate(-5deg);
-ms-transform: rotate(-5deg);
-o-transform: rotate(-5deg);
}
.main .get-i2p:hover {
box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.3), inset 0 -2.2em 2.2em rgba(255, 255, 255, 0.3), inset .2em .5em 1em 0em rgba(0,0,0,.3)
}
div#content .aside {
width: 30.9%;
margin-left: 3%;
font-size: 1.3em;
}
div#content .aside:first-child {
margin-left: 0%
}
div#content .lastupdated {
left: auto;
position: absolute;
right: 10%;
top: 0;
width: 200px;
}
/**
* The .inner class is for the content wrapper on inner pages (as opposed to the home page)
*/
div#content .inner {
padding: 4em 5% 2em;
font-size: 1.3em;
}
div#content .inner > .title {
display: none
}
/* CSS for downloads list */
.package {
overflow: hidden
}
.package .os {
float: left;
width: 20%;
}
.package .details {
float: right;
width: 80%;
}
.file {
float: left;
width: 40%;
}
.file > a:hover {
box-shadow: 1px 1px 1px 1px rgb(51, 51, 51) inset
}
.details .hash {
float: right;
overflow: auto;
width: 50%;
}
.details > p,
.details > ol {
clear: both
}
.filedownload {
margin-left: 29%
}
/* End of downloads list CSS */
.biblinks {
left: auto;
position: absolute;
right: 10%;
top: 0;
}
#global-footer .aside {
width: 15%;
margin-left: 1%;
}
#global-footer .aside.first {
margin-left: 0
}
#global-footer .aside.third,
div##global-footer .aside.fifth {
margin-left: 2.5%
}

View File

@ -1,61 +1,76 @@
/** Topbar **/
div#topbar .title {
text-align: left;
}
/** Dropdown menu **/
#cssmenu > ul, #cssmenu > ul > li {
float: right;
}
#cssmenu > ul > li.right {
left: 10%;
right: auto;
}
#cssmenu .has-sub ul {
left: auto;
right: 0;
}
#cssmenu .has-sub ul li {
border-left: 0 none;
border-right: 1px solid #ffffcc;
}
#cssmenu .has-sub ul li.has-sub > div.menuitem:after {
content: "◄";
float: left;
}
#cssmenu .has-sub .has-sub ul {
left: auto;
right: 100%;
}
#cssmenu .has-sub .has-sub ul li:first-child {
border-right: none;
}
/** Frontpage **/
div#content .main {
padding-left: 35%;
padding-right: 10%;
}
.main .get-i2p {
left: 10%;
right: auto;
transform:rotate(5deg);
-moz-transform:rotate(5deg);
-webkit-transform:rotate(5deg);
-ms-transform:rotate(5deg);
-o-transform:rotate(5deg);
}
/** Downloads list **/
.package .os {
float: right;
}
.package .details {
float: left;
}
.file {
float: right;
}
.details .hash {
float: left;
}
/** Topbar **/
div#topbar .title {
text-align: left
}
/** Dropdown menu **/
#cssmenu > ul,
#cssmenu > ul > li {
float: right
}
#cssmenu > ul > li.right {
left: 10%;
right: auto;
}
#cssmenu .has-sub ul {
left: auto;
right: 0;
}
#cssmenu .has-sub ul li {
border-left: 0 none;
border-right: 1px solid #ffffcc;
}
#cssmenu .has-sub ul li.has-sub > div.menuitem:after {
content: "◄";
float: left;
}
#cssmenu .has-sub .has-sub ul {
left: auto;
right: 100%;
}
#cssmenu .has-sub .has-sub ul li:first-child {
border-right: none
}
/** Frontpage **/
div#content .main {
padding-left: 35%;
padding-right: 10%;
}
.main .get-i2p {
left: 10%;
right: auto;
transform: rotate(5deg);
-moz-transform: rotate(5deg);
-webkit-transform: rotate(5deg);
-ms-transform: rotate(5deg);
-o-transform: rotate(5deg);
}
/** Downloads list **/
.package .os {
float: right
}
.package .details {
float: left
}
.file {
float: right
}
.details .hash {
float: left
}

View File

@ -1,139 +1,141 @@
#topbar .title {
display: none;
}
/* Dropdown menu CSS */
#cssmenu > ul {
width: 100%;
float: none;
background-color: #abcc71; /* change the menu color */
background-image: -webkit-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
background-image: -moz-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
background-image: -ms-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
background-image: -o-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
display: block;
/*height: 0;*/
height: auto;
margin: 0;
padding: 0;
overflow: hidden;
box-shadow: 0 1px 2px rgba(0,0,0,.6);
/*position: absolute;*/
top: 0px;
left: 0px;
z-index: 998;
clear: both;
}
#cssmenu > ul li {
/*display: none;*/
display: block;
width: 100%;
font-family: Arial;
}
#cssmenu > ul li div.menuitem {
display: block;
width: 90%;
padding: 10px 5%;
font-size: 14px;
font-weight: bold;
text-shadow: -1px -1px 0 rgba(0,0,0,.15);
color: white;
text-decoration: none;
border-bottom: 1px solid rgba(0,0,0,.2);
border-top: 1px solid rgba(255,255,255,.1);
}
#cssmenu > ul li div.menuitem:hover {
background-color: rgba(0,0,0,.5);
border-top-color: transparent;
}
#cssmenu > ul > li:first-child {
border-top: 1px solid rgba(0,0,0,.2);
}
/* Toggle the navigation bar open */
#cssmenu > ul.open {
height: auto;
/*padding-top: 50px;*/
}
#cssmenu > ul.open li {
display: block;
}
/* Submenus .has-sub class indicates dropdowns */
#cssmenu > ul > li:hover > div.menuitem {
background: rgba(0,0,0,.5);
border-bottom-color: transparent;
}
#cssmenu > ul li.has-sub > div.menuitem:after {
content: "▼";
color: rgba(255,255,255,.5);
float: right;
}
#cssmenu > ul li.has-sub > div.menuitem:hover {
background: rgba(0,0,0,.75);
}
#cssmenu > ul li ul {
display: none;
background: rgba(0,0,0,.5);
border-top: 0 none;
padding: 0;
}
#cssmenu > ul li ul div.menuitem {
border: 0 none;
font-size: 12px;
padding: 10px 5%;
font-weight: normal;
}
#cssmenu > ul li:hover > ul {
display: block;
border-top: 0 none;
}
/* End of dropdown menu CSS */
div#content .main {
padding: 4em 10%;
}
.main .get-i2p {
margin-bottom: -1.5em;
margin-top: .5em;
}
div#content .aside {
width: 100%;
}
div#content .inner {
margin-top: 1em;
}
div#content .inner .title {
margin-top: 1em;
}
.details .hash {
display: none;
}
#global-footer .aside {
margin-left: 1%;
width: 49%;
}
#global-footer .aside.first, #global-footer .aside.third, #global-footer .aside.fifth {
margin-left: 0;
}
#topbar .title {
display: none
}
/* Dropdown menu CSS */
#cssmenu > ul {
width: 100%;
float: none;
background-color: #abcc71; /* change the menu color */
background-image: -webkit-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
background-image: -moz-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
background-image: -ms-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
background-image: -o-linear-gradient(top, rgba(0,0,0,0), rgba(0,0,0,.2));
display: block;
/*height: 0;*/
height: auto;
margin: 0;
padding: 0;
overflow: hidden;
box-shadow: 0 1px 2px rgba(0,0,0,.6);
/*position: absolute;*/
top: 0px;
left: 0px;
z-index: 998;
clear: both;
}
#cssmenu > ul li {
/*display: none;*/
display: block;
width: 100%;
font-family: Arial;
}
#cssmenu > ul li div.menuitem {
display: block;
width: 90%;
padding: 10px 5%;
font-size: 14px;
font-weight: bold;
text-shadow: -1px -1px 0 rgba(0,0,0,.15);
color: white;
text-decoration: none;
border-bottom: 1px solid rgba(0,0,0,.2);
border-top: 1px solid rgba(255,255,255,.1);
}
#cssmenu > ul li div.menuitem:hover {
background-color: rgba(0,0,0,.5);
border-top-color: transparent;
}
#cssmenu > ul > li:first-child {
border-top: 1px solid rgba(0,0,0,.2)
}
/* Toggle the navigation bar open */
#cssmenu > ul.open {
height: auto;
/*padding-top: 50px;*/
}
#cssmenu > ul.open li {
display: block
}
/* Submenus .has-sub class indicates dropdowns */
#cssmenu > ul > li:hover > div.menuitem {
background: rgba(0,0,0,.5);
border-bottom-color: transparent;
}
#cssmenu > ul li.has-sub > div.menuitem:after {
content: "▼";
color: rgba(255,255,255,.5);
float: right;
}
#cssmenu > ul li.has-sub > div.menuitem:hover {
background: rgba(0,0,0,.75)
}
#cssmenu > ul li ul {
display: none;
background: rgba(0,0,0,.5);
border-top: 0 none;
padding: 0;
}
#cssmenu > ul li ul div.menuitem {
border: 0 none;
font-size: 12px;
padding: 10px 5%;
font-weight: normal;
}
#cssmenu > ul li:hover > ul {
display: block;
border-top: 0 none;
}
/* End of dropdown menu CSS */
div#content .main {
padding: 4em 10%
}
.main .get-i2p {
margin-bottom: -1.5em;
margin-top: .5em;
}
div#content .aside {
width: 100%
}
div#content .inner {
margin-top: 1em
}
div#content .inner .title {
margin-top: 1em
}
.details .hash {
display: none
}
#global-footer .aside {
margin-left: 1%;
width: 49%;
}
#global-footer .aside.first,
#global-footer .aside.third,
#global-footer .aside.fifth {
margin-left: 0
}

View File

@ -59,6 +59,7 @@ url('/<lang:lang>/blog/post/<path:slug>', 'blog.views.blog_post')
url('/<lang:lang>/feed/blog/rss', 'blog.views.blog_rss')
url('/<lang:lang>/feed/blog/atom', 'blog.views.blog_atom')
url('/<lang:lang>/feed/blog/category/<string:category>/atom', 'blog.views.blog_atom')
url('/b/<string:shortlink>', 'blog.views.blog_post_shortlink')
url('/<lang:lang>/meetings/', 'meetings.views.meetings_index', defaults={'page': 1})
url('/<lang:lang>/meetings/page/<int:page>', 'meetings.views.meetings_index')