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 the blog index. To publish the draft post, change the filename to remove the
'.draft' suffix. '.draft' suffix.
Creating shortlinks
-------------------
See the comments in shortlinks.py.
How to make a release notice 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 werkzeug.contrib.atom import AtomFeed
from i2p2www import BLOG_DIR, BLOG_POSTS_PER_FEED, BLOG_POSTS_PER_PAGE, cache 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.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 from i2p2www.helpers import Pagination, get_for_page
@ -38,6 +39,19 @@ def blog_post(slug):
else: else:
abort(404) 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(): def blog_rss():
# TODO: implement # TODO: implement
pass pass

View File

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

View File

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