diff options
43 files changed, 973 insertions, 1316 deletions
@@ -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 Binary files differdeleted file mode 100644 index 9ab656c0..00000000 --- a/pydis_site/static/images/logo_site_banner.png +++ /dev/null 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 Binary files differindex ccceb958..0b21c2c8 100644 --- a/pydis_site/static/images/sponsors/jetbrains.png +++ b/pydis_site/static/images/sponsors/jetbrains.png 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 Binary files differdeleted file mode 100644 index 4b38003b..00000000 --- a/pydis_site/static/images/sponsors/linode-diagonal.png +++ /dev/null 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> - © 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/> © {% 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> 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> 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"> 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> 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> 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> 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> 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 %} |