diff --git a/.gitignore b/.gitignore index 7041e31..d8443f0 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,7 @@ docs/_build/ target/ #Django Development +backup/ /bower_components/ /media/ /node_modules/ diff --git a/Gruntfile.js b/Gruntfile.js index 55ce42a..f7edc13 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -8,7 +8,7 @@ module.exports = function(grunt) { options: { paths: ['src/kasu/static/less'], compress: false, - optimization:9, + optimization: 9, ieCompat: false, }, kasu: { @@ -21,10 +21,11 @@ module.exports = function(grunt) { report: 'min' }, kasu: { - src: 'static/css/kasu.css', - dest: 'static/css/kasu.css' - } - }, + files: { + 'src/kasu/static/css/kasu.min.css': ['src/kasu/static/css/kasu.css'], + }, + }, + }, watch: { styles: { files: ['src/kasu/static/less/*.less'], // which files to watch diff --git a/TODO b/TODO index b1e4522..0607631 100644 --- a/TODO +++ b/TODO @@ -8,15 +8,15 @@ src/utils/html_cleaner.py | | The code does not comply to PEP8. |----| | /srv/home/xeniac/Workspace/kasu/src/content/feeds.py | |++++| /srv/home/xeniac/Workspace/kasu/src/content/feeds.py -| 7| 7| +| 7| 7| | 8| 8| from content.models import Article -| 9| 9| +| 9| 9| | 10| |-MAX_ARTICLE_ITEMS = 10 # Maximum count of articles in the news RSS feed. | 11| |-MAX_COMMENT_ITEMS = 40 # Maximum count of comments in the comments RSS feed. | | 10|+MAX_ARTICLE_ITEMS = 10 # Maximum count of articles in the news RSS feed. | | 11|+MAX_COMMENT_ITEMS = 40 # Maximum count of comments in the comments RSS feed. -| 12| 12| -| 13| 13| +| 12| 12| +| 13| 13| | 14| 14| # Start ignoring PyLintBear (R0201) | | [NORMAL] PEP8Bear: | | The code does not comply to PEP8. @@ -25,7 +25,7 @@ src/utils/html_cleaner.py | 122| 122| def save(self, commit=True): | 123| 123| """ Create the new User, set him/her inactive, create an acitivation | 124| 124| request for the user and send him/her an activation email. -| 125| |- +| 125| |- | | 125|+ | 126| 126| :param commit: commit the SQL and send the email if True | 127| 127| :return: the created User Object @@ -157,8 +157,8 @@ src/utils/middleware.py | |++++| /srv/home/xeniac/Workspace/kasu/src/mahjong_ranking/managers.py | 7| 7| class HanchanManager(models.Manager): | 8| 8| """ -| 9| 9| The ObjectManager for models.Hanchan QuerySets. -| 10| |- +| 9| 9| The ObjectManager for models.Hanchan QuerySets. +| 10| |- | | 10|+ | 11| 11| It adds many specific filters that makes many queries much easier. | 12| 12| """ @@ -167,12 +167,12 @@ src/utils/middleware.py | | The code does not comply to PEP8. |----| | /srv/home/xeniac/Workspace/kasu/src/mahjong_ranking/managers.py | |++++| /srv/home/xeniac/Workspace/kasu/src/mahjong_ranking/managers.py -| 14| 14| +| 14| 14| | 15| 15| def confirmed_hanchans(self, user=None, **filter_args): -| 16| 16| """ Return all valid and confirmed Hanchans. -| 17| |- +| 16| 16| """ Return all valid and confirmed Hanchans. +| 17| |- | | 17|+ -| 18| 18| :param user: Only return Hanchans where this user participated. +| 18| 18| :param user: Only return Hanchans where this user participated. | 19| 19| :param filter_args: To add specific arguments to the Django filter. | 20| 20| :return: QuerySet Object | | [NORMAL] PEP8Bear: @@ -185,7 +185,7 @@ src/utils/middleware.py | 42| |- [ hanchan.get_playerdata(user) for hanchan in queryset ] | | 42|+ [hanchan.get_playerdata(user) for hanchan in queryset] | 43| 43| return queryset -| 44| 44| +| 44| 44| | 45| 45| def kyu_hanchans(self, user, **filter_args): | | [NORMAL] PEP8Bear: | | The code does not comply to PEP8. @@ -197,7 +197,7 @@ src/utils/middleware.py | 60| |- [ hanchan.get_playerdata(user) for hanchan in queryset ] | | 60|+ [hanchan.get_playerdata(user) for hanchan in queryset] | 61| 61| return queryset -| 62| 62| +| 62| 62| | 63| 63| def season_hanchans(self, user=None, season=None): | | [NORMAL] PEP8Bear: | | The code does not comply to PEP8. @@ -209,7 +209,7 @@ src/utils/middleware.py | 90| |- [ hanchan.get_playerdata(user) for hanchan in queryset ] | | 90|+ [hanchan.get_playerdata(user) for hanchan in queryset] | 91| 91| return queryset -| 92| 92| +| 92| 92| | 93| 93| def unconfirmed_hanchans(self, user=None, **filter_args): src/mahjong_ranking/managers.py @@ -417,7 +417,7 @@ src/content/models.py | | 60|+ user.registration_date.isoformat() | 61| 61| activation_key = hashlib.sha1(salt.encode()).hexdigest() | 62| 62| return self.create(user=user, activation_key=activation_key) -| 63| 63| +| 63| 63| src/membership/models.py | 229| ········:param·args:·passed·through·the·save()·method·from·django·· @@ -534,20 +534,20 @@ src/events/models.py | |++++| /srv/home/xeniac/Workspace/kasu/src/kasu/wsgi.py | 14| 14| if SOURCE_PATH not in sys.path: | 15| 15| sys.path.append(SOURCE_PATH) -| 16| 16| +| 16| 16| | 17| |-from django.core.wsgi import get_wsgi_application # Ignore PyLintBear (C0413) # Ignore PyLintBear (C0413) | | 17|+# Ignore PyLintBear (C0413) # Ignore PyLintBear (C0413) | | 18|+from django.core.wsgi import get_wsgi_application -| 18| 19| +| 18| 19| | 19| 20| os.environ['DJANGO_SETTINGS_MODULE'] = 'kasu.settings' -| 20| 21| +| 20| 21| | | [NORMAL] PEP8Bear: | | The code does not comply to PEP8. |----| | /srv/home/xeniac/Workspace/kasu/src/kasu/wsgi.py | |++++| /srv/home/xeniac/Workspace/kasu/src/kasu/wsgi.py -| 18| 18| +| 18| 18| | 19| 19| os.environ['DJANGO_SETTINGS_MODULE'] = 'kasu.settings' -| 20| 20| +| 20| 20| | 21| |-application = get_wsgi_application() # Ignore PyLintBear (C0103) # Ignore PyLintBear (C0103) | | 21|+# Ignore PyLintBear (C0103) # Ignore PyLintBear (C0103) | | 22|+application = get_wsgi_application() @@ -570,24 +570,24 @@ src/kasu/wsgi.py | | The code does not comply to PEP8. |----| | /srv/home/xeniac/Workspace/kasu/src/content/views.py | |++++| /srv/home/xeniac/Workspace/kasu/src/content/views.py -| 197| 197| +| 197| 197| | 198| 198| def get_object(self, queryset=None): | 199| 199| """ Get the path from the URL and fetch the corresponding page. -| 200| |- +| 200| |- | | 200|+ | 201| 201| First get the path wihout fileextentsion leading or trailing slashes, | 202| 202| then search in the database if such a page exists. -| 203| 203| +| 203| 203| | | [NORMAL] PEP8Bear: | | The code does not comply to PEP8. |----| | /srv/home/xeniac/Workspace/kasu/src/content/views.py | |++++| /srv/home/xeniac/Workspace/kasu/src/content/views.py -| 288| 288| +| 288| 288| | 289| 289| def get_context_data(self): | 290| 290| """ Adds recent ariticles and recent comments to the context. -| 291| |- +| 291| |- | | 291|+ -| 292| 292| :return: array() with the context data +| 292| 292| :return: array() with the context data | 293| 293| """ | 294| 294| page = models.Page.objects.get(slug='index') @@ -766,11 +766,6 @@ src/mahjong_ranking/models.py | | [NORMAL] PyLintBear (W0201): | | W0201 - Attribute 'kyu_points' defined outside __init__ -src/mahjong_ranking/models.py -| 330| class·KyuDanRanking(models.Model): -| | [NORMAL] PyLintBear (W5102): -| | W5102 - Found __unicode__ method on model (KyuDanRanking). Python3 uses __str__. - src/mahjong_ranking/models.py | 330| class·KyuDanRanking(models.Model): | | [INFO] PyLintBear (R0902): @@ -865,7 +860,7 @@ src/maistar_ranking/models.py | 47| |- ) | | 47|+ ) | 48| 48| ) -| 49| 49| +| 49| 49| | 50| 50| def test_html_cleaner(self): src/maistar_ranking/managers.py @@ -951,10 +946,10 @@ src/events/views.py | | The code does not comply to PEP8. |----| | /srv/home/xeniac/Workspace/kasu/src/utils/massmailer.py | |++++| /srv/home/xeniac/Workspace/kasu/src/utils/massmailer.py -| 68| 68| +| 68| 68| | 69| 69| def set_header(self, name, value): | 70| 70| """Add or modify an E-Mail Header to the Messages -| 71| |- +| 71| |- | | 71|+ | 72| 72| :param name: The Header Name that should be added | 73| 73| :param value: THe Header Value that shoud be added or set diff --git a/bin/sync.sh b/bin/sync.sh index 756f1ca..7a78c0d 100755 --- a/bin/sync.sh +++ b/bin/sync.sh @@ -1,7 +1,7 @@ #!/bin/bash SSH_LOGIN="kasu@s21.wservices.ch" -SYNC_ASSESTS="requirements" +SYNC_ASSESTS="requirements static" SYNC_SOURCECODE="src" EXCLUDE_FILES="*.pyc" @@ -19,5 +19,5 @@ rsync -r --copy-links --delete ${SYNC_SOURCECODE} ${SSH_LOGIN}:~/ --exclude 'src echo "Rebuild and reload django..." ssh ${SSH_LOGIN} "rm src/kasu/settings/development.*" -ssh ${SSH_LOGIN} "virtualenv/bin/python ~/src/manage.py collectstatic -l --noinput -v1" +ssh ${SSH_LOGIN} "~/virtualenv/bin/python ~/src/manage.py collectstatic -l --noinput -v1" ssh ${SSH_LOGIN} "~/init/kasu restart" diff --git a/package.json b/package.json index 7fac8e7..238c86f 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "grunt": ">=0.4.5", "grunt-contrib-less": ">=1.0.1", "grunt-contrib-watch": ">=0.6.1", - "grunt-more-css": ">=0.1.0" + "grunt-more-css": "^0.1.1" }, "dependencies": { "ckeditor-dev": "git://github.com/ckeditor/ckeditor-dev.git" diff --git a/requirements/base.txt b/requirements/base.txt index d12b48e..2c55f0f 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,5 +1,5 @@ beautifulsoup4 -django<2.0 +django < 2.0 django-appconf django-ckeditor django-contrib-comments diff --git a/src/content/locale/de/LC_MESSAGES/django.po b/src/content/locale/de/LC_MESSAGES/django.po index bc62173..f61f37f 100644 --- a/src/content/locale/de/LC_MESSAGES/django.po +++ b/src/content/locale/de/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: kasu.content\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-27 09:49+0200\n" -"PO-Revision-Date: 2018-04-27 10:05+0105\n" +"POT-Creation-Date: 2018-01-11 22:50+0100\n" +"PO-Revision-Date: 2018-01-12 15:25+0105\n" "Last-Translator: b'Christian Berg '\n" "Language-Team: Deutsch <>\n" "Language: de\n" @@ -20,250 +20,258 @@ msgstr "" "X-Generator: Poedit 1.8.9\n" "X-Translated-Using: django-rosetta 0.7.14\n" -#: feeds.py:18 +#: src/content/feeds.py:18 msgid "Current news from Kasu" msgstr "Aktuelle Nachrichten von Kasu" -#: feeds.py:51 +#: src/content/feeds.py:51 msgid "Latest comments on kasu.at" msgstr "Neueste Kommentare auf Kasu.at " -#: feeds.py:52 +#: src/content/feeds.py:52 msgid "Kasu - latest comments" msgstr "Kasu - neue Kommentare" -#: forms.py:57 models.py:315 +#: src/content/forms.py:57 src/content/models.py:318 msgid "Please upload a PDF-File to this PDF-Page." msgstr "Bitte eine PDF Datei für diese PDF Seite hochladen." -#: models.py:68 +#: src/content/models.py:76 msgid "Headline" msgstr "Schlagzeile" -#: models.py:70 +#: src/content/models.py:78 msgid "Content" msgstr "Inhalt" -#: models.py:72 models.py:143 templates/content/article_detail.html:25 +#: src/content/models.py:82 src/content/models.py:150 +#: src/content/templates/content/article_detail.html:25 msgid "Category" msgstr "Kategorie" -#: models.py:73 models.py:136 +#: src/content/models.py:83 src/content/models.py:143 msgid "Image" msgstr "Bild" -#: models.py:75 models.py:138 +#: src/content/models.py:85 src/content/models.py:145 msgid "Slug" msgstr "Slug" -#: models.py:77 templates/content/article_detail.html:23 +#: src/content/models.py:88 +#: src/content/templates/content/article_detail.html:23 msgid "Author" msgstr "Autor" -#: models.py:78 +#: src/content/models.py:89 msgid "Status" msgstr "Status" -#: models.py:80 +#: src/content/models.py:91 msgid "Created" msgstr "Erstellt" -#: models.py:81 +#: src/content/models.py:92 msgid "Modified" msgstr "Bearbeitet" -#: models.py:86 +#: src/content/models.py:97 msgid "Article" msgstr "Artikel" -#: models.py:87 +#: src/content/models.py:98 msgid "Articles" msgstr "Artikel" -#: models.py:132 models.py:133 +#: src/content/models.py:139 src/content/models.py:140 msgid "Name" msgstr "Name" -#: models.py:134 models.py:135 +#: src/content/models.py:141 src/content/models.py:142 msgid "Description" msgstr "Beschreibung" -#: models.py:144 +#: src/content/models.py:151 msgid "Categories" msgstr "Kategorien" -#: models.py:176 models.py:182 +#: src/content/models.py:182 src/content/models.py:188 msgid "The short name for the menu-entry of this page" msgstr "Ein kurzer Name für den Menüeintrag" -#: models.py:187 models.py:192 +#: src/content/models.py:193 src/content/models.py:198 msgid "The page title as you'd like it to be seen by the public" -msgstr "Der Seitentitel der öffentlich gemacht wird." +msgstr "Der Seitentitel der öffentlich angezeigt werden soll" -#: models.py:194 +#: src/content/models.py:200 msgid "slug" msgstr "Slug" -#: models.py:197 +#: src/content/models.py:203 msgid "" "The name of the page as it will appear in URLs e.g " "http://domain.com/blog/[my-slug]/" msgstr "" -"Der Seitenname wie er in der URL erscheint. z.B: " -"http://domain.com/blog/[slug]/" +"Wie die Seite in der URL aufscheint also http://domain.com/blog/[slug]" -#: models.py:206 +#: src/content/models.py:212 msgid "Path" msgstr "Pfad" -#: models.py:218 +#: src/content/models.py:224 msgid "Position" msgstr "Position" -#: models.py:223 +#: src/content/models.py:229 msgid "status" msgstr "Status" -#: models.py:226 models.py:228 +#: src/content/models.py:232 src/content/models.py:234 #| msgid "Description" msgid "search description" -msgstr "Suchbeschreibung" +msgstr "Beschreibung für Suchfunktion" -#: models.py:231 +#: src/content/models.py:237 #| msgid "Content" msgid "content type" msgstr "Inhaltstyp" -#: models.py:236 +#: src/content/models.py:242 msgid "enable comments" msgstr "Kommentare möglich" -#: models.py:241 +#: src/content/models.py:247 msgid "Template" msgstr "Vorlage" -#: models.py:249 +#: src/content/models.py:255 #| msgid "created on" msgid "first created at" msgstr "erstellt am" -#: models.py:254 +#: src/content/models.py:260 msgid "latest updated at" -msgstr "letzte Änderung" +msgstr "letzte Aktualisierung am" -#: models.py:328 +#: src/content/models.py:331 msgid "Page" msgstr "Seite" -#: models.py:329 +#: src/content/models.py:332 msgid "Pages" msgstr "Seiten" -#: templates/content/article_archive.html:5 -#: templates/content/article_archive.html:20 +#: src/content/templates/content/article_archive.html:5 +#: src/content/templates/content/article_archive.html:20 msgid "Article Archive" msgstr "Nachrichtenarchiv" -#: templates/content/article_archive.html:35 -#: templates/content/article_archive_month.html:5 -#: templates/content/article_archive_year.html:7 +#: src/content/templates/content/article_archive.html:35 +#: src/content/templates/content/article_archive_month.html:5 +#: src/content/templates/content/article_archive_year.html:7 msgid "Archive" msgstr "Archiv" -#: templates/content/article_archive.html:56 +#: src/content/templates/content/article_archive.html:56 msgid "All Categories" msgstr "Alle Kategorien" -#: templates/content/article_archive.html:71 +#: src/content/templates/content/article_archive.html:71 msgid "created on" msgstr "erstellt am" -#: templates/content/article_archive.html:73 +#: src/content/templates/content/article_archive.html:73 msgid "by" msgstr "von" -#: templates/content/article_archive.html:74 -#: templates/content/article_archive.html:75 +#: src/content/templates/content/article_archive.html:74 +#: src/content/templates/content/article_archive.html:75 msgid "comments" msgstr "Kommentare" -#: templates/content/article_archive.html:81 +#: src/content/templates/content/article_archive.html:81 msgid "Read More" msgstr "Mehr lesen" -#: templates/content/article_archive.html:86 +#: src/content/templates/content/article_archive.html:86 msgid "We're sorry. Your search yielded no results." msgstr "Es tut uns leid. Deine Suche ergab keine Treffer." -#: templates/content/article_archive.html:104 +#: src/content/templates/content/article_archive.html:104 msgid "Add Article" msgstr "neuer Artikel " -#: templates/content/article_archive_month.html:7 +#: src/content/templates/content/article_archive_month.html:7 msgid "back" msgstr "Zurück" -#: templates/content/article_detail.html:24 +#: src/content/templates/content/article_detail.html:24 msgid "Created on" msgstr "Erstellt am" -#: templates/content/article_detail.html:36 +#: src/content/templates/content/article_detail.html:36 msgid "share on" msgstr "Teile auf" -#: templates/content/article_detail.html:51 views.py:156 +#: src/content/templates/content/article_detail.html:51 +#: src/content/views.py:156 msgid "Edit Article" msgstr "Artikel bearbeiten" -#: templates/content/article_form.html:32 templates/content/page_form.html:42 -#: templates/content/page_form.html:49 +#: src/content/templates/content/article_form.html:32 +#: src/content/templates/content/page_form.html:42 +#: src/content/templates/content/page_form.html:49 msgid "German" msgstr "Deutsch" -#: templates/content/article_form.html:33 templates/content/page_form.html:43 -#: templates/content/page_form.html:57 +#: src/content/templates/content/article_form.html:33 +#: src/content/templates/content/page_form.html:43 +#: src/content/templates/content/page_form.html:57 msgid "English" msgstr "Englisch" -#: templates/content/article_form.html:59 templates/content/page_form.html:66 +#: src/content/templates/content/article_form.html:59 +#: src/content/templates/content/page_form.html:66 msgid "reset" msgstr "Zurücksetzen" -#: templates/content/article_form.html:60 templates/content/page_form.html:67 +#: src/content/templates/content/article_form.html:60 +#: src/content/templates/content/page_form.html:67 msgid "save" msgstr "Speichern" -#: templates/content/page_form.html:5 templates/content/page_form.html:35 +#: src/content/templates/content/page_form.html:5 +#: src/content/templates/content/page_form.html:35 msgid "Edit Page" msgstr "Seite bearbeiten" -#: templates/content/page_form.html:5 templates/content/page_form.html:19 -#: templates/content/page_form.html:35 +#: src/content/templates/content/page_form.html:5 +#: src/content/templates/content/page_form.html:19 +#: src/content/templates/content/page_form.html:35 msgid "Add Page" msgstr "Seite hinzufügen" -#: templates/content/page_form.html:18 +#: src/content/templates/content/page_form.html:18 msgid "Edit" msgstr "Bearbeiten" -#: templates/content/page_form.html:37 +#: src/content/templates/content/page_form.html:37 msgid "HTML Specific" msgstr "HTML spezifisch" -#: views.py:53 +#: src/content/views.py:53 msgid "This Category does not exist." msgstr "Diese Kategorie existiert nicht." -#: views.py:157 +#: src/content/views.py:157 msgid "Create Article" msgstr "Artikel erstellen" -#: views.py:233 +#: src/content/views.py:233 #, python-format msgid "No Page found matching the Path %s" msgstr "Keine Seite unter dem Pfad %s gefunden" -#: views.py:262 +#: src/content/views.py:262 #, python-format msgid "No PDF Document found matching the Path %s" msgstr "Kein PDF Dokument unter dem Pfad %s gefunden." diff --git a/src/content/migrations/0001_initial.py b/src/content/migrations/0001_initial.py index 9714409..3bc2b66 100644 --- a/src/content/migrations/0001_initial.py +++ b/src/content/migrations/0001_initial.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations import django.db.models.deletion from django.conf import settings +from django.db import models, migrations class Migration(migrations.Migration): @@ -44,7 +44,8 @@ class Migration(migrations.Migration): ('date_modified', models.DateTimeField( auto_now=True, verbose_name='Bearbeitet')), ('author', models.ForeignKey( - verbose_name='Autor', to=settings.AUTH_USER_MODEL)), + verbose_name='Autor', to=settings.AUTH_USER_MODEL, + on_delete=models.CASCADE)) ], options={ 'ordering': ('-date_created',), @@ -144,7 +145,8 @@ class Migration(migrations.Migration): model_name='article', name='category', field=models.ForeignKey( - verbose_name='Kategorie', to='content.Category'), + verbose_name='Kategorie', to='content.Category', + on_delete=models.CASCADE), ), migrations.AlterUniqueTogether( name='page', diff --git a/src/content/migrations/0007_auto_20171214_1215.py b/src/content/migrations/0007_auto_20171214_1215.py new file mode 100644 index 0000000..61398c5 --- /dev/null +++ b/src/content/migrations/0007_auto_20171214_1215.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.8 on 2017-12-14 11:15 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('content', '0006_auto_20171115_0653'), + ] + + operations = [ + migrations.AlterField( + model_name='article', + name='author', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Autor'), + ), + migrations.AlterField( + model_name='article', + name='category', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='content.Category', verbose_name='Kategorie'), + ), + ] diff --git a/src/content/models.py b/src/content/models.py index df51317..3dec6e1 100644 --- a/src/content/models.py +++ b/src/content/models.py @@ -3,9 +3,9 @@ from ckeditor_uploader.fields import RichTextUploadingField from django.conf import settings from django.core.cache import cache from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse from django.db import models from django.template.defaultfilters import slugify +from django.urls import reverse from django.utils import timezone from django.utils.safestring import mark_safe from django.utils.translation import get_language, ugettext as _ @@ -41,6 +41,14 @@ def get_upload_path(instance, filename): return "categories/%s.%s" % (instance.slug, extension) +def get_localized(obj, attr): + """ Return the localilzed field, or the fallback if the localized is empty. + """ + fallback = attr + '_de' + localized = attr + '_' + get_language()[:2] + return getattr(obj, localized) or getattr(obj, fallback) + + class ArticleManager(models.Manager): """Adds some predifined querys and joins some tables for faster querys.""" @@ -69,11 +77,14 @@ class Article(models.Model): headline_en = models.CharField('Headline', max_length=255, blank=True) content_de = RichTextUploadingField(_('Content')) content_en = RichTextUploadingField('Content', blank=True) - category = models.ForeignKey('Category', verbose_name=_('Category')) + category = models.ForeignKey('Category', + on_delete=models.PROTECT, + verbose_name=_('Category')) image = models.ImageField(_('Image'), upload_to='news/', blank=True, null=True) slug = models.SlugField(_('Slug'), unique_for_month='date_created') author = models.ForeignKey(settings.AUTH_USER_MODEL, + on_delete=models.PROTECT, verbose_name=_('Author')) status = models.SmallIntegerField(_('Status'), choices=STATUS_CHOICES, default=STATUS_PUBLISHED) @@ -115,16 +126,12 @@ class Article(models.Model): @property def headline(self): """Return the localized headline, fallback to german if necessary.""" - return mark_safe( - getattr(self, "headline_%s" % get_language(), self.headline_de) - ) + return mark_safe(get_localized(self, 'headline')) @property def content(self): """Return the localized content, fallback to german if necessary.""" - return mark_safe( - getattr(self, "content_%s" % get_language(), self.content_de) - ) + return mark_safe(get_localized(self, 'content')) class Category(models.Model): @@ -146,13 +153,12 @@ class Category(models.Model): @property def name(self): """Return the localized name, fallback to german if necessary.""" - return getattr(self, "name_%s" % get_language(), self.name_de) + return get_localized(self, 'name') @property def description(self): """Return the localized description, fallback to german if necessary.""" - return getattr(self, "description_%s" % get_language(), - self.description_de) + return get_localized(self, 'description') def get_absolute_url(self): """Return the URL of the article archive, filtered on this category.""" @@ -261,9 +267,7 @@ class Page(models.Model): @property def content(self): """Return the localized content, fallback to german if necessary.""" - return mark_safe( - getattr(self, "content_%s" % get_language(), self.content_de) - ) + return mark_safe(get_localized(self, 'content')) @property def css_class(self): @@ -275,23 +279,22 @@ class Page(models.Model): @property def description(self): """Return the localized description, fallback to german if necessary.""" - return getattr(self, "description_%s" % get_language(), - self.description_de) + return get_localized(self, 'description') @property def menu_name(self): """Return the localized menu name, fallback to german if necessary.""" - return getattr(self, "menu_name_%s" % get_language(), self.menu_name_de) + return get_localized(self, 'menu_name') @property def pdf_file(self): """Return the localized PDF file, fallback to german if necessary.""" - return getattr(self, "pdf_%s" % get_language(), self.pdf_de) + return get_localized(self, 'pdf_file') @property def title(self): """Return the localized title, fallback to german if necessary.""" - return getattr(self, "title_%s" % get_language(), self.title_de) + return get_localized(self, 'title') def clean(self): """set the URL path, the right content type, and scrub the HTML code.""" diff --git a/src/events/locale/de/LC_MESSAGES/django.po b/src/events/locale/de/LC_MESSAGES/django.po index 25fbf67..5652376 100644 --- a/src/events/locale/de/LC_MESSAGES/django.po +++ b/src/events/locale/de/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: kasu.events\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-27 09:49+0200\n" -"PO-Revision-Date: 2018-04-27 10:29+0105\n" +"POT-Creation-Date: 2018-01-11 22:50+0100\n" +"PO-Revision-Date: 2018-01-12 15:25+0105\n" "Last-Translator: b'Christian Berg '\n" "Language-Team: Kasu \n" "Language: de\n" @@ -19,59 +19,58 @@ msgstr "" "X-Generator: Poedit 1.8.9\n" "X-Translated-Using: django-rosetta 0.7.14\n" -#: admin.py:14 models.py:82 +#: src/events/admin.py:14 src/events/models.py:82 msgid "Event Series" msgstr "Veranstaltungsreihen" -#: forms.py:17 +#: src/events/forms.py:17 msgid "Images" msgstr "Bilder" -#: forms.py:46 +#: src/events/forms.py:46 msgid "start" msgstr "Beginn" -#: forms.py:49 +#: src/events/forms.py:49 msgid "end" msgstr "Ende" -#: mixins.py:57 views.py:149 -msgid "Event does not exist" -msgstr "Veranstaltung gibt es nicht" - -#: models.py:52 models.py:176 models.py:217 +#: src/events/models.py:52 src/events/models.py:176 src/events/models.py:217 msgid "Name" msgstr "Name" -#: models.py:53 models.py:177 models.py:225 +#: src/events/models.py:53 src/events/models.py:177 src/events/models.py:225 msgid "Description" msgstr "Beschreibung" -#: models.py:55 templates/events/event_detail.html:29 -#: templates/events/event_detail.html:87 templates/events/event_list.html:28 -#: templates/events/photo_upload.html:13 +#: src/events/models.py:55 src/events/templates/events/event_detail.html:29 +#: src/events/templates/events/event_detail.html:87 +#: src/events/templates/events/event_list.html:28 +#: src/events/templates/events/photo_upload.html:13 msgid "Start" msgstr "Beginn" -#: models.py:56 templates/events/event_detail.html:30 -#: templates/events/event_detail.html:89 +#: src/events/models.py:56 src/events/templates/events/event_detail.html:30 +#: src/events/templates/events/event_detail.html:89 msgid "End" msgstr "Ende" -#: models.py:57 models.py:185 templates/events/event_detail.html:34 -#: templates/events/event_detail.html:80 templates/events/event_detail.html:92 +#: src/events/models.py:57 src/events/models.py:185 +#: src/events/templates/events/event_detail.html:34 +#: src/events/templates/events/event_detail.html:80 +#: src/events/templates/events/event_detail.html:92 msgid "Homepage" msgstr "Homepage" -#: models.py:59 models.py:179 models.py:219 +#: src/events/models.py:59 src/events/models.py:179 src/events/models.py:219 msgid "Image" msgstr "Bild" -#: models.py:66 +#: src/events/models.py:66 msgid "Mahjong Tournament" msgstr "Mahjong Turnier" -#: models.py:68 +#: src/events/models.py:68 msgid "" "This event is a tournament, different rules apply for the kyu " "ranking." @@ -79,11 +78,11 @@ msgstr "" "Diese Veranstaltung ist ein Turnier, es gelten andere Regeln für das Kyu " "Ranking." -#: models.py:72 +#: src/events/models.py:72 msgid "Mahjong Season" msgstr "Mahjong Saison" -#: models.py:83 +#: src/events/models.py:83 msgid "" "Wenn dieser Event zu einer Veranstaltungsreihe gehört werden Ort, " "Beschreibung, Bild und Homepage von dem hier angegebenen Event " @@ -92,231 +91,248 @@ msgstr "" "Wenn dieser Termin zu einer Veranstaltungsreihe gehört werden Ort, " "Beschreibung, Bild und Homepage von dem hier angegebenen Event übernommen." -#: models.py:92 models.py:195 models.py:247 +#: src/events/models.py:92 src/events/models.py:195 src/events/models.py:248 msgid "first created at" -msgstr "Erstellt am" +msgstr "erstellt am" -#: models.py:97 models.py:200 models.py:252 +#: src/events/models.py:97 src/events/models.py:200 src/events/models.py:253 msgid "latest updated at" -msgstr "Geändert am" +msgstr "letzte Aktualisierung am" -#: models.py:103 +#: src/events/models.py:103 msgid "Event" msgstr "Termin" -#: models.py:104 +#: src/events/models.py:104 msgid "Events" msgstr "Termine" -#: models.py:117 +#: src/events/models.py:117 msgid "A event can't end before it had started" msgstr "Eine Veranstaltung kann nicht enden bevor sie begonnen hat" -#: models.py:186 +#: src/events/models.py:186 msgid "Postal Code" msgstr "Postleitzahl" -#: models.py:187 +#: src/events/models.py:187 msgid "Street Address" msgstr "Straße" -#: models.py:188 +#: src/events/models.py:188 msgid "Locality" msgstr "Ort" -#: models.py:189 +#: src/events/models.py:189 msgid "Country" msgstr "Land" -#: models.py:204 +#: src/events/models.py:204 msgid "Venue" msgstr "Veranstaltungsort" -#: models.py:205 +#: src/events/models.py:205 msgid "Venues" msgstr "Veranstaltungsorte" -#: models.py:231 +#: src/events/models.py:232 msgid "Startpage" msgstr "Startseite" -#: models.py:234 +#: src/events/models.py:235 msgid "Display this Photo on the Startpage Teaser" msgstr "Foto als Teaser auf der Startseite verwenden." -#: models.py:236 +#: src/events/models.py:237 msgid "Published on" msgstr "Veröffentlicht am" -#: models.py:238 +#: src/events/models.py:239 msgid "Number of views" msgstr "Wie oft gesehen" -#: models.py:262 templates/events/event_archive.html:38 -#: templates/events/event_list.html:18 +#: src/events/models.py:263 src/events/templates/events/event_archive.html:38 +#: src/events/templates/events/event_list.html:18 msgid "Event Image" msgstr "Veranstaltungsbild" -#: models.py:263 +#: src/events/models.py:264 msgid "Event Images" msgstr "Veranstaltungsbilder" -#: templates/events/event_archive.html:5 templates/events/event_archive.html:9 +#: src/events/templates/events/event_archive.html:5 +#: src/events/templates/events/event_archive.html:9 msgid "Event Archive" msgstr "Veranstaltungsarchiv" -#: templates/events/event_archive.html:42 -#: templates/events/event_detail.html:85 templates/events/event_list.html:22 -#: templates/events/photo_detail.html:53 +#: src/events/templates/events/event_archive.html:42 +#: src/events/templates/events/event_detail.html:85 +#: src/events/templates/events/event_list.html:22 +#: src/events/templates/events/photo_detail.html:53 msgid "Date" msgstr "Datum" -#: templates/events/event_archive.html:47 +#: src/events/templates/events/event_archive.html:47 msgid "Time" msgstr "Zeit" -#: templates/events/event_archive.html:49 -#: templates/events/photo_upload.html:16 +#: src/events/templates/events/event_archive.html:49 +#: src/events/templates/events/photo_upload.html:16 msgid "from" msgstr "von" -#: templates/events/event_archive.html:49 -#: templates/events/photo_upload.html:16 +#: src/events/templates/events/event_archive.html:49 +#: src/events/templates/events/photo_upload.html:16 msgid "to" msgstr "bis" -#: templates/events/event_archive.html:57 -#: templates/events/event_detail.html:31 templates/events/event_detail.html:72 -#: templates/events/event_list.html:32 templates/events/photo_upload.html:23 +#: src/events/templates/events/event_archive.html:57 +#: src/events/templates/events/event_detail.html:31 +#: src/events/templates/events/event_detail.html:72 +#: src/events/templates/events/event_list.html:32 +#: src/events/templates/events/photo_upload.html:23 msgid "Location" msgstr "Ort" -#: templates/events/event_archive.html:58 templates/events/event_list.html:35 -#: templates/events/photo_upload.html:25 templates/events/photo_upload.html:26 +#: src/events/templates/events/event_archive.html:58 +#: src/events/templates/events/event_list.html:35 +#: src/events/templates/events/photo_upload.html:25 +#: src/events/templates/events/photo_upload.html:26 msgid "Comments" msgstr "Kommentare" -#: templates/events/event_archive.html:59 -#: templates/events/event_detail.html:36 templates/events/event_detail.html:48 -#: templates/events/photo_list.html:4 templates/events/photo_upload.html:28 -#: templates/events/photo_upload.html:29 +#: src/events/templates/events/event_archive.html:59 +#: src/events/templates/events/event_detail.html:36 +#: src/events/templates/events/event_detail.html:48 +#: src/events/templates/events/photo_list.html:4 +#: src/events/templates/events/photo_upload.html:28 +#: src/events/templates/events/photo_upload.html:29 msgid "Photos" msgstr "Fotos" -#: templates/events/event_archive.html:60 -#: templates/events/event_archive.html:61 -#: templates/events/event_detail.html:35 templates/events/event_detail.html:51 +#: src/events/templates/events/event_archive.html:60 +#: src/events/templates/events/event_archive.html:61 +#: src/events/templates/events/event_detail.html:35 +#: src/events/templates/events/event_detail.html:51 msgid "Hanchans" msgstr "Hanchans" -#: templates/events/event_detail.html:37 +#: src/events/templates/events/event_detail.html:37 msgid "tourney" msgstr "Turnier" -#: templates/events/event_detail.html:37 +#: src/events/templates/events/event_detail.html:37 msgid "other rules apply here" msgstr "hier gelten andere Regeln" -#: templates/events/event_detail.html:45 +#: src/events/templates/events/event_detail.html:45 msgid "Info" msgstr "Info" -#: templates/events/event_detail.html:54 +#: src/events/templates/events/event_detail.html:54 msgid "Mai-Star Games" msgstr "Mai-Star Spiele" -#: templates/events/event_detail.html:57 +#: src/events/templates/events/event_detail.html:57 msgid "Event Ranking" msgstr "Veranstaltungs Wertung" -#: templates/events/event_detail.html:100 +#: src/events/templates/events/event_detail.html:100 msgid "Share on Facebook" msgstr "Auf Facebook teilen" -#: templates/events/event_detail.html:104 +#: src/events/templates/events/event_detail.html:104 msgid "Share on Google+" msgstr "Auf Google+ teilen" -#: templates/events/event_detail.html:109 +#: src/events/templates/events/event_detail.html:109 msgid "Share on Twitter" msgstr "Auf Twitter teilen" -#: templates/events/event_detail.html:113 +#: src/events/templates/events/event_detail.html:113 msgid "Show on Google Maps" msgstr "Auf Google Maps zeigen" -#: templates/events/event_detail.html:127 templates/events/event_form.html:9 -#: views.py:62 +#: src/events/templates/events/event_detail.html:127 +#: src/events/templates/events/event_form.html:9 src/events/views.py:62 msgid "Edit Event" msgstr "Termin bearbeiten" -#: templates/events/event_detail.html:131 +#: src/events/templates/events/event_detail.html:131 msgid "Add Dates" msgstr "Termine hinzufügen" -#: templates/events/event_form.html:9 templates/events/page.html:9 views.py:64 +#: src/events/templates/events/event_form.html:9 +#: src/events/templates/events/page.html:9 src/events/views.py:64 msgid "Add Event" msgstr "Neuer Termin" -#: templates/events/event_form.html:18 templates/events/photo_list.html:35 +#: src/events/templates/events/event_form.html:18 +#: src/events/templates/events/photo_list.html:35 msgid "reset" msgstr "Zurücksetzen" -#: templates/events/event_form.html:19 -#: templates/events/eventseries_form.html:25 +#: src/events/templates/events/event_form.html:19 +#: src/events/templates/events/eventseries_form.html:25 msgid "save" msgstr "Speichern" -#: templates/events/event_list.html:4 templates/events/event_list.html:5 +#: src/events/templates/events/event_list.html:4 +#: src/events/templates/events/event_list.html:5 msgid "Upcoming Events" msgstr "Bevorstehende Veranstaltungen" -#: templates/events/eventseries_form.html:24 +#: src/events/templates/events/eventseries_form.html:24 msgid "back" msgstr "Zurück" -#: templates/events/photo_confirm_delete.html:17 +#: src/events/templates/events/photo_confirm_delete.html:17 msgid "Cancel" msgstr "Abbrechen" -#: templates/events/photo_confirm_delete.html:21 -#: templates/events/photo_list.html:21 +#: src/events/templates/events/photo_confirm_delete.html:21 +#: src/events/templates/events/photo_list.html:21 msgid "Delete" msgstr "Löschen" -#: templates/events/photo_detail.html:44 +#: src/events/templates/events/photo_detail.html:44 msgid "previous" msgstr "Zurück" -#: templates/events/photo_detail.html:52 +#: src/events/templates/events/photo_detail.html:52 msgid "Photographer" msgstr "Fotograf" -#: templates/events/photo_detail.html:58 +#: src/events/templates/events/photo_detail.html:58 msgid "share on" msgstr "Teile auf" -#: templates/events/photo_detail.html:81 +#: src/events/templates/events/photo_detail.html:81 msgid "download" msgstr "Herunterladen" -#: templates/events/photo_detail.html:82 +#: src/events/templates/events/photo_detail.html:82 msgid "Rotate counter clockwise" msgstr "mit dem Uhrzeiger drehen" -#: templates/events/photo_detail.html:83 +#: src/events/templates/events/photo_detail.html:83 msgid "Rotate clockwise" msgstr "gegen den Uhrzeiger drehen" -#: templates/events/photo_detail.html:84 +#: src/events/templates/events/photo_detail.html:84 msgid "Save" msgstr "Speichern" -#: templates/events/photo_list.html:36 templates/events/photo_upload.html:35 -#: templates/events/photo_upload.html:49 +#: src/events/templates/events/photo_list.html:36 +#: src/events/templates/events/photo_upload.html:35 +#: src/events/templates/events/photo_upload.html:49 msgid "Upload" msgstr "Hochladen" +#: src/events/views.py:149 +msgid "Event does not exist" +msgstr "Veranstaltung gibt es nicht" + #~ msgid " Edit" #~ msgstr "Bearbeiten" diff --git a/src/events/migrations/0001_initial.py b/src/events/migrations/0001_initial.py index 9b6ff67..533f921 100644 --- a/src/events/migrations/0001_initial.py +++ b/src/events/migrations/0001_initial.py @@ -1,14 +1,14 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations -import events.models import django.db.models.deletion +from django.db import models, migrations + +import events.models import utils class Migration(migrations.Migration): - dependencies = [ ] @@ -17,7 +17,8 @@ class Migration(migrations.Migration): name='Event', fields=[ ('id', models.AutoField(verbose_name='ID', - serialize=False, auto_created=True, primary_key=True)), + serialize=False, auto_created=True, + primary_key=True)), ('name', models.CharField(max_length=255, verbose_name='Name')), ('description', models.TextField( verbose_name='Beschreibung', blank=True)), @@ -26,13 +27,20 @@ class Migration(migrations.Migration): null=True, verbose_name='Ende', blank=True)), ('url', models.URLField(verbose_name='Homepage', blank=True)), ('image', models.ImageField(storage=utils.OverwriteStorage( - ), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True)), + ), upload_to=events.models.get_upload_path, null=True, + verbose_name='Bild', blank=True)), ('is_tournament', models.BooleanField(default=False, - help_text='Diese Veranstaltung ist ein Turnier, es gelten andere Regeln f\xfcr das Kyu Ranking.', verbose_name='Turnier')), + help_text='Diese Veranstaltung ist ein Turnier, es gelten andere Regeln f\xfcr das Kyu Ranking.', + verbose_name='Turnier')), ('photo_count', models.PositiveIntegerField( default=0, editable=False)), - ('event_series', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, editable=False, to='events.Event', blank=True, - help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.', null=True, verbose_name='Veranstaltungsreihen')), + ('event_series', + models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, + editable=False, to='events.Event', + blank=True, + help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.', + null=True, + verbose_name='Veranstaltungsreihen')), ], options={ 'ordering': ('-start', '-end'), @@ -44,20 +52,310 @@ class Migration(migrations.Migration): name='Location', fields=[ ('id', models.AutoField(verbose_name='ID', - serialize=False, auto_created=True, primary_key=True)), + serialize=False, auto_created=True, + primary_key=True)), ('name', models.CharField(max_length=200, verbose_name='Name')), ('description', models.TextField( verbose_name='Beschreibung', blank=True)), ('image', models.ImageField(storage=utils.OverwriteStorage( - ), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True)), + ), upload_to=events.models.get_upload_path, null=True, + verbose_name='Bild', blank=True)), ('url', models.URLField(verbose_name='Homepage', blank=True)), ('postal_code', models.CharField( max_length=6, verbose_name='Postleitzahl')), ('street_address', models.CharField( max_length=127, verbose_name='Stra\xdfe')), - ('locality', models.CharField(max_length=127, verbose_name='Ort')), - ('country', models.CharField(max_length=2, verbose_name='Land', choices=[(b'GB', 'Vereinigtes K\xf6nigreich'), (b'AF', 'Afghanistan'), (b'AX', 'Aland Islands'), (b'AL', 'Albanien'), (b'DZ', 'Algerien'), (b'AS', 'Amerikanisch-Samoa'), (b'AD', 'Andorra'), (b'AO', 'Angola'), (b'AI', 'Anguilla'), (b'AQ', 'Antarktika'), (b'AG', 'Antigua und Barbuda'), (b'AR', 'Argentinien'), (b'AM', 'Armenien'), (b'AW', 'Aruba'), (b'AU', 'Australien'), (b'AT', '\xd6sterreich'), (b'AZ', 'Aserbaidschan'), (b'BS', 'Bahamas'), (b'BH', 'Bahrein'), (b'BD', 'Bangladesch'), (b'BB', 'Barbados'), (b'BY', 'Wei\xdfrussland'), (b'BE', 'Belgien'), (b'BZ', 'Belize'), (b'BJ', 'Benin'), (b'BM', 'Bermuda'), (b'BT', 'Bhutan'), (b'BO', 'Bolivien'), (b'BA', 'Bosnien und Herzegowina'), (b'BW', 'Botswana'), (b'BV', 'Bouvet Island'), (b'BR', 'Brasilien'), (b'IO', 'British Indian Ocean Territory'), (b'BN', 'Brunei Darussalam'), (b'BG', 'Bulgarien'), (b'BF', 'Burkina Faso'), (b'BI', 'Burundi'), (b'KH', 'Kambodscha'), (b'CM', 'Kamerun'), (b'CA', 'Kanada'), (b'CV', 'Cape Verde'), (b'KY', 'Cayman Islands'), (b'CF', 'Zentralafrikanische Republik'), (b'TD', 'Tschad'), (b'CL', 'Chile'), (b'CN', 'China'), (b'CX', 'Christmas Island'), (b'CC', 'Cocos (Keeling) Islands'), (b'CO', 'Kolumbien'), (b'KM', 'Komoren'), (b'CG', 'Kongo'), (b'CD', 'Kongo, Demokratische Republik'), (b'CK', 'Cook-Inseln'), (b'CR', 'Costa Rica'), (b'CI', "Cote d'Ivoire"), (b'HR', 'Kroatien'), (b'CU', 'Kuba'), (b'CY', 'Zypern'), (b'CZ', 'Tschechische Republik'), (b'DK', 'D\xe4nemark'), (b'DJ', 'Dschibuti'), (b'DM', 'Dominica'), (b'DO', 'Dominikanische Republik'), (b'EC', 'Ecuador'), (b'EG', '\xc4gypten'), (b'SV', 'El Salvador'), (b'GQ', '\xc4quatorial-Guinea'), (b'ER', 'Eritrea'), (b'EE', 'Estland'), (b'ET', '\xc4thiopien'), (b'FK', 'Falklandinseln (Malvinas)'), (b'FO', 'F\xe4r\xf6er-Inseln'), (b'FJ', 'Fidschi'), (b'FI', 'Finnland'), (b'FR', 'Frankreich'), (b'GF', 'Franz\xf6sisch-Guayana'), (b'PF', 'Franz\xf6sisch-Polynesien'), (b'TF', 'Franz\xf6sisch S\xfcdliche Territorien'), (b'GA', 'Gabun'), (b'GM', 'Gambia'), (b'GE', 'Georgia'), (b'DE', 'Deutschland'), (b'GH', 'Ghana'), (b'GI', 'Gibraltar'), (b'GR', 'Griechenland'), (b'GL', 'Gr\xf6nland'), (b'GD', 'Grenada'), (b'GP', 'Guadeloupe'), (b'GU', 'Guam'), (b'GT', 'Guatemala'), (b'GG', 'Guernsey'), (b'GN', 'Guinea'), (b'GW', 'Guinea-Bissau'), (b'GY', 'Guyana'), (b'HT', 'Haiti'), (b'HM', 'Heard und McDonald Inseln'), (b'VA', 'Heiliger Stuhl (Vatikanstadt)'), (b'HN', 'Honduras'), (b'HK', 'Hongkong'), (b'HU', 'Ungarn'), (b'IS', 'Island'), (b'IN', 'Indien'), (b'ID', 'Indonesien'), (b'IR', 'Iran, Islamische Republik'), (b'IQ', 'Irak'), (b'IE', 'Irland'), (b'IM', 'Isle of Man'), (b'IL', 'Israel'), (b'IT', 'Italien'), (b'JM', 'Jamaika'), (b'JP', 'Japan'), (b'JE', 'Jersey'), (b'JO', 'Jordan'), (b'KZ', 'Kasachstan'), (b'KE', 'Kenia'), (b'KI', 'Kiribati'), (b'KP', 'Korea, Demokratische Volksrepublik'), (b'KR', 'Korea, Republik'), (b'KW', 'Kuwait'), (b'KG', 'Kirgisistan'), (b'LA', 'Lao Demokratischen Volksrepublik'), (b'LV', 'Lettland'), (b'LB', 'Libanon'), ( - b'LS', 'Lesotho'), (b'LR', 'Liberia'), (b'LY', 'Libyen'), (b'LI', 'Liechtenstein'), (b'LT', 'Litauen'), (b'LU', 'Luxemburg'), (b'MO', 'Macao'), (b'MK', 'Mazedonien, die ehemalige jugoslawische Republik'), (b'MG', 'Madagaskar'), (b'MW', 'Malawi'), (b'MY', 'Malaysia'), (b'MV', 'Malediven'), (b'ML', 'Mali'), (b'MT', 'Malta'), (b'MH', 'Marshall Islands'), (b'MQ', 'Martinique'), (b'MR', 'Mauretanien'), (b'MU', 'Mauritius'), (b'YT', 'Mayotte'), (b'MX', 'Mexiko'), (b'FM', 'Mikronesien, F\xf6derierte Staaten von'), (b'MD', 'Moldawien'), (b'MC', 'Monaco'), (b'MN', 'Mongolei'), (b'ME', 'Montenegro'), (b'MS', 'Montserrat'), (b'MA', 'Marokko'), (b'MZ', 'Mosambik'), (b'MM', 'Myanmar'), (b'NA', 'Namibia'), (b'NR', 'Nauru'), (b'NP', 'Nepal'), (b'NL', 'Niederlande'), (b'AN', 'Niederl\xe4ndische Antillen'), (b'NC', 'Neukaledonien'), (b'NZ', 'New Zealand'), (b'NI', 'Nicaragua'), (b'NE', 'Niger'), (b'NG', 'Nigeria'), (b'NU', 'Niue'), (b'NF', 'Norfolk Island'), (b'MP', 'Northern Mariana Islands'), (b'NO', 'Norwegen'), (b'OM', 'Oman'), (b'PK', 'Pakistan'), (b'PW', 'Palau'), (b'PS', 'Pal\xe4stinensische Autonomiegebiete'), (b'PA', 'Panama'), (b'PG', 'Papua-Neuguinea'), (b'PY', 'Paraguay'), (b'PE', 'Peru'), (b'PH', 'Philippinen'), (b'PN', 'Pitcairn'), (b'PL', 'Polen'), (b'PT', 'Portugal'), (b'PR', 'Puerto Rico'), (b'QA', 'Katar'), (b'RE', 'Wiedervereinigung'), (b'RO', 'Rum\xe4nien'), (b'RU', 'Russischen F\xf6deration'), (b'RW', 'Ruanda'), (b'BL', 'Saint Barthelemy'), (b'SH', 'Saint Helena'), (b'KN', 'Saint Kitts und Nevis'), (b'LC', 'Santa Lucia'), (b'MF', 'Santa Martin'), (b'PM', 'Saint Pierre und Miquelon'), (b'VC', 'Saint Vincent und die Grenadinen'), (b'WS', 'Samoa'), (b'SM', 'San Marino'), (b'ST', 'Sao Tome und Principe'), (b'SA', 'Saudi-Arabien'), (b'SN', 'Senegal'), (b'RS', 'Serbien'), (b'SC', 'Seychellen'), (b'SL', 'Sierra Leone'), (b'SG', 'Singapur'), (b'SK', 'Slowakei'), (b'SI', 'Slowenien'), (b'SB', 'Salomon-Inseln'), (b'SO', 'Somalia'), (b'ZA', 'S\xfcdafrika'), (b'GS', 'S\xfcdgeorgien und die S\xfcdlichen Sandwichinseln'), (b'ES', 'Spanien'), (b'LK', 'Sri Lanka'), (b'SD', 'Sudan'), (b'SR', 'Suriname'), (b'SJ', 'Svalbard und Jan Mayen'), (b'SZ', 'Swaziland'), (b'SE', 'Schweden'), (b'CH', 'Schweiz'), (b'SY', 'Arabische Republik Syrien'), (b'TW', 'Taiwan, Province of China'), (b'TJ', 'Tadschikistan'), (b'TZ', 'Tansania, Vereinigte Republik'), (b'TH', 'Thailand'), (b'TL', 'Timor-Leste'), (b'TG', 'Togo'), (b'TK', 'Tokelau'), (b'TO', 'Tonga'), (b'TT', 'Trinidad und Tobago'), (b'TN', 'Tunesien'), (b'TR', 'T\xfcrkei'), (b'TM', 'Turkmenistan'), (b'TC', 'Turks-und Caicosinseln'), (b'TV', 'Tuvalu'), (b'UG', 'Uganda'), (b'UA', 'Ukraine'), (b'AE', 'Vereinigte Arabische Emirate'), (b'US', 'Vereinigte Staaten'), (b'UM', 'United States Minor Outlying Islands'), (b'UY', 'Uruguay'), (b'UZ', 'Usbekistan'), (b'VU', 'Vanuatu'), (b'VE', 'Venezuela'), (b'VN', 'Vietnam'), (b'VG', 'Virgin Islands, British'), (b'VI', 'Virgin Islands, US'), (b'WF', 'Wallis und Futuna'), (b'EH', 'Westsahara'), (b'YE', 'Jemen'), (b'ZM', 'Sambia'), (b'ZW', 'Zimbabwe')])), + ('locality', + models.CharField(max_length=127, verbose_name='Ort')), + ('country', models.CharField(max_length=2, verbose_name='Land', + choices=[(b'GB', + 'Vereinigtes K\xf6nigreich'), + (b'AF', 'Afghanistan'), + (b'AX', 'Aland Islands'), + (b'AL', 'Albanien'), + (b'DZ', 'Algerien'), ( + b'AS', + 'Amerikanisch-Samoa'), + (b'AD', 'Andorra'), + (b'AO', 'Angola'), + (b'AI', 'Anguilla'), + (b'AQ', 'Antarktika'), ( + b'AG', + 'Antigua und Barbuda'), + (b'AR', 'Argentinien'), + (b'AM', 'Armenien'), + (b'AW', 'Aruba'), + (b'AU', 'Australien'), + (b'AT', '\xd6sterreich'), + (b'AZ', 'Aserbaidschan'), + (b'BS', 'Bahamas'), + (b'BH', 'Bahrein'), + (b'BD', 'Bangladesch'), + (b'BB', 'Barbados'), ( + b'BY', + 'Wei\xdfrussland'), + (b'BE', 'Belgien'), + (b'BZ', 'Belize'), + (b'BJ', 'Benin'), + (b'BM', 'Bermuda'), + (b'BT', 'Bhutan'), + (b'BO', 'Bolivien'), ( + b'BA', + 'Bosnien und Herzegowina'), + (b'BW', 'Botswana'), + (b'BV', 'Bouvet Island'), + (b'BR', 'Brasilien'), ( + b'IO', + 'British Indian Ocean Territory'), + (b'BN', + 'Brunei Darussalam'), + (b'BG', 'Bulgarien'), + (b'BF', 'Burkina Faso'), + (b'BI', 'Burundi'), + (b'KH', 'Kambodscha'), + (b'CM', 'Kamerun'), + (b'CA', 'Kanada'), + (b'CV', 'Cape Verde'), + (b'KY', 'Cayman Islands'), + (b'CF', + 'Zentralafrikanische Republik'), + (b'TD', 'Tschad'), + (b'CL', 'Chile'), + (b'CN', 'China'), (b'CX', + 'Christmas Island'), + (b'CC', + 'Cocos (Keeling) Islands'), + (b'CO', 'Kolumbien'), + (b'KM', 'Komoren'), + (b'CG', 'Kongo'), (b'CD', + 'Kongo, Demokratische Republik'), + (b'CK', 'Cook-Inseln'), + (b'CR', 'Costa Rica'), + (b'CI', "Cote d'Ivoire"), + (b'HR', 'Kroatien'), + (b'CU', 'Kuba'), + (b'CY', 'Zypern'), (b'CZ', + 'Tschechische Republik'), + (b'DK', 'D\xe4nemark'), + (b'DJ', 'Dschibuti'), + (b'DM', 'Dominica'), ( + b'DO', + 'Dominikanische Republik'), + (b'EC', 'Ecuador'), + (b'EG', '\xc4gypten'), + (b'SV', 'El Salvador'), ( + b'GQ', + '\xc4quatorial-Guinea'), + (b'ER', 'Eritrea'), + (b'EE', 'Estland'), + (b'ET', '\xc4thiopien'), ( + b'FK', + 'Falklandinseln (Malvinas)'), + (b'FO', + 'F\xe4r\xf6er-Inseln'), + (b'FJ', 'Fidschi'), + (b'FI', 'Finnland'), + (b'FR', 'Frankreich'), ( + b'GF', + 'Franz\xf6sisch-Guayana'), + (b'PF', + 'Franz\xf6sisch-Polynesien'), + (b'TF', + 'Franz\xf6sisch S\xfcdliche Territorien'), + (b'GA', 'Gabun'), + (b'GM', 'Gambia'), + (b'GE', 'Georgia'), + (b'DE', 'Deutschland'), + (b'GH', 'Ghana'), + (b'GI', 'Gibraltar'), + (b'GR', 'Griechenland'), + (b'GL', 'Gr\xf6nland'), + (b'GD', 'Grenada'), + (b'GP', 'Guadeloupe'), + (b'GU', 'Guam'), + (b'GT', 'Guatemala'), + (b'GG', 'Guernsey'), + (b'GN', 'Guinea'), + (b'GW', 'Guinea-Bissau'), + (b'GY', 'Guyana'), + (b'HT', 'Haiti'), (b'HM', + 'Heard und McDonald Inseln'), + (b'VA', + 'Heiliger Stuhl (Vatikanstadt)'), + (b'HN', 'Honduras'), + (b'HK', 'Hongkong'), + (b'HU', 'Ungarn'), + (b'IS', 'Island'), + (b'IN', 'Indien'), + (b'ID', 'Indonesien'), ( + b'IR', + 'Iran, Islamische Republik'), + (b'IQ', 'Irak'), + (b'IE', 'Irland'), + (b'IM', 'Isle of Man'), + (b'IL', 'Israel'), + (b'IT', 'Italien'), + (b'JM', 'Jamaika'), + (b'JP', 'Japan'), + (b'JE', 'Jersey'), + (b'JO', 'Jordan'), + (b'KZ', 'Kasachstan'), + (b'KE', 'Kenia'), + (b'KI', 'Kiribati'), ( + b'KP', + 'Korea, Demokratische Volksrepublik'), + ( + b'KR', + 'Korea, Republik'), + (b'KW', 'Kuwait'), + (b'KG', 'Kirgisistan'), ( + b'LA', + 'Lao Demokratischen Volksrepublik'), + (b'LV', 'Lettland'), + (b'LB', 'Libanon'), ( + b'LS', 'Lesotho'), + (b'LR', 'Liberia'), + (b'LY', 'Libyen'), + (b'LI', 'Liechtenstein'), + (b'LT', 'Litauen'), + (b'LU', 'Luxemburg'), + (b'MO', 'Macao'), (b'MK', + 'Mazedonien, die ehemalige jugoslawische Republik'), + (b'MG', 'Madagaskar'), + (b'MW', 'Malawi'), + (b'MY', 'Malaysia'), + (b'MV', 'Malediven'), + (b'ML', 'Mali'), + (b'MT', 'Malta'), (b'MH', + 'Marshall Islands'), + (b'MQ', 'Martinique'), + (b'MR', 'Mauretanien'), + (b'MU', 'Mauritius'), + (b'YT', 'Mayotte'), + (b'MX', 'Mexiko'), (b'FM', + 'Mikronesien, F\xf6derierte Staaten von'), + (b'MD', 'Moldawien'), + (b'MC', 'Monaco'), + (b'MN', 'Mongolei'), + (b'ME', 'Montenegro'), + (b'MS', 'Montserrat'), + (b'MA', 'Marokko'), + (b'MZ', 'Mosambik'), + (b'MM', 'Myanmar'), + (b'NA', 'Namibia'), + (b'NR', 'Nauru'), + (b'NP', 'Nepal'), + (b'NL', 'Niederlande'), ( + b'AN', + 'Niederl\xe4ndische Antillen'), + (b'NC', 'Neukaledonien'), + (b'NZ', 'New Zealand'), + (b'NI', 'Nicaragua'), + (b'NE', 'Niger'), + (b'NG', 'Nigeria'), + (b'NU', 'Niue'), + (b'NF', 'Norfolk Island'), + (b'MP', + 'Northern Mariana Islands'), + (b'NO', 'Norwegen'), + (b'OM', 'Oman'), + (b'PK', 'Pakistan'), + (b'PW', 'Palau'), (b'PS', + 'Pal\xe4stinensische Autonomiegebiete'), + (b'PA', 'Panama'), ( + b'PG', + 'Papua-Neuguinea'), + (b'PY', 'Paraguay'), + (b'PE', 'Peru'), + (b'PH', 'Philippinen'), + (b'PN', 'Pitcairn'), + (b'PL', 'Polen'), + (b'PT', 'Portugal'), + (b'PR', 'Puerto Rico'), + (b'QA', 'Katar'), (b'RE', + 'Wiedervereinigung'), + (b'RO', 'Rum\xe4nien'), ( + b'RU', + 'Russischen F\xf6deration'), + (b'RW', 'Ruanda'), (b'BL', + 'Saint Barthelemy'), + (b'SH', 'Saint Helena'), ( + b'KN', + 'Saint Kitts und Nevis'), + (b'LC', 'Santa Lucia'), + (b'MF', 'Santa Martin'), ( + b'PM', + 'Saint Pierre und Miquelon'), + (b'VC', + 'Saint Vincent und die Grenadinen'), + (b'WS', 'Samoa'), + (b'SM', 'San Marino'), ( + b'ST', + 'Sao Tome und Principe'), + (b'SA', 'Saudi-Arabien'), + (b'SN', 'Senegal'), + (b'RS', 'Serbien'), + (b'SC', 'Seychellen'), + (b'SL', 'Sierra Leone'), + (b'SG', 'Singapur'), + (b'SK', 'Slowakei'), + (b'SI', 'Slowenien'), + (b'SB', 'Salomon-Inseln'), + (b'SO', 'Somalia'), + (b'ZA', 'S\xfcdafrika'), ( + b'GS', + 'S\xfcdgeorgien und die S\xfcdlichen Sandwichinseln'), + (b'ES', 'Spanien'), + (b'LK', 'Sri Lanka'), + (b'SD', 'Sudan'), + (b'SR', 'Suriname'), ( + b'SJ', + 'Svalbard und Jan Mayen'), + (b'SZ', 'Swaziland'), + (b'SE', 'Schweden'), + (b'CH', 'Schweiz'), ( + b'SY', + 'Arabische Republik Syrien'), + (b'TW', + 'Taiwan, Province of China'), + (b'TJ', 'Tadschikistan'), + (b'TZ', + 'Tansania, Vereinigte Republik'), + (b'TH', 'Thailand'), + (b'TL', 'Timor-Leste'), + (b'TG', 'Togo'), + (b'TK', 'Tokelau'), + (b'TO', 'Tonga'), (b'TT', + 'Trinidad und Tobago'), + (b'TN', 'Tunesien'), + (b'TR', 'T\xfcrkei'), + (b'TM', 'Turkmenistan'), ( + b'TC', + 'Turks-und Caicosinseln'), + (b'TV', 'Tuvalu'), + (b'UG', 'Uganda'), + (b'UA', 'Ukraine'), ( + b'AE', + 'Vereinigte Arabische Emirate'), + (b'US', + 'Vereinigte Staaten'), ( + b'UM', + 'United States Minor Outlying Islands'), + (b'UY', 'Uruguay'), + (b'UZ', 'Usbekistan'), + (b'VU', 'Vanuatu'), + (b'VE', 'Venezuela'), + (b'VN', 'Vietnam'), ( + b'VG', + 'Virgin Islands, British'), + (b'VI', + 'Virgin Islands, US'), ( + b'WF', + 'Wallis und Futuna'), + (b'EH', 'Westsahara'), + (b'YE', 'Jemen'), + (b'ZM', 'Sambia'), + (b'ZW', 'Zimbabwe')])), ], options={ 'verbose_name': 'Veranstaltungsort', @@ -67,6 +365,8 @@ class Migration(migrations.Migration): migrations.AddField( model_name='event', name='location', - field=models.ForeignKey(to='events.Location'), + field=models.ForeignKey( + to='events.Location', + on_delete=models.CASCADE), ), ] diff --git a/src/events/migrations/0004_auto_20150901_2204.py b/src/events/migrations/0004_auto_20150901_2204.py index c981e16..bf24d05 100644 --- a/src/events/migrations/0004_auto_20150901_2204.py +++ b/src/events/migrations/0004_auto_20150901_2204.py @@ -1,17 +1,17 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations import ckeditor.fields -import events.models -import easy_thumbnails.fields import django.db.models.deletion -import utils +import easy_thumbnails.fields from django.conf import settings +from django.db import models, migrations + +import events.models +import utils class Migration(migrations.Migration): - dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('events', '0003_auto_20150823_2232'), @@ -22,18 +22,24 @@ class Migration(migrations.Migration): name='Photo', fields=[ ('id', models.AutoField(verbose_name='ID', - serialize=False, auto_created=True, primary_key=True)), + serialize=False, auto_created=True, + primary_key=True)), ('name', models.CharField(max_length=100, verbose_name='Name', blank=True)), ('image', easy_thumbnails.fields.ThumbnailerImageField( - upload_to=events.models.get_upload_path, storage=utils.OverwriteStorage(), verbose_name='Bild')), + upload_to=events.models.get_upload_path, + storage=utils.OverwriteStorage(), verbose_name='Bild')), ('description', models.TextField(max_length=300, - verbose_name='Beschreibung', blank=True)), + verbose_name='Beschreibung', + blank=True)), ('on_startpage', models.BooleanField(default=False, - help_text='Display this Photo on the Startpage Teaser', verbose_name='Startpage')), - ('created_date', models.DateTimeField(verbose_name='Published on')), + help_text='Display this Photo on the Startpage Teaser', + verbose_name='Startpage')), + ('created_date', + models.DateTimeField(verbose_name='Published on')), ('views', models.PositiveIntegerField(default=0, - verbose_name='Number of views', editable=False)), + verbose_name='Number of views', + editable=False)), ], options={ 'ordering': ['created_date'], @@ -46,7 +52,8 @@ class Migration(migrations.Migration): migrations.AlterModelOptions( name='event', options={'ordering': ( - 'start', 'end'), 'verbose_name': 'Termin', 'verbose_name_plural': 'Termine'}, + 'start', 'end'), 'verbose_name': 'Termin', + 'verbose_name_plural': 'Termine'}, ), migrations.AlterField( model_name='event', @@ -57,14 +64,19 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='event', name='event_series', - field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, to='events.Event', - help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.', null=True, verbose_name='Veranstaltungsreihen'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.SET_NULL, blank=True, + to='events.Event', + help_text='Wenn dieser Termin zu einer Veranstaltungsreihe geh\xf6rt werden Ort, Beschreibung, Bild und Homepage von dem hier angegebenen Event \xfcbernommen.', + null=True, verbose_name='Veranstaltungsreihen'), ), migrations.AlterField( model_name='event', name='image', - field=easy_thumbnails.fields.ThumbnailerImageField(storage=utils.OverwriteStorage( - ), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True), + field=easy_thumbnails.fields.ThumbnailerImageField( + storage=utils.OverwriteStorage( + ), upload_to=events.models.get_upload_path, null=True, + verbose_name='Bild', blank=True), ), migrations.AlterField( model_name='location', @@ -75,17 +87,21 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='location', name='image', - field=easy_thumbnails.fields.ThumbnailerImageField(storage=utils.OverwriteStorage( - ), upload_to=events.models.get_upload_path, null=True, verbose_name='Bild', blank=True), + field=easy_thumbnails.fields.ThumbnailerImageField( + storage=utils.OverwriteStorage( + ), upload_to=events.models.get_upload_path, null=True, + verbose_name='Bild', blank=True), ), migrations.AddField( model_name='photo', name='event', - field=models.ForeignKey(to='events.Event'), + field=models.ForeignKey( + to='events.Event', on_delete=models.CASCADE), ), migrations.AddField( model_name='photo', name='photographer', - field=models.ForeignKey(to=settings.AUTH_USER_MODEL), + field=models.ForeignKey( + to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE), ), ] diff --git a/src/events/migrations/0009_auto_20171214_1215.py b/src/events/migrations/0009_auto_20171214_1215.py new file mode 100644 index 0000000..22dc786 --- /dev/null +++ b/src/events/migrations/0009_auto_20171214_1215.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.8 on 2017-12-14 11:15 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0008_auto_20171115_0653'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='location', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='events.Location'), + ), + migrations.AlterField( + model_name='photo', + name='event', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='events.Event'), + ), + migrations.AlterField( + model_name='photo', + name='photographer', + field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/src/events/mixins.py b/src/events/mixins.py index 48faac2..d9698ab 100644 --- a/src/events/mixins.py +++ b/src/events/mixins.py @@ -1,6 +1,6 @@ """Mixins for Events.""" from django.http import Http404 - +from django.shortcuts import get_object_or_404 from . import models @@ -34,12 +34,14 @@ class EventDetailMixin(object): :return: TemplateContext object""" context = super(EventDetailMixin, self).get_context_data(**kwargs) - if hasattr(self, 'event') and self.event: + if hasattr(self, 'event'): context['event'] = self.event elif hasattr(self, 'object') and isinstance(self.object, models.Event): context['event'] = self.object elif hasattr(self, 'object') and hasattr(self.object, 'event'): context['event'] = self.object.event + else: + print("No Event in Context!") return context def get_queryset(self): @@ -49,10 +51,9 @@ class EventDetailMixin(object): :return: a django QuerySets """ if self.model == models.Event: - return models.Event.objects.all() - try: - self.event = models.Event.objects.get(pk=self.kwargs['event']) + self.event = get_object_or_404(models.Event, pk=self.kwargs['pk']) + queryset = self.model.objects.all() + else: + self.event = get_object_or_404(models.Event, pk=self.kwargs['event']) queryset = self.model.objects.filter(event=self.event) - except models.Event.DoesNotExist: - raise Http404(_('Event does not exist')) return queryset.prefetch_related() diff --git a/src/events/models.py b/src/events/models.py index d805865..8e78596 100644 --- a/src/events/models.py +++ b/src/events/models.py @@ -4,10 +4,10 @@ import os from ckeditor.fields import RichTextField from django.conf import settings from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse from django.db import models from django.db.models import Q from django.template.defaultfilters import slugify +from django.urls import reverse from django.utils.timezone import now from django.utils.translation import ugettext as _ from easy_thumbnails.fields import ThumbnailerImageField @@ -51,7 +51,7 @@ class Event(models.Model): """An Event that could be a tournament, a game session, or an convention.""" name = models.CharField(_('Name'), max_length=255) description = RichTextField(_("Description"), blank=True) - location = models.ForeignKey('Location') + location = models.ForeignKey('Location', on_delete=models.PROTECT) start = models.DateTimeField(_('Start')) end = models.DateTimeField(_('End'), blank=True, null=True) url = models.URLField(_('Homepage'), blank=True) @@ -220,13 +220,14 @@ class Photo(models.Model): upload_to=get_upload_path, storage=OverwriteStorage() ) - event = models.ForeignKey('events.Event') + event = models.ForeignKey('events.Event', on_delete=models.PROTECT, ) description = models.TextField( _("Description"), max_length=300, blank=True ) - photographer = models.ForeignKey(settings.AUTH_USER_MODEL) + photographer = models.ForeignKey(settings.AUTH_USER_MODEL, + on_delete=models.PROTECT) on_startpage = models.BooleanField( _("Startpage"), default=False, diff --git a/src/events/templates/events/event_list.html b/src/events/templates/events/event_list.html index a685789..619feda 100755 --- a/src/events/templates/events/event_list.html +++ b/src/events/templates/events/event_list.html @@ -41,5 +41,4 @@ {% if forloop.counter|divisibleby:2 %}
{% endif %} {% endfor %} {% endfor %} -{% if page_obj.has_other_pages %}{% include 'paginator.html' %}{% endif %} {% endblock %} diff --git a/src/events/views.py b/src/events/views.py index d75118f..b22d745 100644 --- a/src/events/views.py +++ b/src/events/views.py @@ -3,7 +3,7 @@ from datetime import timedelta from django.contrib.auth import get_user_model from django.contrib.auth.mixins import PermissionRequiredMixin -from django.core.urlresolvers import reverse +from django.urls import reverse from django.db.models import Q from django.http import HttpResponse, Http404 from django.shortcuts import redirect diff --git a/src/kasu/locale/de/LC_MESSAGES/django.po b/src/kasu/locale/de/LC_MESSAGES/django.po index 98d25e9..9f2c8dd 100644 --- a/src/kasu/locale/de/LC_MESSAGES/django.po +++ b/src/kasu/locale/de/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: kasu.utils\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-04-27 09:49+0200\n" +"POT-Creation-Date: 2018-01-11 22:50+0100\n" "PO-Revision-Date: 2016-09-28 00:24+0200\n" "Last-Translator: Christian Berg \n" "Language-Team: Kasu \n" @@ -19,176 +19,175 @@ msgstr "" "X-Generator: Poedit 1.8.9\n" "X-Translated-Using: django-rosetta 0.7.6\n" -#: settings.py:157 +#: src/kasu/settings.py:158 msgid "German" msgstr "Deutsch" -#: settings.py:157 +#: src/kasu/settings.py:158 msgid "English" msgstr "Englisch" -#: templates/404.html:8 +#: src/kasu/templates/404.html:8 msgid "The page your requested does not exist on this server." msgstr "Die angeforderte Seite existiert auf diesem Server nicht." -#: templates/base.html:22 +#: src/kasu/templates/base.html:22 msgid "Current News" msgstr "Aktuelle Neuigkeiten" -#: templates/base.html:24 templates/index.html:40 +#: src/kasu/templates/base.html:24 src/kasu/templates/index.html:40 msgid "Recent Comments" msgstr "Kürzliche Kommentare" -#: templates/base.html:45 +#: src/kasu/templates/base.html:45 msgid "Menu" msgstr "Menü" -#: templates/base.html:69 templates/redbox.html:3 +#: src/kasu/templates/base.html:69 msgid "Current Event" msgstr "Aktuelle Veranstaltung" -#: templates/base.html:72 templates/redbox.html:6 +#: src/kasu/templates/base.html:72 msgid "Since" msgstr "seit" -#: templates/base.html:73 templates/base.html:85 templates/redbox.html:8 -#: templates/redbox.html:22 +#: src/kasu/templates/base.html:73 src/kasu/templates/base.html:85 msgid "Start" msgstr "Beginn" -#: templates/base.html:76 templates/base.html:88 templates/redbox.html:11 -#: templates/redbox.html:25 +#: src/kasu/templates/base.html:76 src/kasu/templates/base.html:88 msgid "Location" msgstr "Ort" -#: templates/base.html:79 templates/base.html:90 templates/redbox.html:14 -#: templates/redbox.html:28 +#: src/kasu/templates/base.html:79 src/kasu/templates/base.html:90 msgid "More Details" msgstr "Mehr Details" -#: templates/base.html:81 templates/redbox.html:17 +#: src/kasu/templates/base.html:81 msgid "Next Event" msgstr "Nächste Veranstaltung" -#: templates/base.html:84 templates/redbox.html:20 +#: src/kasu/templates/base.html:84 msgid "in" msgstr "in" -#: templates/base.html:93 templates/redbox.html:30 +#: src/kasu/templates/base.html:93 msgid "Upcoming events" msgstr "Bevorstehende Veranstaltungen" -#: templates/base.html:143 +#: src/kasu/templates/base.html:143 msgid "Add Subpage" msgstr "Unterseite Hinzufügen" -#: templates/base.html:148 +#: src/kasu/templates/base.html:148 msgid "Edit Page" msgstr "Seite bearbeiten" -#: templates/base.html:156 +#: src/kasu/templates/base.html:156 msgid "Imprint" msgstr "Impressum" -#: templates/base.html:157 +#: src/kasu/templates/base.html:157 msgid "contact" msgstr "Kontakt" -#: templates/base.html:162 +#: src/kasu/templates/base.html:162 msgid "Language" msgstr "Sprache" -#: templates/base.html:171 +#: src/kasu/templates/base.html:171 msgid "Go" msgstr "Los" -#: templates/base.html:176 +#: src/kasu/templates/base.html:176 msgid "Logged in as" msgstr "Angemeldet als" -#: templates/base.html:178 +#: src/kasu/templates/base.html:178 msgid "Admin" msgstr "Admin" -#: templates/base.html:179 +#: src/kasu/templates/base.html:179 msgid "Logout" msgstr "Abmelden" -#: templates/base.html:181 +#: src/kasu/templates/base.html:181 msgid "no user logged in" msgstr "Niemand angemeldet" -#: templates/base.html:182 templates/comments/form.html:43 +#: src/kasu/templates/base.html:182 src/kasu/templates/comments/form.html:43 msgid "register" msgstr "Registrieren" -#: templates/base.html:183 templates/comments/form.html:44 +#: src/kasu/templates/base.html:183 src/kasu/templates/comments/form.html:44 msgid "login" msgstr "anmelden" -#: templates/base.html:185 +#: src/kasu/templates/base.html:185 msgid "Login with Facebook" msgstr "über Facebook anmelden" -#: templates/base.html:187 +#: src/kasu/templates/base.html:187 msgid "Login with Twitter" msgstr "über Twitter anmelden" -#: templates/base.html:189 +#: src/kasu/templates/base.html:189 msgid "Login with Google" msgstr "über Google anmelden" -#: templates/comments/form.html:5 +#: src/kasu/templates/comments/form.html:5 msgid "New Comment" msgstr "Neuer Kommentar" -#: templates/comments/form.html:20 +#: src/kasu/templates/comments/form.html:20 msgid "now" msgstr "Jetzt" -#: templates/comments/form.html:25 +#: src/kasu/templates/comments/form.html:25 msgid "Preview" msgstr "Vorschau" -#: templates/comments/form.html:26 +#: src/kasu/templates/comments/form.html:26 msgid "Post" msgstr "Schreiben" -#: templates/comments/form.html:34 +#: src/kasu/templates/comments/form.html:34 msgid "not logged in" msgstr "Nicht angemeldet" -#: templates/comments/form.html:38 +#: src/kasu/templates/comments/form.html:38 msgid "Register now, or Login to leave a comment here." msgstr "Jetzt registrieren, oder anmelden um einen Kommentar zu schreiben." -#: templates/comments/list.html:2 templates/index.html:25 +#: src/kasu/templates/comments/list.html:2 src/kasu/templates/index.html:25 msgid "Comments" msgstr "Kommentare" -#: templates/comments/posted.html:4 templates/comments/posted.html:7 +#: src/kasu/templates/comments/posted.html:4 +#: src/kasu/templates/comments/posted.html:7 msgid "Thank you for your comment" msgstr "Danke für deinen Kommentar." -#: templates/comments/preview.html:4 templates/comments/preview.html:6 +#: src/kasu/templates/comments/preview.html:4 +#: src/kasu/templates/comments/preview.html:6 msgid "Preview your comment" msgstr "Vorschau deines Kommentars" -#: templates/comments/preview.html:10 +#: src/kasu/templates/comments/preview.html:10 msgid "Please correct the error below" msgid_plural "Please correct the errors below" msgstr[0] "Bitte den Fehler weiter unten beheben" msgstr[1] "Bitte die Fehler weiter unten beheben" -#: templates/index.html:4 +#: src/kasu/templates/index.html:4 msgid "traditional Asian game culture" msgstr "traditionelle asiatische Spielkultur" -#: templates/index.html:33 +#: src/kasu/templates/index.html:33 msgid "Read More" msgstr "Mehr lesen" -#: templates/index.html:47 +#: src/kasu/templates/index.html:47 #, python-format msgid "" "\n" @@ -205,23 +204,23 @@ msgstr "" " \n" " " -#: templates/index.html:59 +#: src/kasu/templates/index.html:59 msgid "Kasu in the social network" msgstr "Kasu im sozialem Netzwerk" -#: templates/index.html:62 templates/index.html:65 +#: src/kasu/templates/index.html:62 src/kasu/templates/index.html:65 msgid "Visit us on" msgstr "Besuche uns auf" -#: templates/index.html:74 +#: src/kasu/templates/index.html:74 msgid "Add Article" msgstr "Artikel hinzufügen" -#: templates/paginator.html:8 +#: src/kasu/templates/paginator.html:8 msgid "Previous" msgstr "Vorherige" -#: templates/paginator.html:20 +#: src/kasu/templates/paginator.html:20 msgid "Next" msgstr "Nächste" diff --git a/src/kasu/settings.py b/src/kasu/settings.py index ea63e90..9af87a5 100644 --- a/src/kasu/settings.py +++ b/src/kasu/settings.py @@ -80,6 +80,7 @@ MIDDLEWARE_CLASSES = [ 'django.middleware.locale.LocaleMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'utils.middleware.SetRemoteAddrFromForwardedFor', 'mahjong_ranking.middleware.DenormalizationUpdateMiddleware', ] @@ -229,7 +230,7 @@ LOGGING = { 'loggers': { 'django': { 'handlers': ['console'], - 'level': 'INFO', + 'level': 'DEBUG', 'propagate': True, }, 'django.request': { @@ -246,6 +247,22 @@ LOGGING = { } } +################################ +# Settings for mahjong_ranking # +################################ + +MIN_HANCHANS_FOR_LADDER = 5 +RANKING_EXPORT_PATH = path.join(PROJECT_PATH, 'backup', 'mahjong_ranking') + +# Old Tournament System +TOURNAMENT_POINT_SYSTEM = True +TOURNAMENT_WIN_BONUSPOINTS = 4 +TOURNAMENT_FLAWLESS_VICTORY_BONUSPOINTS = 8 + +# Old Dan System +DAN_3_WINS_IN_A_ROW = True +DAN_ALLOW_DROP_DOWN = True + DAN_RANKS = ( (80, 9), (70, 8), @@ -255,7 +272,7 @@ DAN_RANKS = ( (30, 4), (20, 3), (10, 2), - (0, 1), + (-1, 1), ) KYU_RANKS = ( @@ -268,13 +285,9 @@ KYU_RANKS = ( (15, 7), (10, 8), (5, 9), - (0, 10), + (-1, 10), ) -DAN_ALLOW_DROP_DOWN = True -MIN_HANCHANS_FOR_LADDER = 5 -RANKING_EXPORT_PATH = path.join(PROJECT_PATH, 'backup', 'mahjong_ranking') - try: from .local_settings import * # Ignore PyLintBear (W0401, W0614) except ImportError: diff --git a/src/kasu/static/css/kasu.css b/src/kasu/static/css/kasu.css index 66d72b2..7c33e26 100644 --- a/src/kasu/static/css/kasu.css +++ b/src/kasu/static/css/kasu.css @@ -1 +1,3178 @@ -@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.4.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'Philosopher';font-weight:normal;font-style:normal;src:url('../fonts/philosopher.woff') format('woff'),url('../fonts/philosopher.ttf') format('truetype')}@font-face{font-family:'Amerika Sans';font-weight:normal;font-style:normal;src:url('../fonts/amerikasans.woff') format('woff'),url('../fonts/amerikasans.ttf') format('truetype')}a:hover{color:#a40000;text-decoration:underline}a:link{color:#204a87;font-weight:700;text-decoration:none}a:visited{color:#5c3566}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section{display:block}body{font:12pt Philosopher,Georgia,serif;line-height:1;vertical-align:baseline}button,a.button,#redbox a.button:link,#redbox a.button:visited{display:inline-block;padding:.25em;margin:.25em;color:#2e3436;background-color:#f9f9f9;background:linear-gradient(to bottom, #f9f9f9 5%, #e9e9e9 100%);border:1px solid #d3d7cf;border-radius:5px;box-shadow:inset 0 1px 0 0 #ffffff;font:bold 12pt Philosopher,sans-serif;text-decoration:none;text-shadow:1px 1px 1px #ffffff}div.tab_container{background-color:#fff;padding-top:1em}fieldset{border:none;color:#2e3436;border-radius:10px;padding:0 10px 0 160px;background-color:#f2f5f6;background:linear-gradient(135deg, #f2f5f6 0, #e3eaed 37%, #c8d7dc 100%);vertical-align:top;margin-bottom:1em}fieldset div{margin:5px 0}fieldset legend{margin-top:-0.1em;margin-left:-150px;color:#a40000;font-family:'Amerika Sans',sans-serif;font-variant:small-caps;font-weight:400;font-size:16pt;text-shadow:2px 2px 2px #888}fieldset .required{font-weight:bold}fieldset .buttonbar{border-radius:0 0 10px 10px;margin:0 -10px 0 -160px}fieldset .help_text{font-size:small}fieldset .field_name{text-align:right;width:140px;margin:0 20px 0 -160px;padding-top:3px;display:inline-block;clear:left;vertical-align:top}fieldset input,fieldset textarea{border:1px solid #999999;border-radius:5px;padding:2px;margin:0}fieldset input[maxlength="255"],fieldset textarea{box-sizing:border-box;width:100%;max-width:760px}fieldset ul{display:inline-block;padding:0}fieldset ul li{list-style:none;display:inline}fieldset table{display:inline-table;max-width:760px}fieldset.comment{padding:0}fieldset.comment legend{margin-left:15px}fieldset.comment .buttonbar{margin:0;width:100%}h1,h2,h3,h4,h5,h6,.player{color:#bc0a19;font-family:'Amerika Sans',sans-serif;font-variant:small-caps;font-weight:400;letter-spacing:-1px;margin:1em 0 .5em 0;text-shadow:1px 1px 1px #888;vertical-align:baseline}h1 a:link,h2 a:link,h3 a:link,h4 a:link,h5 a:link,h6 a:link,.player a:link,h1 a:visited,h2 a:visited,h3 a:visited,h4 a:visited,h5 a:visited,h6 a:visited,.player a:visited{color:#bc0a19;font-weight:400;text-decoration:none}ol{list-style:cjk-ideographic;padding-left:2em}table{border-collapse:collapse;border-spacing:0;width:100%;margin:0 auto 1em auto}table td{padding:2px;vertical-align:middle}table th{background:#a40000;color:#fff;padding:2px;vertical-align:middle}table th a:link,table th a:visited{color:#FFF}table tr:nth-child(2n+1){background-color:rgba(176,176,174,0.25)}table tr:hover{background-color:rgba(164,0,0,0.25)}ul{list-style:circle outside;padding-left:2em;margin-top:.5em}ul li{margin-bottom:.5em}ul.info{list-style:none;margin:0 0 .5em 0;padding-left:0}ul.info li{display:inline-block;margin-right:1em}ul.tabs{width:100%;list-style:none;margin:1em 0 0 0;padding:.5em 0 0 0;border-radius:10px 10px 0 0;background-color:#bc0a19;background:linear-gradient(to bottom, #000 0, #45484d 100%)}ul.tabs li{background-color:#fa665a;background:linear-gradient(to bottom, #fa665a 5%, #d34639 100%);border-radius:5px 15px 0 0;display:inline-block;margin:0 -5px 0 10px}ul.tabs li a{color:#ffffff;text-shadow:1px 1px 1px #2e3436;display:inline-block;padding:.5em 1em;text-decoration:none}ul.tabs li.active{background:#fff}ul.tabs li.active a{color:#bc0a19;text-decoration:none;text-shadow:1px 1px 1px #888}#bottom_buttonbar{border-radius:0 0 10px 10px}#display{position:relative;text-align:center}#redbox{color:white;background-color:#a90329;background:linear-gradient(135deg, #a90329 0, #8f0222 44%, #6d0019 100%);border-radius:10px;padding:10px}#redbox h2,#redbox h3,#redbox a:link,#redbox a:visited{color:white;font-weight:normal;text-shadow:1px 1px 1px #000}#redbox h2:first-of-type{margin:-20px 0 0 10px;color:black;text-shadow:1px 1px 1px #ffffff}.avatar{display:block;position:relative;float:left;width:70px;height:70px;padding:0;margin:0 1em 1em 0;box-shadow:2px 2px 5px #888}.avatar img{height:70px;width:70px}.buttonbar{text-align:right;border-radius:10px;background-color:#000000;background:linear-gradient(to bottom, #45484d 0, #000000 100%)}.center{text-align:center}.clear,.clearfix{clear:both}.cke_chrome{border:0 !important}.cke_wysiwyg_div{padding:1em 0 !important}.django-ckeditor-widget{width:100%;min-height:500px}.disabled{color:#ccc}.comment{display:table;margin-bottom:1em;width:100%;padding:0}.error,ul.errorlist li{color:#a40000}.game h2{margin:.5em 0}.grid_1,.grid_2,.grid_3,.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12{display:inline;float:left;margin:0 10px;position:relative;box-sizing:border-box}.grid_1{width:60px}.grid_2{width:140px}.grid_3{width:220px}.grid_4{width:300px}.grid_5{width:380px}.grid_6{width:460px}.grid_7{width:540px}.grid_8{width:620px}.grid_9{width:700px}.grid_10{width:780px}.grid_11{width:860px}.grid_12{width:940px}.more_link{text-align:right;clear:left}.pagination{clear:both;margin-bottom:1em;padding:0;position:relative;text-align:center;z-index:30}.pagination a{background-color:#000000;background:linear-gradient(to bottom, #45484d 0, #000000 100%);border-radius:5px;display:inline-block;font-weight:bold;padding:.5em 1em;text-decoration:none}.pagination a:link,.pagination a:visited{color:#fff}.pagination a:hover,.pagination a.active{color:#bc0a19}.pagination a.disabled,.pagination a.disabled:hover{color:#666}.pagination a.previous{float:left;border-radius:10px 5px 5px 10px}.pagination a.next{float:right;border-radius:5px 10px 10px 5px}.player{margin:0 auto;float:none}.right{text-align:right}.thumbnail{display:block;position:relative;float:left;height:140px;width:140px;padding:5px;border:0;margin:5px;background:transparent url('../img/thumbnail-bg.png') top left no-repeat}@media screen and (min-width:700px){#siteheader{min-height:110px;width:960px;margin:0 auto;padding:0;position:relative;z-index:50}#sitelogo{background:url(../img/logo.png) no-repeat;height:110px;margin:0;padding:0;position:absolute;top:5px;left:5px;text-indent:-9999px;width:233px;z-index:99}#sitelogo a{display:block;height:110px;left:0;position:absolute;top:0;width:233px}#mainnav{left:233px;position:absolute;bottom:0}#mainnav #toggle,#mainnav .toggle{display:none}#mainnav ul.main_menu{list-style:none;margin:0;padding:0}#mainnav ul.main_menu>li{display:inline-block;min-width:50px;padding:8px;font:normal small-caps 18px 'Amerika Sans',sans-serif;text-align:center;text-shadow:2px 2px 2px #2e3436;margin:0}#mainnav ul.main_menu>li a{color:#000;text-decoration:none;font-weight:normal}#mainnav ul.main_menu>li a.active{color:#bc0a19}#mainnav ul.main_menu>li a:hover{color:#FFF}#mainnav ul.main_menu>li:first-child{padding-left:0}#mainnav ul.main_menu>li:last-child{padding-right:0}#mainnav ul.main_menu>li>ul{display:none;background:rgba(255,255,255,0.8);border-radius:10px;padding:.25em;min-width:10em;position:absolute;top:100%;margin:0 0 0 -15px;box-shadow:-1px 1px 5px 0 rgba(0,0,0,0.75);transition:all .25s linear}#mainnav ul.main_menu>li>ul li{display:block;float:none;font:normal small-caps 14pt 'Amerika Sans',sans-serif;text-align:left}#mainnav ul.main_menu>li>ul li a{display:block;color:black;padding:5px;transition:all .25s linear;border-radius:.5em}#mainnav ul.main_menu>li>ul li a:hover{color:white;background:#bc0a19;background:linear-gradient(135deg, #a90329 0, #8f0222 44%, #6d0019 100%);transition:all .25s linear}#mainnav ul.main_menu li:hover>ul{display:block}}@media screen and (max-width:699px){body{margin:5px 10px;background:url('../img/background_mobile.png') no-repeat top center;background-attachment:fixed;font:12pt "Philosopher",Georgia,serif}img{max-width:100%;height:auto}img.thumbnail{display:block;float:left;height:70px;width:70px;margin:5px;box-shadow:2px 2px 5px #888}img.posting_image,img.partner{float:left;width:99px;height:59px;padding:2px;margin:1em .5em 0 0;border:1px solid #babdb6}ul.main_dropdown{list-style-type:none;margin:0;padding:0}ul.main_dropdown li{padding:0}ul.main_dropdown a{padding-left:2em;font-size:12pt}#display .grid_10{margin:0;position:relative;z-index:1}#display .next,#display .previous{display:block;position:absolute;top:0;width:45px;height:100%;margin:0;padding:0;text-indent:9999px;overflow:hidden;opacity:.5}#display .next:hover,#display .previous:hover{opacity:.9;transition:all .2s ease-out}#display .next{background:transparent url(../img/right-arrow.png) no-repeat center center;right:0;z-index:3}#display .previous{background:transparent url(../img/left-arrow.png) no-repeat center center;left:0;z-index:2}#footer{border-top:1px solid black;text-align:center}#jumbotron{background:none !important}#maincontent{width:100%}#mainnav{display:block;float:right}#navigation{margin:10px 0;padding:0;background:#45484d url("../img/navigation-mobile.png") top left repeat-x;background-size:contain}#navigation a{font:bold 12px Arial;color:#FFF;text-decoration:none}#navigation li{display:inline-block;padding:.5em .3em .5em .5em;text-align:center;border-left:1px solid #ffffff;margin:0}#navigation li:first-of-type{border:none}#sitelogo{background:url('../img/logo_mobile.png') no-repeat;width:114px;height:54px;left:5px;margin:0;padding:0;text-indent:-9999px;top:5px;z-index:20;float:left}#sitelogo a{display:block;width:114px;height:54px}#siteheader:after{content:"";clear:both;display:block;visibility:hidden;height:0}#redbox{margin-top:1em;display:block}#redbox h3{margin:.5em 0}#redbox ul li{margin-bottom:.75em}#teaser{background:none;margin-bottom:1em}#teaser_text{background:rgba(255,255,255,0.5)}#topnav a{display:inline-block;color:#000;font:400 small-caps 24pt 'Amerika Sans',sans-serif;min-width:80px;text-align:center;text-decoration:none;text-shadow:2px 2px 2px #2e3436;padding:5px}#topnav a.active{color:#bc0a19}#topnav a:hover{color:#FFF}#toggle,.toggle{display:none}#toggle:checked~.main_menu{display:block;opacity:1}#toggle:checked~.toggle,.toggle:hover{background:#45ABD6}#usernav a{display:inline-block;margin:0 .5em}.comment_picture{display:table-cell;padding:0 10px;width:60px;vertical-align:top}.comment_header{display:table-cell;padding:0 10px;width:140px;vertical-align:top}.comment_header h3{margin:0}.comment{display:block}.comment_picture{display:block;float:left;vertical-align:top;width:60px}.comment_header{display:block;float:left;padding:0 10px;vertical-align:top;width:140px}.comment_header h3{margin:0}.comment_text{border-top:1px solid #45484d;display:block;margin:0 10px;padding-top:.5em;clear:both}.gallery{float:left;width:150px;height:150px;margin:10px}.gallery h3{font-size:12pt}.game img{float:right;margin:.5em 0 .5em 1em;width:140px;height:auto;box-shadow:1px 1px 5px 1px #444}.game:nth-child(2n+1) img{float:left;margin-right:1em;margin:.5em 2em .5em 0}.grid_2{min-width:140px;width:31%;margin:1% 0 1% 0}.grid_3{width:48%;margin:1% 0 1% 0}.grid_4,.grid_5,.grid_6,.grid_7,.grid_8,.grid_9,.grid_10,.grid_11,.grid_12{clear:both;margin:0;width:100%}.main_menu{position:absolute;display:none;right:0;min-width:50%;z-index:999;background:#eeeeec;margin:0;padding:0;border-top:1px solid #a40000;border-bottom:3px solid #a40000}.main_menu li{display:block;list-style:none;margin:0}.main_menu li a{display:block;width:100%;text-decoration:none;font:400 small-caps 18px 'Amerika Sans',sans-serif;color:black;box-sizing:border-box;border-left:0 solid #eeeeec;padding:.5em 1em;line-height:1;transition:all .25s linear}.main_menu li a:hover,.main_menu li a:focus{color:#a40000;border-left:3px solid #a40000}.officer{float:left;width:25%;padding:5px;box-sizing:border-box;text-align:center}.officer img{border:0;border-radius:50%;box-shadow:1px 1px 5px 1px #444;width:100%;height:100%}.officer .function{font-size:small;margin-top:.25em}.toggle{background:#a40000;border-radius:5px;color:#FFFFFF;cursor:pointer;display:block;margin:8px 0;padding:10px;position:relative;transition:all .5s linear;z-index:2}.thumbnail{display:block;position:relative;float:left;height:70px;padding:0;width:70px;margin:5px;box-shadow:2px 2px 5px #888}.thumbnail img{height:70px;width:70px}}@media screen and (min-width:700px){body{position:relative;margin:0;padding:0;min-width:960px;height:100%}#body{background-color:#ffffff;background-image:url('../img/kranich.png'),url('../img/header_bg.jpg');background-repeat:no-repeat,no-repeat;background-position:center bottom,center top;background-attachment:scroll,fixed}#bottom_buttonbar{position:absolute;bottom:0;margin:0;width:100%}#content{width:940px;margin:0 10px;position:relative}#display .next,#display .previous{display:block;position:absolute;top:0;width:60px;height:100%;margin:0;padding:0;text-indent:9999px;overflow:hidden;opacity:.5}#display .next:hover,#display .previous:hover{opacity:1;transition:all .2s ease-out}#display .next{background:transparent url(../img/right-arrow.png) no-repeat center center;right:10px;z-index:3}#display .previous{background:transparent url(../img/left-arrow.png) no-repeat center center;left:10px;z-index:2}#display img{box-shadow:1px 1px 5px 1px #444}#footer{width:920px;min-height:50px;margin:20px auto 0 auto;z-index:30}#footer p{text-align:center}#google_maps{position:relative;top:0;left:0;height:280px;padding:10px;border-radius:0 10px 10px 0}#jumbotron{clear:both;position:relative;padding:0;width:940px;margin:0 10px 1em 10px;z-index:5;min-height:300px;border:none;border-radius:10px;background-repeat:no-repeat;background-color:#333;background-position:center left}#jumbotron>h2,#jumbotron>h1{color:#eff0ef;text-shadow:1px 1px 1px #000;position:absolute;top:33%;left:10px;max-width:600px;margin:0}#jumbotron #teaser_text{display:block;position:absolute;left:0;bottom:0;width:620px;color:#FFF;background:rgba(0,0,0,0.5);padding:1em;border-radius:0 0 0 10px}#jumbotron #teaser_text a:link,#jumbotron #teaser_text a:active,#jumbotron #teaser_text a:visited{color:#fff;text-decoration:underline}#maincontent{margin:0 auto;height:auto !important;width:960px;min-height:800px;padding:10px 0 2em 0;position:relative;z-index:19;border-radius:10px;background:rgba(255,255,255,0.5);box-shadow:0 0 20px 1px rgba(0,0,0,0.75)}#messages{clear:both;margin:0 auto;padding:8px 0 0 30px;width:920px;list-style:none}#messages li.success{color:#253324;background:#89bd84;border:1px solid #253324;border-radius:10px;margin:10px;padding:10px}#navigation{clear:both;background:url(../img/navigation-bg.png) no-repeat left top;height:56px;margin:0 auto;padding:8px 35px 0 25px;position:relative;width:900px;z-index:30}#navigation a{background:url(../img/navigation-separator.png) no-repeat right center;color:#FFF;display:inline-block;line-height:50px;font-weight:bold;height:50px;padding:0 15px;text-decoration:none}#navigation a:hover,#navigation a.active{background:url(../img/navigation-hover.png) repeat-x left top;color:#3B3B3B}#navigation li{display:inline}#recaptcha_widget_div{margin-top:-20px}#redbox{position:absolute;top:0;right:0;height:280px;width:280px;border-radius:0 10px 10px 0;z-index:100}#redbox h3{margin:.5em 0}#redbox ul li{line-height:1em;margin-bottom:.5em}#usernav{position:absolute;top:0;right:0;text-align:right;background:black;background:linear-gradient(to bottom, #45484d 0, #000000 100%);border-radius:0 0 0 10px;font-size:14pt;color:#FFF;padding:10px 10px;z-index:50;box-shadow:-1px -1px 5px 1px rgba(0,0,0,0.75)}#usernav a{color:#FFF}.comment_picture{display:table-cell;padding:0 10px;width:60px;vertical-align:top}.comment_header{display:table-cell;padding:0 10px;width:140px;vertical-align:top}.comment_header h3{margin:0}.comment_text{display:table-cell;padding:0 10px;width:auto;max-width:700px}.gallery{display:inline;float:left;height:200px;margin:10px;overflow:hidden;text-align:center;width:300px}.gallery .thumbnail{display:block;float:none;margin:5px auto}.game img{float:right;margin:.5em 0 .5em 1em;width:300px;height:auto;box-shadow:1px 1px 5px 1px #444}.game:nth-child(2n+1) img{float:left;margin-right:1em;margin:.5em 2em .5em 0}.officer{float:left;width:140px;margin:5px;box-sizing:border-box;text-align:center}.officer img{border:0;border-radius:50%;box-shadow:1px 1px 5px 1px #444;width:130px;height:130px}.officer .function{font-size:small;margin-top:.25em}img.posting_image,img.partner{float:left;width:200px;height:120px;padding:2px;margin:0 1em 1em 0;border:1px solid #babdb6}.thumbnail a.delete_image{position:absolute;right:4px;bottom:0}}@page{margin:1cm 1cm 1cm 2cm;size:A4 portrait}@media print{a:link,a:visited{color:black;font-weight:bold}body,article{width:100%;margin:0;padding:0;color:#000;background:#fff}h1{font-size:32pt}h2,h3,h4,h5,h6{text-shadow:none;page-break-after:avoid}img{max-width:100% !important;page-break-inside:avoid}nav,aside{display:none}ul{page-break-inside:avoid}#footer{width:100%;padding-top:.5em;border-top:1px solid black;text-align:center}#jumbotron{background:none !important}#maincontent nav{display:none}#maincontent aside{display:none}#sitelogo{background:url(../img/logo.png) top right no-repeat;background-size:contain;left:0;margin:0;padding:0;line-height:1cm;font-family:'Amerika Sans',Helvetica;font-size:8pt;top:5px;z-index:99}#comment_form,#comments,#footer,#navigation,#mainnav,#usernav,#bottom_buttonbar,#footer>form{display:none}.grid_6,grid_7,.grid_8,grid_9,.grid_10,.grid_11,.grid_12{width:100%}.more_link{display:none}}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"} \ No newline at end of file +/* FONT PATH + * -------------------------- */ +@font-face { + font-family: 'FontAwesome'; + src: url('../fonts/fontawesome-webfont.eot?v=4.4.0'); + src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg'); + font-weight: normal; + font-style: normal; +} +@font-face { + font-family: 'Philosopher'; + font-weight: normal; + font-style: normal; + src: url('../fonts/philosopher.woff') format('woff'), url('../fonts/philosopher.ttf') format('truetype'); +} +@font-face { + font-family: 'Amerika Sans'; + font-weight: normal; + font-style: normal; + src: url('../fonts/amerikasans.woff') format('woff'), url('../fonts/amerikasans.ttf') format('truetype'); +} +a:hover { + color: #a40000; + text-decoration: underline; +} +a:link { + color: #204a87; + font-weight: 700; + text-decoration: none; +} +a:visited { + color: #5c3566; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section { + display: block; +} +body { + font: 12pt Philosopher, Georgia, serif; + line-height: 1; + vertical-align: baseline; +} +button, +a.button, +#redbox a.button:link, +#redbox a.button:visited { + display: inline-block; + padding: 0.25em; + margin: 0.25em; + color: #2e3436; + background-color: #f9f9f9; + background: linear-gradient(to bottom, #f9f9f9 5%, #e9e9e9 100%); + border: 1px solid #d3d7cf; + border-radius: 5px; + box-shadow: inset 0px 1px 0px 0px #ffffff; + font: bold 12pt Philosopher, sans-serif; + text-decoration: none; + text-shadow: 1px 1px 1px #ffffff; +} +div.tab_container { + background-color: #fff; + padding-top: 1em; +} +fieldset { + border: none; + color: #2e3436; + border-radius: 10px; + padding: 0 10px 0 160px; + background-color: #f2f5f6; + background: linear-gradient(135deg, #f2f5f6 0%, #e3eaed 37%, #c8d7dc 100%); + vertical-align: top; + margin-bottom: 1em; +} +fieldset div { + margin: 5px 0px; +} +fieldset legend { + margin-top: -0.1em; + margin-left: -150px; + color: #a40000; + font-family: 'Amerika Sans', sans-serif; + font-variant: small-caps; + font-weight: 400; + font-size: 16pt; + text-shadow: 2px 2px 2px #888; +} +fieldset .required { + font-weight: bold; +} +fieldset .buttonbar { + border-radius: 0px 0px 10px 10px; + margin: 0 -10px 0 -160px; +} +fieldset .help_text { + font-size: small; +} +fieldset .field_name { + text-align: right; + width: 140px; + margin: 0 20px 0 -160px; + padding-top: 3px; + display: inline-block; + clear: left; + vertical-align: top; +} +fieldset input, +fieldset textarea { + border: 1px solid #999999; + border-radius: 5px; + padding: 2px; + margin: 0; +} +fieldset input[maxlength="255"], +fieldset textarea { + box-sizing: border-box; + width: 100%; + max-width: 760px; +} +fieldset ul { + display: inline-block; + padding: 0; +} +fieldset ul li { + list-style: none; + display: inline; +} +fieldset table { + display: inline-table; + max-width: 760px; +} +fieldset.comment { + padding: 0; +} +fieldset.comment legend { + margin-left: 15px; +} +fieldset.comment .buttonbar { + margin: 0; + width: 100%; +} +h1, +h2, +h3, +h4, +h5, +h6, +.player { + color: #bc0a19; + font-family: 'Amerika Sans', sans-serif; + font-variant: small-caps; + font-weight: 400; + letter-spacing: -1px; + margin: 1em 0 0.5em 0; + text-shadow: 1px 1px 1px #888; + vertical-align: baseline; +} +h1 a:link, +h2 a:link, +h3 a:link, +h4 a:link, +h5 a:link, +h6 a:link, +.player a:link, +h1 a:visited, +h2 a:visited, +h3 a:visited, +h4 a:visited, +h5 a:visited, +h6 a:visited, +.player a:visited { + color: #bc0a19; + font-weight: 400; + text-decoration: none; +} +ol { + list-style: cjk-ideographic; + padding-left: 2em; +} +table { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + margin: 0 auto 1em auto; +} +table td { + padding: 2px; + vertical-align: middle; +} +table th { + background: #a40000; + color: #fff; + padding: 2px; + vertical-align: middle; +} +table th a:link, +table th a:visited { + color: #FFF; +} +table tr:nth-child(2n+1) { + background-color: rgba(176, 176, 174, 0.25); +} +table tr:hover { + background-color: rgba(164, 0, 0, 0.25); +} +ul { + list-style: circle outside; + padding-left: 2em; + margin-top: 0.5em; +} +ul li { + margin-bottom: 0.5em; +} +ul.info { + list-style: none; + margin: 0 0 0.5em 0; + padding-left: 0; +} +ul.info li { + display: inline-block; + margin-right: 1em; +} +ul.tabs { + width: 100%; + list-style: none; + margin: 1em 0 0 0; + padding: 0.5em 0 0 0; + border-radius: 10px 10px 0 0; + background-color: #bc0a19; + background: linear-gradient(to bottom, #000 0%, #45484d 100%); +} +ul.tabs li { + background-color: #fa665a; + background: linear-gradient(to bottom, #fa665a 5%, #d34639 100%); + border-radius: 5px 15px 0 0; + display: inline-block; + margin: 0px -5px 0px 10px; +} +ul.tabs li a { + color: #ffffff; + text-shadow: 1px 1px 1px #2e3436; + display: inline-block; + padding: 0.5em 1em; + text-decoration: none; +} +ul.tabs li.active { + background: #fff; +} +ul.tabs li.active a { + color: #bc0a19; + text-decoration: none; + text-shadow: 1px 1px 1px #888; +} +#bottom_buttonbar { + border-radius: 0 0 10px 10px; +} +#display { + position: relative; + text-align: center; +} +#redbox { + color: white; + background-color: #a90329; + background: linear-gradient(135deg, #a90329 0%, #8f0222 44%, #6d0019 100%); + border-radius: 10px; + padding: 10px; +} +#redbox h2, +#redbox h3, +#redbox a:link, +#redbox a:visited { + color: white; + font-weight: normal; + text-shadow: 1px 1px 1px #000; +} +#redbox h2:first-of-type { + margin: -20px 0 0 10px; + color: black; + text-shadow: 1px 1px 1px #ffffff; +} +.avatar { + display: block; + position: relative; + float: left; + width: 70px; + height: 70px; + padding: 0; + margin: 0 1em 1em 0; + box-shadow: 2px 2px 5px #888; +} +.avatar img { + height: 70px; + width: 70px; +} +.buttonbar { + text-align: right; + border-radius: 10px; + background-color: #000000; + background: linear-gradient(to bottom, #45484d 0%, #000000 100%); +} +.center { + text-align: center; +} +.clear, +.clearfix { + clear: both; +} +.cke_chrome { + border: 0 !important; +} +.cke_wysiwyg_div { + padding: 1em 0 !important; +} +.django-ckeditor-widget { + width: 100%; + min-height: 500px; +} +.disabled { + color: #ccc; +} +.comment { + display: table; + margin-bottom: 1em; + width: 100%; + padding: 0; +} +.error, +ul.errorlist li { + color: #a40000; +} +input.error { + border-color: #a40000; + background-color: rgba(164, 0, 0, 0.25); +} +.game h2 { + margin: 0.5em 0; +} +.grid_1, +.grid_2, +.grid_3, +.grid_4, +.grid_5, +.grid_6, +.grid_7, +.grid_8, +.grid_9, +.grid_10, +.grid_11, +.grid_12 { + display: inline; + float: left; + margin: 0px 10px; + position: relative; + box-sizing: border-box; +} +.grid_1 { + width: 60px; +} +.grid_2 { + width: 140px; +} +.grid_3 { + width: 220px; +} +.grid_4 { + width: 300px; +} +.grid_5 { + width: 380px; +} +.grid_6 { + width: 460px; +} +.grid_7 { + width: 540px; +} +.grid_8 { + width: 620px; +} +.grid_9 { + width: 700px; +} +.grid_10 { + width: 780px; +} +.grid_11 { + width: 860px; +} +.grid_12 { + width: 940px; +} +.more_link { + text-align: right; + clear: left; +} +.pagination { + clear: both; + margin-bottom: 1em; + padding: 0; + position: relative; + text-align: center; + z-index: 30; +} +.pagination a { + background-color: #000000; + background: linear-gradient(to bottom, #45484d 0%, #000000 100%); + border-radius: 5px; + display: inline-block; + font-weight: bold; + padding: 0.5em 1em; + text-decoration: none; +} +.pagination a:link, +.pagination a:visited { + color: #fff; +} +.pagination a:hover, +.pagination a.active { + color: #bc0a19; +} +.pagination a.disabled, +.pagination a.disabled:hover { + color: #666; +} +.pagination a.previous { + float: left; + border-radius: 10px 5px 5px 10px; +} +.pagination a.next { + float: right; + border-radius: 5px 10px 10px 5px; +} +.player { + margin: 0 auto; + float: none; +} +.right { + text-align: right; +} +.thumbnail { + display: block; + position: relative; + float: left; + height: 140px; + width: 140px; + padding: 5px; + border: 0; + margin: 5px; + background: transparent url('../img/thumbnail-bg.png') top left no-repeat; +} +@media screen and (min-width: 700px) { + #siteheader { + min-height: 110px; + width: 960px; + margin: 0 auto; + padding: 0; + position: relative; + z-index: 50; + } + #sitelogo { + background: url(../img/logo.png) no-repeat; + height: 110px; + margin: 0; + padding: 0; + position: absolute; + top: 5px; + left: 5px; + text-indent: -9999px; + width: 233px; + z-index: 99; + } + #sitelogo a { + display: block; + height: 110px; + left: 0; + position: absolute; + top: 0; + width: 233px; + } + #mainnav { + left: 233px; + position: absolute; + bottom: 0px; + } + #mainnav #toggle, + #mainnav .toggle { + display: none; + } + #mainnav ul.main_menu { + list-style: none; + margin: 0; + padding: 0; + } + #mainnav ul.main_menu > li { + display: inline-block; + min-width: 50px; + padding: 8px; + font: normal small-caps 18px 'Amerika Sans', sans-serif; + text-align: center; + text-shadow: 2px 2px 2px #2e3436; + margin: 0; + } + #mainnav ul.main_menu > li a { + color: #000; + text-decoration: none; + font-weight: normal; + } + #mainnav ul.main_menu > li a.active { + color: #bc0a19; + } + #mainnav ul.main_menu > li a:hover { + color: #FFF; + } + #mainnav ul.main_menu > li:first-child { + padding-left: 0; + } + #mainnav ul.main_menu > li:last-child { + padding-right: 0; + } + #mainnav ul.main_menu > li > ul { + display: none; + background: rgba(255, 255, 255, 0.8); + border-radius: 10px; + padding: 0.25em; + min-width: 10em; + position: absolute; + top: 100%; + margin: 0 0 0 -15px; + box-shadow: -1px 1px 5px 0px rgba(0, 0, 0, 0.75); + transition: all 0.25s linear; + } + #mainnav ul.main_menu > li > ul li { + display: block; + float: none; + font: normal small-caps 14pt 'Amerika Sans', sans-serif; + text-align: left; + } + #mainnav ul.main_menu > li > ul li a { + display: block; + color: black; + padding: 5px; + transition: all 0.25s linear; + border-radius: 0.5em; + } + #mainnav ul.main_menu > li > ul li a:hover { + color: white; + background: #bc0a19; + background: linear-gradient(135deg, #a90329 0%, #8f0222 44%, #6d0019 100%); + transition: all 0.25s linear; + } + #mainnav ul.main_menu li:hover > ul { + display: block; + } +} +@media screen and (max-width: 699px) { + body { + margin: 5px 10px; + background: url('../img/background_mobile.png') no-repeat top center; + background-attachment: fixed; + font: 12pt "Philosopher", Georgia, serif; + } + img { + max-width: 100%; + height: auto; + } + img.thumbnail { + display: block; + float: left; + height: 70px; + width: 70px; + margin: 5px; + box-shadow: 2px 2px 5px #888; + } + img.posting_image, + img.partner { + float: left; + width: 99px; + height: 59px; + padding: 2px; + margin: 1em 0.5em 0 0; + border: 1px solid #babdb6; + } + ul.main_dropdown { + list-style-type: none; + margin: 0; + padding: 0; + } + ul.main_dropdown li { + padding: 0; + } + ul.main_dropdown a { + padding-left: 2em; + font-size: 12pt; + } + #display .grid_10 { + margin: 0; + position: relative; + z-index: 1; + } + #display .next, + #display .previous { + display: block; + position: absolute; + top: 0px; + width: 45px; + height: 100%; + margin: 0px; + padding: 0; + text-indent: 9999px; + overflow: hidden; + opacity: .5; + } + #display .next:hover, + #display .previous:hover { + opacity: .9; + transition: all 0.2s ease-out; + } + #display .next { + background: transparent url(../img/right-arrow.png) no-repeat center center; + right: 0px; + z-index: 3; + } + #display .previous { + background: transparent url(../img/left-arrow.png) no-repeat center center; + left: 0px; + z-index: 2; + } + #footer { + border-top: 1px solid black; + text-align: center; + } + #jumbotron { + background: none !important; + } + #maincontent { + width: 100%; + } + #mainnav { + display: block; + float: right; + } + #navigation { + margin: 10px 0; + padding: 0; + background: #45484d url("../img/navigation-mobile.png") top left repeat-x; + background-size: contain; + } + #navigation a { + font: bold 12px Arial; + color: #FFF; + text-decoration: none; + } + #navigation li { + display: inline-block; + padding: 0.5em 0.3em 0.5em 0.5em; + text-align: center; + border-left: 1px solid #ffffff; + margin: 0; + } + #navigation li:first-of-type { + border: none; + } + #sitelogo { + background: url('../img/logo_mobile.png') no-repeat; + width: 114px; + height: 54px; + left: 5px; + margin: 0; + padding: 0; + text-indent: -9999px; + top: 5px; + z-index: 20; + float: left; + } + #sitelogo a { + display: block; + width: 114px; + height: 54px; + } + #siteheader:after { + content: ""; + clear: both; + display: block; + visibility: hidden; + height: 0px; + } + #redbox { + margin-top: 1em; + display: block; + } + #redbox h3 { + margin: 0.5em 0; + } + #redbox ul li { + margin-bottom: 0.75em; + } + #teaser { + background: none; + margin-bottom: 1em; + } + #teaser_text { + background: rgba(255, 255, 255, 0.5); + } + #topnav a { + display: inline-block; + color: #000; + font: 400 small-caps 24pt 'Amerika Sans', sans-serif; + min-width: 80px; + text-align: center; + text-decoration: none; + text-shadow: 2px 2px 2px #2e3436; + padding: 5px; + } + #topnav a.active { + color: #bc0a19; + } + #topnav a:hover { + color: #FFF; + } + #toggle, + .toggle { + display: none; + } + #toggle:checked ~ .main_menu { + display: block; + opacity: 1; + } + #toggle:checked ~ .toggle, + .toggle:hover { + background: #45ABD6; + } + #usernav a { + display: inline-block; + margin: 0 0.5em; + } + .comment_picture { + display: table-cell; + padding: 0px 10px; + width: 60px; + vertical-align: top; + } + .comment_header { + display: table-cell; + padding: 0px 10px; + width: 140px; + vertical-align: top; + } + .comment_header h3 { + margin: 0; + } + .comment { + display: block; + } + .comment_picture { + display: block; + float: left; + vertical-align: top; + width: 60px; + } + .comment_header { + display: block; + float: left; + padding: 0px 10px; + vertical-align: top; + width: 140px; + } + .comment_header h3 { + margin: 0; + } + .comment_text { + border-top: 1px solid #45484d; + display: block; + margin: 0px 10px; + padding-top: 0.5em; + clear: both; + } + .gallery { + float: left; + width: 150px; + height: 150px; + margin: 10px; + } + .gallery h3 { + font-size: 12pt; + } + .game img { + float: right; + margin: 0.5em 0 0.5em 1em; + width: 140px; + height: auto; + box-shadow: 1px 1px 5px 1px #444; + } + .game:nth-child(2n+1) img { + float: left; + margin-right: 1em; + margin: 0.5em 2em 0.5em 0; + } + .grid_2 { + min-width: 140px; + width: 31%; + margin: 1% 0 1% 0; + } + .grid_3 { + width: 48%; + margin: 1% 0 1% 0; + } + .grid_4, + .grid_5, + .grid_6, + .grid_7, + .grid_8, + .grid_9, + .grid_10, + .grid_11, + .grid_12 { + clear: both; + margin: 0; + width: 100%; + } + .main_menu { + position: absolute; + display: none; + right: 0; + min-width: 50%; + z-index: 999; + background: #eeeeec; + margin: 0; + padding: 0; + border-top: 1px solid #a40000; + border-bottom: 3px solid #a40000; + } + .main_menu li { + display: block; + list-style: none; + margin: 0; + } + .main_menu li a { + display: block; + width: 100%; + text-decoration: none; + font: 400 small-caps 18px 'Amerika Sans', sans-serif; + color: black; + box-sizing: border-box; + border-left: 0px solid #eeeeec; + padding: 0.5em 1em; + line-height: 1; + transition: all 0.25s linear; + } + .main_menu li a:hover, + .main_menu li a:focus { + color: #a40000; + border-left: 3px solid #a40000; + } + .officer { + float: left; + width: 25%; + padding: 5px; + box-sizing: border-box; + text-align: center; + } + .officer img { + border: 0; + border-radius: 50%; + box-shadow: 1px 1px 5px 1px #444; + width: 100%; + height: 100%; + } + .officer .function { + font-size: small; + margin-top: 0.25em; + } + .toggle { + background: #a40000; + border-radius: 5px; + color: #FFFFFF; + cursor: pointer; + display: block; + margin: 8px 0; + padding: 10px; + position: relative; + transition: all 0.5s linear; + /*user-select: none;*/ + z-index: 2; + } + .thumbnail { + display: block; + position: relative; + float: left; + height: 70px; + padding: 0; + width: 70px; + margin: 5px; + box-shadow: 2px 2px 5px #888; + } + .thumbnail img { + height: 70px; + width: 70px; + } +} +@media screen and (min-width: 700px) { + body { + position: relative; + margin: 0; + padding: 0; + min-width: 960px; + height: 100%; + } + #body { + background-color: #ffffff; + background-image: url('../img/kranich.png'), url('../img/header_bg.jpg'); + background-repeat: no-repeat, no-repeat; + background-position: center bottom, center top; + background-attachment: scroll, fixed; + } + #bottom_buttonbar { + position: absolute; + bottom: 0px; + margin: 0; + width: 100%; + } + #content { + width: 940px; + margin: 0px 10px; + position: relative; + } + #display .next, + #display .previous { + display: block; + position: absolute; + top: 0px; + width: 60px; + height: 100%; + margin: 0px; + padding: 0; + text-indent: 9999px; + overflow: hidden; + opacity: .5; + } + #display .next:hover, + #display .previous:hover { + opacity: 1; + transition: all 0.2s ease-out; + } + #display .next { + background: transparent url(../img/right-arrow.png) no-repeat center center; + right: 10px; + z-index: 3; + } + #display .previous { + background: transparent url(../img/left-arrow.png) no-repeat center center; + left: 10px; + z-index: 2; + } + #display img { + box-shadow: 1px 1px 5px 1px #444; + } + #footer { + width: 920px; + min-height: 50px; + margin: 20px auto 0 auto; + z-index: 30; + } + #footer p { + text-align: center; + } + #google_maps { + position: relative; + top: 0px; + left: 0px; + height: 280px; + padding: 10px; + border-radius: 0px 10px 10px 0px; + } + #jumbotron { + clear: both; + position: relative; + padding: 0; + width: 940px; + margin: 0 10px 1em 10px; + z-index: 5; + min-height: 300px; + border: none; + border-radius: 10px; + background-repeat: no-repeat; + background-color: #333; + background-position: center left; + } + #jumbotron > h2, + #jumbotron > h1 { + color: #eff0ef; + text-shadow: 1px 1px 1px #000; + position: absolute; + top: 33%; + left: 10px; + max-width: 600px; + margin: 0; + } + #jumbotron #teaser_text { + display: block; + position: absolute; + left: 0px; + bottom: 0px; + width: 620px; + color: #FFF; + background: rgba(0, 0, 0, 0.5); + padding: 1em; + border-radius: 0px 0px 0px 10px; + } + #jumbotron #teaser_text a:link, + #jumbotron #teaser_text a:active, + #jumbotron #teaser_text a:visited { + color: #fff; + text-decoration: underline; + } + #maincontent { + margin: 0 auto; + height: auto !important; + width: 960px; + min-height: 800px; + padding: 10px 0 2em 0; + position: relative; + z-index: 19; + border-radius: 10px; + background: rgba(255, 255, 255, 0.5); + box-shadow: 0px 0px 20px 1px rgba(0, 0, 0, 0.75); + } + #messages { + clear: both; + margin: 0 auto; + padding: 8px 0 0 30px; + width: 920px; + list-style: none; + } + #messages li.success { + color: #253324; + background: #89bd84; + border: 1px solid #253324; + border-radius: 10px; + margin: 10px; + padding: 10px; + } + #navigation { + clear: both; + background: url(../img/navigation-bg.png) no-repeat left top; + height: 56px; + margin: 0 auto; + padding: 8px 35px 0px 25px; + position: relative; + width: 900px; + z-index: 30; + } + #navigation a { + background: url(../img/navigation-separator.png) no-repeat right center; + color: #FFF; + display: inline-block; + line-height: 50px; + font-weight: bold; + height: 50px; + padding: 0 15px; + text-decoration: none; + } + #navigation a:hover, + #navigation a.active { + background: url(../img/navigation-hover.png) repeat-x left top; + color: #3B3B3B; + } + #navigation li { + display: inline; + } + #recaptcha_widget_div { + margin-top: -20px; + } + #redbox { + position: absolute; + top: 0px; + right: 0px; + height: 280px; + width: 280px; + border-radius: 0px 10px 10px 0px; + z-index: 100; + } + #redbox h3 { + margin: 0.5em 0; + } + #redbox ul li { + line-height: 1em; + margin-bottom: 0.5em; + } + #usernav { + position: absolute; + top: 0; + right: 0; + text-align: right; + background: black; + background: linear-gradient(to bottom, #45484d 0%, #000000 100%); + border-radius: 0 0 0 10px; + font-size: 14pt; + color: #FFF; + padding: 10px 10px; + z-index: 50; + box-shadow: -1px -1px 5px 1px rgba(0, 0, 0, 0.75); + } + #usernav a { + color: #FFF; + } + .comment_picture { + display: table-cell; + padding: 0px 10px; + width: 60px; + vertical-align: top; + } + .comment_header { + display: table-cell; + padding: 0px 10px; + width: 140px; + vertical-align: top; + } + .comment_header h3 { + margin: 0; + } + .comment_text { + display: table-cell; + padding: 0px 10px; + width: auto; + max-width: 700px; + } + .gallery { + display: inline; + float: left; + height: 200px; + margin: 10px; + overflow: hidden; + text-align: center; + width: 300px; + } + .gallery .thumbnail { + display: block; + float: none; + margin: 5px auto; + } + .game img { + float: right; + margin: 0.5em 0 0.5em 1em; + width: 300px; + height: auto; + box-shadow: 1px 1px 5px 1px #444; + } + .game:nth-child(2n+1) img { + float: left; + margin-right: 1em; + margin: 0.5em 2em 0.5em 0; + } + .officer { + float: left; + width: 140px; + margin: 5px; + box-sizing: border-box; + text-align: center; + } + .officer img { + border: 0; + border-radius: 50%; + box-shadow: 1px 1px 5px 1px #444; + width: 130px; + height: 130px; + } + .officer .function { + font-size: small; + margin-top: 0.25em; + } + img.posting_image, + img.partner { + float: left; + width: 200px; + height: 120px; + padding: 2px; + margin: 0 1em 1em 0; + border: 1px solid #babdb6; + } + .thumbnail a.delete_image { + position: absolute; + right: 4px; + bottom: 0px; + } +} +@page { + margin: 1cm 1cm 1cm 2cm; + size: A4 portrait; +} +@media print { + a:link, + a:visited { + color: black; + font-weight: bold; + } + body, + article { + width: 100%; + margin: 0; + padding: 0; + color: #000; + background: #fff; + } + h1 { + font-size: 32pt; + } + h2, + h3, + h4, + h5, + h6 { + text-shadow: none; + page-break-after: avoid; + } + img { + max-width: 100% !important; + page-break-inside: avoid; + } + nav, + aside { + display: none; + } + ul { + page-break-inside: avoid; + } + #footer { + width: 100%; + padding-top: 0.5em; + border-top: 1px solid black; + text-align: center; + } + #jumbotron { + background: none !important; + } + #maincontent nav { + display: none; + } + #maincontent aside { + display: none; + } + #sitelogo { + background: url(../img/logo.png) top right no-repeat; + background-size: contain; + left: 0; + margin: 0; + padding: 0; + line-height: 1cm; + font-family: 'Amerika Sans', Helvetica; + font-size: 8pt; + top: 5px; + z-index: 99; + } + #comment_form, + #comments, + #footer, + #navigation, + #mainnav, + #usernav, + #bottom_buttonbar, + #footer > form { + display: none; + } + .grid_6, + grid_7, + .grid_8, + grid_9, + .grid_10, + .grid_11, + .grid_12 { + width: 100%; + } + .more_link { + display: none; + } +} +.fa { + display: inline-block; + font: normal normal normal 14px/1 FontAwesome; + font-size: inherit; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +/* makes the font 33% larger relative to the icon container */ +.fa-lg { + font-size: 1.33333333em; + line-height: 0.75em; + vertical-align: -15%; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-fw { + width: 1.28571429em; + text-align: center; +} +.fa-ul { + padding-left: 0; + margin-left: 2.14285714em; + list-style-type: none; +} +.fa-ul > li { + position: relative; +} +.fa-li { + position: absolute; + left: -2.14285714em; + width: 2.14285714em; + top: 0.14285714em; + text-align: center; +} +.fa-li.fa-lg { + left: -1.85714286em; +} +/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ +.fa-glass:before { + content: "\f000"; +} +.fa-music:before { + content: "\f001"; +} +.fa-search:before { + content: "\f002"; +} +.fa-envelope-o:before { + content: "\f003"; +} +.fa-heart:before { + content: "\f004"; +} +.fa-star:before { + content: "\f005"; +} +.fa-star-o:before { + content: "\f006"; +} +.fa-user:before { + content: "\f007"; +} +.fa-film:before { + content: "\f008"; +} +.fa-th-large:before { + content: "\f009"; +} +.fa-th:before { + content: "\f00a"; +} +.fa-th-list:before { + content: "\f00b"; +} +.fa-check:before { + content: "\f00c"; +} +.fa-remove:before, +.fa-close:before, +.fa-times:before { + content: "\f00d"; +} +.fa-search-plus:before { + content: "\f00e"; +} +.fa-search-minus:before { + content: "\f010"; +} +.fa-power-off:before { + content: "\f011"; +} +.fa-signal:before { + content: "\f012"; +} +.fa-gear:before, +.fa-cog:before { + content: "\f013"; +} +.fa-trash-o:before { + content: "\f014"; +} +.fa-home:before { + content: "\f015"; +} +.fa-file-o:before { + content: "\f016"; +} +.fa-clock-o:before { + content: "\f017"; +} +.fa-road:before { + content: "\f018"; +} +.fa-download:before { + content: "\f019"; +} +.fa-arrow-circle-o-down:before { + content: "\f01a"; +} +.fa-arrow-circle-o-up:before { + content: "\f01b"; +} +.fa-inbox:before { + content: "\f01c"; +} +.fa-play-circle-o:before { + content: "\f01d"; +} +.fa-rotate-right:before, +.fa-repeat:before { + content: "\f01e"; +} +.fa-refresh:before { + content: "\f021"; +} +.fa-list-alt:before { + content: "\f022"; +} +.fa-lock:before { + content: "\f023"; +} +.fa-flag:before { + content: "\f024"; +} +.fa-headphones:before { + content: "\f025"; +} +.fa-volume-off:before { + content: "\f026"; +} +.fa-volume-down:before { + content: "\f027"; +} +.fa-volume-up:before { + content: "\f028"; +} +.fa-qrcode:before { + content: "\f029"; +} +.fa-barcode:before { + content: "\f02a"; +} +.fa-tag:before { + content: "\f02b"; +} +.fa-tags:before { + content: "\f02c"; +} +.fa-book:before { + content: "\f02d"; +} +.fa-bookmark:before { + content: "\f02e"; +} +.fa-print:before { + content: "\f02f"; +} +.fa-camera:before { + content: "\f030"; +} +.fa-font:before { + content: "\f031"; +} +.fa-bold:before { + content: "\f032"; +} +.fa-italic:before { + content: "\f033"; +} +.fa-text-height:before { + content: "\f034"; +} +.fa-text-width:before { + content: "\f035"; +} +.fa-align-left:before { + content: "\f036"; +} +.fa-align-center:before { + content: "\f037"; +} +.fa-align-right:before { + content: "\f038"; +} +.fa-align-justify:before { + content: "\f039"; +} +.fa-list:before { + content: "\f03a"; +} +.fa-dedent:before, +.fa-outdent:before { + content: "\f03b"; +} +.fa-indent:before { + content: "\f03c"; +} +.fa-video-camera:before { + content: "\f03d"; +} +.fa-photo:before, +.fa-image:before, +.fa-picture-o:before { + content: "\f03e"; +} +.fa-pencil:before { + content: "\f040"; +} +.fa-map-marker:before { + content: "\f041"; +} +.fa-adjust:before { + content: "\f042"; +} +.fa-tint:before { + content: "\f043"; +} +.fa-edit:before, +.fa-pencil-square-o:before { + content: "\f044"; +} +.fa-share-square-o:before { + content: "\f045"; +} +.fa-check-square-o:before { + content: "\f046"; +} +.fa-arrows:before { + content: "\f047"; +} +.fa-step-backward:before { + content: "\f048"; +} +.fa-fast-backward:before { + content: "\f049"; +} +.fa-backward:before { + content: "\f04a"; +} +.fa-play:before { + content: "\f04b"; +} +.fa-pause:before { + content: "\f04c"; +} +.fa-stop:before { + content: "\f04d"; +} +.fa-forward:before { + content: "\f04e"; +} +.fa-fast-forward:before { + content: "\f050"; +} +.fa-step-forward:before { + content: "\f051"; +} +.fa-eject:before { + content: "\f052"; +} +.fa-chevron-left:before { + content: "\f053"; +} +.fa-chevron-right:before { + content: "\f054"; +} +.fa-plus-circle:before { + content: "\f055"; +} +.fa-minus-circle:before { + content: "\f056"; +} +.fa-times-circle:before { + content: "\f057"; +} +.fa-check-circle:before { + content: "\f058"; +} +.fa-question-circle:before { + content: "\f059"; +} +.fa-info-circle:before { + content: "\f05a"; +} +.fa-crosshairs:before { + content: "\f05b"; +} +.fa-times-circle-o:before { + content: "\f05c"; +} +.fa-check-circle-o:before { + content: "\f05d"; +} +.fa-ban:before { + content: "\f05e"; +} +.fa-arrow-left:before { + content: "\f060"; +} +.fa-arrow-right:before { + content: "\f061"; +} +.fa-arrow-up:before { + content: "\f062"; +} +.fa-arrow-down:before { + content: "\f063"; +} +.fa-mail-forward:before, +.fa-share:before { + content: "\f064"; +} +.fa-expand:before { + content: "\f065"; +} +.fa-compress:before { + content: "\f066"; +} +.fa-plus:before { + content: "\f067"; +} +.fa-minus:before { + content: "\f068"; +} +.fa-asterisk:before { + content: "\f069"; +} +.fa-exclamation-circle:before { + content: "\f06a"; +} +.fa-gift:before { + content: "\f06b"; +} +.fa-leaf:before { + content: "\f06c"; +} +.fa-fire:before { + content: "\f06d"; +} +.fa-eye:before { + content: "\f06e"; +} +.fa-eye-slash:before { + content: "\f070"; +} +.fa-warning:before, +.fa-exclamation-triangle:before { + content: "\f071"; +} +.fa-plane:before { + content: "\f072"; +} +.fa-calendar:before { + content: "\f073"; +} +.fa-random:before { + content: "\f074"; +} +.fa-comment:before { + content: "\f075"; +} +.fa-magnet:before { + content: "\f076"; +} +.fa-chevron-up:before { + content: "\f077"; +} +.fa-chevron-down:before { + content: "\f078"; +} +.fa-retweet:before { + content: "\f079"; +} +.fa-shopping-cart:before { + content: "\f07a"; +} +.fa-folder:before { + content: "\f07b"; +} +.fa-folder-open:before { + content: "\f07c"; +} +.fa-arrows-v:before { + content: "\f07d"; +} +.fa-arrows-h:before { + content: "\f07e"; +} +.fa-bar-chart-o:before, +.fa-bar-chart:before { + content: "\f080"; +} +.fa-twitter-square:before { + content: "\f081"; +} +.fa-facebook-square:before { + content: "\f082"; +} +.fa-camera-retro:before { + content: "\f083"; +} +.fa-key:before { + content: "\f084"; +} +.fa-gears:before, +.fa-cogs:before { + content: "\f085"; +} +.fa-comments:before { + content: "\f086"; +} +.fa-thumbs-o-up:before { + content: "\f087"; +} +.fa-thumbs-o-down:before { + content: "\f088"; +} +.fa-star-half:before { + content: "\f089"; +} +.fa-heart-o:before { + content: "\f08a"; +} +.fa-sign-out:before { + content: "\f08b"; +} +.fa-linkedin-square:before { + content: "\f08c"; +} +.fa-thumb-tack:before { + content: "\f08d"; +} +.fa-external-link:before { + content: "\f08e"; +} +.fa-sign-in:before { + content: "\f090"; +} +.fa-trophy:before { + content: "\f091"; +} +.fa-github-square:before { + content: "\f092"; +} +.fa-upload:before { + content: "\f093"; +} +.fa-lemon-o:before { + content: "\f094"; +} +.fa-phone:before { + content: "\f095"; +} +.fa-square-o:before { + content: "\f096"; +} +.fa-bookmark-o:before { + content: "\f097"; +} +.fa-phone-square:before { + content: "\f098"; +} +.fa-twitter:before { + content: "\f099"; +} +.fa-facebook-f:before, +.fa-facebook:before { + content: "\f09a"; +} +.fa-github:before { + content: "\f09b"; +} +.fa-unlock:before { + content: "\f09c"; +} +.fa-credit-card:before { + content: "\f09d"; +} +.fa-feed:before, +.fa-rss:before { + content: "\f09e"; +} +.fa-hdd-o:before { + content: "\f0a0"; +} +.fa-bullhorn:before { + content: "\f0a1"; +} +.fa-bell:before { + content: "\f0f3"; +} +.fa-certificate:before { + content: "\f0a3"; +} +.fa-hand-o-right:before { + content: "\f0a4"; +} +.fa-hand-o-left:before { + content: "\f0a5"; +} +.fa-hand-o-up:before { + content: "\f0a6"; +} +.fa-hand-o-down:before { + content: "\f0a7"; +} +.fa-arrow-circle-left:before { + content: "\f0a8"; +} +.fa-arrow-circle-right:before { + content: "\f0a9"; +} +.fa-arrow-circle-up:before { + content: "\f0aa"; +} +.fa-arrow-circle-down:before { + content: "\f0ab"; +} +.fa-globe:before { + content: "\f0ac"; +} +.fa-wrench:before { + content: "\f0ad"; +} +.fa-tasks:before { + content: "\f0ae"; +} +.fa-filter:before { + content: "\f0b0"; +} +.fa-briefcase:before { + content: "\f0b1"; +} +.fa-arrows-alt:before { + content: "\f0b2"; +} +.fa-group:before, +.fa-users:before { + content: "\f0c0"; +} +.fa-chain:before, +.fa-link:before { + content: "\f0c1"; +} +.fa-cloud:before { + content: "\f0c2"; +} +.fa-flask:before { + content: "\f0c3"; +} +.fa-cut:before, +.fa-scissors:before { + content: "\f0c4"; +} +.fa-copy:before, +.fa-files-o:before { + content: "\f0c5"; +} +.fa-paperclip:before { + content: "\f0c6"; +} +.fa-save:before, +.fa-floppy-o:before { + content: "\f0c7"; +} +.fa-square:before { + content: "\f0c8"; +} +.fa-navicon:before, +.fa-reorder:before, +.fa-bars:before { + content: "\f0c9"; +} +.fa-list-ul:before { + content: "\f0ca"; +} +.fa-list-ol:before { + content: "\f0cb"; +} +.fa-strikethrough:before { + content: "\f0cc"; +} +.fa-underline:before { + content: "\f0cd"; +} +.fa-table:before { + content: "\f0ce"; +} +.fa-magic:before { + content: "\f0d0"; +} +.fa-truck:before { + content: "\f0d1"; +} +.fa-pinterest:before { + content: "\f0d2"; +} +.fa-pinterest-square:before { + content: "\f0d3"; +} +.fa-google-plus-square:before { + content: "\f0d4"; +} +.fa-google-plus:before { + content: "\f0d5"; +} +.fa-money:before { + content: "\f0d6"; +} +.fa-caret-down:before { + content: "\f0d7"; +} +.fa-caret-up:before { + content: "\f0d8"; +} +.fa-caret-left:before { + content: "\f0d9"; +} +.fa-caret-right:before { + content: "\f0da"; +} +.fa-columns:before { + content: "\f0db"; +} +.fa-unsorted:before, +.fa-sort:before { + content: "\f0dc"; +} +.fa-sort-down:before, +.fa-sort-desc:before { + content: "\f0dd"; +} +.fa-sort-up:before, +.fa-sort-asc:before { + content: "\f0de"; +} +.fa-envelope:before { + content: "\f0e0"; +} +.fa-linkedin:before { + content: "\f0e1"; +} +.fa-rotate-left:before, +.fa-undo:before { + content: "\f0e2"; +} +.fa-legal:before, +.fa-gavel:before { + content: "\f0e3"; +} +.fa-dashboard:before, +.fa-tachometer:before { + content: "\f0e4"; +} +.fa-comment-o:before { + content: "\f0e5"; +} +.fa-comments-o:before { + content: "\f0e6"; +} +.fa-flash:before, +.fa-bolt:before { + content: "\f0e7"; +} +.fa-sitemap:before { + content: "\f0e8"; +} +.fa-umbrella:before { + content: "\f0e9"; +} +.fa-paste:before, +.fa-clipboard:before { + content: "\f0ea"; +} +.fa-lightbulb-o:before { + content: "\f0eb"; +} +.fa-exchange:before { + content: "\f0ec"; +} +.fa-cloud-download:before { + content: "\f0ed"; +} +.fa-cloud-upload:before { + content: "\f0ee"; +} +.fa-user-md:before { + content: "\f0f0"; +} +.fa-stethoscope:before { + content: "\f0f1"; +} +.fa-suitcase:before { + content: "\f0f2"; +} +.fa-bell-o:before { + content: "\f0a2"; +} +.fa-coffee:before { + content: "\f0f4"; +} +.fa-cutlery:before { + content: "\f0f5"; +} +.fa-file-text-o:before { + content: "\f0f6"; +} +.fa-building-o:before { + content: "\f0f7"; +} +.fa-hospital-o:before { + content: "\f0f8"; +} +.fa-ambulance:before { + content: "\f0f9"; +} +.fa-medkit:before { + content: "\f0fa"; +} +.fa-fighter-jet:before { + content: "\f0fb"; +} +.fa-beer:before { + content: "\f0fc"; +} +.fa-h-square:before { + content: "\f0fd"; +} +.fa-plus-square:before { + content: "\f0fe"; +} +.fa-angle-double-left:before { + content: "\f100"; +} +.fa-angle-double-right:before { + content: "\f101"; +} +.fa-angle-double-up:before { + content: "\f102"; +} +.fa-angle-double-down:before { + content: "\f103"; +} +.fa-angle-left:before { + content: "\f104"; +} +.fa-angle-right:before { + content: "\f105"; +} +.fa-angle-up:before { + content: "\f106"; +} +.fa-angle-down:before { + content: "\f107"; +} +.fa-desktop:before { + content: "\f108"; +} +.fa-laptop:before { + content: "\f109"; +} +.fa-tablet:before { + content: "\f10a"; +} +.fa-mobile-phone:before, +.fa-mobile:before { + content: "\f10b"; +} +.fa-circle-o:before { + content: "\f10c"; +} +.fa-quote-left:before { + content: "\f10d"; +} +.fa-quote-right:before { + content: "\f10e"; +} +.fa-spinner:before { + content: "\f110"; +} +.fa-circle:before { + content: "\f111"; +} +.fa-mail-reply:before, +.fa-reply:before { + content: "\f112"; +} +.fa-github-alt:before { + content: "\f113"; +} +.fa-folder-o:before { + content: "\f114"; +} +.fa-folder-open-o:before { + content: "\f115"; +} +.fa-smile-o:before { + content: "\f118"; +} +.fa-frown-o:before { + content: "\f119"; +} +.fa-meh-o:before { + content: "\f11a"; +} +.fa-gamepad:before { + content: "\f11b"; +} +.fa-keyboard-o:before { + content: "\f11c"; +} +.fa-flag-o:before { + content: "\f11d"; +} +.fa-flag-checkered:before { + content: "\f11e"; +} +.fa-terminal:before { + content: "\f120"; +} +.fa-code:before { + content: "\f121"; +} +.fa-mail-reply-all:before, +.fa-reply-all:before { + content: "\f122"; +} +.fa-star-half-empty:before, +.fa-star-half-full:before, +.fa-star-half-o:before { + content: "\f123"; +} +.fa-location-arrow:before { + content: "\f124"; +} +.fa-crop:before { + content: "\f125"; +} +.fa-code-fork:before { + content: "\f126"; +} +.fa-unlink:before, +.fa-chain-broken:before { + content: "\f127"; +} +.fa-question:before { + content: "\f128"; +} +.fa-info:before { + content: "\f129"; +} +.fa-exclamation:before { + content: "\f12a"; +} +.fa-superscript:before { + content: "\f12b"; +} +.fa-subscript:before { + content: "\f12c"; +} +.fa-eraser:before { + content: "\f12d"; +} +.fa-puzzle-piece:before { + content: "\f12e"; +} +.fa-microphone:before { + content: "\f130"; +} +.fa-microphone-slash:before { + content: "\f131"; +} +.fa-shield:before { + content: "\f132"; +} +.fa-calendar-o:before { + content: "\f133"; +} +.fa-fire-extinguisher:before { + content: "\f134"; +} +.fa-rocket:before { + content: "\f135"; +} +.fa-maxcdn:before { + content: "\f136"; +} +.fa-chevron-circle-left:before { + content: "\f137"; +} +.fa-chevron-circle-right:before { + content: "\f138"; +} +.fa-chevron-circle-up:before { + content: "\f139"; +} +.fa-chevron-circle-down:before { + content: "\f13a"; +} +.fa-html5:before { + content: "\f13b"; +} +.fa-css3:before { + content: "\f13c"; +} +.fa-anchor:before { + content: "\f13d"; +} +.fa-unlock-alt:before { + content: "\f13e"; +} +.fa-bullseye:before { + content: "\f140"; +} +.fa-ellipsis-h:before { + content: "\f141"; +} +.fa-ellipsis-v:before { + content: "\f142"; +} +.fa-rss-square:before { + content: "\f143"; +} +.fa-play-circle:before { + content: "\f144"; +} +.fa-ticket:before { + content: "\f145"; +} +.fa-minus-square:before { + content: "\f146"; +} +.fa-minus-square-o:before { + content: "\f147"; +} +.fa-level-up:before { + content: "\f148"; +} +.fa-level-down:before { + content: "\f149"; +} +.fa-check-square:before { + content: "\f14a"; +} +.fa-pencil-square:before { + content: "\f14b"; +} +.fa-external-link-square:before { + content: "\f14c"; +} +.fa-share-square:before { + content: "\f14d"; +} +.fa-compass:before { + content: "\f14e"; +} +.fa-toggle-down:before, +.fa-caret-square-o-down:before { + content: "\f150"; +} +.fa-toggle-up:before, +.fa-caret-square-o-up:before { + content: "\f151"; +} +.fa-toggle-right:before, +.fa-caret-square-o-right:before { + content: "\f152"; +} +.fa-euro:before, +.fa-eur:before { + content: "\f153"; +} +.fa-gbp:before { + content: "\f154"; +} +.fa-dollar:before, +.fa-usd:before { + content: "\f155"; +} +.fa-rupee:before, +.fa-inr:before { + content: "\f156"; +} +.fa-cny:before, +.fa-rmb:before, +.fa-yen:before, +.fa-jpy:before { + content: "\f157"; +} +.fa-ruble:before, +.fa-rouble:before, +.fa-rub:before { + content: "\f158"; +} +.fa-won:before, +.fa-krw:before { + content: "\f159"; +} +.fa-bitcoin:before, +.fa-btc:before { + content: "\f15a"; +} +.fa-file:before { + content: "\f15b"; +} +.fa-file-text:before { + content: "\f15c"; +} +.fa-sort-alpha-asc:before { + content: "\f15d"; +} +.fa-sort-alpha-desc:before { + content: "\f15e"; +} +.fa-sort-amount-asc:before { + content: "\f160"; +} +.fa-sort-amount-desc:before { + content: "\f161"; +} +.fa-sort-numeric-asc:before { + content: "\f162"; +} +.fa-sort-numeric-desc:before { + content: "\f163"; +} +.fa-thumbs-up:before { + content: "\f164"; +} +.fa-thumbs-down:before { + content: "\f165"; +} +.fa-youtube-square:before { + content: "\f166"; +} +.fa-youtube:before { + content: "\f167"; +} +.fa-xing:before { + content: "\f168"; +} +.fa-xing-square:before { + content: "\f169"; +} +.fa-youtube-play:before { + content: "\f16a"; +} +.fa-dropbox:before { + content: "\f16b"; +} +.fa-stack-overflow:before { + content: "\f16c"; +} +.fa-instagram:before { + content: "\f16d"; +} +.fa-flickr:before { + content: "\f16e"; +} +.fa-adn:before { + content: "\f170"; +} +.fa-bitbucket:before { + content: "\f171"; +} +.fa-bitbucket-square:before { + content: "\f172"; +} +.fa-tumblr:before { + content: "\f173"; +} +.fa-tumblr-square:before { + content: "\f174"; +} +.fa-long-arrow-down:before { + content: "\f175"; +} +.fa-long-arrow-up:before { + content: "\f176"; +} +.fa-long-arrow-left:before { + content: "\f177"; +} +.fa-long-arrow-right:before { + content: "\f178"; +} +.fa-apple:before { + content: "\f179"; +} +.fa-windows:before { + content: "\f17a"; +} +.fa-android:before { + content: "\f17b"; +} +.fa-linux:before { + content: "\f17c"; +} +.fa-dribbble:before { + content: "\f17d"; +} +.fa-skype:before { + content: "\f17e"; +} +.fa-foursquare:before { + content: "\f180"; +} +.fa-trello:before { + content: "\f181"; +} +.fa-female:before { + content: "\f182"; +} +.fa-male:before { + content: "\f183"; +} +.fa-gittip:before, +.fa-gratipay:before { + content: "\f184"; +} +.fa-sun-o:before { + content: "\f185"; +} +.fa-moon-o:before { + content: "\f186"; +} +.fa-archive:before { + content: "\f187"; +} +.fa-bug:before { + content: "\f188"; +} +.fa-vk:before { + content: "\f189"; +} +.fa-weibo:before { + content: "\f18a"; +} +.fa-renren:before { + content: "\f18b"; +} +.fa-pagelines:before { + content: "\f18c"; +} +.fa-stack-exchange:before { + content: "\f18d"; +} +.fa-arrow-circle-o-right:before { + content: "\f18e"; +} +.fa-arrow-circle-o-left:before { + content: "\f190"; +} +.fa-toggle-left:before, +.fa-caret-square-o-left:before { + content: "\f191"; +} +.fa-dot-circle-o:before { + content: "\f192"; +} +.fa-wheelchair:before { + content: "\f193"; +} +.fa-vimeo-square:before { + content: "\f194"; +} +.fa-turkish-lira:before, +.fa-try:before { + content: "\f195"; +} +.fa-plus-square-o:before { + content: "\f196"; +} +.fa-space-shuttle:before { + content: "\f197"; +} +.fa-slack:before { + content: "\f198"; +} +.fa-envelope-square:before { + content: "\f199"; +} +.fa-wordpress:before { + content: "\f19a"; +} +.fa-openid:before { + content: "\f19b"; +} +.fa-institution:before, +.fa-bank:before, +.fa-university:before { + content: "\f19c"; +} +.fa-mortar-board:before, +.fa-graduation-cap:before { + content: "\f19d"; +} +.fa-yahoo:before { + content: "\f19e"; +} +.fa-google:before { + content: "\f1a0"; +} +.fa-reddit:before { + content: "\f1a1"; +} +.fa-reddit-square:before { + content: "\f1a2"; +} +.fa-stumbleupon-circle:before { + content: "\f1a3"; +} +.fa-stumbleupon:before { + content: "\f1a4"; +} +.fa-delicious:before { + content: "\f1a5"; +} +.fa-digg:before { + content: "\f1a6"; +} +.fa-pied-piper:before { + content: "\f1a7"; +} +.fa-pied-piper-alt:before { + content: "\f1a8"; +} +.fa-drupal:before { + content: "\f1a9"; +} +.fa-joomla:before { + content: "\f1aa"; +} +.fa-language:before { + content: "\f1ab"; +} +.fa-fax:before { + content: "\f1ac"; +} +.fa-building:before { + content: "\f1ad"; +} +.fa-child:before { + content: "\f1ae"; +} +.fa-paw:before { + content: "\f1b0"; +} +.fa-spoon:before { + content: "\f1b1"; +} +.fa-cube:before { + content: "\f1b2"; +} +.fa-cubes:before { + content: "\f1b3"; +} +.fa-behance:before { + content: "\f1b4"; +} +.fa-behance-square:before { + content: "\f1b5"; +} +.fa-steam:before { + content: "\f1b6"; +} +.fa-steam-square:before { + content: "\f1b7"; +} +.fa-recycle:before { + content: "\f1b8"; +} +.fa-automobile:before, +.fa-car:before { + content: "\f1b9"; +} +.fa-cab:before, +.fa-taxi:before { + content: "\f1ba"; +} +.fa-tree:before { + content: "\f1bb"; +} +.fa-spotify:before { + content: "\f1bc"; +} +.fa-deviantart:before { + content: "\f1bd"; +} +.fa-soundcloud:before { + content: "\f1be"; +} +.fa-database:before { + content: "\f1c0"; +} +.fa-file-pdf-o:before { + content: "\f1c1"; +} +.fa-file-word-o:before { + content: "\f1c2"; +} +.fa-file-excel-o:before { + content: "\f1c3"; +} +.fa-file-powerpoint-o:before { + content: "\f1c4"; +} +.fa-file-photo-o:before, +.fa-file-picture-o:before, +.fa-file-image-o:before { + content: "\f1c5"; +} +.fa-file-zip-o:before, +.fa-file-archive-o:before { + content: "\f1c6"; +} +.fa-file-sound-o:before, +.fa-file-audio-o:before { + content: "\f1c7"; +} +.fa-file-movie-o:before, +.fa-file-video-o:before { + content: "\f1c8"; +} +.fa-file-code-o:before { + content: "\f1c9"; +} +.fa-vine:before { + content: "\f1ca"; +} +.fa-codepen:before { + content: "\f1cb"; +} +.fa-jsfiddle:before { + content: "\f1cc"; +} +.fa-life-bouy:before, +.fa-life-buoy:before, +.fa-life-saver:before, +.fa-support:before, +.fa-life-ring:before { + content: "\f1cd"; +} +.fa-circle-o-notch:before { + content: "\f1ce"; +} +.fa-ra:before, +.fa-rebel:before { + content: "\f1d0"; +} +.fa-ge:before, +.fa-empire:before { + content: "\f1d1"; +} +.fa-git-square:before { + content: "\f1d2"; +} +.fa-git:before { + content: "\f1d3"; +} +.fa-y-combinator-square:before, +.fa-yc-square:before, +.fa-hacker-news:before { + content: "\f1d4"; +} +.fa-tencent-weibo:before { + content: "\f1d5"; +} +.fa-qq:before { + content: "\f1d6"; +} +.fa-wechat:before, +.fa-weixin:before { + content: "\f1d7"; +} +.fa-send:before, +.fa-paper-plane:before { + content: "\f1d8"; +} +.fa-send-o:before, +.fa-paper-plane-o:before { + content: "\f1d9"; +} +.fa-history:before { + content: "\f1da"; +} +.fa-circle-thin:before { + content: "\f1db"; +} +.fa-header:before { + content: "\f1dc"; +} +.fa-paragraph:before { + content: "\f1dd"; +} +.fa-sliders:before { + content: "\f1de"; +} +.fa-share-alt:before { + content: "\f1e0"; +} +.fa-share-alt-square:before { + content: "\f1e1"; +} +.fa-bomb:before { + content: "\f1e2"; +} +.fa-soccer-ball-o:before, +.fa-futbol-o:before { + content: "\f1e3"; +} +.fa-tty:before { + content: "\f1e4"; +} +.fa-binoculars:before { + content: "\f1e5"; +} +.fa-plug:before { + content: "\f1e6"; +} +.fa-slideshare:before { + content: "\f1e7"; +} +.fa-twitch:before { + content: "\f1e8"; +} +.fa-yelp:before { + content: "\f1e9"; +} +.fa-newspaper-o:before { + content: "\f1ea"; +} +.fa-wifi:before { + content: "\f1eb"; +} +.fa-calculator:before { + content: "\f1ec"; +} +.fa-paypal:before { + content: "\f1ed"; +} +.fa-google-wallet:before { + content: "\f1ee"; +} +.fa-cc-visa:before { + content: "\f1f0"; +} +.fa-cc-mastercard:before { + content: "\f1f1"; +} +.fa-cc-discover:before { + content: "\f1f2"; +} +.fa-cc-amex:before { + content: "\f1f3"; +} +.fa-cc-paypal:before { + content: "\f1f4"; +} +.fa-cc-stripe:before { + content: "\f1f5"; +} +.fa-bell-slash:before { + content: "\f1f6"; +} +.fa-bell-slash-o:before { + content: "\f1f7"; +} +.fa-trash:before { + content: "\f1f8"; +} +.fa-copyright:before { + content: "\f1f9"; +} +.fa-at:before { + content: "\f1fa"; +} +.fa-eyedropper:before { + content: "\f1fb"; +} +.fa-paint-brush:before { + content: "\f1fc"; +} +.fa-birthday-cake:before { + content: "\f1fd"; +} +.fa-area-chart:before { + content: "\f1fe"; +} +.fa-pie-chart:before { + content: "\f200"; +} +.fa-line-chart:before { + content: "\f201"; +} +.fa-lastfm:before { + content: "\f202"; +} +.fa-lastfm-square:before { + content: "\f203"; +} +.fa-toggle-off:before { + content: "\f204"; +} +.fa-toggle-on:before { + content: "\f205"; +} +.fa-bicycle:before { + content: "\f206"; +} +.fa-bus:before { + content: "\f207"; +} +.fa-ioxhost:before { + content: "\f208"; +} +.fa-angellist:before { + content: "\f209"; +} +.fa-cc:before { + content: "\f20a"; +} +.fa-shekel:before, +.fa-sheqel:before, +.fa-ils:before { + content: "\f20b"; +} +.fa-meanpath:before { + content: "\f20c"; +} +.fa-buysellads:before { + content: "\f20d"; +} +.fa-connectdevelop:before { + content: "\f20e"; +} +.fa-dashcube:before { + content: "\f210"; +} +.fa-forumbee:before { + content: "\f211"; +} +.fa-leanpub:before { + content: "\f212"; +} +.fa-sellsy:before { + content: "\f213"; +} +.fa-shirtsinbulk:before { + content: "\f214"; +} +.fa-simplybuilt:before { + content: "\f215"; +} +.fa-skyatlas:before { + content: "\f216"; +} +.fa-cart-plus:before { + content: "\f217"; +} +.fa-cart-arrow-down:before { + content: "\f218"; +} +.fa-diamond:before { + content: "\f219"; +} +.fa-ship:before { + content: "\f21a"; +} +.fa-user-secret:before { + content: "\f21b"; +} +.fa-motorcycle:before { + content: "\f21c"; +} +.fa-street-view:before { + content: "\f21d"; +} +.fa-heartbeat:before { + content: "\f21e"; +} +.fa-venus:before { + content: "\f221"; +} +.fa-mars:before { + content: "\f222"; +} +.fa-mercury:before { + content: "\f223"; +} +.fa-intersex:before, +.fa-transgender:before { + content: "\f224"; +} +.fa-transgender-alt:before { + content: "\f225"; +} +.fa-venus-double:before { + content: "\f226"; +} +.fa-mars-double:before { + content: "\f227"; +} +.fa-venus-mars:before { + content: "\f228"; +} +.fa-mars-stroke:before { + content: "\f229"; +} +.fa-mars-stroke-v:before { + content: "\f22a"; +} +.fa-mars-stroke-h:before { + content: "\f22b"; +} +.fa-neuter:before { + content: "\f22c"; +} +.fa-genderless:before { + content: "\f22d"; +} +.fa-facebook-official:before { + content: "\f230"; +} +.fa-pinterest-p:before { + content: "\f231"; +} +.fa-whatsapp:before { + content: "\f232"; +} +.fa-server:before { + content: "\f233"; +} +.fa-user-plus:before { + content: "\f234"; +} +.fa-user-times:before { + content: "\f235"; +} +.fa-hotel:before, +.fa-bed:before { + content: "\f236"; +} +.fa-viacoin:before { + content: "\f237"; +} +.fa-train:before { + content: "\f238"; +} +.fa-subway:before { + content: "\f239"; +} +.fa-medium:before { + content: "\f23a"; +} +.fa-yc:before, +.fa-y-combinator:before { + content: "\f23b"; +} +.fa-optin-monster:before { + content: "\f23c"; +} +.fa-opencart:before { + content: "\f23d"; +} +.fa-expeditedssl:before { + content: "\f23e"; +} +.fa-battery-4:before, +.fa-battery-full:before { + content: "\f240"; +} +.fa-battery-3:before, +.fa-battery-three-quarters:before { + content: "\f241"; +} +.fa-battery-2:before, +.fa-battery-half:before { + content: "\f242"; +} +.fa-battery-1:before, +.fa-battery-quarter:before { + content: "\f243"; +} +.fa-battery-0:before, +.fa-battery-empty:before { + content: "\f244"; +} +.fa-mouse-pointer:before { + content: "\f245"; +} +.fa-i-cursor:before { + content: "\f246"; +} +.fa-object-group:before { + content: "\f247"; +} +.fa-object-ungroup:before { + content: "\f248"; +} +.fa-sticky-note:before { + content: "\f249"; +} +.fa-sticky-note-o:before { + content: "\f24a"; +} +.fa-cc-jcb:before { + content: "\f24b"; +} +.fa-cc-diners-club:before { + content: "\f24c"; +} +.fa-clone:before { + content: "\f24d"; +} +.fa-balance-scale:before { + content: "\f24e"; +} +.fa-hourglass-o:before { + content: "\f250"; +} +.fa-hourglass-1:before, +.fa-hourglass-start:before { + content: "\f251"; +} +.fa-hourglass-2:before, +.fa-hourglass-half:before { + content: "\f252"; +} +.fa-hourglass-3:before, +.fa-hourglass-end:before { + content: "\f253"; +} +.fa-hourglass:before { + content: "\f254"; +} +.fa-hand-grab-o:before, +.fa-hand-rock-o:before { + content: "\f255"; +} +.fa-hand-stop-o:before, +.fa-hand-paper-o:before { + content: "\f256"; +} +.fa-hand-scissors-o:before { + content: "\f257"; +} +.fa-hand-lizard-o:before { + content: "\f258"; +} +.fa-hand-spock-o:before { + content: "\f259"; +} +.fa-hand-pointer-o:before { + content: "\f25a"; +} +.fa-hand-peace-o:before { + content: "\f25b"; +} +.fa-trademark:before { + content: "\f25c"; +} +.fa-registered:before { + content: "\f25d"; +} +.fa-creative-commons:before { + content: "\f25e"; +} +.fa-gg:before { + content: "\f260"; +} +.fa-gg-circle:before { + content: "\f261"; +} +.fa-tripadvisor:before { + content: "\f262"; +} +.fa-odnoklassniki:before { + content: "\f263"; +} +.fa-odnoklassniki-square:before { + content: "\f264"; +} +.fa-get-pocket:before { + content: "\f265"; +} +.fa-wikipedia-w:before { + content: "\f266"; +} +.fa-safari:before { + content: "\f267"; +} +.fa-chrome:before { + content: "\f268"; +} +.fa-firefox:before { + content: "\f269"; +} +.fa-opera:before { + content: "\f26a"; +} +.fa-internet-explorer:before { + content: "\f26b"; +} +.fa-tv:before, +.fa-television:before { + content: "\f26c"; +} +.fa-contao:before { + content: "\f26d"; +} +.fa-500px:before { + content: "\f26e"; +} +.fa-amazon:before { + content: "\f270"; +} +.fa-calendar-plus-o:before { + content: "\f271"; +} +.fa-calendar-minus-o:before { + content: "\f272"; +} +.fa-calendar-times-o:before { + content: "\f273"; +} +.fa-calendar-check-o:before { + content: "\f274"; +} +.fa-industry:before { + content: "\f275"; +} +.fa-map-pin:before { + content: "\f276"; +} +.fa-map-signs:before { + content: "\f277"; +} +.fa-map-o:before { + content: "\f278"; +} +.fa-map:before { + content: "\f279"; +} +.fa-commenting:before { + content: "\f27a"; +} +.fa-commenting-o:before { + content: "\f27b"; +} +.fa-houzz:before { + content: "\f27c"; +} +.fa-vimeo:before { + content: "\f27d"; +} +.fa-black-tie:before { + content: "\f27e"; +} +.fa-fonticons:before { + content: "\f280"; +} diff --git a/src/kasu/static/js/jquery.formset.js b/src/kasu/static/js/jquery.formset.js new file mode 100644 index 0000000..d910758 --- /dev/null +++ b/src/kasu/static/js/jquery.formset.js @@ -0,0 +1,231 @@ +/** + * jQuery Formset 1.3-pre + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Licensed under the New BSD License + * See: http://www.opensource.org/licenses/bsd-license.php + */ +;(function($) { + $.fn.formset = function(opts) + { + var options = $.extend({}, $.fn.formset.defaults, opts), + flatExtraClasses = options.extraClasses.join(' '), + totalForms = $('#id_' + options.prefix + '-TOTAL_FORMS'), + maxForms = $('#id_' + options.prefix + '-MAX_NUM_FORMS'), + minForms = $('#id_' + options.prefix + '-MIN_NUM_FORMS'), + childElementSelector = 'input,select,textarea,label,div', + $$ = $(this), + + applyExtraClasses = function(row, ndx) { + if (options.extraClasses) { + row.removeClass(flatExtraClasses); + row.addClass(options.extraClasses[ndx % options.extraClasses.length]); + } + }, + + updateElementIndex = function(elem, prefix, ndx) { + var idRegex = new RegExp(prefix + '-(\\d+|__prefix__)-'), + replacement = prefix + '-' + ndx + '-'; + if (elem.attr("for")) elem.attr("for", elem.attr("for").replace(idRegex, replacement)); + if (elem.attr('id')) elem.attr('id', elem.attr('id').replace(idRegex, replacement)); + if (elem.attr('name')) elem.attr('name', elem.attr('name').replace(idRegex, replacement)); + }, + + hasChildElements = function(row) { + return row.find(childElementSelector).length > 0; + }, + + showAddButton = function() { + return maxForms.length == 0 || // For Django versions pre 1.2 + (maxForms.val() == '' || (maxForms.val() - totalForms.val() > 0)); + }, + + /** + * Indicates whether delete link(s) can be displayed - when total forms > min forms + */ + showDeleteLinks = function() { + return minForms.length == 0 || // For Django versions pre 1.7 + (minForms.val() == '' || (totalForms.val() - minForms.val() > 0)); + }, + + insertDeleteLink = function(row) { + var delCssSelector = $.trim(options.deleteCssClass).replace(/\s+/g, '.'), + addCssSelector = $.trim(options.addCssClass).replace(/\s+/g, '.'); + if (row.is('TR')) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(':last').append('' + options.deleteText + ''); + } else if (row.is('UL') || row.is('OL')) { + // If they're laid out as an ordered/unordered list, + // insert an
  • after the last list item: + row.append('
  • ' + options.deleteText +'
  • '); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.append('' + options.deleteText +''); + } + // Check if we're under the minimum number of forms - not to display delete link at rendering + if (!showDeleteLinks()){ + row.find('a.' + delCssSelector).hide(); + } + + row.find('a.' + delCssSelector).click(function() { + var row = $(this).parents('.' + options.formCssClass), + del = row.find('input:hidden[id $= "-DELETE"]'), + buttonRow = row.siblings("a." + addCssSelector + ', .' + options.formCssClass + '-add'), + forms; + if (del.length) { + // We're dealing with an inline formset. + // Rather than remove this form from the DOM, we'll mark it as deleted + // and hide it, then let Django handle the deleting: + del.val('on'); + row.hide(); + forms = $('.' + options.formCssClass).not(':hidden'); + } else { + row.remove(); + // Update the TOTAL_FORMS count: + forms = $('.' + options.formCssClass).not('.formset-custom-template'); + totalForms.val(forms.length); + } + for (var i=0, formCount=forms.length; i