Move ohlhafv to its own app

This commit is contained in:
Jan Tuomi
2018-01-28 18:54:45 +02:00
parent 7dc9fac597
commit bdf6b469ad
44 changed files with 282 additions and 262 deletions
View File
+4
View File
@@ -0,0 +1,4 @@
from django.contrib import admin
from ohlhafv.models import OhlhafvChallenge
admin.site.register(OhlhafvChallenge)
+5
View File
@@ -0,0 +1,5 @@
from django.apps import AppConfig
class OhlhafvConfig(AppConfig):
name = 'ohlhafv'
+18
View File
@@ -0,0 +1,18 @@
"""File containing Ohlhafv forms."""
from django import forms
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError
from ohlhafv.models import OhlhafvChallenge
class OhlhafvForm(forms.ModelForm):
"""Class representing Ohlhafv form."""
class Meta:
"""Meta class for Ohlhafv form."""
model = OhlhafvChallenge
fields = ['challenger', 'challenger_email',
'victim', 'victim_email', 'series', 'message']
+32
View File
@@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11 on 2018-01-28 15:48
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='OhlhafvChallenge',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('challenger', models.CharField(max_length=255, verbose_name='Challenger')),
('victim', models.CharField(max_length=255, verbose_name='Victim')),
('challenger_email', models.EmailField(max_length=254, verbose_name='Challenger email')),
('victim_email', models.EmailField(max_length=254, verbose_name='Victim email')),
('series', models.CharField(choices=[('0.33 L', '0.33 L'), ('0.5 L', '0.5 L'), ('1.0 L', '1.0 L'), ('Team', 'Team Challenge (1 x 0.33 L, 2 x 0.5 L, 1 x 1.0 L)')], max_length=10, verbose_name='Series')),
('message', models.TextField(blank=True, verbose_name='Message')),
],
options={
'verbose_name': 'Ohlhafv challenge',
'verbose_name_plural': 'Ohlhafv challenges',
},
),
]
View File
+44
View File
@@ -0,0 +1,44 @@
"""Ohlhafv app models."""
from django.db import models
from django.utils import timezone
from datetime import timedelta
from django.contrib.auth.models import User
from webapp.utils import month_from_now
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import User
from auditlog.registry import auditlog
from phonenumber_field.modelfields import PhoneNumberField
from django.contrib.postgres.fields import JSONField
import logging
VERBOSE_NAME = _('Ohlhafv')
class OhlhafvChallenge(models.Model):
"""Model containing all info about ohlhafv challenge."""
class Meta:
verbose_name = _('Ohlhafv challenge')
verbose_name_plural = _('Ohlhafv challenges')
SERIES_CHOICES = (
('0.33 L', '0.33 L'),
('0.5 L', '0.5 L'),
('1.0 L', '1.0 L'),
('Team', _('Team Challenge (1 x 0.33 L, 2 x 0.5 L, 1 x 1.0 L)'))
)
challenger = models.CharField(_('Challenger'), max_length=255)
victim = models.CharField(_('Victim'), max_length=255)
challenger_email = models.EmailField(_('Challenger email'))
victim_email = models.EmailField(_('Victim email'))
series = models.CharField(_('Series'), choices=SERIES_CHOICES, max_length=10)
message = models.TextField(_('Message'), blank=True, null=False)
def __str__(self):
"""Return model info."""
return _('Ohlhafv challenge: {} vs. {}').format(self.challenger, self.victim)
auditlog.register(OhlhafvChallenge)
+100
View File
@@ -0,0 +1,100 @@
html, body {
background-color: rgb(252, 225, 69);
}
body {
padding: 0 1rem 0;
max-width: 1000px;
margin: 0 auto 0;
}
.bg-faded, .form-control {
/*background-color: rgb(252, 225, 69);*/
border-color: black;
color: black;
border-radius: 0;
-webkit-appearance: none;
box-shadow: 10px 10px rgba(0, 0, 0, 0.5);
}
.form-control:focus {
border-color: black;
outline-style: solid;
outline-color: black;
outline-width: 2px;
}
.form-control::placeholder {
color: rgb(63, 63, 63);
}
.form-group label {
color: black;
}
footer {
color: black;
}
footer select.form-control {
box-shadow: 0 0;
}
h3 {
padding: 2rem 0 2rem;
color: black;
}
.navbar {
border-radius: 0;
background-color: rgb(252, 225, 69);
box-shadow: 0 0;
}
.btn.btn-primary {
border-color: black;
background-color: white;
border-radius: 0;
color: black;
margin-top: 1rem;
box-shadow: 10px 10px rgba(0, 0, 0, 0.5);
}
.btn.btn-primary:hover {
outline-style: solid;
outline-color: black;
outline-width: 2px;
}
.card {
background-color: rgb(252, 225, 69);
border-color: black;
border-radius: 0;
box-shadow: 10px 10px rgba(0, 0, 0, 0.5);
margin-bottom: 2rem;
}
.card-header {
border-width: 0 0 1px 0;
border-style: solid;
border-color: black;
color: black;
}
.card h5 {
color: black;
padding: 1rem 0 1rem;
}
.card p {
color: black;
}
h6 {
color: black;
}
+34
View File
@@ -0,0 +1,34 @@
#footer-div {
height:10vh;
}
footer {
/* position: absolute; */
bottom: 0;
width: 100%;
height: 60px; /* Set the fixed height of the footer here */
/* line-height: 60px; /* Vertically center the text there */
margin-top: 2rem;
margin-bottom: 1rem;
}
footer .container .col .nav .nav-item {
display: inline-block;
margin-right: 3vh;
}
.lang-button {
height: 4vh;
width: 6vh;
margin-left: 1vh;
margin-right: 1vh;
}
.lang-select {
width: 10rem;
display: inline-block;
}
footer .lang-form {
margin: 1rem auto 0;
}
+29
View File
@@ -0,0 +1,29 @@
.header-content .logo img {
display: block;
height: auto;
margin: auto;
}
.ohlhafv-banner {
max-width: 1000px;
margin-left: auto;
margin-right: auto;
}
@media screen and (min-width: 1000px) {
.ohlhafv_header-content {
position: absolute;
left: 0;
top: 0;
background-color: #052f5f;
width: 100%;
}
.ohlhafv_header {
margin-bottom: 331px;
}
}
.ohlhafv-banner-image {
width: 100%;
}
+11
View File
@@ -0,0 +1,11 @@
.ohlhafv_navigation {
margin-bottom: 10px;
}
.navbar-border {
border-bottom: 2px solid #282b3b;
}
.navbar-light .navbar-nav .nav-link {
color: black;
}
+460
View File
@@ -0,0 +1,460 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1920px"
height="600px" viewBox="0 0 1920 600" xml:space="preserve">
<g id="Layer_1">
<rect fill="#FCE145" stroke-miterlimit="10" width="1920" height="600"/>
<circle fill="#FFFFFF" cx="665.65" cy="525.563" r="7.936"/>
<circle fill="#FFFFFF" cx="681.691" cy="506.813" r="5.123"/>
<circle fill="#FFFFFF" cx="136.777" cy="141.821" r="6.566"/>
<circle fill="#FFFFFF" cx="692.813" cy="214.488" r="3.968"/>
<circle fill="#FFFFFF" cx="1291.591" cy="539.999" r="8.31"/>
<circle fill="#FFFFFF" cx="1477.915" cy="105.086" r="4.041"/>
<circle fill="#FFFFFF" cx="671.075" cy="559.684" r="4.177"/>
<circle fill="#FFFFFF" cx="236.863" cy="494.584" r="7.936"/>
<circle fill="#FFFFFF" cx="709.812" cy="301.046" r="5.123"/>
<circle fill="#FFFFFF" cx="1345.638" cy="603.896" r="6.566"/>
<circle fill="#FFFFFF" cx="802.968" cy="288.631" r="3.968"/>
<circle fill="#FFFFFF" cx="694.972" cy="614.183" r="8.311"/>
<circle fill="#FFFFFF" cx="1315.967" cy="389.937" r="4.041"/>
<circle fill="#FFFFFF" cx="853.206" cy="163.671" r="4.177"/>
<circle fill="#FFFFFF" cx="230.521" cy="363.491" r="7.937"/>
<circle fill="#FFFFFF" cx="749.694" cy="521.87" r="5.123"/>
<circle fill="#FFFFFF" cx="945.341" cy="98.779" r="6.566"/>
<circle fill="#FFFFFF" cx="760.815" cy="229.544" r="3.968"/>
<circle fill="#FFFFFF" cx="768.263" cy="559.813" r="8.31"/>
<circle fill="#FFFFFF" cx="773.166" cy="255.111" r="4.041"/>
<circle fill="#FFFFFF" cx="239.319" cy="110.991" r="4.177"/>
<circle fill="#FFFFFF" cx="726.019" cy="257.226" r="4.177"/>
<circle fill="#FFFFFF" cx="301.236" cy="441.664" r="7.937"/>
<circle fill="#FFFFFF" cx="1082.465" cy="477.265" r="5.123"/>
<circle fill="#FFFFFF" cx="1109.856" cy="552.424" r="6.565"/>
<circle fill="#FFFFFF" cx="570.391" cy="201.889" r="3.969"/>
<circle fill="#FFFFFF" cx="77.219" cy="341.683" r="8.31"/>
<circle fill="#FFFFFF" cx="1177.659" cy="295.674" r="4.041"/>
<circle fill="#FFFFFF" cx="1144.432" cy="342.03" r="4.176"/>
<circle fill="#FFFFFF" cx="68.909" cy="453.125" r="7.936"/>
<circle fill="#FFFFFF" cx="587.39" cy="288.446" r="5.123"/>
<circle fill="#FFFFFF" cx="1174.534" cy="373.166" r="6.566"/>
<circle fill="#FFFFFF" cx="632.393" cy="601.584" r="3.968"/>
<circle fill="#FFFFFF" cx="39.205" cy="236.679" r="8.31"/>
<circle fill="#FFFFFF" cx="1153.476" cy="590.333" r="4.04"/>
<circle fill="#FFFFFF" cx="542.291" cy="318.01" r="4.177"/>
<circle fill="#FFFFFF" cx="608.718" cy="541.368" r="7.937"/>
<circle fill="#FFFFFF" cx="1198.229" cy="564.832" r="5.123"/>
<circle fill="#FFFFFF" cx="634.425" cy="253.118" r="6.566"/>
<circle fill="#FFFFFF" cx="86.325" cy="108.105" r="3.968"/>
<circle fill="#FFFFFF" cx="198.367" cy="465.738" r="8.31"/>
<circle fill="#FFFFFF" cx="1245.661" cy="310.731" r="4.041"/>
<circle fill="#FFFFFF" cx="617.517" cy="288.868" r="4.177"/>
<circle fill="#FFFFFF" cx="603.596" cy="244.627" r="4.177"/>
<circle fill="#FFFFFF" cx="1253.96" cy="664.441" r="7.937"/>
<circle fill="#FFFFFF" cx="715.153" cy="364.479" r="5.123"/>
<circle fill="#FFFFFF" cx="720.582" cy="654.872" r="6.565"/>
<circle fill="#FFFFFF" cx="725.413" cy="345.426" r="3.968"/>
<circle fill="#FFFFFF" cx="1547.488" cy="782.539" r="8.311"/>
<circle fill="#FFFFFF" cx="1332.681" cy="439.212" r="4.04"/>
<circle fill="#FFFFFF" cx="256.2" cy="609.145" r="4.177"/>
<circle fill="#FFFFFF" cx="717.799" cy="433.727" r="7.936"/>
<circle fill="#FFFFFF" cx="190.343" cy="323.143" r="5.122"/>
<circle fill="#FFFFFF" cx="286.303" cy="640.28" r="6.566"/>
<circle fill="#FFFFFF" cx="1608.319" cy="290.881" r="3.968"/>
<circle fill="#FFFFFF" cx="1283.282" cy="753.062" r="8.311"/>
<circle fill="#FFFFFF" cx="753.649" cy="452.656" r="4.041"/>
<circle fill="#FFFFFF" cx="196.692" cy="271.071" r="4.176"/>
<circle fill="#FFFFFF" cx="1319.45" cy="692.847" r="7.937"/>
<circle fill="#FFFFFF" cx="1338.002" cy="660.75" r="5.123"/>
<circle fill="#FFFFFF" cx="341.111" cy="588.451" r="6.566"/>
<circle fill="#FFFFFF" cx="293.3" cy="293.569" r="3.968"/>
<circle fill="#FFFFFF" cx="1103.418" cy="945.15" r="8.311"/>
<circle fill="#FFFFFF" cx="805.766" cy="386.049" r="4.041"/>
<circle fill="#FFFFFF" cx="271.919" cy="241.929" r="4.177"/>
<circle fill="#FFFFFF" cx="758.618" cy="388.165" r="4.177"/>
<circle fill="#FFFFFF" cx="576.689" cy="370.629" r="7.936"/>
<circle fill="#FFFFFF" cx="591.868" cy="625.153" r="5.123"/>
<circle fill="#FFFFFF" cx="1193.939" cy="437.219" r="6.566"/>
<circle fill="#FFFFFF" cx="602.99" cy="332.827" r="3.968"/>
<circle fill="#FFFFFF" cx="610.439" cy="663.097" r="8.31"/>
<circle fill="#FFFFFF" cx="1356.826" cy="233.513" r="4.041"/>
<circle fill="#FFFFFF" cx="133.778" cy="596.546" r="4.177"/>
<circle fill="#FFFFFF" cx="1190.293" cy="489.346" r="7.936"/>
<circle fill="#FFFFFF" cx="1174.837" cy="700.599" r="5.123"/>
<circle fill="#FFFFFF" cx="111.597" cy="245.409" r="6.566"/>
<circle fill="#FFFFFF" cx="665.855" cy="459.25" r="3.968"/>
<circle fill="#FFFFFF" cx="1209.048" cy="812.52" r="8.31"/>
<circle fill="#FFFFFF" cx="1226.144" cy="508.276" r="4.04"/>
<circle fill="#FFFFFF" cx="574.89" cy="448.948" r="4.176"/>
<circle fill="#FFFFFF" cx="420.611" cy="665.873" r="7.937"/>
<circle fill="#FFFFFF" cx="160.112" cy="176.46" r="5.123"/>
<circle fill="#FFFFFF" cx="1428.158" cy="263.736" r="6.565"/>
<circle fill="#FFFFFF" cx="1492.192" cy="197.92" r="3.968"/>
<circle fill="#FFFFFF" cx="1274.22" cy="473.099" r="8.31"/>
<circle fill="#FFFFFF" cx="682.48" cy="646.724" r="4.041"/>
<circle fill="#FFFFFF" cx="649.254" cy="693.079" r="4.177"/>
<circle fill="#FFFFFF" cx="636.196" cy="375.565" r="4.177"/>
<circle fill="#FFFFFF" cx="488.496" cy="443.012" r="7.936"/>
<circle fill="#FFFFFF" cx="1507.721" cy="513.682" r="5.123"/>
<circle fill="#FFFFFF" cx="1554.083" cy="317.807" r="6.565"/>
<circle fill="#FFFFFF" cx="963.134" cy="213.415" r="3.968"/>
<circle fill="#FFFFFF" cx="1674.789" cy="215.872" r="8.311"/>
<circle fill="#FFFFFF" cx="1163.977" cy="72.043" r="4.041"/>
<circle fill="#FFFFFF" cx="942.258" cy="285.337" r="4.177"/>
<circle fill="#FFFFFF" cx="954.657" cy="574.988" r="7.937"/>
<circle fill="#FFFFFF" cx="980.132" cy="299.973" r="5.123"/>
<circle fill="#FFFFFF" cx="1527.208" cy="597.687" r="6.566"/>
<circle fill="#FFFFFF" cx="1073.289" cy="287.558" r="3.968"/>
<circle fill="#FFFFFF" cx="1561.072" cy="408.056" r="8.31"/>
<circle fill="#FFFFFF" cx="1586.287" cy="388.864" r="4.04"/>
<circle fill="#FFFFFF" cx="934.17" cy="602.809" r="4.176"/>
<circle fill="#FFFFFF" cx="1127.837" cy="652.319" r="7.937"/>
<circle fill="#FFFFFF" cx="1020.014" cy="520.798" r="5.123"/>
<circle fill="#FFFFFF" cx="1582.015" cy="545.858" r="6.566"/>
<circle fill="#FFFFFF" cx="1803.886" cy="93.503" r="3.968"/>
<circle fill="#FFFFFF" cx="528.229" cy="533.998" r="8.31"/>
<circle fill="#FFFFFF" cx="1043.486" cy="254.038" r="4.041"/>
<circle fill="#FFFFFF" cx="1009.397" cy="573.667" r="4.177"/>
<circle fill="#FFFFFF" cx="996.339" cy="256.153" r="4.177"/>
<circle fill="#FFFFFF" cx="1418.739" cy="855.152" r="7.936"/>
<circle fill="#FFFFFF" cx="382.115" cy="411.665" r="5.123"/>
<circle fill="#FFFFFF" cx="835.881" cy="510.262" r="6.566"/>
<circle fill="#FFFFFF" cx="1481.955" cy="1036.646" r="3.969"/>
<circle fill="#FFFFFF" cx="1421.593" cy="472.142" r="8.311"/>
<circle fill="#FFFFFF" cx="352.441" cy="35.906" r="4.041"/>
<circle fill="#FFFFFF" cx="1374.683" cy="553.952" r="4.177"/>
<circle fill="#FFFFFF" cx="331.614" cy="371.913" r="7.936"/>
<circle fill="#FFFFFF" cx="856.847" cy="560.646" r="5.123"/>
<circle fill="#FFFFFF" cx="849.938" cy="303.874" r="6.566"/>
<circle fill="#FFFFFF" cx="1092.069" cy="160.3" r="3.968"/>
<circle fill="#FFFFFF" cx="1477.915" cy="387.091" r="8.31"/>
<circle fill="#FFFFFF" cx="420.611" cy="499.842" r="4.04"/>
<circle fill="#FFFFFF" cx="260.542" cy="208.097" r="4.176"/>
<circle fill="#FFFFFF" cx="566.422" cy="1021.842" r="7.937"/>
<circle fill="#FFFFFF" cx="1493.37" cy="303.144" r="5.122"/>
<circle fill="#FFFFFF" cx="903.883" cy="525.318" r="6.566"/>
<circle fill="#FFFFFF" cx="908.713" cy="215.872" r="3.969"/>
<circle fill="#FFFFFF" cx="1604.35" cy="995.508" r="8.311"/>
<circle fill="#FFFFFF" cx="1475.912" cy="522.653" r="4.041"/>
<circle fill="#FFFFFF" cx="1442.685" cy="569.009" r="4.177"/>
<circle fill="#FFFFFF" cx="1646.667" cy="108.586" r="4.177"/>
<circle fill="#FFFFFF" cx="968.569" cy="655.428" r="7.937"/>
<circle fill="#FFFFFF" cx="433.405" cy="254.566" r="5.123"/>
<circle fill="#FFFFFF" cx="1586.682" cy="448.745" r="6.565"/>
<circle fill="#FFFFFF" cx="495.113" cy="153.876" r="3.969"/>
<circle fill="#FFFFFF" cx="460.286" cy="382.915" r="8.311"/>
<circle fill="#FFFFFF" cx="1780.834" cy="241.232" r="4.041"/>
<circle fill="#FFFFFF" cx="526.521" cy="608.072" r="4.177"/>
<circle fill="#FFFFFF" cx="1583.036" cy="500.872" r="7.936"/>
<circle fill="#FFFFFF" cx="1011.87" cy="704.184" r="5.123"/>
<circle fill="#FFFFFF" cx="1559.808" cy="728.625" r="6.566"/>
<circle fill="#FFFFFF" cx="1105.889" cy="418.497" r="3.968"/>
<circle fill="#FFFFFF" cx="118.164" cy="816.666" r="8.311"/>
<circle fill="#FFFFFF" cx="1023.97" cy="451.583" r="4.04"/>
<circle fill="#FFFFFF" cx="967.633" cy="460.474" r="4.176"/>
<circle fill="#FFFFFF" cx="1226.145" cy="229.544" r="7.937"/>
<circle fill="#FFFFFF" cx="1052.613" cy="651.735" r="5.123"/>
<circle fill="#FFFFFF" cx="1832.518" cy="266.895" r="6.566"/>
<circle fill="#FFFFFF" cx="1278.259" cy="149.908" r="3.968"/>
<circle fill="#FFFFFF" cx="1072.045" cy="416.406" r="8.31"/>
<circle fill="#FFFFFF" cx="1323.78" cy="322.186" r="4.041"/>
<circle fill="#FFFFFF" cx="542.239" cy="240.856" r="4.177"/>
<circle fill="#FFFFFF" cx="1028.938" cy="387.091" r="4.177"/>
<circle fill="#FFFFFF" cx="1248.259" cy="378.565" r="7.937"/>
<circle fill="#FFFFFF" cx="862.189" cy="624.08" r="5.123"/>
<circle fill="#FFFFFF" cx="355.164" cy="176.461" r="6.566"/>
<circle fill="#FFFFFF" cx="872.448" cy="605.027" r="3.968"/>
<circle fill="#FFFFFF" cx="1436.469" cy="669.965" r="8.311"/>
<circle fill="#FFFFFF" cx="885.661" cy="357.321" r="4.041"/>
<circle fill="#FFFFFF" cx="841.034" cy="389.018" r="4.177"/>
<circle fill="#FFFFFF" cx="864.834" cy="693.327" r="7.936"/>
<circle fill="#FFFFFF" cx="1663.06" cy="289.624" r="5.123"/>
<circle fill="#FFFFFF" cx="882.537" cy="434.812" r="6.566"/>
<circle fill="#FFFFFF" cx="1491.023" cy="739.391" r="3.968"/>
<circle fill="#FFFFFF" cx="1120.7" cy="272.046" r="8.31"/>
<circle fill="#FFFFFF" cx="1456.396" cy="720.198" r="4.04"/>
<circle fill="#FFFFFF" cx="845.21" cy="447.875" r="4.176"/>
<circle fill="#FFFFFF" cx="1507.417" cy="466.18" r="7.937"/>
<circle fill="#FFFFFF" cx="428.548" cy="565.77" r="5.122"/>
<circle fill="#FFFFFF" cx="1492.192" cy="664.197" r="6.565"/>
<circle fill="#FFFFFF" cx="941.313" cy="346.811" r="3.968"/>
<circle fill="#FFFFFF" cx="949.623" cy="403.808" r="8.31"/>
<circle fill="#FFFFFF" cx="1142.156" cy="205.438" r="4.041"/>
<circle fill="#FFFFFF" cx="919.574" cy="692.007" r="4.177"/>
<circle fill="#FFFFFF" cx="905.654" cy="647.765" r="4.177"/>
<circle fill="#FFFFFF" cx="1638.147" cy="172.049" r="8.311"/>
<circle fill="#FFFFFF" cx="752.172" cy="584.01" r="4.041"/>
<circle fill="#FFFFFF" cx="1374.791" cy="419.595" r="7.937"/>
<circle fill="#FFFFFF" cx="1533.773" cy="884.935" r="5.123"/>
<circle fill="#FFFFFF" cx="804.718" cy="336.399" r="6.566"/>
<circle fill="#FFFFFF" cx="1622.452" cy="680.342" r="3.968"/>
<circle fill="#FFFFFF" cx="820.175" cy="599.065" r="4.041"/>
<circle fill="#FFFFFF" cx="325.553" cy="519.704" r="4.177"/>
<circle fill="#FFFFFF" cx="1017.645" cy="622.667" r="8.311"/>
<circle fill="#FFFFFF" cx="1613.423" cy="381.778" r="4.041"/>
<circle fill="#FFFFFF" cx="1640.263" cy="422.418" r="7.937"/>
<circle fill="#FFFFFF" cx="1063.037" cy="595.376" r="5.123"/>
<circle fill="#FFFFFF" cx="1625.038" cy="620.436" r="6.566"/>
<circle fill="#FFFFFF" cx="1846.908" cy="168.081" r="3.969"/>
<circle fill="#FFFFFF" cx="1086.509" cy="328.616" r="4.041"/>
<circle fill="#FFFFFF" cx="1039.361" cy="330.731" r="4.177"/>
<circle fill="#FFFFFF" cx="436.189" cy="869.129" r="7.936"/>
<circle fill="#FFFFFF" cx="452.23" cy="850.38" r="5.123"/>
<circle fill="#FFFFFF" cx="1026.51" cy="896.265" r="8.311"/>
<circle fill="#FFFFFF" cx="441.614" cy="903.25" r="4.177"/>
<circle fill="#FFFFFF" cx="153.691" cy="554.534" r="7.936"/>
<circle fill="#FFFFFF" cx="1027.427" cy="942.326" r="6.566"/>
<circle fill="#FFFFFF" cx="465.51" cy="957.75" r="8.311"/>
<circle fill="#FFFFFF" cx="1086.506" cy="733.504" r="4.041"/>
<circle fill="#FFFFFF" cx="147.349" cy="423.441" r="7.937"/>
<circle fill="#FFFFFF" cx="520.232" cy="865.437" r="5.123"/>
<circle fill="#FFFFFF" cx="538.802" cy="903.38" r="8.31"/>
<circle fill="#FFFFFF" cx="191.15" cy="906.35" r="7.937"/>
<circle fill="#FFFFFF" cx="885.517" cy="845.723" r="5.123"/>
<circle fill="#FFFFFF" cx="891.809" cy="862.842" r="6.565"/>
<circle fill="#FFFFFF" cx="31.269" cy="541.935" r="7.936"/>
<circle fill="#FFFFFF" cx="945.073" cy="716.732" r="6.565"/>
<circle fill="#FFFFFF" cx="402.932" cy="945.15" r="3.968"/>
<circle fill="#FFFFFF" cx="924.014" cy="933.899" r="4.04"/>
<circle fill="#FFFFFF" cx="379.257" cy="884.935" r="7.937"/>
<circle fill="#FFFFFF" cx="953.52" cy="860.779" r="5.123"/>
<circle fill="#FFFFFF" cx="115.196" cy="525.688" r="8.31"/>
<circle fill="#FFFFFF" cx="1024.499" cy="1008.008" r="7.937"/>
<circle fill="#FFFFFF" cx="485.691" cy="708.045" r="5.123"/>
<circle fill="#FFFFFF" cx="491.121" cy="998.438" r="6.565"/>
<circle fill="#FFFFFF" cx="503.399" cy="1019.263" r="8.311"/>
<circle fill="#FFFFFF" cx="1103.22" cy="782.778" r="4.04"/>
<circle fill="#FFFFFF" cx="173.029" cy="669.095" r="4.177"/>
<circle fill="#FFFFFF" cx="488.337" cy="777.293" r="7.936"/>
<circle fill="#FFFFFF" cx="56.842" cy="983.847" r="6.566"/>
<circle fill="#FFFFFF" cx="898.376" cy="995.508" r="8.311"/>
<circle fill="#FFFFFF" cx="524.188" cy="796.223" r="4.041"/>
<circle fill="#FFFFFF" cx="1089.989" cy="1036.413" r="7.937"/>
<circle fill="#FFFFFF" cx="1108.541" cy="1004.316" r="5.123"/>
<circle fill="#FFFFFF" cx="129.601" cy="916.752" r="6.566"/>
<circle fill="#FFFFFF" cx="572.264" cy="761.046" r="8.31"/>
<circle fill="#FFFFFF" cx="190.568" cy="365.633" r="4.041"/>
<circle fill="#FFFFFF" cx="529.156" cy="731.73" r="4.177"/>
<circle fill="#FFFFFF" cx="339.291" cy="687.83" r="7.936"/>
<circle fill="#FFFFFF" cx="362.407" cy="968.72" r="5.123"/>
<circle fill="#FFFFFF" cx="964.477" cy="780.785" r="6.566"/>
<circle fill="#FFFFFF" cx="380.977" cy="1006.663" r="8.31"/>
<circle fill="#FFFFFF" cx="50.606" cy="656.496" r="4.177"/>
<circle fill="#FFFFFF" cx="960.832" cy="832.912" r="7.936"/>
<circle fill="#FFFFFF" cx="945.375" cy="1044.165" r="5.123"/>
<circle fill="#FFFFFF" cx="436.394" cy="802.816" r="3.968"/>
<circle fill="#FFFFFF" cx="987.274" cy="1064.837" r="8.31"/>
<circle fill="#FFFFFF" cx="996.683" cy="851.842" r="4.04"/>
<circle fill="#FFFFFF" cx="369.958" cy="765.985" r="4.176"/>
<circle fill="#FFFFFF" cx="143.342" cy="1023.908" r="7.937"/>
<circle fill="#FFFFFF" cx="1044.759" cy="816.666" r="8.31"/>
<circle fill="#FFFFFF" cx="453.019" cy="990.29" r="4.041"/>
<circle fill="#FFFFFF" cx="419.792" cy="1036.646" r="4.177"/>
<circle fill="#FFFFFF" cx="406.734" cy="719.132" r="4.177"/>
<circle fill="#FFFFFF" cx="259.035" cy="786.578" r="7.936"/>
<circle fill="#FFFFFF" cx="1278.26" cy="857.248" r="5.123"/>
<circle fill="#FFFFFF" cx="725.196" cy="918.554" r="7.937"/>
<circle fill="#FFFFFF" cx="1297.747" cy="941.253" r="6.566"/>
<circle fill="#FFFFFF" cx="1331.61" cy="751.622" r="8.31"/>
<circle fill="#FFFFFF" cx="1356.825" cy="732.43" r="4.04"/>
<circle fill="#FFFFFF" cx="704.709" cy="946.375" r="4.176"/>
<circle fill="#FFFFFF" cx="772" cy="896.461" r="7.937"/>
<circle fill="#FFFFFF" cx="790.552" cy="864.364" r="5.123"/>
<circle fill="#FFFFFF" cx="1352.554" cy="889.425" r="6.565"/>
<circle fill="#FFFFFF" cx="301.236" cy="854.905" r="8.31"/>
<circle fill="#FFFFFF" cx="779.936" cy="917.233" r="4.177"/>
<circle fill="#FFFFFF" cx="152.653" cy="755.23" r="5.123"/>
<circle fill="#FFFFFF" cx="606.419" cy="853.828" r="6.566"/>
<circle fill="#FFFFFF" cx="258.377" cy="448.948" r="3.969"/>
<circle fill="#FFFFFF" cx="1145.222" cy="897.519" r="4.177"/>
<circle fill="#FFFFFF" cx="102.153" cy="715.479" r="7.936"/>
<circle fill="#FFFFFF" cx="627.386" cy="904.213" r="5.123"/>
<circle fill="#FFFFFF" cx="191.15" cy="843.408" r="4.041"/>
<circle fill="#FFFFFF" cx="674.421" cy="868.885" r="6.566"/>
<circle fill="#FFFFFF" cx="1246.45" cy="866.219" r="4.04"/>
<circle fill="#FFFFFF" cx="1213.224" cy="912.575" r="4.177"/>
<circle fill="#FFFFFF" cx="739.108" cy="998.994" r="7.937"/>
<circle fill="#FFFFFF" cx="1357.221" cy="792.312" r="6.564"/>
<circle fill="#FFFFFF" cx="297.059" cy="951.639" r="4.177"/>
<circle fill="#FFFFFF" cx="1353.574" cy="844.439" r="7.936"/>
<circle fill="#FFFFFF" cx="782.409" cy="1047.75" r="5.123"/>
<circle fill="#FFFFFF" cx="1330.347" cy="1072.191" r="6.566"/>
<circle fill="#FFFFFF" cx="876.427" cy="762.063" r="3.968"/>
<circle fill="#FFFFFF" cx="217.225" cy="705.501" r="8.311"/>
<circle fill="#FFFFFF" cx="794.508" cy="795.149" r="4.04"/>
<circle fill="#FFFFFF" cx="738.171" cy="804.041" r="4.176"/>
<circle fill="#FFFFFF" cx="823.152" cy="995.302" r="5.123"/>
<circle fill="#FFFFFF" cx="842.584" cy="759.973" r="8.31"/>
<circle fill="#FFFFFF" cx="846.625" cy="728.543" r="4.041"/>
<circle fill="#FFFFFF" cx="799.477" cy="730.658" r="4.177"/>
<circle fill="#FFFFFF" cx="632.727" cy="967.646" r="5.123"/>
<circle fill="#FFFFFF" cx="642.987" cy="948.594" r="3.968"/>
<circle fill="#FFFFFF" cx="1207.008" cy="1013.531" r="8.311"/>
<circle fill="#FFFFFF" cx="611.572" cy="732.584" r="4.177"/>
<circle fill="#FFFFFF" cx="635.372" cy="1036.894" r="7.936"/>
<circle fill="#FFFFFF" cx="653.075" cy="778.378" r="6.566"/>
<circle fill="#FFFFFF" cx="39.205" cy="804.041" r="3.968"/>
<circle fill="#FFFFFF" cx="1226.935" cy="1063.764" r="4.04"/>
<circle fill="#FFFFFF" cx="615.749" cy="791.442" r="4.176"/>
<circle fill="#FFFFFF" cx="1277.956" cy="809.746" r="7.937"/>
<circle fill="#FFFFFF" cx="253.255" cy="901.227" r="5.122"/>
<circle fill="#FFFFFF" cx="1262.731" cy="1007.764" r="6.565"/>
<circle fill="#FFFFFF" cx="720.162" cy="747.374" r="8.311"/>
<circle fill="#FFFFFF" cx="690.112" cy="1035.573" r="4.176"/>
<circle fill="#FFFFFF" cx="676.192" cy="991.331" r="4.177"/>
<circle fill="#FFFFFF" cx="522.711" cy="927.576" r="4.041"/>
<circle fill="#FFFFFF" cx="1145.329" cy="763.161" r="7.937"/>
<circle fill="#FFFFFF" cx="568.103" cy="936.118" r="5.123"/>
<circle fill="#FFFFFF" cx="1392.99" cy="1023.908" r="3.968"/>
<circle fill="#FFFFFF" cx="204.977" cy="578.649" r="4.041"/>
<circle fill="#FFFFFF" cx="96.092" cy="863.27" r="4.177"/>
<circle fill="#FFFFFF" cx="788.183" cy="966.233" r="8.311"/>
<circle fill="#FFFFFF" cx="1383.962" cy="725.345" r="4.04"/>
<circle fill="#FFFFFF" cx="1410.802" cy="765.984" r="7.937"/>
<circle fill="#FFFFFF" cx="833.576" cy="938.942" r="5.123"/>
<circle fill="#FFFFFF" cx="1395.576" cy="964.002" r="6.566"/>
<circle fill="#FFFFFF" cx="1852.423" cy="505.466" r="5.123"/>
<circle fill="#FFFFFF" cx="1858.715" cy="522.586" r="6.565"/>
<circle fill="#FFFFFF" cx="1881.876" cy="345.341" r="4.176"/>
<circle fill="#FFFFFF" cx="1890.92" cy="593.644" r="4.04"/>
<circle fill="#FFFFFF" cx="1840.862" cy="948.461" r="8.311"/>
<circle fill="#FFFFFF" cx="1679.702" cy="288.648" r="4.177"/>
<circle fill="#FFFFFF" cx="1668.182" cy="513.682" r="7.937"/>
<circle fill="#FFFFFF" cx="1717.576" cy="303.283" r="5.123"/>
<circle fill="#FFFFFF" cx="1810.733" cy="290.869" r="3.968"/>
<circle fill="#FFFFFF" cx="1865.281" cy="655.63" r="7.937"/>
<circle fill="#FFFFFF" cx="1757.458" cy="524.108" r="5.123"/>
<circle fill="#FFFFFF" cx="1746.842" cy="576.978" r="4.177"/>
<circle fill="#FFFFFF" cx="1733.783" cy="259.464" r="4.177"/>
<circle fill="#FFFFFF" cx="1701.921" cy="617.667" r="7.937"/>
<circle fill="#FFFFFF" cx="1749.314" cy="707.494" r="5.123"/>
<circle fill="#FFFFFF" cx="1843.333" cy="421.807" r="3.968"/>
<circle fill="#FFFFFF" cx="1761.414" cy="454.894" r="4.04"/>
<circle fill="#FFFFFF" cx="1705.077" cy="463.785" r="4.176"/>
<circle fill="#FFFFFF" cx="1790.058" cy="655.046" r="5.123"/>
<circle fill="#FFFFFF" cx="1809.49" cy="419.717" r="8.31"/>
<circle fill="#FFFFFF" cx="1813.53" cy="388.287" r="4.041"/>
<circle fill="#FFFFFF" cx="1766.383" cy="390.402" r="4.177"/>
<circle fill="#FFFFFF" cx="1604.35" cy="859.241" r="8.31"/>
<circle fill="#FFFFFF" cx="1678.757" cy="350.121" r="3.968"/>
<circle fill="#FFFFFF" cx="1687.067" cy="407.118" r="8.31"/>
<circle fill="#FFFFFF" cx="1755.089" cy="625.978" r="8.311"/>
<circle fill="#FFFFFF" cx="1800.481" cy="598.687" r="5.123"/>
<circle fill="#FFFFFF" cx="1823.954" cy="331.926" r="4.041"/>
<circle fill="#FFFFFF" cx="1776.806" cy="334.042" r="4.177"/>
<circle fill="#FFFFFF" cx="1763.954" cy="899.575" r="8.311"/>
<circle fill="#FFFFFF" cx="1764.871" cy="945.637" r="6.566"/>
<circle fill="#FFFFFF" cx="1823.95" cy="736.814" r="4.041"/>
<circle fill="#FFFFFF" cx="1682.517" cy="720.042" r="6.565"/>
<circle fill="#FFFFFF" cx="1684.164" cy="882.859" r="5.122"/>
<circle fill="#FFFFFF" cx="1761.943" cy="1011.318" r="7.937"/>
<circle fill="#FFFFFF" cx="1840.664" cy="786.089" r="4.04"/>
<circle fill="#FFFFFF" cx="1827.434" cy="1039.724" r="7.937"/>
<circle fill="#FFFFFF" cx="1845.985" cy="1007.627" r="5.123"/>
<circle fill="#FFFFFF" cx="1701.921" cy="784.096" r="6.566"/>
<circle fill="#FFFFFF" cx="1698.276" cy="836.223" r="7.936"/>
<circle fill="#FFFFFF" cx="1682.819" cy="1047.476" r="5.123"/>
<circle fill="#FFFFFF" cx="1724.719" cy="1068.148" r="8.31"/>
<circle fill="#FFFFFF" cx="1734.127" cy="855.152" r="4.04"/>
<circle fill="#FFFFFF" cx="1782.203" cy="819.977" r="8.31"/>
<circle fill="#FFFFFF" cx="1882.666" cy="900.829" r="4.177"/>
<circle fill="#FFFFFF" cx="1882.773" cy="766.472" r="7.937"/>
<circle fill="#FFFFFF" cx="1502.598" cy="977.28" r="7.936"/>
<circle fill="#FFFFFF" cx="276.096" cy="1023.908" r="7.937"/>
<circle fill="#FFFFFF" cx="222.171" cy="960.151" r="4.176"/>
<circle fill="#FFFFFF" cx="297.397" cy="931.01" r="4.177"/>
<circle fill="#FFFFFF" cx="207.573" cy="1049.35" r="4.177"/>
<circle fill="#FFFFFF" cx="40.172" cy="941.354" r="4.041"/>
<circle fill="#FFFFFF" cx="108.175" cy="956.408" r="4.041"/>
<circle fill="#FFFFFF" cx="112.494" cy="392.163" r="5.123"/>
<circle fill="#FFFFFF" cx="118.843" cy="340.09" r="4.176"/>
<circle fill="#FFFFFF" cx="341.11" cy="1059.725" r="7.937"/>
<circle fill="#FFFFFF" cx="23.332" cy="1059.725" r="7.937"/>
<circle fill="#FFFFFF" cx="100.135" cy="997.779" r="6.566"/>
<circle fill="#FFFFFF" cx="656.172" cy="1070.447" r="3.968"/>
<circle fill="#FFFFFF" cx="816.564" cy="1019.63" r="4.176"/>
<circle fill="#FFFFFF" cx="533.749" cy="1057.848" r="3.969"/>
<circle fill="#FFFFFF" cx="123.471" cy="1032.419" r="5.123"/>
<circle fill="#FFFFFF" cx="1407.102" cy="1075.154" r="3.968"/>
<circle fill="#FFFFFF" cx="926.492" cy="1069.373" r="3.968"/>
<circle fill="#FFFFFF" cx="1638.147" cy="1071.831" r="8.311"/>
<circle fill="#FFFFFF" cx="1055.427" cy="1016.259" r="3.968"/>
<circle fill="#FFFFFF" cx="223.901" cy="1064.056" r="4.176"/>
<circle fill="#FFFFFF" cx="872.072" cy="1071.831" r="3.969"/>
<circle fill="#FFFFFF" cx="458.472" cy="1009.836" r="3.969"/>
<circle fill="#FFFFFF" cx="1241.618" cy="1005.867" r="3.968"/>
<circle fill="#FFFFFF" cx="318.522" cy="1032.42" r="6.566"/>
<circle fill="#FFFFFF" cx="1105.515" cy="1061.397" r="4.041"/>
<circle fill="#FFFFFF" cx="1810.267" cy="1024.04" r="3.969"/>
<circle fill="#FFFFFF" cx="570.713" cy="89.534" r="3.969"/>
<circle fill="#FFFFFF" cx="726.019" cy="92.213" r="3.969"/>
<circle fill="#FFFFFF" cx="1330.346" cy="52.542" r="3.969"/>
<circle fill="#FFFFFF" cx="382.114" cy="115.167" r="3.969"/>
<circle fill="#FFFFFF" cx="136.776" cy="31.865" r="3.969"/>
<circle fill="#FFFFFF" cx="1561.071" cy="31.865" r="3.969"/>
</g>
<g id="Layer_2">
<g>
<path d="M571.511,174.933c5.765,9.295,9.782,19.199,12.055,29.719c2.269,10.52,2.837,21.04,1.703,31.56
c-1.138,10.52-4.021,20.736-8.647,30.64c-4.631,9.908-10.965,18.895-18.999,26.958c-8.038,8.066-16.993,14.424-26.86,19.067
c-9.872,4.647-20.047,7.541-30.529,8.679c-10.482,1.139-21.009,0.571-31.577-1.709c-10.572-2.276-20.485-6.312-29.743-12.098
l-12.841,13.15l-31.446-31.56l13.103-12.887c-5.765-9.291-9.786-19.24-12.054-29.85c-2.272-10.606-2.837-21.172-1.704-31.692
c1.134-10.52,4.017-20.731,8.648-30.639c4.627-9.904,10.961-18.891,18.999-26.958c8.033-8.063,16.988-14.42,26.86-19.067
c9.868-4.644,20.047-7.537,30.529-8.679c10.482-1.138,20.964-0.567,31.446,1.709c10.482,2.281,20.35,6.312,29.612,12.098
l13.103-12.887l31.184,31.297L571.511,174.933z M452.801,188.872c-7.337,7.364-12.013,15.957-14.02,25.774
c-2.011,9.821-1.355,19.289,1.965,28.404l66.299-66.539c-9.262-3.329-18.782-3.945-28.564-1.841
C468.696,176.773,460.139,181.507,452.801,188.872z M526.176,262.511c7.337-7.364,12.054-15.953,14.151-25.774
c2.096-9.817,1.482-19.372-1.834-28.667l-66.562,66.539c9.258,3.333,18.778,3.99,28.564,1.973
C510.277,274.568,518.839,269.875,526.176,262.511z"/>
<path d="M699.916,129.17h44.287v193.042h-44.287v-72.851H644.36v72.851h-44.287V129.17h44.287v75.744h55.556V129.17z"/>
<path d="M886.496,322.212H771.979V128.907h44.287v148.858h70.23V322.212z"/>
<path d="M1005.468,129.17h44.287v193.042h-44.287v-72.851h-55.556v72.851h-44.287V129.17h44.287v75.744h55.556V129.17z"/>
<path d="M1187.332,322.212l-7.6-23.407h-60.534l-7.862,23.407h-46.907l65.251-193.042h42.19l62.107,193.042H1187.332z
M1139.376,73.151v39.976h-39.832V73.151H1139.376z M1134.396,254.358h30.923l-14.938-46.814L1134.396,254.358z M1198.862,73.151
v39.976h-39.832V73.151H1198.862z"/>
<path d="M1368.934,173.617h-71.803v29.193h56.865v44.447h-56.865v74.955h-44.287V129.17h116.09V173.617z"/>
<path d="M1491.57,127.592h46.908l-65.514,194.62h-41.929l-62.106-194.62h46.646l36.949,119.402L1491.57,127.592z"/>
</g>
<g>
<path d="M468.671,336.224h30.31v132.12h-30.31v-49.86h-38.023v49.86h-30.311v-132.12h30.311v51.84h38.023V336.224z"/>
<path d="M593.32,468.344l-5.201-16.02h-41.43l-5.381,16.02h-32.104l44.838-132.12h28.696l42.506,132.12H593.32z M557.091,421.904
h21.343l-10.402-32.04L557.091,421.904z"/>
<path d="M713.305,468.344l-5.201-16.02h-41.43l-5.381,16.02h-32.104l44.838-132.12h28.696l42.506,132.12H713.305z
M677.076,421.904h21.343l-10.402-32.04L677.076,421.904z"/>
<path d="M797.062,470.864c-4.187,0-8.34-0.571-12.465-1.71c-4.125-1.139-8.043-2.908-11.748-5.31
c-6.457-4.199-11.479-9.63-15.066-16.29c-3.587-6.66-5.38-13.95-5.38-21.87h30.311c0,3.6,0.776,6.39,2.332,8.37
c1.552,1.98,2.928,3.33,4.125,4.05c2.152,1.44,4.484,2.222,6.995,2.34c2.511,0.121,4.96-0.36,7.354-1.44
c1.673-0.72,3.018-1.62,4.036-2.7c1.014-1.08,1.793-2.129,2.332-3.15c0.538-1.018,0.866-2.008,0.986-2.97
c0.118-0.959,0.179-1.738,0.179-2.34c0-0.599-0.062-1.378-0.179-2.34c-0.121-0.959-0.448-1.98-0.986-3.06s-1.317-2.129-2.332-3.15
c-1.018-1.019-2.363-1.949-4.036-2.79c-1.317-0.599-2.721-1.139-4.215-1.62c-1.497-0.478-3.08-1.018-4.753-1.62
c-2.99-0.959-6.098-2.039-9.326-3.24c-3.228-1.198-6.457-2.818-9.685-4.86c-4.187-2.638-7.712-5.94-10.582-9.9
s-4.932-8.218-6.188-12.78c-1.256-4.559-1.676-9.27-1.256-14.13c0.418-4.86,1.763-9.509,4.036-13.95
c2.152-4.078,4.842-7.619,8.071-10.62c3.229-2.998,6.815-5.369,10.761-7.11c3.946-1.738,8.188-2.79,12.734-3.15
c4.542-0.36,9.147,0.062,13.81,1.26c4.531,1.08,8.64,2.79,12.325,5.13c3.685,2.34,6.866,5.161,9.54,8.46
c2.673,3.302,4.725,6.992,6.151,11.07c1.427,4.081,2.141,8.342,2.141,12.78h-30.156c0-2.759-0.869-4.68-2.601-5.76
c-1.735-1.08-3.259-1.8-4.573-2.16c-0.241,0-0.807-0.09-1.704-0.27c-0.896-0.18-1.914-0.18-3.049,0
c-1.138,0.18-2.304,0.602-3.498,1.26c-1.197,0.661-2.152,1.71-2.87,3.15c-0.958,1.921-1.138,3.932-0.538,6.03
c0.597,2.101,1.793,3.752,3.587,4.95c1.673,0.962,3.525,1.831,5.56,2.61c2.032,0.782,4.184,1.53,6.457,2.25
c2.032,0.602,4.092,1.26,6.182,1.98c2.088,0.72,4.201,1.561,6.342,2.52c7.844,3.6,13.995,8.882,18.454,15.84
c4.456,6.961,6.687,14.701,6.687,23.22c0,8.401-2.23,16.082-6.687,23.04c-4.458,6.961-10.61,12.24-18.454,15.84
c-3.091,1.44-6.249,2.489-9.478,3.15C803.516,470.532,800.29,470.864,797.062,470.864z"/>
<path d="M933.546,335.684v30.42h-25.289v102.24h-30.311v-102.24h-25.109v-30.42H933.546z"/>
<path d="M1032.727,366.644h-54.164v19.98h43.941v30.42h-43.941v20.88h54.164v30.42h-84.474v-131.94l84.474-0.18V366.644z"/>
<path d="M1168.496,336.044l-67.615,66.24l67.615,66.06h-43.762l-42.326-41.58v41.58h-30.311v-132.3h30.311v41.76l42.506-41.76
H1168.496z"/>
<path d="M1230.998,336.044c9.074,0,17.611,1.741,25.611,5.22c8,3.482,14.986,8.19,20.957,14.13
c5.969,5.94,10.686,12.932,14.148,20.97c3.463,8.041,5.195,16.622,5.195,25.74c0,9.121-1.732,17.702-5.195,25.74
c-3.463,8.041-8.18,15.03-14.148,20.97c-5.971,5.94-12.957,10.651-20.957,14.13c-8,3.482-16.537,5.22-25.611,5.22
s-17.613-1.738-25.613-5.22c-8-3.479-14.957-8.19-20.867-14.13c-5.91-5.94-10.596-12.929-14.059-20.97
c-3.463-8.038-5.193-16.619-5.193-25.74c0-9.118,1.73-17.699,5.193-25.74c3.463-8.038,8.148-15.03,14.059-20.97
c5.91-5.94,12.867-10.648,20.867-14.13C1213.385,337.785,1221.924,336.044,1230.998,336.044z M1231.088,437.744
c4.902,0,9.506-0.928,13.811-2.79c4.305-1.859,8.07-4.41,11.299-7.65c3.229-3.24,5.768-7.02,7.623-11.34
c1.852-4.32,2.779-8.938,2.779-13.86c0-4.919-0.928-9.54-2.779-13.86c-1.855-4.32-4.395-8.1-7.623-11.34
c-3.229-3.24-6.994-5.788-11.299-7.65c-4.305-1.859-8.908-2.79-13.811-2.79c-4.904,0-9.506,0.931-13.811,2.79
c-4.303,1.862-8.07,4.41-11.299,7.65c-3.229,3.24-5.77,7.02-7.621,11.34c-1.855,4.32-2.781,8.941-2.781,13.86
c0,4.922,0.926,9.54,2.781,13.86c1.852,4.32,4.393,8.1,7.621,11.34c3.229,3.24,6.996,5.791,11.299,7.65
C1221.582,436.815,1226.184,437.744,1231.088,437.744z"/>
<path d="M1385.688,336.224h30.309v132.12h-32.82l-43.045-77.04v77.04h-30.311v-131.76h33.002l42.865,76.86V336.224z"/>
<path d="M1518.945,366.644h-54.164v19.98h43.939v30.42h-43.939v20.88h54.164v30.42h-84.475v-131.94l84.475-0.18V366.644z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

