aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Pipfile8
-rw-r--r--Pipfile.lock108
-rw-r--r--docker-compose.yml4
-rwxr-xr-xdocker/app/migrate_and_serve.sh5
-rw-r--r--docker/pysite.dockerapp2
-rw-r--r--pydis_site/apps/home/admin.py3
-rw-r--r--pydis_site/apps/home/migrations/0001_initial.py26
-rw-r--r--pydis_site/apps/home/models.py3
-rw-r--r--pydis_site/apps/home/models/__init__.py3
-rw-r--r--pydis_site/apps/home/models/repository_metadata.py33
-rw-r--r--pydis_site/apps/home/templatetags/__init__.py3
-rw-r--r--pydis_site/apps/home/tests.py16
-rw-r--r--pydis_site/apps/home/tests/__init__.py (renamed from pydis_site/apps/wiki/__init__.py)0
-rw-r--r--pydis_site/apps/home/tests/mock_github_api_response.json44
-rw-r--r--pydis_site/apps/home/tests/test_repodata_helpers.py105
-rw-r--r--pydis_site/apps/home/tests/test_templatetags.py8
-rw-r--r--pydis_site/apps/home/tests/test_views.py9
-rw-r--r--pydis_site/apps/home/urls.py4
-rw-r--r--pydis_site/apps/home/views.py3
-rw-r--r--pydis_site/apps/home/views/__init__.py3
-rw-r--r--pydis_site/apps/home/views/home.py115
-rw-r--r--pydis_site/apps/wiki/admin.py3
-rw-r--r--pydis_site/apps/wiki/apps.py5
-rw-r--r--pydis_site/apps/wiki/migrations/__init__.py0
-rw-r--r--pydis_site/apps/wiki/models.py3
-rw-r--r--pydis_site/apps/wiki/tests.py3
-rw-r--r--pydis_site/apps/wiki/views.py3
-rw-r--r--pydis_site/hosts.py1
-rw-r--r--pydis_site/settings.py3
-rw-r--r--pydis_site/static/css/base/base.css40
-rw-r--r--pydis_site/static/css/home/index.css115
-rw-r--r--pydis_site/static/images/logo_site_banner.min.svg39
-rw-r--r--pydis_site/static/images/logo_site_banner.pngbin217061 -> 0 bytes
-rw-r--r--pydis_site/static/images/logo_site_banner.svg1041
-rw-r--r--pydis_site/static/images/navbar/navbar_discordjoin.svg81
-rw-r--r--pydis_site/static/images/navbar/pydis_banner_no_square.svg151
-rw-r--r--pydis_site/static/images/sponsors/jetbrains.pngbin167813 -> 53742 bytes
-rw-r--r--pydis_site/static/images/sponsors/jetbrains.svg66
-rw-r--r--pydis_site/static/images/sponsors/linode-diagonal.pngbin29104 -> 0 bytes
-rw-r--r--pydis_site/templates/base/base.html13
-rw-r--r--pydis_site/templates/base/footer.html2
-rw-r--r--pydis_site/templates/base/navbar.html120
-rw-r--r--pydis_site/templates/home/index.html95
43 files changed, 973 insertions, 1316 deletions
diff --git a/Pipfile b/Pipfile
index 31cfdeba..953de854 100644
--- a/Pipfile
+++ b/Pipfile
@@ -5,7 +5,7 @@ verify_ssl = true
[dev-packages]
flake8 = "~=3.7.7"
-flake8-bandit = "~=2.1.0"
+flake8-bandit = "==1.0.2"
flake8-bugbear = "~=19.3.0"
flake8-import-order = "~=0.18.1"
flake8-string-format = "~=0.2.3"
@@ -26,6 +26,12 @@ djangorestframework-bulk = "~=0.2.1"
psycopg2-binary = "~=2.8"
django-simple-bulma = ">=1.1.6,<2.0"
django-crispy-bulma = ">=0.1.2,<2.0"
+requests = "~=2.21"
[requires]
python_version = "3.7"
+
+[scripts]
+makemigrations = "python manage.py makemigrations"
+django_shell = "python manage.py shell"
+test = "python manage.py test"
diff --git a/Pipfile.lock b/Pipfile.lock
index 00399c65..a20d1687 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "c0d047b8e76560eb15bf978d943b8aae89a87f0feb8a2aa97fb3be97a21de17d"
+ "sha256": "0ff5e3b68fa729ba88aa32dc3aae4012d1d54e5ad620f635bc5136603900ebc0"
},
"pipfile-spec": 6,
"requires": {
@@ -16,6 +16,20 @@
]
},
"default": {
+ "certifi": {
+ "hashes": [
+ "sha256:59b7658e26ca9c7339e00f8f4636cdfe59d34fa37b9b04f6f9e9926b3cece1a5",
+ "sha256:b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae"
+ ],
+ "version": "==2019.3.9"
+ },
+ "chardet": {
+ "hashes": [
+ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
+ "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
+ ],
+ "version": "==3.0.4"
+ },
"django": {
"hashes": [
"sha256:7c3543e4fb070d14e10926189a7fcf42ba919263b7473dceaefce34d54e8a119",
@@ -66,11 +80,11 @@
},
"django-simple-bulma": {
"hashes": [
- "sha256:420042e26dd4bc70b148fc721bd77a48130b62b3d91b977e56f8232a4cfac555",
- "sha256:beb323aa1c51e5efee398b6e5a2b481b31a0be7505e3118d140c65349f637100"
+ "sha256:7dcc04a11b5a3aefb6ec57cb211c161df8421ea333638e03c9e7db87465fead2",
+ "sha256:f4bb4833c3272ec49e4901a53254de8e8d267da48b88f6f79af4c32f9f70c504"
],
"index": "pypi",
- "version": "==1.1.6"
+ "version": "==1.1.7"
},
"djangorestframework": {
"hashes": [
@@ -87,6 +101,13 @@
"index": "pypi",
"version": "==0.2.1"
},
+ "idna": {
+ "hashes": [
+ "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407",
+ "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"
+ ],
+ "version": "==2.8"
+ },
"libsass": {
"hashes": [
"sha256:2ae3b061a7d250fb47e5fdad1a8191600ca15dc604e76b109b6d3bf8e08fd2ed",
@@ -110,37 +131,37 @@
},
"psycopg2-binary": {
"hashes": [
- "sha256:163d3ee445a0b4c0109877da9e46271aacf4e5e3d60ae7368669555c30f13e7c",
- "sha256:1af0bfe7b0c13a0e613a27311fd4f9c5d024e8fc0f4b3d284e7df02a58a11fc0",
- "sha256:2169c3a1bf52d5b30cc98625b5919a964c571a32e8646be20be6c7e3e82079de",
- "sha256:218f079fa48e2ef812dc3d3ce6ec2f67ac56427ba4b038d5d6331f2cceb489c2",
- "sha256:26a958930687e94c4c6c73c171e4d4783b82ae4e16aa3424e6bcd4529bceedf0",
- "sha256:2c7c195aef3acdbc853942bc674844031a732890d2fee88a324298ed376b6c2b",
- "sha256:2ecdbfed7004669472bfa27c8d51012c717c241c7154ae17e4c8f93024043525",
- "sha256:345fc31b71a90ada1b51826537917b19a1af685a91c0f066787069c184d7d00f",
- "sha256:378a06649503f548be5f1e9eec2e94cc1d6138250b82a08dcc6151bca8cec107",
- "sha256:3f300bf2930e501dde09605de85cb2b84c2638e2c954be02a3c86f28176d3525",
- "sha256:6c2f66c653ce8bbd7e789d0f7f92c3f9fea881b55226f0ae5ee550cce9e3cf0e",
- "sha256:6fccbac2633831b877a8fbf865f7082d34895e82a015795a9f80f99a2efe2576",
- "sha256:7a166f8ccb6888358d3e67795b057540ea7caa71ab9e089b0cb0097f01088965",
- "sha256:8f6b84f887ec6fef6c1796779f8ec2603dc7e9ef52bc9269de719d4bcbdaebbb",
- "sha256:92cf3ceb7bb90cf35b8bd993c640b15d4832ba0e142a3b9da5006ef217da595d",
- "sha256:a20dfdf73f56da674926a3811929cff9fd23b9af90be9a6c36ac246a3486eef3",
- "sha256:a84415df4689251556c961e4fe3b25d30e32f00faa8064ce0909458dbe0d67b2",
- "sha256:ab1aa1cd50df3860f624c9713ee9e690eefd4e049d3a4d86577bab6e741e9616",
- "sha256:abc9dcf85e75a8687f2a6d560c0c1a2593e8e34ba6f9ad6721f8212c5de179a2",
- "sha256:c10454710a81a2f4b1ff4d1c83ac2cec63e0e55845a56324991514af5b1299d0",
- "sha256:c38f80719e4dfae7a6311a4f091f07f4fb2fb5d602352015d5639f63f8fabb68",
- "sha256:d75cf00605630b2cfefa5c62373c605dcda1cc0d607902847dbb8e8e9b67c1ce",
- "sha256:dce15cb6ef604c9e38fdaa848f58f83153ade9f4aa5e4cf5812aa27163561750",
- "sha256:e7e0db4311bb76bf3f6e0380f71912cfa6d0be7cc635e3772476050b0dabdabd",
- "sha256:eac59cae78dfe3fbf7ece25c170d7a152f88df7643381aa5e7344c2028a8d8d4",
- "sha256:ead7b3e1567bd14cacd44279c5e42cd19f54b9feed39180220253f4fbe3abd56",
- "sha256:ed772a5e8e7e5dd6bede960a86940c17cf653c7f158dafa5d52e919b676f10ba",
- "sha256:f2d73131acb94afa45de8b6b8a4bfb21bbe3736633d6478e53247f19dd8c299c"
+ "sha256:007ca0df127b1862fc010125bc4100b7a630efc6841047bd11afceadb4754611",
+ "sha256:03c49e02adf0b4d68f422fdbd98f7a7c547beb27e99a75ed02298f85cb48406a",
+ "sha256:0a1232cdd314e08848825edda06600455ad2a7adaa463ebfb12ece2d09f3370e",
+ "sha256:131c80d0958c89273d9720b9adf9df1d7600bb3120e16019a7389ab15b079af5",
+ "sha256:2de34cc3b775724623f86617d2601308083176a495f5b2efc2bbb0da154f483a",
+ "sha256:2eddc31500f73544a2a54123d4c4b249c3c711d31e64deddb0890982ea37397a",
+ "sha256:484f6c62bdc166ee0e5be3aa831120423bf399786d1f3b0304526c86180fbc0b",
+ "sha256:4c2d9369ed40b4a44a8ccd6bc3a7db6272b8314812d2d1091f95c4c836d92e06",
+ "sha256:70f570b5fa44413b9f30dbc053d17ef3ce6a4100147a10822f8662e58d473656",
+ "sha256:7a2b5b095f3bd733aab101c89c0e1a3f0dfb4ebdc26f6374805c086ffe29d5b2",
+ "sha256:804914a669186e2843c1f7fbe12b55aad1b36d40a28274abe6027deffad9433d",
+ "sha256:8520c03172da18345d012949a53617a963e0191ccb3c666f23276d5326af27b5",
+ "sha256:90da901fc33ea393fc644607e4a3916b509387e9339ec6ebc7bfded45b7a0ae9",
+ "sha256:a582416ad123291a82c300d1d872bdc4136d69ad0b41d57dc5ca3df7ef8e3088",
+ "sha256:ac8c5e20309f4989c296d62cac20ee456b69c41fd1bc03829e27de23b6fa9dd0",
+ "sha256:b2cf82f55a619879f8557fdaae5cec7a294fac815e0087c4f67026fdf5259844",
+ "sha256:b59d6f8cfca2983d8fdbe457bf95d2192f7b7efdb2b483bf5fa4e8981b04e8b2",
+ "sha256:be08168197021d669b9964bd87628fa88f910b1be31e7010901070f2540c05fd",
+ "sha256:be0f952f1c365061041bad16e27e224e29615d4eb1fb5b7e7760a1d3d12b90b6",
+ "sha256:c1c9a33e46d7c12b9c96cf2d4349d783e3127163fd96254dcd44663cf0a1d438",
+ "sha256:d18c89957ac57dd2a2724ecfe9a759912d776f96ecabba23acb9ecbf5c731035",
+ "sha256:d7e7b0ff21f39433c50397e60bf0995d078802c591ca3b8d99857ea18a7496ee",
+ "sha256:da0929b2bf0d1f365345e5eb940d8713c1d516312e010135b14402e2a3d2404d",
+ "sha256:de24a4962e361c512d3e528ded6c7480eab24c655b8ca1f0b761d3b3650d2f07",
+ "sha256:e45f93ff3f7dae2202248cf413a87aeb330821bf76998b3cf374eda2fc893dd7",
+ "sha256:f046aeae1f7a845041b8661bb7a52449202b6c5d3fb59eb4724e7ca088811904",
+ "sha256:f1dc2b7b2748084b890f5d05b65a47cd03188824890e9a60818721fd492249fb",
+ "sha256:fcbe7cf3a786572b73d2cd5f34ed452a5f5fac47c9c9d1e0642c457a148f9f88"
],
"index": "pypi",
- "version": "==2.8.1"
+ "version": "==2.8.2"
},
"pytz": {
"hashes": [
@@ -149,6 +170,14 @@
],
"version": "==2019.1"
},
+ "requests": {
+ "hashes": [
+ "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e",
+ "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b"
+ ],
+ "index": "pypi",
+ "version": "==2.21.0"
+ },
"six": {
"hashes": [
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
@@ -162,6 +191,13 @@
"sha256:7c3dca29c022744e95b547e867cee89f4fce4373f3549ccd8797d8eb52cdb873"
],
"version": "==0.3.0"
+ },
+ "urllib3": {
+ "hashes": [
+ "sha256:4c291ca23bbb55c76518905869ef34bdd5f0e46af7afe6861e8375643ffee1a0",
+ "sha256:9a247273df709c4fedb38c711e44292304f73f39ab01beda9f6b9fc375669ac3"
+ ],
+ "version": "==1.24.2"
}
},
"develop": {
@@ -233,11 +269,11 @@
},
"flake8-bandit": {
"hashes": [
- "sha256:5eac24fa9fef532e4e4ce599c5b3c5248c5cc435d2927537b529b0a7bcb72467",
- "sha256:be5840923ccf06cac6a8893a2f0abc17f03b6b9fdb5284d796f722b69c8f840b"
+ "sha256:a66c7b42af9530d5e988851ccee02958a51a85d46f1f4609ecc3546948f809b8",
+ "sha256:f7c3421fd9aebc63689c0693511e16dcad678fd4a0ce624b78ca91ae713eacdc"
],
"index": "pypi",
- "version": "==2.1.0"
+ "version": "==1.0.2"
},
"flake8-bugbear": {
"hashes": [
diff --git a/docker-compose.yml b/docker-compose.yml
index 04ec51de..0c504c40 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -12,6 +12,8 @@ version: "3.6"
services:
postgres:
image: postgres:11-alpine
+ ports:
+ - "127.0.0.1:7777:5432"
environment:
POSTGRES_DB: pysite
POSTGRES_PASSWORD: supersecretpassword
@@ -30,7 +32,7 @@ services:
- .:/app:ro
- staticfiles:/var/www/static
environment:
- DATABASE_URL: postgres://pysite:supersecretpassword@postgres/pysite
+ DATABASE_URL: postgres://pysite:supersecretpassword@postgres:5432/pysite
DEBUG: "true"
SECRET_KEY: suitable-for-development-only
STATIC_ROOT: /var/www/static
diff --git a/docker/app/migrate_and_serve.sh b/docker/app/migrate_and_serve.sh
index 2fe7841f..42bf67a3 100755
--- a/docker/app/migrate_and_serve.sh
+++ b/docker/app/migrate_and_serve.sh
@@ -9,7 +9,12 @@
echo [i] Applying migrations.
python manage.py migrate --verbosity 1
+
echo [i] Collecting static files.
python manage.py collectstatic --no-input --clear --verbosity 0
+
+echo [i] Creating a superuser.
+echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin', 'admin') if not User.objects.filter(username='admin').exists() else print('Admin user already exists')" | python manage.py shell
+
echo [i] Starting server.
python manage.py runserver 0.0.0.0:8000
diff --git a/docker/pysite.dockerapp b/docker/pysite.dockerapp
index dc472b2e..2426008e 100644
--- a/docker/pysite.dockerapp
+++ b/docker/pysite.dockerapp
@@ -25,6 +25,8 @@ services:
postgres:
image: postgres:11-alpine
+ ports:
+ - "127.0.0.1:5432:5432"
environment:
POSTGRES_DB: "${pg_db}"
POSTGRES_USER: "${pg_user}"
diff --git a/pydis_site/apps/home/admin.py b/pydis_site/apps/home/admin.py
deleted file mode 100644
index 4185d360..00000000
--- a/pydis_site/apps/home/admin.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# from django.contrib import admin
-
-# Register your models here.
diff --git a/pydis_site/apps/home/migrations/0001_initial.py b/pydis_site/apps/home/migrations/0001_initial.py
new file mode 100644
index 00000000..a2bf9f3e
--- /dev/null
+++ b/pydis_site/apps/home/migrations/0001_initial.py
@@ -0,0 +1,26 @@
+# Generated by Django 2.2 on 2019-04-16 15:27
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='RepositoryMetadata',
+ fields=[
+ ('last_updated', models.DateTimeField(default=django.utils.timezone.now, help_text='The date and time this data was last fetched.')),
+ ('repo_name', models.CharField(help_text='The full name of the repo, e.g. python-discord/site', max_length=40, primary_key=True, serialize=False)),
+ ('description', models.CharField(help_text='The description of the repo.', max_length=400)),
+ ('forks', models.IntegerField(help_text='The number of forks of this repo')),
+ ('stargazers', models.IntegerField(help_text='The number of stargazers for this repo')),
+ ('language', models.CharField(help_text='The primary programming language used for this repo.', max_length=20)),
+ ],
+ ),
+ ]
diff --git a/pydis_site/apps/home/models.py b/pydis_site/apps/home/models.py
deleted file mode 100644
index 0b4331b3..00000000
--- a/pydis_site/apps/home/models.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# from django.db import models
-
-# Create your models here.
diff --git a/pydis_site/apps/home/models/__init__.py b/pydis_site/apps/home/models/__init__.py
new file mode 100644
index 00000000..6c68df9c
--- /dev/null
+++ b/pydis_site/apps/home/models/__init__.py
@@ -0,0 +1,3 @@
+from .repository_metadata import RepositoryMetadata
+
+__all__ = ["RepositoryMetadata"]
diff --git a/pydis_site/apps/home/models/repository_metadata.py b/pydis_site/apps/home/models/repository_metadata.py
new file mode 100644
index 00000000..c975c904
--- /dev/null
+++ b/pydis_site/apps/home/models/repository_metadata.py
@@ -0,0 +1,33 @@
+from django.db import models
+from django.utils import timezone
+
+
+class RepositoryMetadata(models.Model):
+ """Information about one of our repos fetched from the GitHub API."""
+
+ last_updated = models.DateTimeField(
+ default=timezone.now,
+ help_text="The date and time this data was last fetched."
+ )
+ repo_name = models.CharField(
+ primary_key=True,
+ max_length=40,
+ help_text="The full name of the repo, e.g. python-discord/site"
+ )
+ description = models.CharField(
+ max_length=400,
+ help_text="The description of the repo."
+ )
+ forks = models.IntegerField(
+ help_text="The number of forks of this repo"
+ )
+ stargazers = models.IntegerField(
+ help_text="The number of stargazers for this repo"
+ )
+ language = models.CharField(
+ max_length=20,
+ help_text="The primary programming language used for this repo."
+ )
+
+ def __str__(self):
+ return self.repo_name
diff --git a/pydis_site/apps/home/templatetags/__init__.py b/pydis_site/apps/home/templatetags/__init__.py
index e69de29b..70aca169 100644
--- a/pydis_site/apps/home/templatetags/__init__.py
+++ b/pydis_site/apps/home/templatetags/__init__.py
@@ -0,0 +1,3 @@
+from .extra_filters import starts_with
+
+__all__ = ["starts_with"]
diff --git a/pydis_site/apps/home/tests.py b/pydis_site/apps/home/tests.py
deleted file mode 100644
index 733ddaa3..00000000
--- a/pydis_site/apps/home/tests.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.test import TestCase
-from django_hosts.resolvers import reverse
-
-from pydis_site.apps.home.templatetags import extra_filters
-
-
-class TestIndexReturns200(TestCase):
- def test_index_returns_200(self):
- url = reverse('home.index')
- resp = self.client.get(url)
- self.assertEqual(resp.status_code, 200)
-
-
-class TestExtraFilterTemplateTags(TestCase):
- def test_starts_with(self):
- self.assertTrue(extra_filters.starts_with('foo', 'f'))
diff --git a/pydis_site/apps/wiki/__init__.py b/pydis_site/apps/home/tests/__init__.py
index e69de29b..e69de29b 100644
--- a/pydis_site/apps/wiki/__init__.py
+++ b/pydis_site/apps/home/tests/__init__.py
diff --git a/pydis_site/apps/home/tests/mock_github_api_response.json b/pydis_site/apps/home/tests/mock_github_api_response.json
new file mode 100644
index 00000000..37dc672e
--- /dev/null
+++ b/pydis_site/apps/home/tests/mock_github_api_response.json
@@ -0,0 +1,44 @@
+[
+ {
+ "full_name": "python-discord/bot",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/site",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/snekbox",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/django-simple-bulma",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/django-crispy-bulma",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/seasonalbot",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ }
+]
diff --git a/pydis_site/apps/home/tests/test_repodata_helpers.py b/pydis_site/apps/home/tests/test_repodata_helpers.py
new file mode 100644
index 00000000..59cb2331
--- /dev/null
+++ b/pydis_site/apps/home/tests/test_repodata_helpers.py
@@ -0,0 +1,105 @@
+import json
+from datetime import timedelta
+from pathlib import Path
+from unittest import mock
+
+from django.test import TestCase
+from django.utils import timezone
+
+from pydis_site.apps.home.models import RepositoryMetadata
+from pydis_site.apps.home.views import HomeView
+
+
+def mocked_requests_get(*args, **kwargs) -> "MockResponse": # noqa
+ """A mock version of requests.get, so we don't need to call the API every time we run a test"""
+ class MockResponse:
+ def __init__(self, json_data, status_code):
+ self.json_data = json_data
+ self.status_code = status_code
+
+ def json(self):
+ return self.json_data
+
+ if args[0] == HomeView.github_api:
+ json_path = Path(__file__).resolve().parent / "mock_github_api_response.json"
+ with open(json_path, 'r') as json_file:
+ mock_data = json.load(json_file)
+
+ return MockResponse(mock_data, 200)
+
+ return MockResponse(None, 404)
+
+
+class TestRepositoryMetadataHelpers(TestCase):
+
+ def setUp(self):
+ """Executed before each test method."""
+
+ self.home_view = HomeView()
+
+ @mock.patch('requests.get', side_effect=mocked_requests_get)
+ def test_returns_metadata(self, _: mock.MagicMock):
+ """Test if the _get_repo_data helper actually returns what it should."""
+
+ metadata = self.home_view._get_repo_data()
+
+ self.assertIsInstance(metadata[0], RepositoryMetadata)
+ self.assertEquals(len(metadata), len(self.home_view.repos))
+
+ def test_returns_cached_metadata(self):
+ """Test if the _get_repo_data helper returns cached data when available."""
+
+ repo_data = RepositoryMetadata(
+ repo_name="python-discord/site",
+ description="testrepo",
+ forks=42,
+ stargazers=42,
+ language="English",
+ )
+ repo_data.save()
+ metadata = self.home_view._get_repo_data()
+
+ self.assertIsInstance(metadata[0], RepositoryMetadata)
+ self.assertIsInstance(str(metadata[0]), str)
+
+ @mock.patch('requests.get', side_effect=mocked_requests_get)
+ def test_refresh_stale_metadata(self, _: mock.MagicMock):
+ """Test if the _get_repo_data helper will refresh when the data is stale"""
+
+ repo_data = RepositoryMetadata(
+ repo_name="python-discord/site",
+ description="testrepo",
+ forks=42,
+ stargazers=42,
+ language="English",
+ last_updated=timezone.now() - timedelta(seconds=HomeView.repository_cache_ttl + 1),
+ )
+ repo_data.save()
+ metadata = self.home_view._get_repo_data()
+
+ self.assertIsInstance(metadata[0], RepositoryMetadata)
+
+ @mock.patch('requests.get', side_effect=mocked_requests_get)
+ def test_returns_api_data(self, _: mock.MagicMock):
+ """Tests if the _get_api_data helper returns what it should."""
+
+ api_data = self.home_view._get_api_data()
+ repo = self.home_view.repos[0]
+
+ self.assertIsInstance(api_data, dict)
+ self.assertEquals(len(api_data), len(self.home_view.repos))
+ self.assertIn(repo, api_data.keys())
+ self.assertIn("stargazers_count", api_data[repo])
+
+ @mock.patch('requests.get', side_effect=mocked_requests_get)
+ def test_mocked_requests_get(self, mock_get: mock.MagicMock):
+ """Tests if our mocked_requests_get is returning what it should."""
+
+ success_data = mock_get(HomeView.github_api)
+ fail_data = mock_get("failtest")
+
+ self.assertEqual(success_data.status_code, 200)
+ self.assertEqual(fail_data.status_code, 404)
+
+ self.assertIsNotNone(success_data.json_data)
+ self.assertIsNone(fail_data.json_data)
diff --git a/pydis_site/apps/home/tests/test_templatetags.py b/pydis_site/apps/home/tests/test_templatetags.py
new file mode 100644
index 00000000..813588c8
--- /dev/null
+++ b/pydis_site/apps/home/tests/test_templatetags.py
@@ -0,0 +1,8 @@
+from django.test import TestCase
+
+from pydis_site.apps.home.templatetags import starts_with
+
+
+class TestTemplateTags(TestCase):
+ def test_starts_with(self):
+ self.assertTrue(starts_with('foo', 'f'))
diff --git a/pydis_site/apps/home/tests/test_views.py b/pydis_site/apps/home/tests/test_views.py
new file mode 100644
index 00000000..73678b0a
--- /dev/null
+++ b/pydis_site/apps/home/tests/test_views.py
@@ -0,0 +1,9 @@
+from django.test import TestCase
+from django_hosts.resolvers import reverse
+
+
+class TestIndexReturns200(TestCase):
+ def test_index_returns_200(self):
+ url = reverse('home')
+ resp = self.client.get(url)
+ self.assertEqual(resp.status_code, 200)
diff --git a/pydis_site/apps/home/urls.py b/pydis_site/apps/home/urls.py
index 56525af8..d8dba2f6 100644
--- a/pydis_site/apps/home/urls.py
+++ b/pydis_site/apps/home/urls.py
@@ -1,10 +1,10 @@
from django.contrib import admin
from django.urls import path
-from django.views.generic import TemplateView
+from .views import HomeView
app_name = 'home'
urlpatterns = [
- path('', TemplateView.as_view(template_name='home/index.html'), name='home.index'),
+ path('', HomeView.as_view(), name='home'),
path('admin/', admin.site.urls)
]
diff --git a/pydis_site/apps/home/views.py b/pydis_site/apps/home/views.py
deleted file mode 100644
index fd0e0449..00000000
--- a/pydis_site/apps/home/views.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# from django.shortcuts import render
-
-# Create your views here.
diff --git a/pydis_site/apps/home/views/__init__.py b/pydis_site/apps/home/views/__init__.py
new file mode 100644
index 00000000..971d73a3
--- /dev/null
+++ b/pydis_site/apps/home/views/__init__.py
@@ -0,0 +1,3 @@
+from .home import HomeView
+
+__all__ = ["HomeView"]
diff --git a/pydis_site/apps/home/views/home.py b/pydis_site/apps/home/views/home.py
new file mode 100644
index 00000000..e4daf380
--- /dev/null
+++ b/pydis_site/apps/home/views/home.py
@@ -0,0 +1,115 @@
+from typing import Dict, List
+
+import requests
+from django.core.handlers.wsgi import WSGIRequest
+from django.http import HttpResponse
+from django.shortcuts import render
+from django.utils import timezone
+from django.views import View
+
+from pydis_site.apps.home.models import RepositoryMetadata
+
+
+class HomeView(View):
+ """The main landing page for the website."""
+
+ github_api = "https://api.github.com/users/python-discord/repos"
+ repository_cache_ttl = 600
+
+ # Which of our GitHub repos should be displayed on the front page, and in which order?
+ repos = [
+ "python-discord/site",
+ "python-discord/bot",
+ "python-discord/snekbox",
+ "python-discord/seasonalbot",
+ "python-discord/django-simple-bulma",
+ "python-discord/django-crispy-bulma",
+ ]
+
+ def _get_api_data(self) -> Dict[str, Dict[str, str]]:
+ """Call the GitHub API and get information about our repos."""
+
+ repo_dict = {repo_name: {} for repo_name in self.repos}
+
+ # Fetch the data from the GitHub API
+ api_data = requests.get(self.github_api)
+ api_data = api_data.json()
+
+ # Process the API data into our dict
+ for repo in api_data:
+ full_name = repo["full_name"]
+
+ if full_name in self.repos:
+ repo_dict[full_name] = {
+ "full_name": repo["full_name"],
+ "description": repo["description"],
+ "language": repo["language"],
+ "forks_count": repo["forks_count"],
+ "stargazers_count": repo["stargazers_count"],
+ }
+ return repo_dict
+
+ def _get_repo_data(self) -> List[RepositoryMetadata]:
+ """Build a list of RepositoryMetadata objects that we can use to populate the front page."""
+
+ # Try to get site data from the cache
+ try:
+ repo_data = RepositoryMetadata.objects.get(repo_name="python-discord/site")
+
+ # If the data is stale, we should refresh it.
+ if (timezone.now() - repo_data.last_updated).seconds > self.repository_cache_ttl:
+
+ # Get new data from API
+ api_repositories = self._get_api_data()
+ database_repositories = []
+
+ # Update or create all RepoData objects in self.repos
+ for repo_name, api_data in api_repositories.items():
+ try:
+ repo_data = RepositoryMetadata.objects.get(repo_name=repo_name)
+ repo_data.description = api_data["description"]
+ repo_data.language = api_data["language"]
+ repo_data.forks = api_data["forks_count"]
+ repo_data.stargazers = api_data["stargazers_count"]
+ except RepositoryMetadata.DoesNotExist:
+ repo_data = RepositoryMetadata(
+ repo_name=api_data["full_name"],
+ description=api_data["description"],
+ forks=api_data["forks_count"],
+ stargazers=api_data["stargazers_count"],
+ language=api_data["language"],
+ )
+ repo_data.save()
+ database_repositories.append(repo_data)
+ return database_repositories
+
+ # Otherwise, if the data is fresher than 2 minutes old, we should just return it.
+ else:
+ return RepositoryMetadata.objects.all()
+
+ # If this is raised, the database has no repodata at all, we will create them all.
+ except RepositoryMetadata.DoesNotExist:
+
+ # Get new data from API
+ api_repositories = self._get_api_data()
+ database_repositories = []
+
+ # Create all the repodata records in the database.
+ for api_data in api_repositories.values():
+ repo_data = RepositoryMetadata(
+ repo_name=api_data["full_name"],
+ description=api_data["description"],
+ forks=api_data["forks_count"],
+ stargazers=api_data["stargazers_count"],
+ language=api_data["language"],
+ )
+ repo_data.save()
+ database_repositories.append(repo_data)
+
+ return database_repositories
+
+ def get(self, request: WSGIRequest) -> HttpResponse:
+ """Collect repo data and render the homepage view"""
+
+ repo_data = self._get_repo_data()
+ return render(request, "home/index.html", {"repo_data": repo_data})
diff --git a/pydis_site/apps/wiki/admin.py b/pydis_site/apps/wiki/admin.py
deleted file mode 100644
index 4185d360..00000000
--- a/pydis_site/apps/wiki/admin.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# from django.contrib import admin
-
-# Register your models here.
diff --git a/pydis_site/apps/wiki/apps.py b/pydis_site/apps/wiki/apps.py
deleted file mode 100644
index fce4708e..00000000
--- a/pydis_site/apps/wiki/apps.py
+++ /dev/null
@@ -1,5 +0,0 @@
-from django.apps import AppConfig
-
-
-class WikiConfig(AppConfig):
- name = 'wiki'
diff --git a/pydis_site/apps/wiki/migrations/__init__.py b/pydis_site/apps/wiki/migrations/__init__.py
deleted file mode 100644
index e69de29b..00000000
--- a/pydis_site/apps/wiki/migrations/__init__.py
+++ /dev/null
diff --git a/pydis_site/apps/wiki/models.py b/pydis_site/apps/wiki/models.py
deleted file mode 100644
index 0b4331b3..00000000
--- a/pydis_site/apps/wiki/models.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# from django.db import models
-
-# Create your models here.
diff --git a/pydis_site/apps/wiki/tests.py b/pydis_site/apps/wiki/tests.py
deleted file mode 100644
index a79ca8be..00000000
--- a/pydis_site/apps/wiki/tests.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# from django.test import TestCase
-
-# Create your tests here.
diff --git a/pydis_site/apps/wiki/views.py b/pydis_site/apps/wiki/views.py
deleted file mode 100644
index fd0e0449..00000000
--- a/pydis_site/apps/wiki/views.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# from django.shortcuts import render
-
-# Create your views here.
diff --git a/pydis_site/hosts.py b/pydis_site/hosts.py
index 34acfd09..0fa4793d 100644
--- a/pydis_site/hosts.py
+++ b/pydis_site/hosts.py
@@ -3,7 +3,6 @@ from django_hosts import host, patterns
host_patterns = patterns(
'',
- # host(r"subdomain pattern", "URLs module", "host entry name")
host(r'admin', 'pydis_site.apps.admin.urls', name="admin"),
host(r'api', 'pydis_site.apps.api.urls', name='api'),
host(r'.*', 'pydis_site.apps.home.urls', name=settings.DEFAULT_HOST)
diff --git a/pydis_site/settings.py b/pydis_site/settings.py
index f7668f65..891084c9 100644
--- a/pydis_site/settings.py
+++ b/pydis_site/settings.py
@@ -64,7 +64,6 @@ else:
INSTALLED_APPS = [
'pydis_site.apps.api',
'pydis_site.apps.home',
- 'pydis_site.apps.wiki',
'django.contrib.admin',
'django.contrib.auth',
@@ -255,5 +254,7 @@ BULMA_SETTINGS = {
"variables": {
"primary": "#7289DA",
"link": "$primary",
+ "navbar-height": "4.75rem",
+ "footer-padding": "1rem 1.5rem 1rem",
}
}
diff --git a/pydis_site/static/css/base/base.css b/pydis_site/static/css/base/base.css
new file mode 100644
index 00000000..4f656189
--- /dev/null
+++ b/pydis_site/static/css/base/base.css
@@ -0,0 +1,40 @@
+html {
+ overflow: auto;
+}
+
+body.site {
+ display: flex;
+ min-height: 100vh;
+ flex-direction: column;
+}
+
+main.site-content {
+ flex: 1;
+}
+
+div.card.has-equal-height {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+#django-logo {
+ padding-bottom: 2px;
+ background: url(https://static.djangoproject.com/img/logos/django-logo-negative.png) no-repeat center;
+ filter: grayscale(1) invert(0.02);
+ background-size: 52px 25.5px;
+ background-position: -1px -2px;
+ color: #00000000;
+}
+
+#bulma-logo {
+ padding-left: 18px;
+ height: 20px;
+ background: url(https://bulma.io/images/bulma-logo-white.png) no-repeat center;
+ background-size: 60px;
+ color: #00000000;
+}
+
+#pydis-text {
+ font-weight: bold;
+}
diff --git a/pydis_site/static/css/home/index.css b/pydis_site/static/css/home/index.css
index 2d744915..0ad2e6b5 100644
--- a/pydis_site/static/css/home/index.css
+++ b/pydis_site/static/css/home/index.css
@@ -16,3 +16,118 @@
height: 5rem;
margin-right: 2rem;
}
+
+.navbar-item.is-fullsize {
+ padding: 0;
+}
+
+.navbar-item.is-fullsize img {
+ max-height: 4.75rem;
+}
+
+.navbar-item.has-no-highlight:hover {
+ background-color: transparent;
+}
+
+.navbar-item.has-left-margin-1 {
+ margin-left: 1rem;
+}
+
+.navbar-item.has-left-margin-2 {
+ margin-left: 2rem;
+}
+
+.navbar-item.has-left-margin-3 {
+ margin-left: 3rem;
+}
+
+.video-container iframe,
+.video-container object,
+.video-container embed {
+ width: 100%;
+ height: calc(92vw * 0.5625);
+ margin: 8px auto auto auto;
+}
+
+div.card.github-card {
+ box-shadow: none;
+ border: #d1d5da 1px solid;
+ border-radius: 3px;
+}
+
+div.repo-headline {
+ font-size: 1.25rem;
+ margin-bottom: 8px;
+}
+
+span.repo-language-dot {
+ border-radius: 50%;
+ height: 12px;
+ width: 12px;
+ top: 1px;
+ display: inline-block;
+ position: relative;
+}
+
+span.repo-language-dot.python {
+ background-color: #3572A5;
+}
+
+span.repo-language-dot.html {
+ background-color: #e34c26;
+}
+
+span.repo-language-dot.css {
+ background-color: #563d7c;
+}
+
+#repo-footer-item {
+ margin-left: 1.2rem;
+}
+
+#navbar-banner {
+ background-color: transparent;
+}
+
+#navbar-banner img {
+ max-height: 3rem;
+}
+
+#sponsors-hero {
+ padding-top: 2rem;
+ padding-bottom: 3rem;
+}
+
+@media screen and (min-width: 1088px) {
+ .column.is-half, .column.is-half-tablet {
+ flex: none;
+ width: 50%;
+ }
+
+ .columns:not(.is-desktop) {
+ display: flex;
+ }
+
+ .video-container iframe {
+ height: calc(42vw * 0.5625);
+ max-height: 371px;
+ max-width: 660px;
+ }
+}
+
+@media screen and (max-width: 1087px) {
+ .column.is-half, .column.is-half-tablet {
+ flex: none;
+ width: 100%;
+ }
+
+ .columns:not(.is-desktop) {
+ display: block;
+ }
+
+ .video-container iframe {
+ height: calc(92vw * 0.5625);
+ max-height: none;
+ max-width: none;
+ }
+}
diff --git a/pydis_site/static/images/logo_site_banner.min.svg b/pydis_site/static/images/logo_site_banner.min.svg
deleted file mode 100644
index 4d868d04..00000000
--- a/pydis_site/static/images/logo_site_banner.min.svg
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="559.42mm" height="201.85mm" enable-background="new" version="1.1" viewBox="0 0 559.42 201.85" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
-<metadata>
-<rdf:RDF>
-<cc:Work rdf:about="">
-<dc:format>image/svg+xml</dc:format>
-<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
-<dc:title/>
-</cc:Work>
-</rdf:RDF>
-</metadata>
-<g transform="matrix(.35596 0 0 .35596 -1.7158 6.1497)">
-<rect x="34.319" y="34.319" width="463.86" height="463.86" ry="52.766" fill="#7289da"/>
-<path d="m330.41 115.25-11.506 3.3086c-12.223-1.8051-24.757-2.597-36.895-2.5078-13.5 0.1-26.498 1.1992-37.898 3.1992-3.6998 0.65161-7.0474 1.386-10.107 2.1992h-35.893v18.801h4.5v7.6992h2.7832c-0.63936 3.7142-0.88476 7.7997-0.88476 12.301v4h-15.398l-2.2012 11 17.6 15.014v0.0859h79.201v10h-108.9c-23 0-43.2 13.8-49.5 40-7.3 30-7.6 48.801 0 80.201 0.49734 2.0782 1.0605 4.0985 1.6836 6.0625l-1.1836 10.438 13.346 11.549c7.032 7.5103 16.371 11.951 28.254 11.951h27.201v-36c0-26 22.6-49 49.5-49h79.199c22 0 39.6-18.102 39.6-40.102v-75.199c0-12.9-6.5819-23.831-16.516-31.273zm76.801 77.6-14.301 7.4004h-20.1v35.1c0 27.2-23.1 50-49.5 50h-79.1c-21.7 0-39.6 18.5-39.6 40.1v75.102c0 21.4 18.7 34 39.6 40.1 25.1 7.3 49.1 8.7 79.1 0 19.9-5.7 39.6-17.3 39.6-40.1v-30.102h-0.11914l-11.721-10h51.439c23 0 31.602-16 39.602-40 8.3-24.7 7.9-48.499 0-80.199-3.6226-14.491-9.3525-26.71-18.947-33.699zm-123.4 167.6h57.5v10h-57.5z" fill-opacity=".20554"/>
-<path class="st2" d="m264.31 100.95c-13.5 0.1-26.5 1.2-37.9 3.2-33.5 5.9-39.6 18.2-39.6 41v30.1h79.2v10h-108.9c-23 0-43.2 13.8-49.5 40-7.3 30-7.6 48.8 0 80.2 5.6 23.4 19.1 40 42.1 40h27.2v-36c0-26 22.6-49 49.5-49h79.1c22 0 39.6-18.1 39.6-40.1v-75.2c0-21.4-18.1-37.4-39.6-41-13.5-2.3-27.6-3.3-41.2-3.2zm-42.8 24.2c8.2 0 14.9 6.8 14.9 15.1s-6.7 15-14.9 15-14.9-6.7-14.9-15c0-8.4 6.7-15.1 14.9-15.1z" fill="#cbd6ff"/>
-<path class="st3" d="m355.11 185.25v35c0 27.2-23.1 50-49.5 50h-79.1c-21.7 0-39.6 18.5-39.6 40.1v75.1c0 21.4 18.7 34 39.6 40.1 25.1 7.3 49.1 8.7 79.1 0 19.9-5.7 39.6-17.3 39.6-40.1v-30.1h-79.1v-10h118.7c23 0 31.6-16 39.6-40 8.3-24.7 7.9-48.5 0-80.2-5.7-22.8-16.6-40-39.6-40h-29.7zm-44.5 190.2c8.2 0 14.9 6.7 14.9 15s-6.7 15.1-14.9 15.1-14.9-6.8-14.9-15.1 6.7-15 14.9-15z" fill="#fff"/>
-</g>
-<g transform="matrix(1.8652 0 0 1.8652 -1221.3 -217.83)" fill="#fff" stroke="#fff" stroke-width="1.0723" aria-label="PYTHON">
-<path d="m764.54 165.21h8.1038v-9.3714h4.7536c7.7416 0 11.68-5.6591 11.68-11.363 0-5.6591-3.8934-11.318-11.726-11.318h-12.812zm8.1038-16.57v-7.9227h4.7084c4.8894-0.0453 4.8894 7.968 0 7.9227z"/>
-<path d="m810.56 165.21v-12.631l11.228-19.422h-9.5072l-5.7949 11.771-5.7949-11.771h-9.4167l11.182 19.422v12.631z"/>
-<path d="m849.96 140.81v-7.6963h-25.217v7.6963h8.5112v24.402h8.1943v-24.402z"/>
-<path d="m864.13 153.13h9.2356v12.088h8.1491v-32.053h-8.1491v12.133h-9.2356v-12.133h-8.1491v32.053h8.1491z"/>
-<path d="m888.61 154.66c0 7.3342 6.6551 11.001 13.31 11.001 6.6551 0 13.265-3.6671 13.265-11.001v-10.956c0-7.3342-6.6551-11.001-13.31-11.001-6.6551 0-13.265 3.6218-13.265 11.001zm8.1038-10.956c0-2.3542 2.5353-3.6218 5.0705-3.6218 2.6258 0 5.2969 1.1318 5.2969 3.6218v10.956c0 2.3089-2.5805 3.486-5.1611 3.486-2.5805 0-5.2064-1.1318-5.2064-3.486z"/>
-<path d="m922.24 165.21h8.1038v-12.812l-1.0413-6.2023 0.22636-0.0453 2.8069 6.4287 7.2436 12.631h8.1943v-32.053h-8.0585l-3e-3 13.85s0.8633 6.2058 0.90857 6.2058l-0.22636 0.0453-2.7164-6.4287-7.7416-13.672h-7.6963z"/>
-</g>
-<style type="text/css">.st0{fill:#7289DA;}
- .st1{fill:#5B6DAE;}
- .st2{fill:#CAD6FF;}
- .st3{fill:#FFFFFF;}</style>
-<g transform="translate(0 -.076513)" fill="#cad6ff" stroke="#cad6ff" stroke-width="2.1077" aria-label="DISCORD">
-<path d="m204.75 111.65v59.69h22.341c11.972 0.0843 23.185-5.9015 23.185-19.644v-20.065c0-13.911-11.213-19.981-23.185-19.981zm15.175 45.526v-31.447h7.672c5.0584 0 7.5034 2.4449 7.5034 6.323v18.632c0 3.8781-2.3606 6.4917-7.5034 6.4917z"/>
-<path d="m275.33 111.65h-15.091v59.69h15.091z"/>
-<path d="m283.72 161.39c5.5643 7.1661 13.152 10.791 20.318 10.791 10.96 0 23.1-6.323 23.606-17.873 0.67445-14.669-9.9483-18.379-20.571-20.318-4.6369-1.0117-7.7563-2.6978-7.9249-5.5643 0.25292-6.9132 10.96-7.1661 17.199-0.50585l9.864-7.5877c-6.1544-7.5034-13.152-9.5267-20.402-9.5267-10.96 0-21.583 6.1544-21.583 17.873 0 11.381 8.768 17.452 18.379 18.969 4.8898 0.67446 10.37 2.6135 10.201 5.9858-0.42154 6.4074-13.573 6.0701-19.559-1.1803z"/>
-<path d="m366.42 152.7c-3.288 8.2621-16.777 6.2388-16.777-0.92738v-20.571c0-7.419 13.321-9.1052 17.367-1.6862l12.309-4.9741c-4.8055-10.623-13.658-13.742-20.993-13.742-11.972 0-23.775 6.9132-23.775 20.402v20.571c0 13.573 11.803 20.402 23.522 20.402 7.5034 0 16.524-3.7095 21.498-13.405z"/>
-<path d="m385.43 151.69c0 13.658 12.393 20.487 24.786 20.487 12.393 0 24.702-6.8289 24.702-20.487v-20.402c0-13.658-12.393-20.487-24.786-20.487s-24.702 6.7446-24.702 20.487zm15.091-20.402c0-4.384 4.7212-6.7446 9.4424-6.7446 4.8898 0 9.864 2.1077 9.864 6.7446v20.402c0 4.2997-4.8055 6.4917-9.611 6.4917-4.8055 0-9.6954-2.1077-9.6954-6.4917z"/>
-<path d="m476.44 171.34h18.801l-16.271-20.487c7.2504-2.2763 11.719-8.515 11.719-19.559-0.33723-13.995-9.864-19.644-22.173-19.644h-23.859v59.69h15.26v-18.969h2.6978zm-16.524-31.952v-13.658h8.8523c9.5267 0 9.5267 13.658 0 13.658z"/>
-<path d="m500.97 111.65v59.69h22.341c11.972 0.0843 23.185-5.9015 23.185-19.644v-20.065c0-13.911-11.213-19.981-23.185-19.981zm15.175 45.526v-31.447h7.672c5.0584 0 7.5034 2.4449 7.5034 6.323v18.632c0 3.8781-2.3606 6.4917-7.5034 6.4917z"/>
-</g>
-</svg>
diff --git a/pydis_site/static/images/logo_site_banner.png b/pydis_site/static/images/logo_site_banner.png
deleted file mode 100644
index 9ab656c0..00000000
--- a/pydis_site/static/images/logo_site_banner.png
+++ /dev/null
Binary files differ
diff --git a/pydis_site/static/images/logo_site_banner.svg b/pydis_site/static/images/logo_site_banner.svg
deleted file mode 100644
index 27132b12..00000000
--- a/pydis_site/static/images/logo_site_banner.svg
+++ /dev/null
@@ -1,1041 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="559.42059mm"
- height="201.84991mm"
- viewBox="0 0 559.42059 201.84991"
- version="1.1"
- id="svg8"
- inkscape:version="0.92.4 5da689c313, 2019-01-14"
- sodipodi:docname="logo_site_banner.svg"
- inkscape:export-filename="/home/scragly/Github/PyDisBranding/logos/logo_banner/logo_site_banner_3000.png"
- inkscape:export-xdpi="141.89"
- inkscape:export-ydpi="141.89"
- enable-background="new">
- <defs
- id="defs2">
- <linearGradient
- id="linearGradient4671">
- <stop
- style="stop-color:#ffd43b;stop-opacity:1;"
- offset="0"
- id="stop4673" />
- <stop
- style="stop-color:#ffe873;stop-opacity:1"
- offset="1"
- id="stop4675" />
- </linearGradient>
- <linearGradient
- id="linearGradient4689">
- <stop
- style="stop-color:#5a9fd4;stop-opacity:1;"
- offset="0"
- id="stop4691" />
- <stop
- style="stop-color:#306998;stop-opacity:1;"
- offset="1"
- id="stop4693" />
- </linearGradient>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4793">
- <g
- style="fill:#7289da;fill-opacity:1"
- id="use4795"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- class="st0"
- d="M 6.6811787,0.72787837 H 4.7015954 c -0.166935,0 -0.3028467,0.13591169 -0.3028467,0.30432403 v 1.9973109 c 0,0.1684122 0.1359117,0.304324 0.3028467,0.304324 h 1.675259 L 6.2985576,3.0605366 6.4876523,3.2363353 6.6664058,3.4017931 6.9840255,3.6824802 V 1.0322024 c 0,-0.16841234 -0.1359121,-0.30432403 -0.3028468,-0.30432403 z M 6.1109404,2.6572335 c 0,0 -0.053183,-0.063524 -0.097502,-0.1196614 C 6.2069649,2.4829127 6.28083,2.3617734 6.28083,2.3617734 6.2202604,2.4016599 6.1626461,2.4297294 6.1109404,2.448934 6.0370753,2.4799569 5.9661649,2.5006389 5.8967321,2.5124582 5.7549109,2.5390503 5.6249085,2.5316628 5.514111,2.5109831 5.4299049,2.494733 5.357517,2.4710954 5.2969477,2.4474589 5.2629692,2.4341634 5.2260371,2.4179133 5.1891051,2.3972303 c -0.00443,-0.00296 -0.00886,-0.00443 -0.013295,-0.00739 -0.00296,-0.00148 -0.00443,-0.00296 -0.00591,-0.00443 -0.026592,-0.014773 -0.041365,-0.025114 -0.041365,-0.025114 0,0 0.070911,0.118184 0.2585277,0.1743217 -0.044318,0.05614 -0.098979,0.122618 -0.098979,0.122618 C 4.9615985,2.646908 4.8375053,2.432695 4.8375053,2.432695 c 0,-0.475691 0.2127313,-0.8612666 0.2127313,-0.8612666 C 5.262968,1.4118799 5.4653582,1.4163117 5.4653582,1.4163117 l 0.014773,0.017728 c -0.2659142,0.07682 -0.3885301,0.1935264 -0.3885301,0.1935264 0,0 0.0325,-0.017727 0.087161,-0.042842 0.1580713,-0.069433 0.2836418,-0.088638 0.3353474,-0.09307 0.00886,-0.00148 0.01625,-0.00296 0.025114,-0.00296 0.090115,-0.011818 0.1920491,-0.014773 0.2984149,-0.00296 0.1403432,0.01625 0.2910281,0.057615 0.4446674,0.141821 0,0 -0.1167069,-0.1107975 -0.3678481,-0.1876173 l 0.02068,-0.023636 c 0,0 0.2023902,-0.00443 0.4151216,0.1551167 0,0 0.2127315,0.3855754 0.2127315,0.8612664 0,0 -0.1255704,0.2142086 -0.452054,0.2245497 z"
- id="path5572"
- style="fill:#7289da;fill-opacity:1;stroke-width:0.01477302" />
- <path
- style="fill:#7289da;fill-opacity:1;stroke-width:0.03156727"
- d="m 25.763828,13.337981 c -0.329878,-0.292039 -0.903193,-0.813039 -1.274033,-1.157777 -0.370841,-0.344739 -0.67962,-0.621433 -0.686177,-0.614877 -0.0066,0.0066 0.05182,0.23397 0.12972,0.505362 0.0779,0.271393 0.141642,0.50123 0.141642,0.510749 0,0.03331 -6.25855,0.01806 -6.466931,-0.01576 -0.110455,-0.01792 -0.266742,-0.06599 -0.347304,-0.106812 -0.208575,-0.105693 -0.452683,-0.37621 -0.543908,-0.602752 l -0.07595,-0.188606 V 7.6742526 3.6809933 l 0.07616,-0.1894036 C 16.822036,3.2304683 17.109916,2.9431184 17.360228,2.84959 l 0.182696,-0.068264 h 3.954778 c 3.405833,0 3.976387,0.0065 4.110452,0.046856 0.201799,0.060739 0.444602,0.2465305 0.574216,0.4393868 0.210179,0.3127318 0.198035,-0.042792 0.189225,5.5394942 l -0.008,5.061897 z M 20.197624,9.8114052 20.376662,9.5840722 20.244975,9.5269332 C 19.978037,9.4111082 19.845365,9.33514 19.670936,9.1982359 19.572716,9.1211439 19.498443,9.0519734 19.505892,9.0445242 c 0.0074,-0.00745 0.14716,0.049651 0.31047,0.126889 1.130592,0.5347214 2.466111,0.5236751 3.564536,-0.029483 0.124874,-0.062885 0.233335,-0.1080449 0.241025,-0.1003545 0.05185,0.051852 -0.732075,0.5267131 -0.869528,0.5267131 -0.05692,0 -0.0431,0.024678 0.142368,0.2542222 0.173434,0.214656 0.180267,0.219275 0.323564,0.218739 0.518304,-0.0019 1.242726,-0.3483437 1.515258,-0.7245634 0.08377,-0.1156476 0.08811,-0.1375894 0.07619,-0.3853476 C 24.766155,8.0246999 24.523543,7.0285358 24.150705,6.225247 23.997071,5.894237 23.942851,5.8422298 23.538332,5.6378628 23.139264,5.4362497 22.489425,5.2841125 22.387751,5.3684944 c -0.02694,0.022355 -0.04897,0.049687 -0.04897,0.060738 0,0.011051 0.09588,0.053528 0.213079,0.094394 0.248839,0.086771 0.853217,0.3775763 0.88221,0.4244884 0.01275,0.020632 -0.0018,0.023257 -0.0405,0.00729 -0.231235,-0.095447 -0.700913,-0.2427657 -0.912737,-0.286289 -0.804272,-0.1652527 -1.891768,-0.086994 -2.603493,0.1873525 -0.430076,0.1657802 -0.406106,0.1585989 -0.334493,0.1002121 0.115771,-0.094389 0.603068,-0.3287344 0.894456,-0.4301514 0.238269,-0.082929 0.2858,-0.1097957 0.256564,-0.1450222 -0.11049,-0.133133 -0.898649,0.089192 -1.38203,0.3898453 -0.22446,0.1396098 -0.237859,0.1549284 -0.355967,0.4069646 -0.371779,0.7933546 -0.618479,1.7780854 -0.677009,2.7023601 l -0.02143,0.3383288 0.233446,0.2326464 c 0.167978,0.1674034 0.299841,0.2650981 0.4702,0.3483628 0.287371,0.140455 0.649707,0.2382292 0.883884,0.2385112 l 0.17362,2.21e-4 0.179038,-0.2273336 z"
- id="path5574"
- inkscape:connector-curvature="0"
- transform="scale(0.26458333)" />
- <rect
- style="fill:#7289da;fill-opacity:1;stroke-width:0.26458332"
- id="rect5576"
- width="1.9377041"
- height="1.6704345"
- x="4.7356815"
- y="1.1660408" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4823">
- <g
- inkscape:label="Clip"
- id="use4825"
- style="stroke:none;stroke-width:1.0000031;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
- <path
- id="path6198"
- d="m 5.9189238,1.0414555 c -0.07816,3.609e-4 -0.1528021,0.00702 -0.218479,0.018651 C 5.506969,1.0942875 5.4718413,1.1658308 5.4718413,1.2977692 v 0.1742499 h 0.457207 v 0.058083 H 5.4718413 5.3002554 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 5.4148235 V 2.2494844 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.2977688 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 5.6716696,1.1816022 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -1e-7,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- style="fill:#cad6ff;fill-opacity:1;stroke:none;stroke-width:1.0000031;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- id="path6200"
- d="m 6.4427404,1.5301027 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 5.7004448 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 v 0.4353592 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 6.2722229,2.8897135 6.3857227,2.8226433 6.3857227,2.6907054 V 2.5164553 H 5.9290483 v -0.058083 h 0.4566744 0.2286036 c 0.1328772,0 0.1823927,-0.092685 0.2286035,-0.2318007 0.047734,-0.1432179 0.045703,-0.2809453 0,-0.4646674 C 6.810091,1.6296236 6.7473721,1.5301027 6.6143263,1.5301027 Z M 6.1858943,2.632622 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 1e-7,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.0000031;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4837">
- <g
- id="use4839"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path6192" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path6194" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4855">
- <g
- inkscape:label="Clip"
- id="use4857">
- <g
- clip-path="url(#clipPath4837)"
- id="g6184">
- <g
- id="g6182"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path6178" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path6180" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect6186"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect6188"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4901">
- <g
- id="use4903"
- inkscape:label="Clip">
- <g
- id="g6172"
- clip-path="url(#clipPath4855)"
- transform="translate(-2.8377931,-0.23976758)">
- <g
- inkscape:label="Clip"
- id="g6170">
- <g
- clip-path="url(#clipPath4837)"
- id="g6164">
- <g
- id="g6162"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path6158" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path6160" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect6166"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect6168"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </g>
- <rect
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332"
- id="rect6174"
- width="0.2370182"
- height="0.10896251"
- x="5.5366554"
- y="1.1601957" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4957">
- <g
- inkscape:label="Clip"
- id="use4959">
- <g
- transform="matrix(63.8638,0,0,63.8638,-273.24001,-38.357102)"
- clip-path="url(#clipPath4901)"
- id="g6152">
- <g
- id="g6150"
- inkscape:label="Clip">
- <g
- id="g6146"
- clip-path="url(#clipPath4855)"
- transform="translate(-2.8377931,-0.23976758)">
- <g
- inkscape:label="Clip"
- id="g6144">
- <g
- clip-path="url(#clipPath4837)"
- id="g6138">
- <g
- id="g6136"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path6132" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path6134" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect6140"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect6142"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </g>
- <rect
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332"
- id="rect6148"
- width="0.2370182"
- height="0.10896251"
- x="5.5366554"
- y="1.1601957" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6154"
- d="m 134.57651,122.35329 6.51435,5.59167 v 0.78632 h -7.97237 v -6.08623 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath4986">
- <g
- id="use4988"
- inkscape:label="Clip">
- <g
- id="g6126"
- clip-path="url(#clipPath4957)">
- <g
- inkscape:label="Clip"
- id="g6124">
- <g
- transform="matrix(63.8638,0,0,63.8638,-273.24001,-38.357102)"
- clip-path="url(#clipPath4901)"
- id="g6120">
- <g
- id="g6118"
- inkscape:label="Clip">
- <g
- id="g6114"
- clip-path="url(#clipPath4855)"
- transform="translate(-2.8377931,-0.23976758)">
- <g
- inkscape:label="Clip"
- id="g6112">
- <g
- clip-path="url(#clipPath4837)"
- id="g6106">
- <g
- id="g6104"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path6100" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path6102" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect6108"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect6110"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </g>
- <rect
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332"
- id="rect6116"
- width="0.2370182"
- height="0.10896251"
- x="5.5366554"
- y="1.1601957" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6122"
- d="m 134.57651,122.35329 6.51435,5.59167 v 0.78632 h -7.97237 v -6.08623 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <rect
- style="opacity:1;fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332"
- id="rect6128"
- width="2.8442707"
- height="4.299479"
- x="82.020836"
- y="41.280209" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath5033">
- <g
- inkscape:label="Clip"
- id="use5035">
- <g
- clip-path="url(#clipPath4986)"
- id="g6094">
- <g
- id="g6092"
- inkscape:label="Clip">
- <g
- id="g6088"
- clip-path="url(#clipPath4957)">
- <g
- inkscape:label="Clip"
- id="g6086">
- <g
- transform="matrix(63.8638,0,0,63.8638,-273.24001,-38.357102)"
- clip-path="url(#clipPath4901)"
- id="g6082">
- <g
- id="g6080"
- inkscape:label="Clip">
- <g
- id="g6076"
- clip-path="url(#clipPath4855)"
- transform="translate(-2.8377931,-0.23976758)">
- <g
- inkscape:label="Clip"
- id="g6074">
- <g
- clip-path="url(#clipPath4837)"
- id="g6068">
- <g
- id="g6066"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path6062" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path6064" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect6070"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect6072"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </g>
- <rect
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332"
- id="rect6078"
- width="0.2370182"
- height="0.10896251"
- x="5.5366554"
- y="1.1601957" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6084"
- d="m 134.57651,122.35329 6.51435,5.59167 v 0.78632 h -7.97237 v -6.08623 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <rect
- style="opacity:1;fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332"
- id="rect6090"
- width="2.8442707"
- height="4.299479"
- x="82.020836"
- y="41.280209" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6096"
- d="m 76.212572,55.651629 6.514351,5.591662 h 6.935319 V 51.586439 H 77.033759 Z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath5074">
- <g
- id="use5076"
- inkscape:label="Clip">
- <g
- id="g6056"
- clip-path="url(#clipPath5033)">
- <g
- inkscape:label="Clip"
- id="g6054">
- <g
- clip-path="url(#clipPath4986)"
- id="g6050">
- <g
- id="g6048"
- inkscape:label="Clip">
- <g
- id="g6044"
- clip-path="url(#clipPath4957)">
- <g
- inkscape:label="Clip"
- id="g6042">
- <g
- transform="matrix(63.8638,0,0,63.8638,-273.24001,-38.357102)"
- clip-path="url(#clipPath4901)"
- id="g6038">
- <g
- id="g6036"
- inkscape:label="Clip">
- <g
- id="g6032"
- clip-path="url(#clipPath4855)"
- transform="translate(-2.8377931,-0.23976758)">
- <g
- inkscape:label="Clip"
- id="g6030">
- <g
- clip-path="url(#clipPath4837)"
- id="g6024">
- <g
- id="g6022"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path6018" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path6020" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect6026"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect6028"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </g>
- <rect
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332"
- id="rect6034"
- width="0.2370182"
- height="0.10896251"
- x="5.5366554"
- y="1.1601957" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6040"
- d="m 134.57651,122.35329 6.51435,5.59167 v 0.78632 h -7.97237 v -6.08623 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <rect
- style="opacity:1;fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332"
- id="rect6046"
- width="2.8442707"
- height="4.299479"
- x="82.020836"
- y="41.280209" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6052"
- d="m 76.212572,55.651629 6.514351,5.591662 h 6.935319 V 51.586439 H 77.033759 Z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <path
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 129.12239,33.45736 6.26748,5.402184 -2.4712,5.35988 -12.14028,-8.37878 z"
- id="path6058"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath5112">
- <g
- inkscape:label="Clip"
- id="use5114">
- <g
- clip-path="url(#clipPath5074)"
- id="g6012">
- <g
- id="g6010"
- inkscape:label="Clip">
- <g
- id="g6006"
- clip-path="url(#clipPath5033)">
- <g
- inkscape:label="Clip"
- id="g6004">
- <g
- clip-path="url(#clipPath4986)"
- id="g6000">
- <g
- id="g5998"
- inkscape:label="Clip">
- <g
- id="g5994"
- clip-path="url(#clipPath4957)">
- <g
- inkscape:label="Clip"
- id="g5992">
- <g
- transform="matrix(63.8638,0,0,63.8638,-273.24001,-38.357102)"
- clip-path="url(#clipPath4901)"
- id="g5988">
- <g
- id="g5986"
- inkscape:label="Clip">
- <g
- id="g5982"
- clip-path="url(#clipPath4855)"
- transform="translate(-2.8377931,-0.23976758)">
- <g
- inkscape:label="Clip"
- id="g5980">
- <g
- clip-path="url(#clipPath4837)"
- id="g5974">
- <g
- id="g5972"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path5968" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path5970" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect5976"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect5978"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </g>
- <rect
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332"
- id="rect5984"
- width="0.2370182"
- height="0.10896251"
- x="5.5366554"
- y="1.1601957" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path5990"
- d="m 134.57651,122.35329 6.51435,5.59167 v 0.78632 h -7.97237 v -6.08623 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <rect
- style="opacity:1;fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332"
- id="rect5996"
- width="2.8442707"
- height="4.299479"
- x="82.020836"
- y="41.280209" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6002"
- d="m 76.212572,55.651629 6.514351,5.591662 h 6.935319 V 51.586439 H 77.033759 Z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <path
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 129.12239,33.45736 6.26748,5.402184 -2.4712,5.35988 -12.14028,-8.37878 z"
- id="path6008"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path6014"
- d="m 53.694446,115.57076 6.302551,5.49574 7.448466,0.25724 -12.932502,-12.93251 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- sodipodi:nodetypes="ccccc" />
- </g>
- </clipPath>
- <clipPath
- clipPathUnits="userSpaceOnUse"
- id="clipPath5155">
- <g
- id="use5157"
- inkscape:label="Clip">
- <path
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 139.56325,58.866426 6.53721,5.613429 2.80993,13.671924 -22.00043,-12.701952 z"
- id="path5904"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- <g
- id="g5956"
- clip-path="url(#clipPath5112)"
- transform="translate(-17.859375,-3.3072917)">
- <g
- inkscape:label="Clip"
- id="g5954">
- <g
- clip-path="url(#clipPath5074)"
- id="g5950">
- <g
- id="g5948"
- inkscape:label="Clip">
- <g
- id="g5944"
- clip-path="url(#clipPath5033)">
- <g
- inkscape:label="Clip"
- id="g5942">
- <g
- clip-path="url(#clipPath4986)"
- id="g5938">
- <g
- id="g5936"
- inkscape:label="Clip">
- <g
- id="g5932"
- clip-path="url(#clipPath4957)">
- <g
- inkscape:label="Clip"
- id="g5930">
- <g
- transform="matrix(63.8638,0,0,63.8638,-273.24001,-38.357102)"
- clip-path="url(#clipPath4901)"
- id="g5926">
- <g
- id="g5924"
- inkscape:label="Clip">
- <g
- id="g5920"
- clip-path="url(#clipPath4855)"
- transform="translate(-2.8377931,-0.23976758)">
- <g
- inkscape:label="Clip"
- id="g5918">
- <g
- clip-path="url(#clipPath4837)"
- id="g5912">
- <g
- id="g5910"
- inkscape:label="Clip">
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="M 8.8587208,1.3687791 C 8.7805608,1.36914 8.7059187,1.3757991 8.6402418,1.3874301 8.446766,1.4216111 8.4116383,1.4931544 8.4116383,1.6250928 v 0.1742499 h 0.457207 v 0.058083 H 8.4116383 8.2400524 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 8.3546205 V 2.576808 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.6250924 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 8.6114666,1.5089258 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -10e-8,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- id="path5906" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.01705202"
- d="m 9.3825374,1.8574263 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 8.6402418 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 V 3.018029 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 9.2120199,3.2170371 9.3255197,3.1499669 9.3255197,3.018029 V 2.8437789 H 8.8688453 v -0.058083 h 0.4566744 0.2286036 c 0.1328771,0 0.1823931,-0.092685 0.2286031,-0.2318007 0.04773,-0.1432179 0.0457,-0.2809453 0,-0.4646674 C 9.7498884,1.9569472 9.6871694,1.8574263 9.5541233,1.8574263 Z M 9.1256913,2.9599456 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 10e-8,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- id="path5908" />
- </g>
- </g>
- <rect
- y="1.4959514"
- x="8.4858074"
- height="0.23803692"
- width="0.26309344"
- id="rect5914"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- <rect
- y="2.9367013"
- x="9.0119944"
- height="0.22133258"
- width="0.22968476"
- id="rect5916"
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332" />
- </g>
- </g>
- <rect
- style="fill:#5b6dae;fill-opacity:1;stroke-width:0.26458332"
- id="rect5922"
- width="0.2370182"
- height="0.10896251"
- x="5.5366554"
- y="1.1601957" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path5928"
- d="m 134.57651,122.35329 6.51435,5.59167 v 0.78632 h -7.97237 v -6.08623 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <rect
- style="opacity:1;fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332"
- id="rect5934"
- width="2.8442707"
- height="4.299479"
- x="82.020836"
- y="41.280209" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path5940"
- d="m 76.212572,55.651629 6.514351,5.591662 h 6.935319 V 51.586439 H 77.033759 Z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
- </g>
- </g>
- <path
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- d="m 129.12239,33.45736 6.26748,5.402184 -2.4712,5.35988 -12.14028,-8.37878 z"
- id="path5946"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc" />
- </g>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path5952"
- d="m 53.694446,115.57076 6.302551,5.49574 7.448466,0.25724 -12.932502,-12.93251 z"
- style="fill:#5b6dae;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- sodipodi:nodetypes="ccccc" />
- </g>
- </g>
- <g
- style="stroke:none;stroke-width:1.0000031;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="g5964"
- clip-path="url(#clipPath4823)"
- transform="matrix(63.863799,0,0,63.863799,-291.09937,-41.664393)">
- <g
- inkscape:label="Clip"
- id="g5962"
- style="stroke:none;stroke-width:1.0000031;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
- <path
- id="path5958"
- d="m 5.9189238,1.0414555 c -0.07816,3.609e-4 -0.1528021,0.00702 -0.218479,0.018651 C 5.506969,1.0942875 5.4718413,1.1658308 5.4718413,1.2977692 v 0.1742499 h 0.457207 v 0.058083 H 5.4718413 5.3002554 c -0.1328772,0 -0.2492281,0.079867 -0.2856214,0.2318007 -0.041979,0.1741517 -0.04384,0.2828252 0,0.4646675 0.032499,0.1353564 0.1101144,0.2318008 0.2429913,0.2318008 H 5.4148235 V 2.2494844 c 0,-0.1509086 0.1305698,-0.2840226 0.2856213,-0.2840226 h 0.4566743 c 0.1271218,0 0.2286036,-0.1046677 0.2286036,-0.2323337 V 1.2977688 c 0,-0.1239053 -0.1045281,-0.2169831 -0.2286036,-0.2376626 -0.078542,-0.013075 -0.160035,-0.019014 -0.2381953,-0.018651 z M 5.6716696,1.1816022 c 0.047227,0 0.085792,0.039196 0.085792,0.087391 -1e-7,0.048024 -0.038567,0.086859 -0.085792,0.086859 -0.047397,0 -0.085793,-0.038834 -0.085793,-0.086859 0,-0.048195 0.038397,-0.087391 0.085793,-0.087391 z"
- style="fill:#cad6ff;fill-opacity:1;stroke:none;stroke-width:1.0000031;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- id="path5960"
- d="m 6.4427404,1.5301027 v 0.2030256 c 0,0.157403 -0.1334473,0.2898841 -0.2856213,0.2898841 H 5.7004448 c -0.1250908,0 -0.2286035,0.1070611 -0.2286035,0.2323338 v 0.4353592 c 0,0.1239059 0.1077446,0.1967857 0.2286035,0.2323338 0.1447262,0.042555 0.2835109,0.050245 0.4566743,0 C 6.2722229,2.8897135 6.3857227,2.8226433 6.3857227,2.6907054 V 2.5164553 H 5.9290483 v -0.058083 h 0.4566744 0.2286036 c 0.1328772,0 0.1823927,-0.092685 0.2286035,-0.2318007 0.047734,-0.1432179 0.045703,-0.2809453 0,-0.4646674 C 6.810091,1.6296236 6.7473721,1.5301027 6.6143263,1.5301027 Z M 6.1858943,2.632622 c 0.047396,10e-8 0.085793,0.038834 0.085793,0.086858 -1e-7,0.048195 -0.038398,0.087391 -0.085793,0.087391 -0.047226,0 -0.085792,-0.039197 -0.085792,-0.087391 1e-7,-0.048024 0.038567,-0.086858 0.085792,-0.086858 z"
- style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.0000031;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- </g>
- </clipPath>
- <filter
- inkscape:collect="always"
- style="color-interpolation-filters:sRGB"
- id="filter5046">
- <feBlend
- inkscape:collect="always"
- mode="overlay"
- in2="BackgroundImage"
- id="feBlend5048" />
- </filter>
- </defs>
- <sodipodi:namedview
- id="base"
- pagecolor="#222222"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0"
- inkscape:pageshadow="2"
- inkscape:zoom="0.71114371"
- inkscape:cx="1141.8606"
- inkscape:cy="116.54419"
- inkscape:document-units="mm"
- inkscape:current-layer="svg8"
- showgrid="false"
- inkscape:window-width="2560"
- inkscape:window-height="1440"
- inkscape:window-x="6000"
- inkscape:window-y="0"
- inkscape:window-maximized="1"
- inkscape:measure-start="757.799,276.173"
- inkscape:measure-end="825.651,214.602"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:snap-intersection-paths="true"
- inkscape:snap-midpoints="true"
- inkscape:snap-smooth-nodes="true"
- inkscape:object-paths="true"
- showguides="false" />
- <metadata
- id="metadata5">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- id="g5570"
- transform="matrix(0.35596355,0,0,0.35596355,-1.7158256,6.1496621)"
- inkscape:label="logo"
- inkscape:export-xdpi="270.58594"
- inkscape:export-ydpi="270.58594">
- <rect
- inkscape:label="background"
- style="opacity:1;vector-effect:none;fill:#7289da;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="rect1995"
- width="463.86203"
- height="463.86203"
- x="34.318985"
- y="34.318985"
- ry="52.765873" />
- <path
- inkscape:label="shadow"
- inkscape:connector-curvature="0"
- style="display:inline;fill:#000000;fill-opacity:0.20554271"
- d="m 330.40568,115.24818 -11.50586,3.30859 c -12.22293,-1.80512 -24.75727,-2.59705 -36.89453,-2.50781 -13.5,0.1 -26.49844,1.19922 -37.89844,3.19922 -3.69979,0.65161 -7.04735,1.38596 -10.10742,2.19922 h -35.89259 v 18.80078 h 4.5 v 7.69922 h 2.7832 c -0.63936,3.71421 -0.88476,7.79967 -0.88476,12.30078 v 4 h -15.39844 l -2.20117,11 17.59961,15.01367 v 0.0859 h 79.20118 v 10 h -79.20118 -29.69922 c -23,0 -43.2,13.8 -49.5,40 -7.3,30 -7.6,48.80117 0,80.20117 0.49734,2.07815 1.06052,4.09848 1.6836,6.0625 l -1.1836,10.43754 13.34571,11.54883 c 7.03195,7.51033 16.37109,11.95117 28.2539,11.95117 h 27.20117 v -36 c 0,-26 22.6,-49 49.50001,-49 h 79.19922 c 22,0 39.59961,-18.10156 39.59961,-40.10156 v -75.19922 c 0,-12.89964 -6.58193,-23.83117 -16.51563,-31.27344 z m 76.80078,77.59961 -14.30078,7.40039 h -20.09961 v 0.0996 10.30078 24.69922 c 0,27.2 -23.1,50 -49.5,50 h -79.09961 c -21.7,0 -39.59962,18.49961 -39.59962,40.09961 v 75.10156 c 0,21.4 18.69962,33.99961 39.59962,40.09961 25.1,7.3 49.09961,8.7 79.09961,0 19.9,-5.7 39.59961,-17.29961 39.59961,-40.09961 v -27.90039 -2.09961 -0.10156 h -0.11914 l -11.7207,-10 h 11.83984 39.59961 c 23,0 31.60156,-16 39.60156,-40 8.3,-24.7 7.9,-48.49922 0,-80.19922 -3.62263,-14.49052 -9.35252,-26.7105 -18.94726,-33.69922 z M 283.80607,360.4474 h 57.5 v 10 h -57.5 z"
- id="path5041-2" />
- <path
- inkscape:label="upper_snake"
- inkscape:connector-curvature="0"
- id="path1948-4"
- class="st2"
- d="m 264.30607,100.94814 c -13.5,0.1 -26.5,1.2 -37.9,3.2 -33.5,5.9 -39.6,18.2 -39.6,41 v 30.1 h 79.2 v 10 h -79.2 -29.7 c -23,0 -43.2,13.8 -49.5,40 -7.3,30 -7.6,48.8 0,80.2 5.6,23.4 19.1,40 42.1,40 h 27.2 v -36 c 0,-26 22.6,-49 49.5,-49 h 79.1 c 22,0 39.6,-18.1 39.6,-40.1 v -75.2 c 0,-21.4 -18.1,-37.4 -39.6,-41 -13.5,-2.3 -27.6,-3.3 -41.2,-3.2 z m -42.8,24.2 c 8.2,0 14.9,6.8 14.9,15.1 0,8.3 -6.7,15 -14.9,15 -8.2,0 -14.9,-6.7 -14.9,-15 0,-8.4 6.7,-15.1 14.9,-15.1 z"
- style="display:inline;fill:#cbd6ff;fill-opacity:1" />
- <path
- inkscape:label="lower_snake"
- inkscape:connector-curvature="0"
- id="path1950-4"
- class="st3"
- d="m 355.10607,185.24814 v 35 c 0,27.2 -23.1,50 -49.5,50 h -79.1 c -21.7,0 -39.6,18.5 -39.6,40.1 v 75.1 c 0,21.4 18.7,34 39.6,40.1 25.1,7.3 49.1,8.7 79.1,0 19.9,-5.7 39.6,-17.3 39.6,-40.1 v -30.1 h -79.1 v -10 h 79.1 39.6 c 23,0 31.6,-16 39.6,-40 8.3,-24.7 7.9,-48.5 0,-80.2 -5.7,-22.8 -16.6,-40 -39.6,-40 h -29.7 z m -44.5,190.2 c 8.2,0 14.9,6.7 14.9,15 0,8.3 -6.7,15.1 -14.9,15.1 -8.2,0 -14.9,-6.8 -14.9,-15.1 0,-8.3 6.7,-15 14.9,-15 z"
- style="display:inline;fill:#ffffff" />
- </g>
- <g
- aria-label="PYTHON"
- transform="matrix(1.8652103,0,0,1.8652103,-1221.3087,-217.83377)"
- style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:2.93066454px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.07226515;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="flowRoot104"
- inkscape:label="text-python"
- inkscape:export-xdpi="270.58594"
- inkscape:export-ydpi="270.58594">
- <path
- d="m 764.53526,165.21289 h 8.10379 v -9.37142 h 4.75362 c 7.74161,0 11.68033,-5.65907 11.68033,-11.36342 0,-5.65907 -3.89345,-11.31814 -11.7256,-11.31814 h -12.81214 z m 8.10379,-16.56976 v -7.9227 h 4.70835 c 4.88944,-0.0453 4.88944,7.96797 0,7.9227 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:45.27256775px;line-height:0.25;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:2.80440903px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.07226515;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5594"
- inkscape:connector-curvature="0" />
- <path
- d="m 810.56366,165.21289 v -12.63105 l 11.22759,-19.42193 h -9.50724 l -5.79488,11.77087 -5.79489,-11.77087 h -9.4167 l 11.18233,19.42193 v 12.63105 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:45.27256775px;line-height:0.25;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:2.80440903px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.07226515;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5596"
- inkscape:connector-curvature="0" />
- <path
- d="m 849.96174,140.81098 v -7.69634 h -25.21682 v 7.69634 h 8.51125 v 24.40191 h 8.19433 v -24.40191 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:45.27256775px;line-height:0.25;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:2.80440903px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.07226515;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5598"
- inkscape:connector-curvature="0" />
- <path
- d="m 864.12674,153.12512 h 9.2356 v 12.08777 h 8.14907 v -32.05298 h -8.14907 v 12.13305 h -9.2356 v -12.13305 h -8.14906 v 32.05298 h 8.14906 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:45.27256775px;line-height:0.25;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:2.80440903px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.07226515;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5600"
- inkscape:connector-curvature="0" />
- <path
- d="m 888.6068,154.66438 c 0,7.33416 6.65507,11.00124 13.31014,11.00124 6.65506,0 13.26486,-3.66708 13.26486,-11.00124 v -10.95596 c 0,-7.33416 -6.65507,-11.00123 -13.31014,-11.00123 -6.65506,0 -13.26486,3.6218 -13.26486,11.00123 z m 8.10379,-10.95596 c 0,-2.35417 2.53526,-3.6218 5.07053,-3.6218 2.62581,0 5.29689,1.13181 5.29689,3.6218 v 10.95596 c 0,2.3089 -2.58054,3.48599 -5.16107,3.48599 -2.58054,0 -5.20635,-1.13181 -5.20635,-3.48599 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:45.27256775px;line-height:0.25;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:2.80440903px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.07226515;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5602"
- inkscape:connector-curvature="0" />
- <path
- d="m 922.24466,165.21289 h 8.10379 v -12.81214 l -1.04127,-6.20234 0.22636,-0.0453 2.8069,6.4287 7.24361,12.63105 h 8.19434 v -32.05298 h -8.05852 l -0.003,13.84994 c 0,0 0.8633,6.20581 0.90857,6.20581 l -0.22636,0.0453 -2.71635,-6.4287 -7.74161,-13.67232 h -7.69634 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-size:45.27256775px;line-height:0.25;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:2.80440903px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1.07226515;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path5604"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccccccc" />
- </g>
- <style
- type="text/css"
- id="style1081">
- .st0{fill:#7289DA;}
- .st1{fill:#5B6DAE;}
- .st2{fill:#CAD6FF;}
- .st3{fill:#FFFFFF;}
-</style>
- <g
- aria-label="DISCORD"
- style="font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;font-size:84.30731964px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu Medium';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:2.1076827"
- id="text6244"
- inkscape:label="text-discord"
- transform="translate(0,-0.07651336)"
- inkscape:export-xdpi="270.58594"
- inkscape:export-ydpi="270.58594">
- <path
- d="m 204.75125,111.64689 v 59.68958 h 22.34144 c 11.97164,0.0843 23.18452,-5.90151 23.18452,-19.6436 v -20.06515 c 0,-13.9107 -11.21288,-19.98083 -23.18452,-19.98083 z m 15.17532,45.52595 v -31.44663 h 7.67197 c 5.05844,0 7.50335,2.44491 7.50335,6.32305 v 18.63192 c 0,3.87813 -2.36061,6.49166 -7.50335,6.49166 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:1.80974996px;fill:#cad6ff;fill-opacity:1;stroke:#cad6ff;stroke-width:2.1076827;stroke-opacity:1"
- id="path15422"
- inkscape:connector-curvature="0" />
- <path
- d="m 275.33206,111.64689 h -15.09101 v 59.68958 h 15.09101 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:1.80974996px;fill:#cad6ff;fill-opacity:1;stroke:#cad6ff;stroke-width:2.1076827;stroke-opacity:1"
- id="path15424"
- inkscape:connector-curvature="0" />
- <path
- d="m 283.7191,161.38821 c 5.56429,7.16612 13.15194,10.79133 20.31807,10.79133 10.95995,0 23.1002,-6.32304 23.60605,-17.87315 0.67445,-14.66947 -9.94827,-18.37899 -20.57099,-20.31806 -4.6369,-1.01169 -7.75627,-2.69784 -7.92489,-5.56428 0.25292,-6.9132 10.95995,-7.16613 17.1987,-0.50585 l 9.86395,-7.58766 c -6.15443,-7.50335 -13.15194,-9.52672 -20.40237,-9.52672 -10.95995,0 -21.58267,6.15443 -21.58267,17.87315 0,11.38149 8.76796,17.45161 18.37899,18.96914 4.88983,0.67446 10.3698,2.61353 10.20119,5.98582 -0.42154,6.40736 -13.57348,6.07013 -19.5593,-1.1803 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:1.80974996px;fill:#cad6ff;fill-opacity:1;stroke:#cad6ff;stroke-width:2.1076827;stroke-opacity:1"
- id="path15426"
- inkscape:connector-curvature="0" />
- <path
- d="m 366.41778,152.70455 c -3.28799,8.26212 -16.77716,6.23875 -16.77716,-0.92738 v -20.57098 c 0,-7.41905 13.32056,-9.10519 17.36731,-1.68615 l 12.30887,-4.97413 c -4.80552,-10.62272 -13.65779,-13.74209 -20.99252,-13.74209 -11.97164,0 -23.77467,6.9132 -23.77467,20.40237 v 20.57098 c 0,13.57348 11.80303,20.40237 23.52174,20.40237 7.50336,0 16.52424,-3.70952 21.49837,-13.40486 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:1.80974996px;fill:#cad6ff;fill-opacity:1;stroke:#cad6ff;stroke-width:2.1076827;stroke-opacity:1"
- id="path15428"
- inkscape:connector-curvature="0" />
- <path
- d="m 385.42885,151.69287 c 0,13.65778 12.39318,20.48667 24.78636,20.48667 12.39317,0 24.70204,-6.82889 24.70204,-20.48667 v -20.40238 c 0,-13.65778 -12.39317,-20.48667 -24.78635,-20.48667 -12.39318,0 -24.70205,6.74458 -24.70205,20.48667 z m 15.09101,-20.40238 c 0,-4.38398 4.72121,-6.74458 9.44242,-6.74458 4.88983,0 9.86396,2.10768 9.86396,6.74458 v 20.40238 c 0,4.29967 -4.80552,6.49166 -9.61103,6.49166 -4.80552,0 -9.69535,-2.10768 -9.69535,-6.49166 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:1.80974996px;fill:#cad6ff;fill-opacity:1;stroke:#cad6ff;stroke-width:2.1076827;stroke-opacity:1"
- id="path15430"
- inkscape:connector-curvature="0" />
- <path
- d="m 476.44101,171.33647 h 18.80054 l -16.27132,-20.48668 c 7.25043,-2.27629 11.71872,-8.51504 11.71872,-19.5593 -0.33723,-13.99501 -9.86396,-19.6436 -22.17283,-19.6436 h -23.85897 v 59.68958 h 15.25963 v -18.96915 h 2.69783 z M 459.91678,139.384 v -13.65779 h 8.85227 c 9.52672,0 9.52672,13.65779 0,13.65779 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:1.80974996px;fill:#cad6ff;fill-opacity:1;stroke:#cad6ff;stroke-width:2.1076827;stroke-opacity:1"
- id="path15432"
- inkscape:connector-curvature="0" />
- <path
- d="m 500.97028,111.64689 v 59.68958 h 22.34144 c 11.97164,0.0843 23.18451,-5.90151 23.18451,-19.6436 v -20.06515 c 0,-13.9107 -11.21287,-19.98083 -23.18451,-19.98083 z m 15.17532,45.52595 v -31.44663 h 7.67196 c 5.05844,0 7.50335,2.44491 7.50335,6.32305 v 18.63192 c 0,3.87813 -2.3606,6.49166 -7.50335,6.49166 z"
- style="font-style:normal;font-variant:normal;font-weight:900;font-stretch:normal;font-family:'Uni Sans';-inkscape-font-specification:'Uni Sans Heavy';letter-spacing:1.80974996px;fill:#cad6ff;fill-opacity:1;stroke:#cad6ff;stroke-width:2.1076827;stroke-opacity:1"
- id="path15434"
- inkscape:connector-curvature="0" />
- </g>
-</svg>
diff --git a/pydis_site/static/images/navbar/navbar_discordjoin.svg b/pydis_site/static/images/navbar/navbar_discordjoin.svg
new file mode 100644
index 00000000..75e6b102
--- /dev/null
+++ b/pydis_site/static/images/navbar/navbar_discordjoin.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="114.70044mm"
+ height="61.897388mm"
+ viewBox="0 0 114.70044 61.897388"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14"
+ sodipodi:docname="discordjoin.svg">
+ <defs
+ id="defs2" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.98994949"
+ inkscape:cx="-404.01729"
+ inkscape:cy="34.494854"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="3440"
+ inkscape:window-height="1409"
+ inkscape:window-x="2560"
+ inkscape:window-y="31"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-52.233408,-75.88169)">
+ <path
+ style="opacity:1;vector-effect:none;fill:#697ec4;fill-opacity:1;stroke:none;stroke-width:0.81460673;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 60.360377,75.88169 -8.126969,61.89739 H 166.93385 V 75.88169 Z"
+ id="rect4758-3"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4789-6"
+ class=""
+ d="m 157.65213,107.11299 -4.99428,4.9943 c -0.24107,0.24107 -0.63135,0.24107 -0.8722,0 l -0.58249,-0.58252 c -0.24045,-0.24046 -0.24107,-0.63017 -8.3e-4,-0.87119 l 3.95805,-3.9767 -3.95805,-3.97665 c -0.23984,-0.24107 -0.23953,-0.63072 8.3e-4,-0.87118 l 0.58249,-0.58248 c 0.24107,-0.24108 0.63137,-0.24108 0.8722,0 l 4.99428,4.99422 c 0.24107,0.24107 0.24107,0.63138 0,0.8722 z"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff;fill-opacity:1;stroke-width:0.02569815" />
+ <image
+ y="94.290833"
+ x="67.190086"
+ id="image4856"
+ xlink:href="data:image/png;base64,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 "
+ preserveAspectRatio="none"
+ height="26.987499"
+ width="79.375" />
+ </g>
+</svg>
diff --git a/pydis_site/static/images/navbar/pydis_banner_no_square.svg b/pydis_site/static/images/navbar/pydis_banner_no_square.svg
new file mode 100644
index 00000000..114312c7
--- /dev/null
+++ b/pydis_site/static/images/navbar/pydis_banner_no_square.svg
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="512.94989mm"
+ height="144.47073mm"
+ version="1.1"
+ viewBox="0 0 512.94991 144.47073"
+ id="svg46"
+ sodipodi:docname="logo_site_banner_no_bg.min.svg"
+ inkscape:version="0.92.4 5da689c313, 2019-01-14"
+ style="enable-background:new">
+ <defs
+ id="defs50" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1052"
+ id="namedview48"
+ showgrid="false"
+ inkscape:zoom="0.61673998"
+ inkscape:cx="964.4821"
+ inkscape:cy="35.843714"
+ inkscape:window-x="1200"
+ inkscape:window-y="840"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g12" />
+ <metadata
+ id="metadata2">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ transform="matrix(0.35596,0,0,0.35596,-36.315728,-22.537909)"
+ id="g12">
+ <rect
+ x="34.319"
+ y="34.319"
+ width="463.85999"
+ height="463.85999"
+ ry="52.765999"
+ id="rect4"
+ style="display:none;fill:#7289da" />
+ <path
+ d="m 330.41,115.25 -11.506,3.3086 c -12.223,-1.8051 -24.757,-2.597 -36.895,-2.5078 -13.5,0.1 -26.498,1.1992 -37.898,3.1992 -3.6998,0.65161 -7.0474,1.386 -10.107,2.1992 h -35.893 v 18.801 h 4.5 v 7.6992 h 2.7832 c -0.63936,3.7142 -0.88476,7.7997 -0.88476,12.301 v 4 h -15.398 l -2.2012,11 17.6,15.014 v 0.0859 h 79.201 v 10 h -108.9 c -23,0 -43.2,13.8 -49.5,40 -7.3,30 -7.6,48.801 0,80.201 0.49734,2.0782 1.0605,4.0985 1.6836,6.0625 l -1.1836,10.438 13.346,11.549 c 7.032,7.5103 16.371,11.951 28.254,11.951 h 27.201 v -36 c 0,-26 22.6,-49 49.5,-49 h 79.199 c 22,0 39.6,-18.102 39.6,-40.102 v -75.199 c 0,-12.9 -6.5819,-23.831 -16.516,-31.273 z m 76.801,77.6 -14.301,7.4004 h -20.1 v 35.1 c 0,27.2 -23.1,50 -49.5,50 h -79.1 c -21.7,0 -39.6,18.5 -39.6,40.1 v 75.102 c 0,21.4 18.7,34 39.6,40.1 25.1,7.3 49.1,8.7 79.1,0 19.9,-5.7 39.6,-17.3 39.6,-40.1 v -30.102 h -0.11914 l -11.721,-10 h 51.439 c 23,0 31.602,-16 39.602,-40 8.3,-24.7 7.9,-48.499 0,-80.199 -3.6226,-14.491 -9.3525,-26.71 -18.947,-33.699 z m -123.4,167.6 h 57.5 v 10 h -57.5 z"
+ id="path6"
+ inkscape:connector-curvature="0"
+ style="fill-opacity:0.20554002" />
+ <path
+ class="st2"
+ d="m 264.31,100.95 c -13.5,0.1 -26.5,1.2 -37.9,3.2 -33.5,5.9 -39.6,18.2 -39.6,41 v 30.1 h 79.2 v 10 h -108.9 c -23,0 -43.2,13.8 -49.5,40 -7.3,30 -7.6,48.8 0,80.2 5.6,23.4 19.1,40 42.1,40 h 27.2 v -36 c 0,-26 22.6,-49 49.5,-49 h 79.1 c 22,0 39.6,-18.1 39.6,-40.1 v -75.2 c 0,-21.4 -18.1,-37.4 -39.6,-41 -13.5,-2.3 -27.6,-3.3 -41.2,-3.2 z m -42.8,24.2 c 8.2,0 14.9,6.8 14.9,15.1 0,8.3 -6.7,15 -14.9,15 -8.2,0 -14.9,-6.7 -14.9,-15 0,-8.4 6.7,-15.1 14.9,-15.1 z"
+ id="path8"
+ inkscape:connector-curvature="0"
+ style="fill:#cad6ff" />
+ <path
+ class="st3"
+ d="m 355.11,185.25 v 35 c 0,27.2 -23.1,50 -49.5,50 h -79.1 c -21.7,0 -39.6,18.5 -39.6,40.1 v 75.1 c 0,21.4 18.7,34 39.6,40.1 25.1,7.3 49.1,8.7 79.1,0 19.9,-5.7 39.6,-17.3 39.6,-40.1 v -30.1 h -79.1 v -10 h 118.7 c 23,0 31.6,-16 39.6,-40 8.3,-24.7 7.9,-48.5 0,-80.2 -5.7,-22.8 -16.6,-40 -39.6,-40 h -29.7 z m -44.5,190.2 c 8.2,0 14.9,6.7 14.9,15 0,8.3 -6.7,15.1 -14.9,15.1 -8.2,0 -14.9,-6.8 -14.9,-15.1 0,-8.3 6.7,-15 14.9,-15 z"
+ id="path10"
+ inkscape:connector-curvature="0"
+ style="fill:#ffffff" />
+ </g>
+ <g
+ transform="matrix(1.8652,0,0,1.8652,-1255.8999,-246.51761)"
+ aria-label="PYTHON"
+ id="g26"
+ style="fill:#ffffff;stroke:#ffffff;stroke-width:1.07229996">
+ <path
+ d="m 764.54,165.21 h 8.1038 v -9.3714 h 4.7536 c 7.7416,0 11.68,-5.6591 11.68,-11.363 0,-5.6591 -3.8934,-11.318 -11.726,-11.318 h -12.812 z m 8.1038,-16.57 v -7.9227 h 4.7084 c 4.8894,-0.0453 4.8894,7.968 0,7.9227 z"
+ id="path14"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 810.56,165.21 v -12.631 l 11.228,-19.422 h -9.5072 l -5.7949,11.771 -5.7949,-11.771 h -9.4167 l 11.182,19.422 v 12.631 z"
+ id="path16"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 849.96,140.81 v -7.6963 h -25.217 v 7.6963 h 8.5112 v 24.402 h 8.1943 V 140.81 Z"
+ id="path18"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 864.13,153.13 h 9.2356 v 12.088 h 8.1491 v -32.053 h -8.1491 v 12.133 H 864.13 v -12.133 h -8.1491 v 32.053 h 8.1491 z"
+ id="path20"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 888.61,154.66 c 0,7.3342 6.6551,11.001 13.31,11.001 6.6551,0 13.265,-3.6671 13.265,-11.001 v -10.956 c 0,-7.3342 -6.6551,-11.001 -13.31,-11.001 -6.6551,0 -13.265,3.6218 -13.265,11.001 z m 8.1038,-10.956 c 0,-2.3542 2.5353,-3.6218 5.0705,-3.6218 2.6258,0 5.2969,1.1318 5.2969,3.6218 v 10.956 c 0,2.3089 -2.5805,3.486 -5.1611,3.486 -2.5805,0 -5.2064,-1.1318 -5.2064,-3.486 z"
+ id="path22"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 922.24,165.21 h 8.1038 v -12.812 l -1.0413,-6.2023 0.22636,-0.0453 2.8069,6.4287 7.2436,12.631 h 8.1943 v -32.053 h -8.0585 l -0.003,13.85 c 0,0 0.8633,6.2058 0.90857,6.2058 l -0.22636,0.0453 -2.7164,-6.4287 -7.7416,-13.672 h -7.6963 z"
+ id="path24"
+ inkscape:connector-curvature="0" />
+ </g>
+ <style
+ type="text/css"
+ id="style28">.st0{fill:#7289DA;}
+ .st1{fill:#5B6DAE;}
+ .st2{fill:#CAD6FF;}
+ .st3{fill:#FFFFFF;}</style>
+ <g
+ transform="translate(-34.599928,-28.764122)"
+ aria-label="DISCORD"
+ id="g44"
+ style="fill:#cad6ff;stroke:#cad6ff;stroke-width:2.10770011">
+ <path
+ d="m 204.75,111.65 v 59.69 h 22.341 c 11.972,0.0843 23.185,-5.9015 23.185,-19.644 v -20.065 c 0,-13.911 -11.213,-19.981 -23.185,-19.981 z m 15.175,45.526 v -31.447 h 7.672 c 5.0584,0 7.5034,2.4449 7.5034,6.323 v 18.632 c 0,3.8781 -2.3606,6.4917 -7.5034,6.4917 z"
+ id="path30"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 275.33,111.65 h -15.091 v 59.69 h 15.091 z"
+ id="path32"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 283.72,161.39 c 5.5643,7.1661 13.152,10.791 20.318,10.791 10.96,0 23.1,-6.323 23.606,-17.873 0.67445,-14.669 -9.9483,-18.379 -20.571,-20.318 -4.6369,-1.0117 -7.7563,-2.6978 -7.9249,-5.5643 0.25292,-6.9132 10.96,-7.1661 17.199,-0.50585 l 9.864,-7.5877 c -6.1544,-7.5034 -13.152,-9.5267 -20.402,-9.5267 -10.96,0 -21.583,6.1544 -21.583,17.873 0,11.381 8.768,17.452 18.379,18.969 4.8898,0.67446 10.37,2.6135 10.201,5.9858 -0.42154,6.4074 -13.573,6.0701 -19.559,-1.1803 z"
+ id="path34"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 366.42,152.7 c -3.288,8.2621 -16.777,6.2388 -16.777,-0.92738 v -20.571 c 0,-7.419 13.321,-9.1052 17.367,-1.6862 l 12.309,-4.9741 c -4.8055,-10.623 -13.658,-13.742 -20.993,-13.742 -11.972,0 -23.775,6.9132 -23.775,20.402 v 20.571 c 0,13.573 11.803,20.402 23.522,20.402 7.5034,0 16.524,-3.7095 21.498,-13.405 z"
+ id="path36"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 385.43,151.69 c 0,13.658 12.393,20.487 24.786,20.487 12.393,0 24.702,-6.8289 24.702,-20.487 v -20.402 c 0,-13.658 -12.393,-20.487 -24.786,-20.487 -12.393,0 -24.702,6.7446 -24.702,20.487 z m 15.091,-20.402 c 0,-4.384 4.7212,-6.7446 9.4424,-6.7446 4.8898,0 9.864,2.1077 9.864,6.7446 v 20.402 c 0,4.2997 -4.8055,6.4917 -9.611,6.4917 -4.8055,0 -9.6954,-2.1077 -9.6954,-6.4917 z"
+ id="path38"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 476.44,171.34 h 18.801 L 478.97,150.853 c 7.2504,-2.2763 11.719,-8.515 11.719,-19.559 -0.33723,-13.995 -9.864,-19.644 -22.173,-19.644 h -23.859 v 59.69 h 15.26 v -18.969 h 2.6978 z M 459.916,139.388 V 125.73 h 8.8523 c 9.5267,0 9.5267,13.658 0,13.658 z"
+ id="path40"
+ inkscape:connector-curvature="0" />
+ <path
+ d="m 500.97,111.65 v 59.69 h 22.341 c 11.972,0.0843 23.185,-5.9015 23.185,-19.644 v -20.065 c 0,-13.911 -11.213,-19.981 -23.185,-19.981 z m 15.175,45.526 v -31.447 h 7.672 c 5.0584,0 7.5034,2.4449 7.5034,6.323 v 18.632 c 0,3.8781 -2.3606,6.4917 -7.5034,6.4917 z"
+ id="path42"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/pydis_site/static/images/sponsors/jetbrains.png b/pydis_site/static/images/sponsors/jetbrains.png
index ccceb958..0b21c2c8 100644
--- a/pydis_site/static/images/sponsors/jetbrains.png
+++ b/pydis_site/static/images/sponsors/jetbrains.png
Binary files differ
diff --git a/pydis_site/static/images/sponsors/jetbrains.svg b/pydis_site/static/images/sponsors/jetbrains.svg
deleted file mode 100644
index 75d4d217..00000000
--- a/pydis_site/static/images/sponsors/jetbrains.svg
+++ /dev/null
@@ -1,66 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="120.1px" height="130.2px" viewBox="0 0 120.1 130.2" style="enable-background:new 0 0 120.1 130.2;" xml:space="preserve"
- >
-<g>
- <linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="31.8412" y1="120.5578" x2="110.2402" y2="73.24">
- <stop offset="0" style="stop-color:#FCEE39"/>
- <stop offset="1" style="stop-color:#F37B3D"/>
- </linearGradient>
- <path id="XMLID_3041_" style="fill:url(#XMLID_2_);" d="M118.6,71.8c0.9-0.8,1.4-1.9,1.5-3.2c0.1-2.6-1.8-4.7-4.4-4.9
- c-1.2-0.1-2.4,0.4-3.3,1.1l0,0l-83.8,45.9c-1.9,0.8-3.6,2.2-4.7,4.1c-2.9,4.8-1.3,11,3.6,13.9c3.4,2,7.5,1.8,10.7-0.2l0,0l0,0
- c0.2-0.2,0.5-0.3,0.7-0.5l78-54.8C117.3,72.9,118.4,72.1,118.6,71.8L118.6,71.8L118.6,71.8z"/>
- <linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="48.3607" y1="6.9083" x2="119.9179" y2="69.5546">
- <stop offset="0" style="stop-color:#EF5A6B"/>
- <stop offset="0.57" style="stop-color:#F26F4E"/>
- <stop offset="1" style="stop-color:#F37B3D"/>
- </linearGradient>
- <path id="XMLID_3049_" style="fill:url(#XMLID_3_);" d="M118.8,65.1L118.8,65.1L55,2.5C53.6,1,51.6,0,49.3,0
- c-4.3,0-7.7,3.5-7.7,7.7v0c0,2.1,0.8,3.9,2.1,5.3l0,0l0,0c0.4,0.4,0.8,0.7,1.2,1l67.4,57.7l0,0c0.8,0.7,1.8,1.2,3,1.3
- c2.6,0.1,4.7-1.8,4.9-4.4C120.2,67.3,119.7,66,118.8,65.1z"/>
- <linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="52.9467" y1="63.6407" x2="10.5379" y2="37.1562">
- <stop offset="0" style="stop-color:#7C59A4"/>
- <stop offset="0.3852" style="stop-color:#AF4C92"/>
- <stop offset="0.7654" style="stop-color:#DC4183"/>
- <stop offset="0.957" style="stop-color:#ED3D7D"/>
- </linearGradient>
- <path id="XMLID_3042_" style="fill:url(#XMLID_4_);" d="M57.1,59.5C57,59.5,17.7,28.5,16.9,28l0,0l0,0c-0.6-0.3-1.2-0.6-1.8-0.9
- c-5.8-2.2-12.2,0.8-14.4,6.6c-1.9,5.1,0.2,10.7,4.6,13.4l0,0l0,0C6,47.5,6.6,47.8,7.3,48c0.4,0.2,45.4,18.8,45.4,18.8l0,0
- c1.8,0.8,3.9,0.3,5.1-1.2C59.3,63.7,59,61,57.1,59.5z"/>
- <linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="52.1736" y1="3.7019" x2="10.7706" y2="37.8971">
- <stop offset="0" style="stop-color:#EF5A6B"/>
- <stop offset="0.364" style="stop-color:#EE4E72"/>
- <stop offset="1" style="stop-color:#ED3D7D"/>
- </linearGradient>
- <path id="XMLID_3057_" style="fill:url(#XMLID_5_);" d="M49.3,0c-1.7,0-3.3,0.6-4.6,1.5L4.9,28.3c-0.1,0.1-0.2,0.1-0.2,0.2l-0.1,0
- l0,0c-1.7,1.2-3.1,3-3.9,5.1C-1.5,39.4,1.5,45.9,7.3,48c3.6,1.4,7.5,0.7,10.4-1.4l0,0l0,0c0.7-0.5,1.3-1,1.8-1.6l34.6-31.2l0,0
- c1.8-1.4,3-3.6,3-6.1v0C57.1,3.5,53.6,0,49.3,0z"/>
- <g id="XMLID_3008_">
- <rect id="XMLID_3033_" x="34.6" y="37.4" style="fill:#000000;" width="51" height="51"/>
- <rect id="XMLID_3032_" x="39" y="78.8" style="fill:#FFFFFF;" width="19.1" height="3.2"/>
- <g id="XMLID_3009_">
- <path id="XMLID_3030_" style="fill:#FFFFFF;" d="M38.8,50.8l1.5-1.4c0.4,0.5,0.8,0.8,1.3,0.8c0.6,0,0.9-0.4,0.9-1.2l0-5.3l2.3,0
- l0,5.3c0,1-0.3,1.8-0.8,2.3c-0.5,0.5-1.3,0.8-2.3,0.8C40.2,52.2,39.4,51.6,38.8,50.8z"/>
- <path id="XMLID_3028_" style="fill:#FFFFFF;" d="M45.3,43.8l6.7,0v1.9l-4.4,0V47l4,0l0,1.8l-4,0l0,1.3l4.5,0l0,2l-6.7,0
- L45.3,43.8z"/>
- <path id="XMLID_3026_" style="fill:#FFFFFF;" d="M55,45.8l-2.5,0l0-2l7.3,0l0,2l-2.5,0l0,6.3l-2.3,0L55,45.8z"/>
- <path id="XMLID_3022_" style="fill:#FFFFFF;" d="M39,54l4.3,0c1,0,1.8,0.3,2.3,0.7c0.3,0.3,0.5,0.8,0.5,1.4v0
- c0,1-0.5,1.5-1.3,1.9c1,0.3,1.6,0.9,1.6,2v0c0,1.4-1.2,2.3-3.1,2.3l-4.3,0L39,54z M43.8,56.6c0-0.5-0.4-0.7-1-0.7l-1.5,0l0,1.5
- l1.4,0C43.4,57.3,43.8,57.1,43.8,56.6L43.8,56.6z M43,59l-1.8,0l0,1.5H43c0.7,0,1.1-0.3,1.1-0.8v0C44.1,59.2,43.7,59,43,59z"/>
- <path id="XMLID_3019_" style="fill:#FFFFFF;" d="M46.8,54l3.9,0c1.3,0,2.1,0.3,2.7,0.9c0.5,0.5,0.7,1.1,0.7,1.9v0
- c0,1.3-0.7,2.1-1.7,2.6l2,2.9l-2.6,0l-1.7-2.5h-1l0,2.5l-2.3,0L46.8,54z M50.6,58c0.8,0,1.2-0.4,1.2-1v0c0-0.7-0.5-1-1.2-1
- l-1.5,0v2H50.6z"/>
- <path id="XMLID_3016_" style="fill:#FFFFFF;" d="M56.8,54l2.2,0l3.5,8.4l-2.5,0l-0.6-1.5l-3.2,0l-0.6,1.5l-2.4,0L56.8,54z
- M58.8,59l-0.9-2.3L57,59L58.8,59z"/>
- <path id="XMLID_3014_" style="fill:#FFFFFF;" d="M62.8,54l2.3,0l0,8.3l-2.3,0L62.8,54z"/>
- <path id="XMLID_3012_" style="fill:#FFFFFF;" d="M65.7,54l2.1,0l3.4,4.4l0-4.4l2.3,0l0,8.3l-2,0L68,57.8l0,4.6l-2.3,0L65.7,54z"
- />
- <path id="XMLID_3010_" style="fill:#FFFFFF;" d="M73.7,61.1l1.3-1.5c0.8,0.7,1.7,1,2.7,1c0.6,0,1-0.2,1-0.6v0
- c0-0.4-0.3-0.5-1.4-0.8c-1.8-0.4-3.1-0.9-3.1-2.6v0c0-1.5,1.2-2.7,3.2-2.7c1.4,0,2.5,0.4,3.4,1.1l-1.2,1.6
- c-0.8-0.5-1.6-0.8-2.3-0.8c-0.6,0-0.8,0.2-0.8,0.5v0c0,0.4,0.3,0.5,1.4,0.8c1.9,0.4,3.1,1,3.1,2.6v0c0,1.7-1.3,2.7-3.4,2.7
- C76.1,62.5,74.7,62,73.7,61.1z"/>
- </g>
- </g>
-</g>
-</svg>
diff --git a/pydis_site/static/images/sponsors/linode-diagonal.png b/pydis_site/static/images/sponsors/linode-diagonal.png
deleted file mode 100644
index 4b38003b..00000000
--- a/pydis_site/static/images/sponsors/linode-diagonal.png
+++ /dev/null
Binary files differ
diff --git a/pydis_site/templates/base/base.html b/pydis_site/templates/base/base.html
index 5b124ded..5d5fe7ec 100644
--- a/pydis_site/templates/base/base.html
+++ b/pydis_site/templates/base/base.html
@@ -21,13 +21,18 @@
crossorigin="anonymous"
>
+ <link rel="stylesheet" href="{% static "css/base/base.css" %}">
{% block head %}{% endblock %}
</head>
-<body>
+<body class="site">
-{% block content %}
- {{ block.super }}
-{% endblock %}
+<main class="site-content">
+ {% block content %}
+ {{ block.super }}
+ {% endblock %}
+</main>
+
+{% include "base/footer.html" %}
</body>
</html>
diff --git a/pydis_site/templates/base/footer.html b/pydis_site/templates/base/footer.html
index ff868160..90f06f3c 100644
--- a/pydis_site/templates/base/footer.html
+++ b/pydis_site/templates/base/footer.html
@@ -1,7 +1,7 @@
<footer class="footer has-background-dark has-text-light">
<div class="content has-text-centered">
<p>
- &copy; 2019 Python Discord | Built with Django and Bulma
+ Built with <a href="https://www.djangoproject.com/"><span id="django-logo">django</span></a> and <a href="https://bulma.io"><span id="bulma-logo">Bulma</span></a> <br/> &copy; {% now "Y" %} <span id="pydis-text">Python Discord</span>
</p>
</div>
</footer>
diff --git a/pydis_site/templates/base/navbar.html b/pydis_site/templates/base/navbar.html
index 73e3917a..5e76b3a6 100644
--- a/pydis_site/templates/base/navbar.html
+++ b/pydis_site/templates/base/navbar.html
@@ -1,60 +1,90 @@
{% load extra_filters %}
{% load static %}
-{% comment %}
-This template is responsible for rendering the main navigation on each page that uses it.
-It requires two arguments to be set in the include:
+<nav class="navbar is-primary" role="navigation" aria-label="main navigation">
+ <div class="navbar-brand">
-* `dropdown` (bool): True to render the dropdowns included, False to omit them
-* `icon_weight` (str): Either "fas", "far" or "fal" to correspond with Font-Awesome's weight classes.
- This will not affect branding icons, which have the "fab" class.
-* use_logo (bool): True to render the navbar with the site logo on the left side, False to use an
- icon with text instead
+ <a id="navbar-banner" class="navbar-item has-left-margin-1" href="/">
+ <img src="{% static "images/navbar/pydis_banner_no_square.svg" %}" alt="Python Discord logo"/>
+ </a>
-For example, to use light icons and no dropdowns, you could use the following in your template:
+ {# The navbar "burger" which appears when rendered on screens that can't fit the entire nav #}
+ <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbar_menu">
+ <span aria-hidden="true"></span>
+ <span aria-hidden="true"></span>
+ <span aria-hidden="true"></span>
+ </a>
+ </div>
-{% include "base/navbar.html" with icon_weight="fal" dropdowns=False %}
+ {# Content on the right side of the navbar #}
+ <div class="navbar-menu is-paddingless" id="navbar_menu">
+ <div class="navbar-end">
-This template is based on the navbar template found here:
- https://github.com/gdude2002/gserv.me/blob/20f491836342925dc67b08e1bd0ea2ed29610da8/base/templates/base/navbar.html
+ {# Discord invite - only visible in the hamburger on mobile sizes. #}
+ <a class="navbar-item is-hidden-desktop" href="https://discord.gg/python">
+ <span class="icon is-size-4 is-medium"><i class="fab fa-discord"></i></span>
+ <span>&nbsp;Discord</span>
+ </a>
-{% endcomment %}
+ {# GitHub #}
+ <a class="navbar-item" href="https://github.com/python-discord">
+ <span class="icon is-size-4 is-medium"><i class="fab fa-github"></i></span>
+ <span>&nbsp;GitHub</span>
+ </a>
-<nav class="navbar is-primary" role="navigation" aria-label="main navigation">
- <div class="container">
- <div class="navbar-brand">
- {% if use_logo %}
- <a class="navbar-item" href="{% url "home.index" %}">
- <img src="{% static 'images/logo_site_banner.svg' %}" class="navbar-brand navbar-icon" alt="Python Discord">
- </a>
- {% else %}
- <a
- {% if active_item and request.path == "/" %}
- class="navbar-item is-active"
- {% else %}
- class="navbar-item"
- {% endif %}
- href="{% url "home.index" %}"
- >
-
- <span class="icon is-size-4 is-medium"><i class="{{ icon_weight }} fa-home"></i></span>
- <span class="is-hidden-touch">&nbsp;Home</span>
- </a>
- {% endif %}
+ {# Reddit #}
+ <a class="navbar-item" href="https://reddit.com/r/python">
+ <span class="icon is-size-4 is-medium"><i class="fab fa-reddit-alien"></i></span>
+ <span>&nbsp;Reddit</span>
+ </a>
- <a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="navbar_menu">
- <span aria-hidden="true"></span>
- <span aria-hidden="true"></span>
- <span aria-hidden="true"></span>
+ {# YouTube #}
+ <a class="navbar-item" href="https://youtube.com/pythondiscord">
+ <span class="icon is-size-4 is-medium"><i class="fab fa-youtube"></i></span>
+ <span>&nbsp;YouTube</span>
</a>
- </div>
- <div class="navbar-menu is-paddingless" id="navbar_menu">
- <div class="navbar-start">
- {# Content on the left side of the navbar #}
- </div>
- <div class="navbar-end">
- {# Content on the right sside of the navbar #}
+
+ {# Patreon #}
+ <a class="navbar-item" href="http://patreon.com/python_discord">
+ <span class="icon is-size-4 is-medium"><i class="fab fa-patreon"></i></span>
+ <span>&nbsp;Patreon</span>
+ </a>
+
+ {# Merch #}
+ <a class="navbar-item" href="https://www.redbubble.com/people/PythonDiscord/shop">
+ <span class="icon is-size-4 is-medium"><i class="fas fa-tshirt"></i></span>
+ <span>&nbsp;Merch</span>
+ </a>
+
+ {# More #}
+ <div class="navbar-item has-dropdown is-hoverable has-left-margin-1">
+ <a class="navbar-link">
+ More
+ </a>
+ <div class="navbar-dropdown">
+ <a class="navbar-item">
+ Resources
+ </a>
+ <a class="navbar-item">
+ FAQ
+ </a>
+ <a class="navbar-item">
+ Rules
+ </a>
+ <a class="navbar-item">
+ Privacy
+ </a>
+ <hr class="navbar-divider">
+ <a class="navbar-item">
+ Code Jams
+ </a>
+ </div>
</div>
</div>
+
+ {# Join us on Discord! #}
+ <a class="navbar-item is-fullsize has-no-highlight has-left-margin-1" href="https://discord.gg/python">
+ <img class="is-hidden-touch" src="{% static "images/navbar/navbar_discordjoin.svg" %}" alt="Join us on Discord!"/>
+ </a>
</div>
</nav>
diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html
index 3d5f386e..205e92ff 100644
--- a/pydis_site/templates/home/index.html
+++ b/pydis_site/templates/home/index.html
@@ -7,65 +7,88 @@
{% endblock %}
{% block content %}
- <section class="hero is-primary">
- <div class="hero-body">
- <div class="container is-flex">
- <img class="hero-image is-centered" src="{% static "images/logo_site_banner.svg" %}" alt="Python Discord logo" />
- </div>
- <div class="container has-text-centered">
- <h1 class="title is-4">
- The hottest Python community on the web
- </h1>
- </div>
- </div>
- <div class="hero-foot">
- {% include "base/navbar.html" with active_item=False dropdowns=True icon_weight="fas" use_logo=False %}
- </div>
- </section>
+ {% include "base/navbar.html" %}
+
<section class="section">
+
+ {# Who are we? #}
<div class="container is-spaced">
+ <h1 class="is-size-1">Who are we?</h1>
+ <br>
<div class="columns">
- <div class="column is-two-thirds">
+ <div class="column is-half">
<p>
- We're a large, friendly community focused around the Python programming
- language, open to those who wish to learn the language or improve their
- skills, as well as those looking to help others.
+ We're a large community focused around the Python programming language.
+ We believe anyone can learn programming, and are very dedicated to helping
+ novice developers take their first steps into the world of code. We also
+ attract a lot of expert developers who are seeking friendships, collaborators,
+ or looking to hone their craft by teaching and getting involved in the community.
- <br /><br />
+ <br/><br/>
- We organise regular community events and have a dedicated staff of
- talented Python developers available to assist around the clock.
+ We organise regular community events like code jams, open source hackathons,
+ seasonal events and community challenges. Through our sponsorships and with
+ help from donations, we are even able to award prizes to the winners of our events.
- <br /><br />
+ <br/><br/>
- Whether you're looking to learn the language or working on a complex project,
- we've got someone who can help you if you get stuck.
+ You can find help with most Python-related problems in one of our help channels.
+ Our staff of nearly 50 dedicated expert Helpers are available around the clock
+ in every timezone. Whether you're looking to learn the language or working on a
+ complex project, we've got someone who can help you if you get stuck.
</p>
</div>
- <div class="column is-one-third is-first has-text-centered">
- <h1 class="title">Join the community</h1>
- {# TODO: Fix URL #}
- <a href="https://pythondiscord.com/invite">
- <img class="discord-banner" src="https://discordapp.com/api/guilds/267624335836053506/embed.png?style=banner3" alt="Discord banner" />
- </a>
+ {# Intro video #}
+ <div class="column is-half video-container">
+ <iframe src="https://www.youtube.com/embed/DIBXg8Qh7bA" frameborder="0"
+ allow="accelerometer; encrypted-media; gyroscope; picture-in-picture"
+ allowfullscreen></iframe>
</div>
</div>
+
+ {# Projects #}
+ <h1 class="is-size-1">Projects</h1>
+ <br>
+ <div class="columns is-multiline">
+
+ {# Display projects from HomeView.repos #}
+ {% for repo in repo_data %}
+ <div class="column is-one-third">
+ <div class="card has-equal-height github-card">
+ <div class="card-content">
+ <div class="repo-headline">
+ <i class="fab fa-github"></i>
+ <a href="https://github.com/{{ repo.repo_name }}"> <strong>{{ repo.repo_name }}</strong></a>
+ </div>
+ <div>
+ {{ repo.description }}
+ <br><br>
+ </span><span class="repo-language-dot {{ repo.language | lower }}"></span> {{ repo.language }}
+ <span id="repo-footer-item"><i class="fas fa-star"></i> {{ repo.stargazers }}</span>
+ <span id="repo-footer-item"><i class="fas fa-code-branch"></i> {{ repo.forks }}</span>
+ </div>
+ </div>
+ </div>
+ </div>
+ {% endfor %}
+
+ </div>
</div>
</section>
+ {# Sponsors #}
<section class="section-sp hero is-light">
- <div class="hero-body">
+ <div id="sponsors-hero" class="hero-body">
<div class="container">
<h1 class="title is-6 has-text-grey">
Sponsors
</h1>
- <img src="{% static "images/sponsors/linode.png" %}" alt="" />
- <img src="{% static "images/sponsors/jetbrains.png" %}" alt="" />
- <img src="{% static "images/sponsors/adafruit.png" %}" alt="" />
+ <a href="https://linode.com"><img src="{% static "images/sponsors/linode.png" %}" alt="Linode"/></a>
+ <a href="https://jetbrains.com"><img src="{% static "images/sponsors/jetbrains.png" %}" alt="JetBrains"/></a>
+ <a href="https://adafruit.com"><img src="{% static "images/sponsors/adafruit.png" %}" alt="Adafruit"/></a>
</div>
</div>
</section>
- {% include "base/footer.html" %}
{% endblock %}