+10
View File
@@ -0,0 +1,10 @@
import django_tables2 as tables
from django.db.models import Count, Q
from django.utils.translation import ugettext as _
from ohlhafv.models import OhlhafvChallenge
class OhlhafvTable(tables.Table):
class Meta:
model = OhlhafvChallenge
+28
View File
@@ -0,0 +1,28 @@
{% extends "project.html" %}
{% load static %}
{% load i18n %}
{% block styles %}
<link rel="stylesheet" href="{% static "ohlhafv/css/base.css" %}">
<link rel="stylesheet" href="{% static "ohlhafv/css/header.css" %}">
<link rel="stylesheet" href="{% static "ohlhafv/css/nav.css" %}">
{% endblock styles %}
{% block body %}
{% block header %}
{% include "ohlhafv:header.html" %}
{% endblock header %}
{% block navigation %}
{% include "ohlhafv:navigation.html" %}
{% endblock %}
{% block content %}
{% endblock %}
{% block footer %}
{% include "ohlhafv:footer.html" %}
{% endblock footer %}
{% endblock body %}
+25
View File
@@ -0,0 +1,25 @@
{% load i18n %}
{% load static %}
{% load staticfiles %}
<link rel="stylesheet" href="{% static "ohlhafv/css/footer.css" %}">
<footer style="text-align: center">
<div>
<form class="lang-form form" action="{% url 'set_language' %}" method="post">{% csrf_token %}
<span>
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select onchange="this.form.submit()" class="lang-select form-control" name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected="selected"{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
</span>
</form>
<span>{% trans "Copyright Aalto-yliopiston Sähköinsinöörikilta ry" %} {% now 'Y' %}</span>
</div>
</footer>
+8
View File
@@ -0,0 +1,8 @@
{% load i18n %}
{% load static %}
<div class="ohlhafv-header-content">
<div class="ohlhafv-banner logo">
<a href="/ohlhafv"><img class="ohlhafv-banner-image" src="{% static "ohlhafv/img/heevi_banner.svg" %}" alt="Aalto-yliopiston Sähköinsinöörikilta ry"></a>
</div>
</div>
+25
View File
@@ -0,0 +1,25 @@
{% extends "ohlhafv:base.html" %}
{% load static %}
{% load i18n %}
{% block content %}
<div>
<h3>{% trans "All challenges" %}</h3>
</div>
<div>
<h6 style="padding-bottom: 1rem">{% trans "Total challenges:" %} {{ challenge_count }}</h6>
</div>
{% for challenge in challenges %}
<div class="card">
<h4 class="card-header">{{ challenge.challenger }} vs. {{ challenge.victim }}</h4>
<div class="card-block">
<h5 class="card-subtitle mb-2">{{ challenge.get_series_display }}</h5>
<p class="card-text">{{ challenge.message|linebreaks|urlize }}</p>
</div>
</div>
{% endfor %}
{% endblock content %}
+9
View File
@@ -0,0 +1,9 @@
{% load i18n %}
<div class="ohlhafv_navigation">
<nav class="navbar-border navbar navbar-toggleable-md navbar-light bg-faded">
<div class="navbar-nav">
<a class="nav-item nav-link" href="/ohlhafv">{% trans "New challenge" %} <span class="sr-only">(current)</span></a>
<a class="nav-item nav-link" href="/ohlhafv/list">{% trans "List challenges" %}</a>
</div>
</nav>
</div>
+25
View File
@@ -0,0 +1,25 @@
{% extends "ohlhafv:base.html" %}
{% load bootstrap3 %}
{% load i18n %}
{% block navigation %}
{% include "ohlhafv:navigation.html" %}
{% endblock %}
{% block content %}
<div>
<h3>{% trans "Challenge your foe(s) to combat!" %}</h3>
<div id="input_form">
<form name="ohlhafvForm" action="/ohlhafv/submit/" method="post" class="form">{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button type="submit" class="btn btn-primary">
{% trans "Challenge" %}
</button>
{% endbuttons %}
</form>
</div>
</div>
{% endblock content %}
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+18
View File
@@ -0,0 +1,18 @@
"""Ohlhafv urls."""
from django.conf.urls import url
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
from ohlhafv.views import *
urlpatterns = [
# ohlhafv
url(r'^submit', ohlhafv_submit),
url(r'^list', ohlhafv_list),
url(r'^$', ohlhafv_view)
]
if settings.DEBUG:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
+50
View File
@@ -0,0 +1,50 @@
"""Ohlhafv views."""
from django.db.models import Count
from django.shortcuts import render, redirect
from django.contrib.auth import login, logout, authenticate
from django.views.decorators.http import require_http_methods
from django.views.decorators.csrf import ensure_csrf_cookie
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.decorators import permission_required, login_required
from django.conf import settings
import logging
import requests
from dealer.git import git
from ohlhafv.models import OhlhafvChallenge
from ohlhafv.forms import OhlhafvForm
from ohlhafv.tables import OhlhafvTable
@require_http_methods(["GET"])
def ohlhafv_view(request, *args, **kwargs):
"""Render Ohlhafv form page."""
form = OhlhafvForm()
return render(request, 'ohlhafv:new.html', {'form': form})
@ensure_csrf_cookie
@require_http_methods(["POST"])
def ohlhafv_submit(request, *args, **kwargs):
"""Submit Ohlhafv form."""
form = OhlhafvForm(request.POST)
if form.is_valid():
form.save()
else:
pass
return HttpResponseRedirect('/ohlhafv/list/')
@ensure_csrf_cookie
@require_http_methods(["GET"])
def ohlhafv_list(request, *args, **kwargs):
"""Present Ohlhafv challenges list."""
challenges = OhlhafvChallenge.objects.all()
challenges = challenges.order_by('-id')
context = {
'challenges': challenges,
'challenge_count': len(challenges),
}
return render(request, 'ohlhafv:list.html', context)