juan carlos carvajal bermudez 5 éve
commit
21137b7c85
94 módosított fájl, 4742 hozzáadás és 0 törlés
  1. 118 0
      .gitignore
  2. 0 0
      MAB18_site/__init__.py
  3. 450 0
      MAB18_site/settings.py
  4. 6 0
      MAB18_site/templates/auth/logged_out.html
  5. 38 0
      MAB18_site/templates/auth/login.html
  6. 15 0
      MAB18_site/templates/auth/password_change_done.html
  7. 60 0
      MAB18_site/templates/auth/password_change_form.html
  8. 6 0
      MAB18_site/templates/auth/password_reset_complete.html
  9. 31 0
      MAB18_site/templates/auth/password_reset_confirm.html
  10. 22 0
      MAB18_site/templates/auth/password_reset_done.html
  11. 2 0
      MAB18_site/templates/auth/password_reset_email.html
  12. 31 0
      MAB18_site/templates/auth/password_reset_form.html
  13. 132 0
      MAB18_site/templates/base_generic.html
  14. 74 0
      MAB18_site/urls.py
  15. 25 0
      MAB18_site/views.py
  16. 16 0
      MAB18_site/wsgi.py
  17. 49 0
      README.md
  18. BIN
      jurysys/.DS_Store
  19. 0 0
      jurysys/__init__.py
  20. 15 0
      jurysys/admin.py
  21. 5 0
      jurysys/apps.py
  22. 362 0
      jurysys/forms.py
  23. 27 0
      jurysys/jsonmigrate.py
  24. 345 0
      jurysys/models.py
  25. BIN
      jurysys/static/MAB2018logo.png
  26. BIN
      jurysys/static/MAB_logo.png
  27. BIN
      jurysys/static/MAB_logo.png~
  28. 5 0
      jurysys/static/bootstrap.min.js
  29. BIN
      jurysys/static/code.jpg
  30. BIN
      jurysys/static/css/.DS_Store
  31. BIN
      jurysys/static/css/404.gif
  32. BIN
      jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.eot
  33. 78 0
      jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.svg
  34. BIN
      jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.ttf
  35. BIN
      jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.woff
  36. BIN
      jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.woff2
  37. 5 0
      jurysys/static/css/Bariol-Icons-Basic-Webfont/generator_config.txt
  38. 129 0
      jurysys/static/css/Bariol-Icons-Basic-Webfont/specimen_files/grid_12-825-55-15.css
  39. 396 0
      jurysys/static/css/Bariol-Icons-Basic-Webfont/specimen_files/specimen_stylesheet.css
  40. 16 0
      jurysys/static/css/Bariol-Icons-Basic-Webfont/stylesheet.css
  41. BIN
      jurysys/static/css/Bariol/bariol_bold-webfont.woff
  42. BIN
      jurysys/static/css/Bariol/bariol_bold_italic-webfont.woff
  43. BIN
      jurysys/static/css/Bariol/bariol_light-webfont.woff
  44. BIN
      jurysys/static/css/Bariol/bariol_light_italic-webfont.woff
  45. BIN
      jurysys/static/css/Bariol/bariol_regular-webfont.woff
  46. BIN
      jurysys/static/css/Bariol/bariol_regular_italic-webfont.woff
  47. BIN
      jurysys/static/css/Bariol/bariol_thin-webfont.woff
  48. BIN
      jurysys/static/css/Bariol/bariol_thin_italic-webfont.woff
  49. 23 0
      jurysys/static/css/Bariol/example.html
  50. 64 0
      jurysys/static/css/Bariol/style.css
  51. 202 0
      jurysys/static/css/Open_Sans/LICENSE.txt
  52. BIN
      jurysys/static/css/Open_Sans/OpenSans-Bold.ttf
  53. BIN
      jurysys/static/css/Open_Sans/OpenSans-Regular.ttf
  54. 5 0
      jurysys/static/css/bootstrap.min.css
  55. 314 0
      jurysys/static/css/styles.css
  56. BIN
      jurysys/static/favicon.ico
  57. 8 0
      jurysys/static/featherlight.gallery.min.css
  58. 6 0
      jurysys/static/featherlight.gallery.min.js
  59. 8 0
      jurysys/static/featherlight.min.css
  60. 7 0
      jurysys/static/featherlight.min.js
  61. 1 0
      jurysys/static/jquery-3.2.1.slim.min.js
  62. 1 0
      jurysys/static/jquery.min.js
  63. BIN
      jurysys/static/logo.png
  64. BIN
      jurysys/static/logo_LED.jpg
  65. BIN
      jurysys/static/logo_MAI.jpg
  66. BIN
      jurysys/static/logo_future.jpg
  67. BIN
      jurysys/static/newMAB.png
  68. 3 0
      jurysys/static/popper.min.js
  69. 60 0
      jurysys/temp_file.py
  70. 0 0
      jurysys/templates/import-old-projects.html
  71. 55 0
      jurysys/templates/index.html
  72. 12 0
      jurysys/templates/jurysys/about.html
  73. 117 0
      jurysys/templates/jurysys/add.html
  74. 55 0
      jurysys/templates/jurysys/admin_panel.html
  75. 14 0
      jurysys/templates/jurysys/error_404.html
  76. 163 0
      jurysys/templates/jurysys/file_upload.html
  77. 37 0
      jurysys/templates/jurysys/form.html
  78. 43 0
      jurysys/templates/jurysys/media_overview.html
  79. 67 0
      jurysys/templates/jurysys/myProjects.html
  80. 151 0
      jurysys/templates/jurysys/project_detail.html
  81. 249 0
      jurysys/templates/jurysys/project_overwiev.html
  82. 13 0
      jurysys/templates/jurysys/submit.html
  83. 53 0
      jurysys/templates/jurysys/voteDetail.html
  84. 71 0
      jurysys/templates/jurysys/votes_cid.html
  85. 23 0
      jurysys/templates/mab18/importold.html
  86. 0 0
      jurysys/templatetags/__init__.py
  87. 134 0
      jurysys/templatetags/tags.py
  88. 3 0
      jurysys/tests.py
  89. 33 0
      jurysys/urls.py
  90. 248 0
      jurysys/views.py
  91. 15 0
      manage.py
  92. 12 0
      requirements.txt
  93. 3 0
      start.sh
  94. 11 0
      update.sh

+ 118 - 0
.gitignore

@@ -0,0 +1,118 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+settings_local.py
+MAB18_site/settings_local.py
+
+*/migrations/*.py
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+build/
+develop-eggs/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+
+# PyInstaller
+#  Usually these files are written by a python script from a template
+#  before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+*.db
+*.sqlite3
+db.sqlite3
+dev.db
+local_settings.py
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# dotenv
+.env
+
+# virtualenv
+.venv
+venv/
+ENV/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+
+# eclipse
+.pydevproject
+
+#nodejs e.g. GULP
+node_modules
+/db.sqlite3
+/site_media/
+/db-old.sqlite3

+ 0 - 0
MAB18_site/__init__.py


+ 450 - 0
MAB18_site/settings.py

@@ -0,0 +1,450 @@
+"""
+Django settings for MAB18_site project.
+
+Generated by 'django-admin startproject' using Django 2.0.7.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.0/topics/settings/
+
+For the full list of settings and their values, see
+https://docs.djangoproject.com/en/2.0/ref/settings/
+"""
+
+import os
+from django.utils.translation import ugettext_lazy as _
+
+try:
+    from .settings_local import *
+except:
+    pass
+
+
+# SECURITY WARNING: don't run with debug turned on in production!
+try:
+    os.environ['django_DEBUG']
+    if os.environ['django_DEBUG'] == 'True':
+        DEBUG = True
+    else:
+        DEBUG = False
+except KeyError:
+    DEBUG = True
+
+
+# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
+PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
+PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
+BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
+
+# Static files (CSS, JavaScript, Images)
+# https://docs.djangoproject.com/en/2.0/howto/static-files/
+
+#STATIC_URL = "https://cdn.awards.mediaarchitecture.org/site_media/static/"
+#MEDIA_URL = "https://cdn.awards.mediaarchitecture.org/site_media/media/"
+
+STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static")
+MEDIA_ROOT = os.path.join(PROJECT_ROOT, "site_media", "media")
+
+try:
+    os.environ['django_MEDIA_URL']
+    MEDIA_URL =  os.environ['django_MEDIA_URL']
+except:
+    MEDIA_URL = '/site_media/media/'
+
+try:
+    os.environ['django_STATIC_URL']
+    STATIC_URL =  os.environ['django_STATIC_URL']
+except:
+    STATIC_URL = '/site_media/static/'
+
+
+
+
+try:
+    os.environ['django_IMPORT_PATH']
+    IMPORT_PATH = os.environ['django_IMPORT_PATH']
+except KeyError:
+    IMPORT_PATH = '/'
+
+try:
+    os.environ['django_OLD_IMPORT_PATH']
+    OLD_IMPORT_PATH = os.environ['django_OLD_IMPORT_PATH']
+except KeyError:
+    OLD_IMPORT_PATH = '/'
+
+try:
+    os.environ['django_TEMP_PATH']
+    TEMP_PATH = os.environ['django_TEMP_PATH']
+except KeyError:
+    TEMP_PATH = '/'
+
+
+# Quick-start development settings - unsuitable for production
+# See https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/
+
+# SECURITY WARNING: keep the secret key used in production secret!
+try:
+    os.environ['django_SECRET_KEY']
+    SECRET_KEY = os.environ['django_SECRET_KEY']
+except KeyError:
+    SECRET_KEY = 'KsN_QZ_fWqs18Z-3o}2~z0-@NA+/lP{YwVosC>6:Gxbu>ePUw=+Gv6lIZWR'
+
+
+try:
+    os.environ['django_ALLOWED_HOSTS']
+    ENV_ALLOWED_HOSTS = os.environ['django_ALLOWED_HOSTS']
+    ALLOWED_HOSTS = []
+    ALLOWED_HOSTS.extend( ENV_ALLOWED_HOSTS.split() )
+except KeyError:
+    ALLOWED_HOSTS = ['*']
+
+
+#if DEBUG == True:
+#    ALLOWED_HOSTS = ['*']
+#else:
+#    ALLOWED_HOSTS = ['awards.mediaarchitecture.org', 'devawards.mediaarchitecture.org', 'devcatalog.mediaarchitecture.org' 'catalog.mediaarchitecture.org', 'localhost']
+
+
+# Constance settings
+
+SPONSOR_CARDS = """
+{% load static %}
+<div class="mab-card card border-thin border-0 rounded-0" style="">
+    <a href="https://www.mediaarchitecture.org">
+        <div style="position: relative;text-align: center;">
+            <img class="card-img-top rounded-0" src="{% static 'logo_MAI.jpg' %}" style=" " alt="image">
+        </div>
+    </a>
+    <div class="card-body" style="padding: 5px">
+        <div class="border-0 d-flex justify-content">
+            <p class="card-title"><a href="{% static 'MAB2018logo.png' %}">MAI<br>MAI Sponsor - YEAR, CITY, COUNTRY<br></a></p>
+        </div>
+        <p class="card-text" style="color: black; margin-top:0px">
+            <a href="https://www.mediaarchitecture.org">
+                <nobr>
+                    <button class="border-thin mybtn" style="margin-right: 2px;margin-bottom: 2px">#MAB</button>
+                </nobr>
+            </a>
+            <a href="">
+                <nobr>
+                    <button class="border-thin mybtn" style="margin-right: 2px;margin-bottom: 2px">#Sponsor</button>
+                </nobr>
+            </a>
+            <a href="https://www.mediaarchitecture.org">
+                <nobr>
+                    <button class="border-thin mybtn" style="margin-right: 2px;margin-bottom: 2px">#NAME</button>
+                </nobr>
+            </a>
+
+        </p>
+    </div>
+</div>
+"""
+
+ABOUT_TEXT = """
+  {% load static %}
+<div class="container" style="margin-top: 20px;">
+<h3>MAB Catalogue</h3>
+<br />
+<p>&nbsp;</p>
+<p><small> <strong>Our Sponsors:</strong><br />  -<br /> </small></p>
+<p><small> <strong>Exhibition curators</strong><br />-<br /> </small></p>
+<p><small> <strong>System developer</strong><br /> -<br /> </small></p>
+<p><small> <strong>This is a website by </strong><br /> <img src="{% static 'logo_MAI.jpg' %}" width="auto" height="50px" /><br /> Gisela Legath-Gasse 5 / 1<br /> 1220 Vienna &ndash; Austria<br /> <a href="www.mediaarchitecture.org">www.mediaarchitecture.org</a><br /> awards@mediaarchitecture.org<br /> ZVR-Zahl: 501926485<br /> ATU69058814<br /><br /> Please have a look at our privacy policy: <br /> <a href="https://www.mediaarchitecture.org/privacy-policy/">https://www.mediaarchitecture.org/privacy-policy/</a><br /> </small></p>
+</div>
+"""
+
+MAIN_CARD = """
+  {% load static %}
+  <div class="card rounded-0 border-0" style="width: 97%; height: 95%; display:inline-block; margin-top:4px; max-width: 100%">
+    <a href="">
+      <div style="position: relative;text-align: center;">
+        <img class="card-img-top rounded-0" src="{% static 'MAB_logo.png' %}" alt="image">
+        <div style="position: absolute;bottom: 8px;left: 16px;color: white; font-size: medium; font-weight: bold; text-align: left;background-color: rgba(0,0,0,0.21)">Title</div>
+      </div>
+    </a>
+    <div class="card-body" style="padding: 5px">
+      <div class="border-0 d-flex justify-content">
+        <p class="card-title" style="margin-bottom: 3px"><a href=""> Header </a></p>
+      </div>
+      <p class="card-text" style="color: black;margin-top: 0px">
+        <button id='' class="border-thin mybtn" style="">Tag A</button>
+        <button id='' class="border-thin mybtn" style="">Tag B</button>
+        <button id='' class="border-thin mybtn" style="">Tag C</button>
+      </p>
+    </div>
+  </div>
+  """
+
+INFO_TXT = """
+<div><span style="font-weight: bold;">Please note:</span></div>
+<ul><li><div>Fill in as <span style="font-weight: bold;">many fields</span> as possible.</div></li>
+<li><div><span style="font-weight: bold;">Mandatory fields</span> are marked with an asterisk*.</div></li>
+<li><div>Don’t forget to press the <span style="font-weight: bold;">„Save“ button</span> from time to time ;-)</div></li>
+<li><div>Feel free to <span style="font-weight: bold;">share this form</span> within your team and partners, so that they can add additional information. (They have to use the same login as you)</div></li>
+<li><div><span style="font-weight: bold;">Please note that you can edit all entries until the deadline</span></div></li>
+<li><div><span style="font-weight: bold;">The deadline is &nbsp;June 14 2020 at 10:00 pm</span></div></li></ul>
+<div><span style="font-weight: bold;">After the deadline we take what is in the form. So make sure that least all required fields are filled in and you have added at least 4 media (Photos or Videos) You can only add media after you have entered all mandatory fields.</span></div>
+<div><br></div><div><span style="font-weight: bold;">So, have fun!&nbsp;</span>
+<span style="font-weight: bold;">We really look forward to your project!</span></div>
+<div><span style="font-weight: bold;">Hopefully see you in Amsterdam,</span></div>
+<div><span style="font-weight: bold;">Gernot and the MAB Team!</span></div>
+"""
+
+SUBMIT_TEXT = """
+
+<div>Yes you got it! On this page you can submit proposals to the MAB20 Awards!</div><div><br></div>
+<div>We are pleased to announce that the international Media Architecture Biennale 2020, will take place 23 · 27 November 2020 in Amsterdam / Utrecht in the Netherlands.</div>
+<div><br></div><div>In order to submit projects to the MAB Awards pls proceed as follows:</div>
+<div><br></div><ol><li><div style="text-align: left;"><span style="font-size: 14px; text-decoration: underline;">download the MAB Awards Call (PDF)</span></div>
+</li><li><div style="text-align: left;"><a href="/mab/register/">register</a></div></li>
+<li><div style="text-align: left;"><a href="/mab/addProject/?">submit your project&nbsp;</a></div></li></ol>
+<div style="margin-top: 1em; margin-bottom: 1em;"></div><div style="margin-top: 1em; margin-bottom: 1em;"></div>
+<div>You can invite your team and partners to fill in the project form. (They have to use the same login as you)</div>
+<div>It’s work in progress. ;.-) You don’t have to fill in everything at one time and you can edit all entries until the deadline.</div>
+<div><span style="font-weight: bold;">The deadline is &nbsp;June 14 2020 at 10:00 pm</span></div><div><br>
+</div><div>So, have fun!&nbsp;We really look forward to your project!</div><div>Hopefully see you in Amsterdam,</div>
+<div>Gernot and the MAB Team!</div><div><br></div><div style="margin-top: 1em; margin-bottom: 1em;"></div>
+<div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">JURY MEMBERS:</span>
+</div><div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Martijn de Waal</span><span data-en-paragraph="true" data-en-has-metadata="true"> – University of Applied Sciences, Amsterdam</span></div>
+<div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true">
+<span style="font-weight: bold;">Gernot Tscherteu</span> - Media Architecture Institute, Vienna</span></div>
+<div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Juan Carlos Carvajal B.</span><span data-en-paragraph="true" data-en-has-metadata="true"> –&nbsp;</span><span data-en-paragraph="true" data-en-has-metadata="true">Media Architecture Institute, Vienna</span></div><div style="margin-top: 1em; margin-bottom: 1em;">
+<span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Susa Pop</span><span data-en-paragraph="true" data-en-has-metadata="true"> – Public Art Lab, Berlin
+</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Tanya Toft Ag</span><span data-en-paragraph="true" data-en-has-metadata="true"> – Urban Media Art Academy, Hong Kong
+</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Luke Hespanhol</span><span data-en-paragraph="true" data-en-has-metadata="true"> – The University of Sydney, Sydney
+</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Ava Fatah gen. Schieck</span><span data-en-paragraph="true" data-en-has-metadata="true"> – The Bartlett, University College London
+</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Dave Colangelo</span><span data-en-paragraph="true" data-en-has-metadata="true"> – Portland State University, Portland
+</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">Martin Tomitsch</span><span data-en-paragraph="true" data-en-has-metadata="true"> – The University of Sydney, Sydney
+</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><span data-en-paragraph="true" data-en-has-metadata="true" style="font-weight: bold;">M. Hank Haeusler</span><span data-en-paragraph="true" data-en-has-metadata="true"> – UNSW Sydney
+</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><br></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="font-weight: bold;">We would like to thank our sponsors:</span></div><div style="margin-top: 1em; margin-bottom: 1em;"><br></div><div style="margin-top: 1em; margin-bottom: 1em;"><span style="font-weight: bold;">Sponsors</span></div>
+<div style="margin-top: 1em; margin-bottom: 1em;"><br></div>
+</div>
+
+"""
+
+CONSTANCE_BACKEND = 'constance.backends.database.DatabaseBackend'
+CONSTANCE_CONFIG = {
+    'ABOUT_CONTENT': (ABOUT_TEXT, 'Text for the about page'),
+    'SPONSOR_CARDS': (SPONSOR_CARDS, 'HTML for the sponsor cards'),
+    'MAIN_CARD':     (MAIN_CARD, 'HTML for the main card'),
+    'CURRENT_EVENT': ('MAB20', 'Filter for the projects that should be evaluated'),
+    'INFO_TXT': (INFO_TXT, 'Text to help with the fill in the submitform'),
+    'SUBMIT_TEXT': (SUBMIT_TEXT, 'Text to welcome to the submitpage'),
+}
+
+
+# Application definition
+
+INSTALLED_APPS = [
+    'django.contrib.admin',
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'jurysys.apps.jurysysConfig',
+    'constance',
+    'constance.backends.database',
+    'imagekit',
+    'crispy_forms',
+    'django_file_form',
+    'django_file_form.ajaxuploader',
+    'django_countries',
+    'captcha',
+]
+
+CRISPY_TEMPLATE_PACK = 'bootstrap4'
+
+
+CAPTCHA_NOISE_FUNCTIONS=('captcha.helpers.noise_dots',)
+CAPTCHA_LETTER_ROTATION=(-15,15)
+
+
+
+MIDDLEWARE = [
+    'django.middleware.security.SecurityMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'django.contrib.messages.middleware.MessageMiddleware',
+    'django.middleware.clickjacking.XFrameOptionsMiddleware',
+]
+
+# 'htmlmin.middleware.HtmlMinifyMiddleware',
+#  'htmlmin.middleware.MarkRequestMiddleware',
+
+
+ROOT_URLCONF = 'MAB18_site.urls'
+
+TEMPLATES = [
+    {
+        'BACKEND': 'django.template.backends.django.DjangoTemplates',
+        'DIRS': [os.path.join(PACKAGE_ROOT, "templates"),'./templates','./MAB18_site', ],
+        'APP_DIRS': True,
+        'OPTIONS': {
+            'context_processors': [
+                'constance.context_processors.config',
+                'django.template.context_processors.debug',
+                'django.template.context_processors.request',
+                'django.contrib.auth.context_processors.auth',
+                'django.contrib.messages.context_processors.messages',
+            ],
+        },
+    },
+]
+
+WSGI_APPLICATION = 'MAB18_site.wsgi.application'
+
+EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
+
+LOGIN_REDIRECT_URL = '/mab/home/'
+
+
+# Database
+# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
+
+try:
+    os.environ['django_DB_ENGINE']
+    DB_ENGINE  = os.environ['django_DB_ENGINE']
+except KeyError:
+    DB_ENGINE = 'django.db.backends.sqlite3'
+
+try:
+    os.environ['django_DB_NAME']
+    DB_NAME  = os.environ['django_DB_NAME']
+except KeyError:
+    DB_NAME = os.path.join(BASE_DIR, 'db.sqlite3')
+
+try:
+    os.environ['django_DB_USER']
+    DB_USER  = os.environ['django_DB_USER']
+except KeyError:
+    DB_USER = ''
+
+try:
+    os.environ['django_DB_PASSWORD']
+    DB_PASSWORD  = os.environ['django_DB_PASSWORD']
+except KeyError:
+    DB_PASSWORD = ''
+
+try:
+    os.environ['django_DB_HOST']
+    DB_HOST  = os.environ['django_DB_HOST']
+except KeyError:
+    DB_HOST = ''
+
+try:
+    os.environ['django_DB_PORT']
+    DB_PORT  = os.environ['django_DB_PORT']
+except KeyError:
+    DB_PORT = ''
+
+if DB_ENGINE == "django.db.backends.mysql" :
+    DB_OPTIONS = {'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"}
+else:
+    DB_OPTIONS = {}
+
+DATABASES = {
+    "default": {
+        "ENGINE": DB_ENGINE,
+        "NAME":  DB_NAME,
+        "USER":  DB_USER,
+        "PASSWORD":  DB_PASSWORD,
+        "HOST":  DB_HOST,
+        "PORT":  DB_PORT,
+        "OPTIONS" : DB_OPTIONS
+    }
+}
+
+
+# Password validation
+# https://docs.djangoproject.com/en/2.0/ref/settings/#auth-password-validators
+
+AUTH_PASSWORD_VALIDATORS = [
+    {
+        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
+    },
+    {
+        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
+    },
+]
+
+
+# Internationalization
+# https://docs.djangoproject.com/en/2.0/topics/i18n/
+
+LANGUAGE_CODE = 'en-us'
+
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = "Europe/Vienna"
+
+
+
+USE_I18N = True
+
+USE_L10N = True
+
+USE_TZ = True
+
+
+
+#MAIL
+
+try:
+    os.environ['django_DEFAULT_FROM_EMAIL']
+    DEFAULT_FROM_EMAIL =  os.environ['django_DEFAULT_FROM_EMAIL']
+except:
+    DEFAULT_FROM_EMAIL = 'webmaster@localhost'
+
+try:
+    os.environ['django_EMAIL_BACKEND']
+    EMAIL_BACKEND = os.environ['django_EMAIL_BACKEND']
+except KeyError:
+    EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
+
+try:
+    os.environ['django_EMAIL_HOST']
+    EMAIL_HOST = os.environ['django_EMAIL_HOST']
+except KeyError:
+    EMAIL_HOST = ''
+
+try:
+    os.environ['django_EMAIL_HOST_USER']
+    EMAIL_HOST_USER =  os.environ['django_EMAIL_HOST_USER']
+except:
+    EMAIL_HOST_USER = ''
+
+try:
+    os.environ['django_EMAIL_HOST_PASSWORD']
+    EMAIL_HOST_PASSWORD  = os.environ['django_EMAIL_HOST_PASSWORD']
+except KeyError:
+    EMAIL_HOST_PASSWORD = ''
+
+try:
+    os.environ['django_EMAIL_PORT']
+    EMAIL_PORT = os.environ['django_EMAIL_PORT']
+except KeyError:
+    EMAIL_PORT = ''
+
+try:
+    os.environ['django_EMAIL_USE_SSL']
+    if os.environ['django_EMAIL_USE_SSL'] == 'True' :
+        EMAIL_USE_SSL = True
+    else:
+        EMAIL_USE_SSL = False
+except KeyError:
+    EMAIL_USE_SSL = False

+ 6 - 0
MAB18_site/templates/auth/logged_out.html

@@ -0,0 +1,6 @@
+{% extends "base_generic.html" %}
+
+{% block content %}
+  <p>Logged out!</p>
+  <a href="{% url 'login'%}">Click here to login again.</a>
+{% endblock %}</html>

+ 38 - 0
MAB18_site/templates/auth/login.html

@@ -0,0 +1,38 @@
+{% extends "base_generic.html" %}
+
+{% block content %}
+
+ <form method="post" action="{% url 'login' %}" >
+     {% csrf_token %}
+     <div class="col-sm-10">
+
+     <h4 style="margin-top: 5px">Hello, good to see you again!</h4>
+
+<div class="form-group " style="margin-top: 20px" >
+{% if retry %} <p style="color: red">Try again here or reset pwd</p> {% endif %}
+    <label>{{ form.username.label_tag }}</label>
+    <td>{{ form.username }}</td>
+</div>
+<div>
+  <label>{{ form.password.label_tag }}</label>
+  <td>{{ form.password }}</td>
+</div>
+     </div>
+
+<div class="col-sm-10 justify-content-between">
+<div class="justify-content">
+  <input style="align-self: start" type="submit" class="btn btn-outline-secondary rounded-0 mybtn" value="login" />
+      <input type="hidden" name="next" value="{{ next }}" />
+
+        <a style="align-self: end" class="btn btn-outline-secondary rounded-0 mybtn" href="{% url 'registerView' %}">Register new Account</a>
+
+</div>
+    </div>
+     <div class="col-sm-10">
+
+         <a style="align-self: end" href="{% url 'password_reset' %}">Lost password?</a>
+     </div>
+</form>
+
+
+{% endblock %}

+ 15 - 0
MAB18_site/templates/auth/password_change_done.html

@@ -0,0 +1,15 @@
+{% extends "admin/base_site.html" %}
+{% load i18n %}
+{% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %}{% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>{% endblock %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; {% trans 'Password change' %}
+</div>
+{% endblock %}
+
+{% block title %}{{ title }}{% endblock %}
+{% block content_title %}<h1>{{ title }}</h1>{% endblock %}
+{% block content %}
+<p>{% trans 'Your password was changed.' %}</p>
+{% endblock %}

+ 60 - 0
MAB18_site/templates/auth/password_change_form.html

@@ -0,0 +1,60 @@
+{% extends "admin/base_site.html" %}
+{% load i18n static %}
+{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/forms.css" %}">{% endblock %}
+{% block userlinks %}{% url 'django-admindocs-docroot' as docsroot %}{% if docsroot %}<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> / {% endif %} {% trans 'Change password' %} / <a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>{% endblock %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; {% trans 'Password change' %}
+</div>
+{% endblock %}
+
+{% block title %}{{ title }}{% endblock %}
+{% block content_title %}<h1>{{ title }}</h1>{% endblock %}
+
+{% block content %}<div id="content-main">
+
+<form method="post">{% csrf_token %}
+<div>
+{% if form.errors %}
+    <p class="errornote">
+    {% if form.errors.items|length == 1 %}{% trans "Please correct the error below." %}{% else %}{% trans "Please correct the errors below." %}{% endif %}
+    </p>
+{% endif %}
+
+
+<p>{% trans "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." %}</p>
+
+<fieldset class="module aligned wide">
+
+<div class="form-row">
+    {{ form.old_password.errors }}
+    {{ form.old_password.label_tag }} {{ form.old_password }}
+</div>
+
+<div class="form-row">
+    {{ form.new_password1.errors }}
+    {{ form.new_password1.label_tag }} {{ form.new_password1 }}
+    {% if form.new_password1.help_text %}
+    <div class="help">{{ form.new_password1.help_text|safe }}</div>
+    {% endif %}
+</div>
+
+<div class="form-row">
+{{ form.new_password2.errors }}
+    {{ form.new_password2.label_tag }} {{ form.new_password2 }}
+    {% if form.new_password2.help_text %}
+    <div class="help">{{ form.new_password2.help_text|safe }}</div>
+    {% endif %}
+</div>
+
+</fieldset>
+
+<div class="submit-row">
+    <input type="submit" value="{% trans 'Change my password' %}" class="default">
+</div>
+
+</div>
+</form></div>
+
+{% endblock %}

+ 6 - 0
MAB18_site/templates/auth/password_reset_complete.html

@@ -0,0 +1,6 @@
+{% extends "base_generic.html" %}
+
+{% block content %}
+  <h1>The password has been changed!</h1>
+  <p><a href="{% url 'login' %}">log in again?</a></p>
+{% endblock %}

+ 31 - 0
MAB18_site/templates/auth/password_reset_confirm.html

@@ -0,0 +1,31 @@
+{% extends "base_generic.html" %}
+
+{% block content %}
+    {% if validlink %}
+        <p>Please enter (and confirm) your new password.</p>
+        <form action="" method="post">
+            <div style="display:none">
+                <input type="hidden" value="{{ csrf_token }}" name="csrfmiddlewaretoken">
+            </div>
+            <table>
+                <tr>
+                    <td>{{ form.new_password1.errors }}
+                        <label for="id_new_password1">New password:</label></td>
+                    <td>{{ form.new_password1 }}</td>
+                </tr>
+                <tr>
+                    <td>{{ form.new_password2.errors }}
+                        <label for="id_new_password2">Confirm password:</label></td>
+                    <td>{{ form.new_password2 }}</td>
+                </tr>
+                <tr>
+                    <td></td>
+                    <td><input type="submit" value="Change my password" /></td>
+                </tr>
+            </table>
+        </form>
+    {% else %}
+        <h1>Password reset failed</h1>
+        <p>The password reset link was invalid, possibly because it has already been used. Please request a new password reset.</p>
+    {% endif %}
+{% endblock %}

+ 22 - 0
MAB18_site/templates/auth/password_reset_done.html

@@ -0,0 +1,22 @@
+{% extends "base_generic.html" %}
+{% load i18n %}
+
+
+{% block title %}{% endblock %}
+{% block breadcrumbs %}
+<div class="breadcrumbs">
+<a href="{% url 'admin:index' %}">{% trans 'Home' %}</a>
+&rsaquo; {% trans 'Password reset' %}
+</div>
+{% endblock %}
+
+{% block content %}
+
+
+{% block content_title %}<h3>{{ title }}</h3>{% endblock %}
+
+<p>{% trans "Relax. We've emailed you instructions for setting your password, if an account exists with the email you entered. You should receive them shortly." %}</p>
+
+<p>{% trans "If you don't receive an email, please make sure you've entered the address you registered with, and check your spam folder." %}</p>
+
+{% endblock %}

+ 2 - 0
MAB18_site/templates/auth/password_reset_email.html

@@ -0,0 +1,2 @@
+Someone asked for password reset for email {{ email }}. Follow the link below:
+{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}

+ 31 - 0
MAB18_site/templates/auth/password_reset_form.html

@@ -0,0 +1,31 @@
+{% extends "base_generic.html" %}
+{% load i18n static %}
+
+
+{% block content %}
+<div class="">
+  &nbsp;
+</div>
+<div class="">
+  &nbsp;
+</div>
+
+<form method="post">{% csrf_token %}
+  <p>Have you Forgotten your password!? O-: <br/> -No worries. <br/> Enter your email address below, and we'll email instructions for setting a new one.</p>
+
+<fieldset class="module aligned">
+    <div class="form-row field-email">
+        {{ form.email.errors }}
+        <label for="id_email">{% trans 'Email address:' %}</label>
+        <div class="">
+          &nbsp;
+        </div>
+        {{ form.email }}
+    </div>
+    <div class="">
+      &nbsp;
+    </div>
+    <input type="submit" value="{% trans 'Reset my password' %}">
+</fieldset>
+</form>
+{% endblock %}

+ 132 - 0
MAB18_site/templates/base_generic.html

@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+
+    <meta charset="UTF-8">
+    {% block title %} <title>MAB20</title> {% endblock %}
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    {% load static %}
+
+    <link rel="icon" href="{% static 'favicon.ico'%}">
+    <link rel="apple-touch-icon" href="{% static 'favicon.ico'%}">
+
+
+    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css'%}" >
+    <link rel="stylesheet" href="{% static 'css/styles.css' %}">
+    <script src="{% static 'jquery-3.2.1.slim.min.js' %}" ></script>
+    <script src="{% static 'popper.min.js' %}" ></script>
+    <script src="{% static 'bootstrap.min.js' %}" ></script>
+    <script src="{% static 'jquery.min.js' %}"></script>
+
+
+    {% block script %}
+
+    {% endblock %}
+</head>
+<body>
+    {% block navbar %}
+
+ <nav class="navbar navbar-expand-sm navbar-fixed-top" style="padding-left: 15px; padding-bottom: 0px; margin-bottom: 2px" >
+     <div class="container-fluid rounded-0" style="padding-left: 2px">
+  <a class="navbar-brand navbar-right" href="{% url 'projects' %}">
+     <img src="{% static 'newMAB.png' %}" alt="MAB20" height="40px" width="auto" style="margin: auto; padding-bottom: 2px" >
+  </a>
+
+        <button class="navbar-toggler" type="button " data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
+            <span class="navbar-toggler-icon"></span> ⋁
+        </button>
+  <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
+
+    <div class="navbar-nav navbar-right">
+      <a class="nav-link active nav-right boldkur" style="color: black;    font-weight: bold;" href="{% url 'projects' %}">PROJECTS</a>
+              <a class="nav-link active nav-right boldkur" style="color: black;    font-weight: bold;" href="{% url 'submit' %}">SUBMIT</a>
+
+        <a class=" nav-link active nav-right boldkur" style="color: black;    font-weight: bold;" href="{% url 'about' %}">ABOUT</a>
+        {% if not user.is_authenticated %}
+           <a class=" nav-link active nav-right boldkur" style="color: black;    font-weight: bold;" href="{% url 'login' %}">LOGIN</a>
+        {% endif %}
+
+        {% if user.is_authenticated %}
+        <a  class="nav-link nav-right boldkur" style="color: black;    font-weight: bold;" href="{% url 'NewSubmitView'%}?">ADD PROJECT</a>
+        <a  class="nav-link nav-right boldkur" style="color: black;    font-weight: bold;" href="{% url 'MyProjects'%}">MY PROJECTS</a>
+        <a  class="nav-link nav-right boldkur" style="color: black;    font-weight: bold;" href="{% url 'logout'%}?next={{request.path}}">LOGOUT</a>
+        {% endif %}
+
+</div>
+    </div>
+  </div>
+</nav>
+    </div>
+
+    {% endblock %}
+
+    <div class="container-fluid">
+        {% block content %}
+
+        {% endblock %}
+    </div>
+
+
+ <div class="modal fade " id="LoginModal" tabindex="-1" role="dialog" aria-labelledby="LoginModal" aria-hidden="true">
+     <div class="modal-dialog border border-dark rounded-0" role="document">
+         <div class="modal-content rounded-0">
+         <div class="modal-header">
+        <h5 class="modal-title" id="exampleModalLabel">Please Log in here:</h5>
+             <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+          <span aria-hidden="true">&times;</span>
+        </button>
+         </div>
+
+          <div class="modal-body">
+
+    <form method="post" action="{% url 'login' %}">
+{% csrf_token %}
+
+
+
+<div class="form-group " style="margin-top: 20px">
+
+    <input type="text" class="form-control rounded-0" name="username" placeholder="username" />
+</div>
+        <div class="form-group">
+    <input type="password" class="form-control rounded-0" name="password" placeholder="password">
+
+</div>
+
+
+<div>
+  <input type="submit" class="btn btn-outline-secondary rounded-0 mybtn" value="login" />
+  <input type="hidden" name="next" value="{{ next }}" />
+</div>
+</form>
+          </div>
+
+               <div class="modal-footer">
+    <p><a href="{% url 'password_reset' %}">Lost password?</a></p>
+               </div>
+         </div>
+</div>
+
+</div>
+
+
+
+  </body>
+
+<!-- Matomo -->
+<script type="text/javascript">
+  var _paq = _paq || [];
+  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
+  _paq.push(['trackPageView']);
+  _paq.push(['enableLinkTracking']);
+  (function() {
+    var u="https://piwik.juan-carlos.info/";
+    _paq.push(['setTrackerUrl', u+'piwik.php']);
+    _paq.push(['setSiteId', '4']);
+    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
+    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
+  })();
+</script>
+<!-- End Matomo Code -->
+
+</html>

+ 74 - 0
MAB18_site/urls.py

@@ -0,0 +1,74 @@
+"""MAB18_site URL Configuration
+
+The `urlpatterns` list routes URLs to views. For more information please see:
+    https://docs.djangoproject.com/en/2.0/topics/http/urls/
+Examples:
+Function views
+    1. Add an import:  from my_app import views
+    2. Add a URL to urlpatterns:  path('', views.home, name='home')
+Class-based views
+    1. Add an import:  from other_app.views import Home
+    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
+Including another URLconf
+    1. Import the include() function: from django.urls import include, path
+    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
+"""
+from django.contrib import admin
+from django.conf.urls import include
+from django.urls import path, re_path
+from django.views.generic import RedirectView
+from django.conf import settings
+from django.conf.urls.static import static
+from django.contrib.auth import views as auth_views
+from django.conf.urls import url, include
+from . import views
+
+
+from .views import *
+
+urlpatterns = [
+    path('admin/', admin.site.urls),
+    url(r'^captcha/',  include('captcha.urls')),
+    path('mab/', include('jurysys.urls')),
+
+
+    path('login/',                   auth_views.LoginView.as_view(template_name="auth/login.html"), name='mab_login'),
+    path('accounts/login/',          auth_views.LoginView.as_view(template_name="auth/login.html"), name='login'),
+
+    path('password_reset/',          auth_views.PasswordResetView.as_view(template_name="auth/password_reset_form.html"), name='mab_password_reset'),
+    path('accounts/password_reset/', auth_views.PasswordResetView.as_view(template_name="auth/password_reset_form.html"), name='password_reset'),
+
+    path('logout/',                  auth_views.LogoutView.as_view(template_name="auth/logged_out.html"), name='mab_logout'),
+    path('accounts/logout/',         auth_views.LogoutView.as_view(template_name="auth/logged_out.html"), name='logout'),
+
+    path('password_change/',          auth_views.PasswordChangeView.as_view(template_name="auth/password_change_form.html"), name='mab_password_change'),
+    path('accounts/password_change/', auth_views.PasswordChangeView.as_view(template_name="auth/password_change_form.html"), name='password_change'),
+
+    path('password_change/done/',          auth_views.PasswordChangeDoneView.as_view(template_name="auth/password_change_done.html"), name='mab_password_change_done'),
+    path('accounts/password_change/done/', auth_views.PasswordChangeDoneView.as_view(template_name="auth/password_change_done.html"), name='password_change_done'),
+
+    path('password_reset/done/',          auth_views.PasswordResetDoneView.as_view(template_name="auth/password_reset_done.html"), name='mab_password_reset_done'),
+    path('accounts/password_reset/done/', auth_views.PasswordResetDoneView.as_view(template_name="auth/password_reset_done.html"), name='password_reset_done'),
+
+    path('reset/<uidb64>/<token>/',          auth_views.PasswordResetConfirmView.as_view(template_name="auth/password_reset_confirm.html"), name='mab_password_reset_confirm'),
+    path('accounts/reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name="auth/password_reset_confirm.html"), name='password_reset_confirm'),
+
+    path('reset/done/', auth_views.PasswordResetCompleteView.as_view(template_name="auth/password_reset_complete.html"), name='mab_password_reset_complete'),
+    path('accounts/reset/done/', auth_views.PasswordResetCompleteView.as_view(template_name="auth/password_reset_complete.html"), name='password_reset_complete'),
+
+    #redirects to jurysys
+    path('', RedirectView.as_view(url='/mab/')),
+
+    path('accounts/', include('django.contrib.auth.urls')),
+    url(r'^upload/', include('django_file_form.urls')),
+    url(r'^handle_upload$', views.handle_upload, name='file_form_handle_upload'),
+    #path('resetpwd/', auth_views.PasswordResetForm, name='password_reset'),
+] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+
+handler404 = 'jurysys.views.error_404_view'
+
+# Use static() to add url mapping to serve static files during development (only)
+from django.conf import settings
+from django.conf.urls.static import static
+
+urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

+ 25 - 0
MAB18_site/views.py

@@ -0,0 +1,25 @@
+from django.shortcuts import render
+from django.views import generic
+from django.views.generic import TemplateView
+from django.contrib.auth.models import User
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.core import serializers
+from django.contrib.auth.models import User
+from django.http import HttpResponseRedirect
+from django.urls import reverse
+from django.core.files import File
+from django.conf import settings
+from django_file_form.uploader import FileFormUploader
+
+
+import csv
+# Create your views here.
+
+
+import subprocess
+import os
+
+
+
+
+handle_upload = FileFormUploader()

+ 16 - 0
MAB18_site/wsgi.py

@@ -0,0 +1,16 @@
+"""
+WSGI config for MAB18_site project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MAB18_site.settings")
+
+application = get_wsgi_application()

+ 49 - 0
README.md

@@ -0,0 +1,49 @@
+# MAB18
+
+MAB18
+
+## Dependencies
+
+``sudo apt-get install python3-dev python-virtualenv git mysql-server libmysqlclient-dev``
+
+## Getting Started
+
+Download and create a virtual environment (make sure that your environment can handle python3 
+
+```
+git clone https://github.com/l0tt/MAB18.git
+cd MAB18/MAB18_web/MAB18_site
+virtualenv venv
+
+source ./venv/bin/activate
+```
+
+Make sure you are using a virtual environment of some sort (e.g. `virtualenv` or
+`pyenv`).
+
+
+installing pip
+
+```
+sudo apt-get install pip
+pip install --upgrade pip
+pip install -r requirements.txt
+
+```
+
+You can override some settings using settings_local.py
+To run the server
+
+```
+
+./manage.py migrate
+./manage.py runserver
+```
+
+### Run
+
+To start the virtual environment and the server you can also use the bash script.
+
+```
+./start.sh
+```

BIN
jurysys/.DS_Store


+ 0 - 0
jurysys/__init__.py


+ 15 - 0
jurysys/admin.py

@@ -0,0 +1,15 @@
+from django.contrib import admin
+
+# Register your models here.
+from .models import Project, Description, Media, Link, Contact, Credit, Interaction, Vote, Video, Category
+
+admin.site.register(Project)
+admin.site.register(Description)
+admin.site.register(Media)
+admin.site.register(Link)
+admin.site.register(Credit)
+admin.site.register(Contact)
+admin.site.register(Interaction)
+admin.site.register(Vote)
+admin.site.register(Video)
+admin.site.register(Category)

+ 5 - 0
jurysys/apps.py

@@ -0,0 +1,5 @@
+from django.apps import AppConfig
+
+
+class jurysysConfig(AppConfig):
+    name = 'jurysys'

+ 362 - 0
jurysys/forms.py

@@ -0,0 +1,362 @@
+from django import forms
+
+from django.conf import settings
+from .models import Contact, Project, Credit, Description, Interaction, Link, Media, Video
+from django.contrib.auth.forms import UserCreationForm
+from django_file_form.forms import UploadedFileField, FileFormMixin, CharField, MultipleUploadedFileField
+from django.contrib.auth.models import User
+from crispy_forms.helper import FormHelper
+from crispy_forms.layout import Layout, Field, Fieldset, Div, Row, Column, HTML, ButtonHolder, Submit
+from crispy_forms.bootstrap import InlineField
+from django.forms.models import inlineformset_factory
+from django.forms import formset_factory
+from django import forms
+from captcha.fields import CaptchaField
+from django.core.files import File
+
+
+class VoteForm(forms.Form):
+    aestethic = forms.DecimalField(label='Aesthetic Qualities', max_value=10,  decimal_places =1,required=False)
+    innovation = forms.DecimalField(label='Innovative Elements',max_value=10, decimal_places =1,required=False)
+    technical = forms.DecimalField(label='Technical Qualities', max_value=10, decimal_places =1,required=False)
+    integration = forms.DecimalField(label='Integration of diffrent Components',
+                                     max_value=10, decimal_places=1,
+                                     help_text='e.g. architecture,display and content',required=False)
+    comment = forms.CharField(max_length=300, widget=forms.Textarea(), help_text = 'You can leave your written comment here!',required=False)
+
+    def clean(self):
+        cleaned_data = super(VoteForm, self).clean()
+        aestethic =cleaned_data.get('aestethic')
+        innovation = cleaned_data.get('innovation')
+        technical = cleaned_data.get('technical')
+        integration = cleaned_data.get('integration')
+        comment = cleaned_data.get('comment')
+
+    #initial can be specified with old value in db maybe
+
+
+class RegisterForm(forms.ModelForm):
+    terms = forms.BooleanField(required=True,  label= ('I accept and have read the <a href="https://www.mediaarchitecture.org/privacy-policy/">Privacy Policy.</a>'))
+
+    class Meta:
+        model = Contact
+        fields = ('first_name','last_name','adress','postcode','city','country',
+                  'email','phonenumber','alternate_phonenumber','skype_name','website', 'terms')
+
+class SignUpForm(UserCreationForm):
+    captcha = CaptchaField( generator='captcha.helpers.math_challenge' )
+
+    class Meta:
+        model = User
+        fields = ('username', 'password1', 'password2')
+
+
+class SubmissionForm(forms.ModelForm):
+
+    terms = forms.BooleanField(required=True,  label= ('I accept and have read the Terms of Participation.'))
+
+    class Meta:
+        model = Project
+        fields = ('title','country','city','year','owner','teaser_txt','header','category', 'description_txt', 'terms')
+
+    def __init__(self,*args, **kwargs):
+       super(SubmissionForm, self).__init__(*args, **kwargs)
+
+
+
+       self.fields['title'].help_text = ('<i>e.g. Sirius Tower</i>')
+       self.fields['header'].help_text = ('<i>e.g. Skyscraper with heavenly forms </i>')
+       self.fields['city'].help_text = ('<i>e.g. Beijing </i>')
+       self.fields['year'].help_text = ('<i>e.g. 2019</i>')
+       self.fields['owner'].help_text = ('<i>e.g. Cardinal Group</i>')
+       self.fields['category'].help_text = ('<i>Hold CTRL/CMD for multiple selection</i>')
+       self.fields['country'].help_text = ('<i>Hold CTRL/CMD for multiple selection</i>')
+       self.fields['teaser_txt'].help_text = ('<i>e.g. A vibrant new landmark has appeared in the city of Beijing: the luxury shopping center Sirius Tower. Both out- side and inside, the building radiates dy- namism and the kind of bright perfection thatthearchitectreferstoasthe Made in Heaven Effect. Everything about the building moves the eye</i>')
+       self.fields['description_txt'].help_text = ('<i>e.g. A wall of light measuring 3.000 square meters has turned the new head- quarters of the largest Chinese telecom- munications company CXN in Beijing into a spectacular attraction. The stunning building, designed by Domenico Torrone, was o cially opened in September 2008. Located near the freeway to Shanghai it can be seen from miles. The 100-meter- high and 40-meterwide sloping north facade is equipped with around 900 Op- ticron® flat-panel lamps. Because they can be controlled individually with elec- tronic control gear, they form the pixels of a gigantic monochrome display on which still and moving images can be created.</i>')
+
+       self.fields['description_txt'].max_length = 2000
+       self.fields['teaser_txt'].max_length = 750
+
+       self.helper = FormHelper()
+       #self.helper.field_class = 'form_border'
+       self.helper.form_tag = False
+       self.helper.layout = Layout(
+           Fieldset(
+               ('About your Project'),
+               'title',
+               'header',
+               'owner',
+               Div(
+                   Div('country', css_class='form-group col-md-6 mb-0'),
+                   Div('city', css_class='form-group col-md-3 mb-0'),
+                   Div('year', css_class='form-group col-md-3 mb-0'),
+                   css_class='form-row'),
+               'category',
+               'teaser_txt',
+               'description_txt',
+           )
+       )
+
+
+
+
+class CreditForm(forms.ModelForm):
+    class Meta:
+        model = Credit
+        fields = ('owner','architecture','concept','structural_engeneering','facade_design',
+                    'face_construction','kinetic_design','light_design','tecnical_layout',
+                    'display_content','light_hardware','lightning_software','project_coordination',
+                    'membrane_skin','interaction_design','sponsor','module_elems')
+
+    def __init__(self, *args, **kwargs):
+        super(CreditForm, self).__init__(*args, **kwargs)
+
+        self.fields['owner'].help_text = ('<i>e.g. Cardinal Group</i>')
+        self.fields['architecture'].help_text = ('<i>e.g. Domenico Torrone and Partners</i>')
+        self.fields['concept'].help_text = ('<i>e.g. Domenico Torrone and Partners</i>')
+        self.fields['structural_engeneering'].help_text = ('<i>e.g. Osap Inc., Hongkong</i>')
+        self.fields['facade_design'].help_text = ('<i>e.g. Mega Facades Inc, Beijing</i>')
+        self.fields['face_construction'].help_text = ('<i>e.g. None</i>')
+        self.fields['kinetic_design'].help_text = ('<i>e.g. Domenico Torrone and Osap, Hongkong</i>')
+        self.fields['light_design'].help_text = ('<i>e.g. Domenico Torrone and Osap, Hongkong</i>')
+        self.fields['tecnical_layout'].help_text = ('<i>e.g. Modul Labs, Berlin</i>')
+        self.fields['display_content'].help_text = ('<i>e.g. Domenico Torrone;reality check, Munich;</i>')
+        self.fields['light_hardware'].help_text = ('<i>e.g. Modul Labs, Berlin</i>')
+        self.fields['lightning_software'].help_text = ('<i>e.g. Dimma DMX by Eflux</i>')
+        self.fields['project_coordination'].help_text = ('<i>e.g. Domenico Torrone and Partners</i>')
+        self.fields['membrane_skin'].help_text = ('<i>e.g. none</i>')
+        self.fields['interaction_design'].help_text = ('<i>e.g. pixeldings, Toronto</i>')
+        self.fields['sponsor'].help_text = ('<i>e.g. none</i>')
+        self.fields['module_elems'].help_text = ('<i>e.g. Maxi PIX 12 by Eflux</i>')
+
+        self.fields['owner'].max_length = 100
+        self.fields['architecture'].max_length = 100
+        self.fields['concept'].max_length = 100
+        self.fields['structural_engeneering'].max_length = 100
+        self.fields['facade_design'].max_length = 100
+        self.fields['face_construction'].max_length = 100
+        self.fields['kinetic_design'].max_length = 100
+        self.fields['light_design'].max_length = 100
+        self.fields['tecnical_layout'].max_length = 100
+        self.fields['display_content'].max_length = 100
+        self.fields['light_hardware'].max_length = 100
+        self.fields['lightning_software'].max_length = 100
+        self.fields['project_coordination'].max_length = 100
+        self.fields['membrane_skin'].max_length = 100
+        self.fields['interaction_design'].max_length = 100
+        self.fields['sponsor'].max_length = 100
+        self.fields['module_elems'].max_length = 100
+#
+        self.helper = FormHelper()
+        self.helper.field_class = 'form_border'
+        self.helper.form_tag = False
+        self.helper.layout = Layout(
+            Fieldset(
+                ('Credits'),
+                 Div( Div('owner',css_class='form-group col-md-5 mb-0'),  Div('architecture',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
+                 Div( Div('concept',css_class='form-group col-md-5 mb-0'),  Div('structural_engeneering',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
+                 Div( Div('facade_design',css_class='form-group col-md-5 mb-0'), Div('face_construction',css_class='form-group col-md-5 mb-0'),  css_class='form-row'),
+                 Div( Div('kinetic_design',css_class='form-group col-md-5 mb-0'),  Div('light_design',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
+                 Div( Div('tecnical_layout',css_class='form-group col-md-5 mb-0'), Div('display_content',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
+                 Div( Div('light_hardware',css_class='form-group col-md-5 mb-0'),  Div('lightning_software',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
+                 Div( Div('project_coordination',css_class='form-group col-md-5 mb-0'),  Div('membrane_skin',css_class='form-group col-md-5 mb-0'), css_class='form-row'),
+                 Div( Div('interaction_design',css_class='form-group col-md-5 mb-0'),  Div('sponsor',css_class='form-group col-md-5 mb-0'),  css_class='form-row'),
+                Div( Div( 'module_elems',css_class='form-group col-md-5 mb-0'),  css_class='form-row')
+            ))
+
+
+
+
+class DescriptionForm(forms.ModelForm):
+    class Meta:
+        model = Description
+        fields =('facade','light_creation','resolution','pixel_distance','luminance','urban_situation','description_showreel')
+
+    def __init__(self, *args, **kwargs):
+        super(DescriptionForm, self).__init__(*args, **kwargs)
+        self.helper = FormHelper()
+        self.helper.form_tag = False
+        self.helper.layout = Layout(
+            Fieldset(
+                ('Concept Descriptions'),
+                Div(Div('des_concept', css_class='form-group col-md-12 mb-0'), css_class='form-row'),
+                Div(Div('des_scenario', css_class='form-group col-md-6 mb-0'),
+                    Div('des_approach', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
+                Div(Div('des_tech', css_class='form-group col-md-6 mb-0'),
+                    Div('des_visual', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
+               ))
+
+class InteractionForm(forms.ModelForm):
+    class Meta:
+        model = Interaction
+        fields = ('communtity','host','legal_form','issues','impact','tools','tools_used','next_steps')
+
+    def __init__(self, *args, **kwargs):
+        super(InteractionForm, self).__init__(*args, **kwargs)
+        self.helper = FormHelper()
+        self.helper.form_tag = False
+        self.helper.layout = Layout(
+            Fieldset(
+                ('Community Ascpects - not mandatory'),
+                Div(Div('communtity', css_class='form-group col-md-6 mb-0'),
+                    Div('issues', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
+                Div(Div('legal_form', css_class='form-group col-md-6 mb-0'),
+                    Div('host', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
+                Div(Div('impact', css_class='form-group col-md-6 mb-0'),
+                    Div('tools', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
+                Div(Div('tools_used', css_class='form-group col-md-6 mb-0'),
+                    Div('next_steps', css_class='form-group col-md-6 mb-0'), css_class='form-row'),
+            ))
+
+class LinkForm(forms.ModelForm):
+    class Meta:
+        model = Link
+        fields = ('link_description','link')
+
+    #def __init__(self, *args, **kwargs):
+    #    super(LinkForm, self).__init__(*args, **kwargs)
+    #    self.helper = FormHelper()
+    #    self.helper.field_class = 'form_border'
+    #    self.helper.form_tag = False
+    #    self.helper.layout = Layout(
+    #        Fieldset(
+    #            Div(Div('link_description', css_class='form-group col-md-5 mb-0'),
+    #            Div('link', css_class='form-group col-md-5 mb-0'),
+    #                css_class='form-row')
+    #        ))
+
+
+LinkFormSet = inlineformset_factory(Project,Link, fields = ['link_description','link'], form=LinkForm, extra=3, can_delete=False)
+
+
+class FormsetHelper(FormHelper):
+    def __init__(self,*args, **kwargs):
+        super(FormsetHelper, self).__init__(*args, **kwargs)
+        #self.form_method = 'post'
+        self.form_tag = False
+        #self.render_hidden_fields = True
+        #self.render_required_fields = True
+        self.layout = Layout(
+            Fieldset(
+                (''),
+                Div(
+                    Div('link_description', css_class='form-group col-md-4 mb-0'),
+                    Div('link', css_class='form-group col-md-6 mb-0')
+                    , css_class='form-row')
+            ))
+
+
+class MediaForm(FileFormMixin, forms.Form):
+    image = UploadedFileField()
+    name_for = CharField()
+    copyright = CharField()
+    #prefix = 'upload'
+
+
+    def __init__(self, *args, **kwargs):
+        super(MediaForm, self).__init__(*args, **kwargs)
+        self.helper = FormHelper()
+        self.helper.form_tag = False
+        self.fields['name_for'].label = 'Caption'
+        self.fields['copyright'].label = 'Copyright of'
+        self.fields['image'].label = 'Image or Video'
+        self.fields['image'].help_text = 'Please upload Images in PNG or JPEG format. Upload Video in MP4 format.'
+        self.layout = Layout(
+            Fieldset(
+                (''),
+                Div(
+                    Div('name_for', css_class='form-group col-md-6 mb-0'),
+                    Div('copyright', css_class='form-group col-md-4 mb-0')
+                    , css_class='form-row'),
+                Div(
+                    Div('image', css_class='form-group col-md-6 mb-0'),
+                    css_class='form-row'),
+            ))
+
+
+   #def is_valid(self):
+   #    super(MediaForm,self).is_valid()
+   #    return True
+
+
+   #def clean(self):
+   #    cleaned_data = super(MediaForm,self).clean()
+
+   #    #test for valid formats
+   #    #if cleaned_data['image']
+   #    #    raise ValidationError('Title field is required')
+   #    return cleaned_data
+
+
+   #def save(self, project_pk):
+   #    self.clean()
+   #    media = Media()
+   #    print('hallo')
+   #    media.project= project_pk
+   #    media.image=self.cleaned_data['image']
+   #    media.name_for=self.cleaned_data['name_for']
+   #    media.copyright =self.cleaned_data['copyright']
+   #    media.project= project_pk
+   #    media.save()
+
+   ##    self.delete_temporary_files()
+
+
+class MediaForm_test(FileFormMixin, forms.Form):
+    image = UploadedFileField()
+    name_for = CharField()
+    copyright = CharField()
+
+    def __init__(self, *args, **kwargs):
+        super(MediaForm_test, self).__init__(*args, **kwargs)
+        self.helper = FormHelper()
+        self.helper.form_tag = False
+
+
+class MediaForm1(FileFormMixin, forms.Form):
+    image = MultipleUploadedFileField()
+    name_for = CharField()
+    copyright = CharField()
+
+    def __init__(self, *args, **kwargs):
+        super(MediaForm1, self).__init__(*args, **kwargs)
+        self.helper = FormHelper()
+        self.helper.form_tag = False
+
+
+class MediaForm2(FileFormMixin,forms.Form):
+    image = UploadedFileField()
+    name_for = CharField()
+    copyright = CharField()
+
+    def __init__(self, *args, **kwargs):
+        super(MediaForm2, self).__init__(*args, **kwargs)
+        self.helper = FormHelper()
+        self.helper.form_tag = False
+
+
+MediaFormSet = formset_factory(MediaForm_test, extra=3)
+
+
+class MediaFormsetHelper(FormHelper):
+
+    def __init__(self,*args, **kwargs):
+        super(MediaFormsetHelper, self).__init__(*args, **kwargs)
+        self.form_tag = False
+        self.layout = Layout(
+            Fieldset(
+                (''),
+                Div(
+                    Div('name_for', css_class='form-group col-md-6 mb-0'),
+                    Div('copyright', css_class='form-group col-md-4 mb-0')
+                    , css_class='form-row'),
+                Div(
+                    Div('image', css_class='form-group col-md-6 mb-0'),
+                    css_class='form-row'),
+            ))
+
+
+class VideoForm(forms.ModelForm):
+    class Meta:
+        model = Video
+        fields = ('name_for','copyright','image')

+ 27 - 0
jurysys/jsonmigrate.py

@@ -0,0 +1,27 @@
+import json
+from django.db import migration
+
+def parseData(key, value, apps, schema_editor, project):
+    if "City" in key:
+        project(city = value)
+    elif "Country" in key:
+        project(country = value)
+    elif "title" in key:
+        project(title = value)
+    elif "Owner" in key:
+        project(owner = value)
+    elif "Year" in key:
+        project(year = value)
+    elif "teaser" in key:
+        project(teaser_txt = value)
+    elif "heading" in key:
+        project(header = value)
+    elif "description" in key:
+        project(description= value)
+    elif "cid" in key:
+        project(class_cid = value)
+        project(cid = 2)
+        # need 2 parse to int project(cid =value[1:])
+    elif "category" in key:
+        project(category = value)
+

+ 345 - 0
jurysys/models.py

@@ -0,0 +1,345 @@
+from django.db import models
+from django.contrib.auth.models import User
+from imagekit.models import ImageSpecField
+from imagekit.processors import ResizeToFill
+from imagekit.processors import ResizeToCover
+from imagekit.processors import Thumbnail
+from imagekit.processors import ResizeToCover
+from imagekit.models import ProcessedImageField
+from django.core.files.storage import FileSystemStorage
+from django_countries.fields import CountryField
+import os
+import uuid
+
+from django.db import models
+from django.dispatch import receiver
+from django.db.models.signals import post_delete, post_save
+
+
+
+from django.conf import settings
+import datetime
+import shutil
+
+class Credit(models.Model):
+    owner = models.CharField(verbose_name='Building or project owner',blank=True,max_length = 300)
+    architecture = models.CharField(verbose_name='Architecture',blank=True,max_length = 300)
+    concept = models.CharField(verbose_name='Project artist/ concept/ design/ planning',blank=True,max_length = 300)
+    structural_engeneering = models.CharField(verbose_name='Structural engineering',blank=True,max_length = 300)
+    facade_design = models.CharField(verbose_name='Facade design',blank=True,max_length = 300)
+    face_construction = models.CharField(verbose_name='Facade construction',blank=True,max_length = 300)
+    kinetic_design = models.CharField(verbose_name='Kinetic engineering',blank = True,max_length = 300)
+    light_design = models.CharField(verbose_name='Light design',blank = True,max_length = 300)
+    tecnical_layout = models.CharField(verbose_name='Technical layout light',blank = True,max_length = 300)
+    display_content = models.CharField(verbose_name='Display content/ visuals/ showreel',blank = True,max_length = 300)
+    light_hardware = models.CharField(verbose_name='Light hardware (LED hardware)',blank = True,max_length = 300)
+    lightning_software = models.CharField(verbose_name='Lighting control software',blank = True,max_length = 300)
+    project_coordination = models.CharField(verbose_name='Project co-ordination',blank = True,max_length = 300)
+    membrane_skin = models.CharField(verbose_name='Membrane skin',blank = True,max_length = 300)
+    interaction_design = models.CharField(verbose_name='Interaction design/ programming',blank = True,max_length = 300)
+    sponsor = models.CharField(verbose_name='Project sponsor/ support',blank = True,max_length = 500)
+    module_elems = models.CharField(verbose_name='Pixel or other basic module/ elements',blank = True,max_length = 300)
+
+    def __iter__(self):
+        for field in self._meta.fields:
+            if field.value_to_string(self) is not '-' and field.value_to_string(self) is not 'N/A':
+                yield (field.verbose_name, field.value_to_string(self))
+
+
+
+class Description(models.Model):
+    facade = models.TextField(verbose_name='Facade type and geometry (structure)',blank = True,max_length = 900)
+    light_creation = models.TextField(verbose_name='Kind of light creation',blank = True,max_length = 900)
+    resolution = models.TextField(verbose_name='Resolution and transmitting behaviour',blank = True,max_length = 900)
+    pixel_distance = models.CharField(verbose_name='Pixel distance',blank = True,max_length = 300)
+    luminance = models.TextField(verbose_name='Luminace',blank = True,max_length = 900)
+    urban_situation = models.TextField(verbose_name='Urban situation',blank = True,max_length = 900)
+    description_showreel = models.TextField(verbose_name='Description of showreel',blank = True,max_length = 900)
+
+    def __iter__(self):
+        for field in self._meta.fields:
+            if (field.value_to_string(self) is not '-') and (field.value_to_string(self) is not 'N/A'):
+                 yield (field.verbose_name, field.value_to_string(self))
+
+
+class Interaction(models.Model):
+    communtity = models.TextField(verbose_name='Community or communities involved',blank = True,max_length = 900)
+    host = models.CharField(verbose_name='Host organization',blank = True,max_length = 900)
+    legal_form = models.CharField(verbose_name='Legal form',blank=True,max_length = 900)
+    issues = models.TextField(verbose_name='Issues addressed',blank = True,max_length = 900)
+    impact = models.TextField(verbose_name='Impact',blank = True,max_length = 900)
+    tools = models.TextField(verbose_name='Tools developed',blank = True,max_length = 900)
+    tools_used = models.TextField(verbose_name='Tools used',blank = True,max_length = 900)
+    next_steps = models.TextField(verbose_name='Next steps',blank = True,max_length = 900)
+
+    def __iter__(self):
+        for field in self._meta.fields:
+            if (field.value_to_string(self) is not '-') and (field.value_to_string(self) is not 'N/A'):
+                 yield (field.verbose_name, field.value_to_string(self))
+
+
+
+
+class Contact(models.Model):
+    user = models.OneToOneField(User, on_delete=models.CASCADE,blank=True)
+    first_name = models.CharField(max_length = 100)
+    last_name = models.CharField(max_length = 100)
+    adress = models.CharField(blank=True,max_length = 100)
+    postcode = models.CharField(blank=True, max_length = 100)
+    city = models.CharField(blank=True,max_length = 100)
+    country = models.CharField(blank=True,max_length = 100)
+    email = models.EmailField(unique=True)
+    phonenumber = models.CharField(blank=True,max_length = 100)
+    alternate_phonenumber = models.CharField(blank = True,max_length = 100)
+    skype_name = models.CharField(blank=True,max_length = 300)
+    website = models.URLField(blank=True)
+
+    def __str__(self):
+        return self.first_name + ' ' + self.last_name
+
+    def __iter__(self):
+        for field in self._meta.fields:
+            yield (field.verbose_name, field.value_to_string(self))
+
+
+
+class Category(models.Model):
+    name = models.CharField(max_length=100)
+    short_name = models.CharField(max_length=10)
+
+    def __str__(self):
+        return self.name
+
+
+class Project(models.Model):
+    title = models.CharField('Project Title',max_length = 100)
+    country = CountryField(blank=True,multiple=True)
+    city = models.CharField(max_length = 100,null = True, blank=True)
+    year = models.IntegerField('Year of Completion',null = True, blank=True)
+    owner = models.CharField(max_length = 300,null = True,blank=True)
+    teaser_txt = models.TextField(blank = True, max_length = 1050)
+    header = models.CharField(max_length = 900,null = True)
+    description_txt = models.TextField(max_length = 3000,null = True)
+    cid = models.IntegerField(null = True,blank=True)
+    class_cid = models.CharField(null = True,max_length = 3, blank=True)
+    sumbitted = models.CharField(null = True,max_length = 10, blank=True)
+    date_submitted = models.DateField(auto_now_add=True)
+    terms = models.NullBooleanField()
+    edit = models.NullBooleanField()
+    public = models.NullBooleanField()
+    photo = models.CharField(max_length=500, null=True, blank=True)
+    videocts = models.CharField(max_length=500, null=True, blank=True)
+    category = models.ManyToManyField(Category, null=True)
+    credits = models.ForeignKey(Credit, null = True,on_delete=models.SET_NULL)
+    description = models.ForeignKey(Description,null = True, on_delete=models.SET_NULL)
+    contact = models.ForeignKey(Contact, null = True,on_delete=models.SET_NULL)
+    interaction = models.ForeignKey(Interaction, null = True,on_delete = models.SET_NULL)
+
+
+    def __str__(self):
+        return str(self.title)
+
+    def __iter__(self):
+        for field in self._meta.fields:
+            yield (field.verbose_name, field.value_to_string(self))
+
+
+@receiver(post_delete, sender=Project)
+def auto_delete_reverse_keys(sender, instance, **kwargs):
+    if instance.credits:
+        instance.credits.delete()
+    if instance.description:
+        instance.description.delete()
+    if instance.interaction:
+        instance.interaction.delete()
+
+
+
+class Link(models.Model):
+    project = models.ForeignKey(Project, on_delete=models.CASCADE)
+    link_description = models.CharField(null=True, blank=True, max_length = 2048)
+    link = models.URLField(null=True, blank=True, max_length = 2048)
+
+def project_path(instance, filename):
+    return 'jurysys/media/{0}/{1}'.format(instance.project.id, filename)
+
+
+class Media(models.Model):
+    fs = FileSystemStorage(location=settings.MEDIA_ROOT)
+
+    project = models.ForeignKey(Project, on_delete=models.CASCADE)
+    name_for = models.CharField(blank = True,max_length = 256)
+
+    filename = models.CharField(max_length = 100)
+    copyright = models.CharField(blank=True, max_length = 100)
+    image = models.ImageField(upload_to=project_path,storage=fs)
+    image_small = ProcessedImageField(upload_to=project_path,
+                                      processors=[ResizeToCover(640, 360)],
+                                      format='JPEG',
+                                      options={'quality': 90})
+    image_medium= ProcessedImageField(upload_to=project_path,
+                                     processors=[ResizeToCover(960, 540)],
+                                     format='JPEG',
+                                     options={'quality': 90})
+    image_big = ProcessedImageField(upload_to=project_path,
+                                     processors=[ResizeToCover(1920, 1080)],
+                                     format='JPEG',
+                                     options={'quality': 90})
+    image_norm = ProcessedImageField(upload_to=project_path,
+                                     processors=[Thumbnail(640, 360)],
+                                     format='JPEG',
+                                     options={'quality': 90},
+                                     blank = True,
+                                     null = True)
+
+    def filename(self):
+        return os.path.basename(self.image.name).split('.')[0]
+
+
+    # These two auto-delete files from filesystem when they are unneeded:
+    #
+@receiver(models.signals.post_delete, sender=Media)
+def auto_delete_file_on_delete(sender, instance, **kwargs):
+   """
+   Deletes file from filesystem
+   when corresponding `MediaFile` object is deleted.
+   """
+
+   if instance.image:
+       if os.path.isfile(instance.image.path):
+           os.remove(instance.image.path)
+#
+   if instance.image_small:
+       if os.path.isfile(instance.image_small.path):
+           os.remove(instance.image_small.path)
+#
+   if instance.image_medium:
+       if os.path.isfile(instance.image_medium.path):
+           os.remove(instance.image_medium.path)
+#
+   if instance.image_big:
+       if os.path.isfile(instance.image_big.path):
+           os.remove(instance.image_big.path)
+#
+   if instance.image_norm:
+       if os.path.isfile(instance.image_norm.path):
+           os.remove(instance.image_norm.path)
+#
+   #print(settings.MEDIA_ROOT+'/jurysys/media/{0}/{1}'.format(instance.project.id, instance.image.name))
+   #print(instance.project.id, instance.image.path)
+   #os.remove(settings.MEDIA_ROOT+'/jurysys/media/{0}/{1}_big'.format(instance.project.id, instance.filename))
+   #os.remove(settings.MEDIA_ROOT+'/jurysys/media/{0}/{1}.jpg'.format(instance.project.id, instance.image.name))
+
+
+
+#@receiver(models.signals.pre_save, sender=Media)
+#def auto_delete_file_on_change(sender, instance, **kwargs):
+#    """
+#    Deletes old file from filesystem
+#    when corresponding `MediaFile` object is updated
+#    with new file.
+#    """
+#    if not instance.pk:
+#        return False
+#
+#    try:
+#        old_file = Media.objects.get(pk=instance.pk).image
+#    except Media.DoesNotExist:
+#        return False
+#
+#    new_file = instance.image
+#    if not old_file == new_file:
+#        if os.path.isfile(old_file.path):
+#            os.remove(old_file.path)
+#
+#    try:
+#        old_file = Media.objects.get(pk=instance.pk).image_small
+#    except Media.DoesNotExist:
+#        return False
+#
+#    new_file = instance.image_small
+#    if not old_file == new_file:
+#        if os.path.isfile(old_file.path):
+#            os.remove(old_file.path)
+#
+#    try:
+#        old_file = Media.objects.get(pk=instance.pk).image_medium
+#    except Media.DoesNotExist:
+#        return False
+#
+#    new_file = instance.image_medium
+#    if not old_file == new_file:
+#        if os.path.isfile(old_file.path):
+#            os.remove(old_file.path)
+#
+#    try:
+#        old_file = Media.objects.get(pk=instance.pk).image_big
+#    except Media.DoesNotExist:
+#        return False
+#
+#    new_file = instance.image_big
+#    if not old_file == new_file:
+#        if os.path.isfile(old_file.path):
+#            os.remove(old_file.path)
+#
+#    try:
+#        old_file = Media.objects.get(pk=instance.pk).image_norm
+#    except Media.DoesNotExist:
+#        return False
+#
+#    new_file = instance.image_norm
+#    if not old_file == new_file:
+#        if os.path.isfile(old_file.path):
+#            os.remove(old_file.path)
+#
+
+
+class Video(models.Model):
+    project = models.ForeignKey(Project, on_delete=models.CASCADE)
+    name_for = models.CharField(blank=True, max_length=256)
+
+    filename = models.CharField(max_length=100)
+    copyright = models.CharField(blank=True, max_length=100)
+    image = models.FileField(upload_to=project_path)
+
+@receiver(models.signals.post_delete, sender=Video)
+def auto_delete_video_on_delete(sender, instance, **kwargs):
+    """
+    Deletes file from filesystem
+    when corresponding `MediaFile` object is deleted.
+    """
+    if instance.image:
+        if os.path.isfile(instance.image.path):
+            os.remove(instance.image.path)
+
+#@receiver(models.signals.pre_save, sender=Video)
+#def auto_delete_video_on_change(sender, instance, **kwargs):
+#    """
+#    Deletes old file from filesystem
+#    when corresponding `MediaFile` object is updated
+#    with new file.
+#    """
+#    if not instance.pk:
+#        return False
+#
+#    try:
+#        old_file = Video.objects.get(pk=instance.pk).image
+#    except Media.DoesNotExist:
+#        return False
+#
+#    new_file = instance.image
+#    if not old_file == new_file:
+#        if os.path.isfile(old_file.path):
+#            os.remove(old_file.path)
+
+
+
+class Vote(models.Model):
+    project = models.ForeignKey(Project, on_delete=models.CASCADE)
+    juryMember = models.ForeignKey(User, on_delete = models.CASCADE)
+    vote = models.PositiveSmallIntegerField(default=0)
+    comment = models.CharField(blank=True, max_length =300)
+
+    def __iter__(self):
+        for field in self._meta.fields:
+            yield (field.verbose_name, field.value_to_string(self))

BIN
jurysys/static/MAB2018logo.png


BIN
jurysys/static/MAB_logo.png


BIN
jurysys/static/MAB_logo.png~


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 5 - 0
jurysys/static/bootstrap.min.js


BIN
jurysys/static/code.jpg


BIN
jurysys/static/css/.DS_Store


BIN
jurysys/static/css/404.gif


BIN
jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.eot


+ 78 - 0
jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.svg

@@ -0,0 +1,78 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="bariol_iconsbasic" horiz-adv-x="335" >
+<font-face units-per-em="2048" ascent="1536" descent="-512" />
+<missing-glyph horiz-adv-x="500" />
+<glyph unicode=" " />
+<glyph unicode="A" horiz-adv-x="2568" d="M147 375q0 26 13 56t46 67t82.5 71t130.5 68t181 59q0 141 53 250.5t147 178.5t217 104t269 35q145 0 267.5 -35t216 -104t146 -178.5t52.5 -250.5q125 -30 218 -74t141.5 -89.5t71 -85t22.5 -72.5q0 -35 -16 -71.5t-55 -76.5t-97.5 -76t-150 -69t-205.5 -57t-271 -38 t-340 -14t-340.5 14t-272 38t-206 57t-150.5 69t-98 76t-55.5 76.5t-16.5 71.5zM403 375q0 -38 22 -61t60 -23t60 23t22 61t-22 61t-60 23t-60 -23t-22 -61zM784 676q0 -100 120 -138t382 -38q129 0 218 8t155 27.5t97.5 54.5t31.5 86q0 191 -129.5 298t-372.5 107 q-245 0 -373.5 -106.5t-128.5 -298.5zM1124 723q0 84 37 131v61q-12 4 -12 25q0 31 31 31q34 0 34 -31q0 -19 -12 -25v-30q32 14 84 14t84 -14v30q-12 6 -12 25q0 31 35 31q30 0 30 -31q0 -21 -12 -25v-61q37 -47 37 -131q0 -85 -40 -131.5t-122 -46.5t-122 46.5t-40 131.5z M1159 700q0 -14 15 -20l43 -21q12 -6 16 -6q9 0 15.5 7t6.5 16q0 14 -12 20l-47 23q-8 4 -14 4q-8 0 -15.5 -6.5t-7.5 -16.5zM1204 207q0 -38 22 -61t60 -23t60 23t22 61t-22 61t-60 23t-60 -23t-22 -61zM1315 676q0 -9 6.5 -16t15.5 -7q5 0 17 6l43 21q14 6 14 20 q0 10 -7 16.5t-15 6.5q-7 0 -15 -4l-47 -23q-12 -6 -12 -20zM1999 375q0 -38 22 -61t60 -23t60 23t22 61t-22 61t-60 23t-60 -23t-22 -61z" />
+<glyph unicode="B" horiz-adv-x="1949" d="M92 311q0 34 24 58t58 24q30 127 106 202t203 75h342q39 0 67 -28t28 -67q0 -53 -21 -92l-51 -90h280q35 0 57.5 17.5t22.5 50.5v254q0 49 39 71l-33 58q-6 12 -6 26q0 21 16 38.5t40 17.5q31 0 47 -29l237 -438q42 10 78 10q109 0 170.5 -59.5t61.5 -173.5 q0 -115 -61.5 -175.5t-170.5 -60.5q-110 0 -171.5 60.5t-61.5 175.5q0 111 61 172l-80 145v-92q0 -97 -71.5 -165.5t-169.5 -68.5h-385q-1 -111 -62.5 -169t-167.5 -58q-109 0 -170.5 58t-62.5 169h-111q-34 0 -58 24t-24 60zM319 791v38q0 37 25 63t62 26h475q36 0 61 -26 t25 -63v-38q0 -34 -25 -60t-61 -26h-475q-36 0 -61.5 26t-25.5 60zM424 227q2 -41 26 -63.5t68 -22.5q40 0 63.5 22.5t26.5 63.5h-184zM1151 985v64q0 9 7 15.5t16 6.5h106l141 64q12 6 21 6q14 0 23.5 -9.5t9.5 -23.5v-182q0 -14 -9.5 -23.5t-23.5 -9.5q-9 0 -21 6l-141 64 h-106q-9 0 -16 6.5t-7 15.5zM1532 236q0 -46 25 -70.5t69 -24.5q42 0 67 24.5t25 70.5q0 45 -25 69.5t-67 24.5q-43 0 -68.5 -24.5t-25.5 -69.5z" />
+<glyph unicode="C" horiz-adv-x="2609" d="M129 918q0 63 64 63h73v195q0 26 14.5 40.5t36.5 14.5h101q77 0 121 -47t57 -125h63q60 229 291.5 343t605.5 114q217 0 385.5 -37.5t290 -114t185 -198.5t63.5 -285q0 -445 -471 -578l-190 -254q-40 -49 -101 -49h-544q-29 0 -48.5 21.5t-19.5 52.5v229 q-205 60 -332 199.5t-137 347.5h-444q-64 0 -64 68zM266 653v121h330q-13 -81 -57 -130.5t-121 -49.5h-101q-21 0 -36 17.5t-15 41.5zM1243 168q0 -53 49 -53q51 0 51 53t-51 53q-24 0 -36.5 -14.5t-12.5 -38.5zM1407 166q0 -51 51 -51q24 0 36.5 14t12.5 37q0 55 -49 55 q-51 0 -51 -55zM1569 168q0 -53 49 -53t49 53t-49 53t-49 -53z" />
+<glyph unicode="D" horiz-adv-x="2353" d="M115 254v35q0 25 17.5 43t43.5 18q16 128 58.5 234t101 181t136 132.5t158 93t172.5 57.5t174 30.5t169 8.5q236 0 381 -90.5t186 -246.5q112 -11 190 -35t139 -69.5t94 -118t42 -177.5q26 0 43.5 -18t17.5 -43v-35q0 -25 -17.5 -42t-43.5 -17h-139q-9 -94 -69.5 -144.5 t-160.5 -50.5q-99 0 -158 50t-71 145h-780q-9 -94 -70.5 -144.5t-161.5 -50.5q-97 0 -156.5 50t-72.5 145h-162q-26 0 -43.5 17t-17.5 42zM475 238q0 -46 24.5 -70.5t67.5 -24.5q45 0 70 24t25 71q0 44 -25.5 69t-69.5 25q-43 0 -67.5 -25t-24.5 -69zM625 793 q0 -22 14.5 -37t36.5 -15h383q13 0 22 9.5t9 21.5v182q0 14 -9 23.5t-22 9.5q-131 0 -250 -38t-170 -115q-14 -20 -14 -41zM1186 772q0 -12 10 -21.5t23 -9.5h325q13 0 23 9.5t10 21.5q0 14 -8 25q-43 99 -137 144.5t-213 45.5q-13 0 -23 -9.5t-10 -23.5v-182zM1716 238 q0 -46 25 -70.5t67 -24.5q44 0 68.5 24.5t24.5 70.5q0 44 -25 69t-68 25q-42 0 -67 -25t-25 -69z" />
+<glyph unicode="E" horiz-adv-x="1855" d="M92 942q0 211 113.5 323.5t316.5 112.5q159 0 263.5 -68t142.5 -200q38 132 142.5 200t262.5 68q203 0 316.5 -112.5t113.5 -323.5q0 -224 -121 -336l-649 -606q-27 -27 -65 -27q-39 0 -66 27l-649 606q-121 112 -121 336z" />
+<glyph unicode="F" horiz-adv-x="1732" d="M102 989q0 267 113 407t324 140h655q210 0 323 -140t113 -407q0 -265 -112.5 -404t-323.5 -139h-303l-246 -438q-18 -33 -51 -33q-23 0 -40 17.5t-17 40.5v413q-209 0 -322 139t-113 404zM653 725q0 -19 13 -32t32 -13q11 0 23 6l145 84l146 -84q12 -6 22 -6q19 0 32 13 t13 32q0 25 -22 39l-109 61l109 62q22 14 22 39q0 19 -13 32t-32 13q-10 0 -22 -6l-146 -84l-145 84q-12 6 -23 6q-19 0 -32 -13t-13 -32q0 -25 23 -39l108 -62l-108 -61q-23 -14 -23 -39zM727 1206q0 -88 66 -125v-28q0 -70 73 -70q76 0 76 70v28q62 37 62 125 q0 68 -36.5 104t-101.5 36q-64 0 -101.5 -36t-37.5 -104z" />
+<glyph unicode="G" horiz-adv-x="1376" d="M63 1165q0 97 91.5 181t193.5 84q108 0 180 -99q9 -12 9 -22q0 -21 -19 -37l-336 -271q-13 -10 -26 -10q-19 0 -31 15q-62 77 -62 159zM115 55q0 36 22 58l146 147q-119 135 -119 369q0 258 139 396t385 138t385 -138t139 -396q0 -235 -118 -369l145 -147q23 -23 23 -58 q0 -34 -24 -58t-58 -24q-35 0 -60 25l-157 162q-108 -58 -275 -58q-166 0 -274 58l-158 -162q-25 -25 -59 -25t-58 24t-24 58zM633 602q0 -23 16 -39t39 -16h287q23 0 39 16t16 39t-16 39t-39 16h-232v275q0 23 -16 39t-39 16t-39 -16t-16 -39v-330zM840 1309q0 11 8 22 q72 99 180 99q102 0 193.5 -84t91.5 -181q0 -82 -62 -159q-12 -15 -30 -15q-14 0 -27 10l-336 271q-18 15 -18 37z" />
+<glyph unicode="H" horiz-adv-x="1280" d="M127 1712q0 28 20 48t48 20h172v39q0 13 10.5 23.5t23.5 10.5h217q14 0 24.5 -10.5t10.5 -23.5v-39h172q28 0 48 -20t20 -48t-20 -47.5t-48 -19.5h-630q-28 0 -48 19.5t-20 47.5zM131 1503q-1 39 24.5 67.5t59.5 28.5h586q34 0 59 -28.5t25 -67.5v-39q35 27 80 27 q182 0 182 -303q0 -90 -17.5 -153.5t-47.5 -95t-61.5 -45t-68.5 -13.5q-27 0 -55.5 9t-40.5 21q-16 -141 -111 -211.5t-235 -70.5q-150 0 -244.5 81t-103.5 244zM147 80l52 338q3 23 21 41t46 18h15q-21 21 -21 49t20 48t48 20h364q28 0 48 -20t20 -48t-21 -49h15 q28 0 46 -18t21 -41l51 -338q4 -30 -16.5 -55t-48.5 -25h-594q-28 0 -49 25q-18 21 -18 46q0 4 1 9zM254 1006q0 -12 8.5 -20.5t20.5 -8.5h34q12 0 20.5 8.5t8.5 20.5t-8.5 20t-20.5 8h-34q-12 0 -20.5 -8t-8.5 -20zM254 1139q0 -12 8.5 -20.5t20.5 -8.5h34q12 0 20.5 8.5 t8.5 20.5t-8.5 20t-20.5 8h-34q-12 0 -20.5 -8t-8.5 -20zM254 1272q0 -12 8.5 -20.5t20.5 -8.5h34q12 0 20.5 8.5t8.5 20.5t-8.5 20t-20.5 8h-34q-12 0 -20.5 -8t-8.5 -20zM254 1405q0 -12 8.5 -20.5t20.5 -8.5h34q12 0 20.5 8.5t8.5 20.5t-8.5 20.5t-20.5 8.5h-34 q-12 0 -20.5 -8.5t-8.5 -20.5zM862 1063q30 -49 90 -49q46 0 67 42t21 132q0 88 -21 130t-67 42q-43 0 -73 -37z" />
+<glyph unicode="I" horiz-adv-x="1118" d="M70 911q0 36 24 61t60 25h30v25q0 122 71 194t210 89v53h-33q-13 0 -22 8t-9 20v259q0 11 9 18.5t22 7.5h213q13 0 22 -7.5t9 -18.5v-259q0 -12 -9 -20t-22 -8h-33v-53q139 -17 210 -89t71 -194v-25h31q36 0 60 -25t24 -61q0 -34 -24 -59t-60 -25h-31v-571 q0 -136 -90.5 -209.5t-263.5 -73.5t-264 73.5t-91 209.5v571h-30q-36 0 -60 25t-24 59zM588 1538q0 -33 30 -33q31 0 31 33t-31 33q-30 0 -30 -33zM702 1538q0 33 31 33t31 -33t-31 -33t-31 33zM791 1446q0 33 30 33q31 0 31 -33t-31 -33q-30 0 -30 33zM791 1538q0 33 30 33 q31 0 31 -33t-31 -33q-30 0 -30 33zM791 1630q0 33 30 33q31 0 31 -33t-31 -33q-30 0 -30 33zM879 1354q0 32 30 32q31 0 31 -32q0 -33 -31 -33q-30 0 -30 33zM879 1446q0 33 30 33q31 0 31 -33t-31 -33q-30 0 -30 33zM879 1538q0 33 30 33q31 0 31 -33t-31 -33 q-30 0 -30 33zM879 1630q0 33 30 33q31 0 31 -33t-31 -33q-30 0 -30 33zM879 1722q0 33 30 33q31 0 31 -33q0 -32 -31 -32q-30 0 -30 32zM967 1268q0 32 30 32q31 0 31 -32q0 -33 -31 -33q-30 0 -30 33zM967 1354q0 32 30 32q31 0 31 -32q0 -33 -31 -33q-30 0 -30 33z M967 1446q0 33 30 33q31 0 31 -33t-31 -33q-30 0 -30 33zM967 1538q0 33 30 33q31 0 31 -33t-31 -33q-30 0 -30 33zM967 1630q0 33 30 33q31 0 31 -33t-31 -33q-30 0 -30 33zM967 1722q0 33 30 33q31 0 31 -33q0 -32 -31 -32q-30 0 -30 32zM967 1808q0 33 30 33q31 0 31 -33 q0 -32 -31 -32q-30 0 -30 32z" />
+<glyph unicode="J" horiz-adv-x="2107" d="M164 193v677q0 82 57 139.5t137 57.5h129v41q0 28 20 48t48 20t48 -20t20 -48v-41h3h3h3h3h3h3h3h3h3h3h3h3h3h3h3h3h3h3h3h2h3h3h3h9q0 94 40 158.5t112 64.5h403q53 0 89 -36.5t49.5 -84.5t13.5 -102h342q80 0 137.5 -58t57.5 -139v-677q0 -79 -57.5 -136t-137.5 -57 h-1391q-80 0 -137 57t-57 136zM664 532q0 -190 103.5 -291.5t285.5 -101.5q184 0 287.5 101.5t103.5 291.5q0 194 -103.5 296t-287.5 102q-183 0 -286 -102t-103 -296zM852 530q0 101 53 154t148 53q97 0 149.5 -52.5t52.5 -154.5q0 -99 -53 -152.5t-149 -53.5 q-95 0 -148 53.5t-53 152.5z" />
+<glyph unicode="K" horiz-adv-x="1232" d="M78 600h1077q-5 -301 -138 -463t-401 -162q-270 0 -401.5 161.5t-136.5 463.5zM78 651q6 337 170 498q-33 76 -33 192q0 198 106 305t295 107t295.5 -107t106.5 -305q0 -116 -33 -192q164 -164 170 -498h-1077zM367 1341q5 -119 71 -186.5t178 -67.5t178.5 67.5 t71.5 186.5q-97 0 -163 48t-87 145q-19 -97 -85.5 -145t-163.5 -48zM373 936q0 -14 16.5 -26.5t46.5 -12.5q42 0 80 22t62 58q13 -21 38 -21q26 0 39 21q24 -36 62 -58t80 -22q30 0 46.5 12.5t16.5 26.5q0 36 -39.5 64t-85.5 28q-27 0 -73 -16q-6 35 -46 35q-39 0 -45 -35 q-46 16 -73 16q-46 0 -85.5 -28t-39.5 -64zM461 1288q0 33 33 33q32 0 32 -33t-32 -33q-33 0 -33 33zM707 1288q0 33 32 33q33 0 33 -33t-33 -33q-32 0 -32 33z" />
+<glyph unicode="L" horiz-adv-x="2115" d="M90 195v43q0 22 15.5 37.5t37.5 15.5h731q5 -17 21 -30t39 -13h248q21 0 37.5 13.5t21.5 29.5h727q22 0 37.5 -15.5t15.5 -37.5v-43q0 -80 -56.5 -137.5t-137.5 -57.5h-1540q-81 0 -139 57.5t-58 137.5zM246 539v690q0 82 55 138t137 56h1237q82 0 138.5 -56t56.5 -138 v-690q0 -79 -57 -136t-138 -57h-1237q-81 0 -136.5 57t-55.5 136zM426 547q0 -21 20 -21h1221q9 0 15 6t6 15v674q0 20 -21 20h-1221q-20 0 -20 -20v-674zM1014 1333q0 -45 43 -45t43 45t-43 45t-43 -45z" />
+<glyph unicode="M" horiz-adv-x="1714" d="M94 158v43q0 19 13 32t32 13h1184q19 0 32 -13t13 -32v-43q0 -66 -47 -112t-113 -46h-954q-66 0 -113 46t-47 112zM231 758v321q0 60 42 102t102 42h710q57 0 98.5 -38t45.5 -95q50 16 98 16q145 0 219 -83t74 -237q0 -144 -75.5 -232.5t-217.5 -88.5q-85 0 -149 31 q-106 -217 -445 -217q-254 0 -378 118t-124 361zM1223 668q39 -39 104 -39q66 0 94.5 36t28.5 121q0 84 -28.5 121t-94.5 37q-57 0 -98 -41v-145q0 -52 -6 -90z" />
+<glyph unicode="N" horiz-adv-x="2193" d="M117 383q0 105 88 133q-88 28 -88 133q0 67 36 105.5t105 38.5q75 0 117 -45l86 -95h395q46 286 297 383q52 -233 309 -233q258 0 310 233q305 -119 305 -506q0 -283 -160 -420t-455 -137q-524 0 -600 406h-401l-86 -94q-42 -45 -117 -45q-69 0 -105 38t-36 105z" />
+<glyph unicode="O" horiz-adv-x="1613" d="M100 690q0 350 187 535.5t522 185.5q333 0 518.5 -185.5t185.5 -535.5q0 -349 -185.5 -534t-518.5 -185q-335 0 -522 185t-187 534zM528 690q0 -137 74 -208.5t207 -71.5q130 0 204 71.5t74 208.5q0 138 -74 210.5t-204 72.5q-133 0 -207 -72t-74 -211zM664 610 q0 75 65 97q-47 23 -47 75q0 51 33.5 78t93.5 27t93.5 -27t33.5 -78q0 -52 -47 -75q65 -22 65 -97q0 -59 -37.5 -90t-107.5 -31t-107.5 31t-37.5 90zM737 610q0 -57 72 -57t72 57q0 29 -19 44.5t-53 15.5t-53 -15.5t-19 -44.5zM754 782q0 -45 55 -45t55 45q0 43 -55 43 t-55 -43z" />
+<glyph unicode="P" horiz-adv-x="1593" d="M109 268q0 32 12 62l311 774l-108 164q-60 0 -92.5 32t-32.5 93q0 30 10 53l-37 55q-10 15 -10 37q0 27 20.5 49.5t50.5 22.5q35 0 58 -33l39 -57q114 -6 114 -127q0 -31 -2 -43l54 -84l163 407q18 41 54 66.5t84 25.5t83.5 -25t53.5 -67l539 -1343q12 -30 12 -62 q0 -62 -42.5 -105.5t-105.5 -43.5h-133v-17q0 -54 -37.5 -91.5t-91.5 -37.5t-91.5 37.5t-37.5 91.5v17h-299v-17q0 -54 -37.5 -91.5t-91.5 -37.5t-91.5 37.5t-37.5 91.5v17h-133q-62 0 -104.5 43.5t-42.5 105.5zM516 793q0 -42 27.5 -70.5t68.5 -28.5h88l-143 215l-35 -84 q-6 -18 -6 -32zM621 1071l247 -377h111q38 0 66 29t28 70q0 14 -6 32l-182 467q-10 26 -33.5 44t-54.5 18t-54.5 -18t-33.5 -44z" />
+<glyph unicode="Q" horiz-adv-x="1046" d="M86 338q0 190 129 283q-31 71 -31 151q0 127 66.5 202.5t191.5 96.5v547h-16q-11 0 -19 7t-8 17h-12q-12 0 -20.5 8.5t-8.5 20.5q0 11 8.5 19t20.5 8h12v53h-12q-12 0 -20.5 8t-8.5 19q0 12 8.5 20t20.5 8h12v52h-12q-12 0 -20.5 8t-8.5 20q0 11 8.5 19t20.5 8h12v14 q0 11 7.5 18t19.5 7h27q18 47 71 47q54 0 72 -47h27q12 0 19 -7t7 -18v-14h13q11 0 19.5 -8.5t8.5 -18.5q0 -12 -8.5 -20t-19.5 -8h-13v-52h13q11 0 19.5 -8t8.5 -20q0 -10 -8.5 -18.5t-19.5 -8.5h-13v-53h13q11 0 19.5 -8.5t8.5 -18.5q0 -12 -8.5 -20.5t-19.5 -8.5h-13 q0 -10 -7.5 -17t-18.5 -7h-17v-547q125 -21 191.5 -96.5t66.5 -202.5q0 -83 -30 -151q129 -93 129 -283q0 -178 -116 -272.5t-323 -94.5t-322.5 94.5t-115.5 272.5zM373 229q0 -9 7.5 -14.5t16.5 -5.5h254q9 0 16 5.5t7 14.5v39q0 10 -7 16.5t-16 6.5h-254q-9 0 -16.5 -6.5 t-7.5 -16.5v-39zM379 649q0 -69 38 -107t107 -38t107.5 38t38.5 107t-38.5 107.5t-107.5 38.5t-107 -38.5t-38 -107.5zM426 649q0 99 98 99q99 0 99 -99q0 -98 -99 -98q-98 0 -98 98z" />
+<glyph unicode="R" horiz-adv-x="1806" d="M82 145q0 211 54.5 410.5t127.5 355.5q51 107 121.5 152t187.5 45q53 0 98.5 -15t73.5 -33t70 -33t88 -15t88 15t70 33t73.5 33t98.5 15q117 0 187.5 -45t121.5 -152q73 -156 127.5 -355.5t54.5 -410.5q0 -79 -42.5 -121t-118.5 -42q-65 0 -127 38q-44 27 -118 95 t-126 122l-53 54h-471q-22 -24 -58 -60.5t-115.5 -110t-123.5 -100.5q-62 -38 -127 -38q-76 0 -119 42t-43 121zM377 657q0 -86 46.5 -134t131.5 -48q86 0 134 48t48 134q0 87 -48 136t-134 49q-84 0 -131 -49t-47 -136zM436 657q0 123 119 123q121 0 121 -123 q0 -120 -121 -120q-119 0 -119 120zM1085 657q0 -17 16 -32t32 -15q15 0 31 15t16 32t-16 32.5t-31 15.5t-31.5 -15.5t-16.5 -32.5zM1204 539q0 -17 16 -32t31 -15t31 15t16 32t-16 32t-31 15t-31 -15t-16 -32zM1204 778q0 -17 16 -32t31 -15t31 15t16 32t-16 32t-31 15 t-31 -15t-16 -32zM1325 657q0 -17 16 -32t31 -15t31 15t16 32t-16 32.5t-31 15.5t-31 -15.5t-16 -32.5z" />
+<glyph unicode="S" horiz-adv-x="1310" d="M123 195v1239q0 80 57.5 137t136.5 57h676q80 0 137.5 -57.5t57.5 -136.5v-1239q0 -79 -58 -137t-137 -58h-676q-79 0 -136.5 57.5t-57.5 137.5zM309 297q0 -66 64 -66q63 0 63 66q0 63 -63 63q-64 0 -64 -63zM309 582q0 -66 64 -66q63 0 63 66q0 63 -63 63 q-64 0 -64 -63zM309 866q0 -65 64 -65q63 0 63 65q0 64 -63 64q-64 0 -64 -64zM309 1251q0 -23 16.5 -39t39.5 -16h581q23 0 39 16t16 39v90q0 23 -16 39.5t-39 16.5h-581q-23 0 -39.5 -16.5t-16.5 -39.5v-90zM592 297q0 -66 63 -66q64 0 64 66q0 63 -64 63q-63 0 -63 -63z M592 582q0 -66 63 -66q64 0 64 66q0 63 -64 63q-63 0 -63 -63zM592 866q0 -65 63 -65q64 0 64 65q0 64 -64 64q-63 0 -63 -64zM874 297q0 -66 64 -66q63 0 63 66q0 63 -63 63q-64 0 -64 -63zM874 582q0 -66 64 -66q63 0 63 66q0 63 -63 63q-64 0 -64 -63zM874 866 q0 -65 64 -65q63 0 63 65q0 64 -63 64q-64 0 -64 -64z" />
+<glyph unicode="T" horiz-adv-x="1474" d="M86 1292q0 46 33.5 79.5t79.5 33.5h1077q46 0 79.5 -33.5t33.5 -79.5t-33.5 -79t-79.5 -33h-8l-94 -1088q-3 -38 -28.5 -65t-62.5 -27h-692q-37 0 -62 27t-28 65l-94 1088h-8q-46 0 -79.5 33t-33.5 79zM205 1458q0 58 41.5 99.5t99.5 41.5h215v29q0 29 20.5 49.5 t49.5 20.5h213q29 0 49 -20.5t20 -49.5v-29h215q59 0 100.5 -41.5t41.5 -99.5h-1065zM426 1030l41 -760q2 -21 15 -35t34 -14q22 0 36.5 15.5t12.5 37.5l-41 760q-2 21 -15 35t-34 14q-23 1 -37 -15q-13 -14 -12 -33v-5zM688 270q0 -20 14.5 -34.5t34.5 -14.5t34.5 14.5 t14.5 34.5v764q0 20 -14.5 34.5t-34.5 14.5t-34.5 -14.5t-14.5 -34.5v-764zM909 274v-5q1 -19 13 -33q14 -16 36 -15q21 0 34.5 14t15.5 35l41 760q1 22 -13.5 37.5t-36.5 15.5q-21 0 -34 -14t-15 -35z" />
+<glyph unicode="U" horiz-adv-x="1331" d="M104 367v522q0 44 32.5 76t76.5 32t76.5 -32t32.5 -76v-29l26 12v160q0 45 32 77t75 32q45 0 76.5 -31.5t31.5 -77.5v-129h25v600q0 45 31.5 77t76.5 32q43 0 75 -32.5t32 -76.5v-631l26 -12v70q0 44 32 76t75 32q45 0 76.5 -31.5t31.5 -76.5v-115h74q43 0 75 -32.5 t32 -77.5q0 -29 -13 -58l-170 -379q-40 -90 -95.5 -150t-149.5 -97t-222 -37q-230 0 -350.5 99.5t-120.5 283.5z" />
+<glyph unicode="V" horiz-adv-x="1923" d="M96 1012q0 47 34.5 79.5t98.5 47.5q14 225 289 225q139 0 215 -61.5t76 -188.5q0 -60 -16 -96q48 -21 100 -82q28 46 68 76q-50 73 -50 194q0 326 383 326q184 0 284.5 -80t100.5 -246v-28q148 -39 148 -136q0 -163 -410 -163q-138 0 -203.5 6.5t-115.5 25.5 q-53 -43 -85 -107.5t-32 -137.5q0 -37 6 -64q161 -106 215 -317h389q12 0 22.5 -11t10.5 -24q0 -6 -2 -12l-49 -179q-17 -59 -70 -59h-850q-55 0 -71 59l-50 179q-2 6 -2 12q0 14 10 24.5t25 10.5h414q-71 201 -283 223q-31 -48 -76.5 -72t-130.5 -24q-63 0 -98 12 q-176 10 -176 141q0 72 51 111q39 127 223 127q160 0 207 -94q60 0 115 -21q0 37 6 64q-28 106 -127 145q-63 -31 -295 -31q-299 0 -299 146z" />
+<glyph unicode="W" horiz-adv-x="1179" d="M115 1198q0 101 67 171.5t166 70.5v18q0 70 38.5 108t105.5 38t104 -38t37 -108v-18h55l291 155q18 9 29 9q25 0 41 -16.5t16 -41.5v-321q0 -23 -16.5 -39.5t-40.5 -16.5q-15 0 -25 7l-297 149h-104v-98q93 -26 153 -107.5t60 -183.5v-823q0 -46 -33.5 -79.5t-79.5 -33.5 h-381q-46 0 -79.5 33.5t-33.5 79.5v823q0 103 59.5 184t153.5 107v98h-53q-56 0 -85.5 -34.5t-29.5 -92.5q0 -25 -17 -42t-42 -17t-42 17t-17 42zM442 1458q0 -51 50 -51q49 0 49 51t-49 51q-50 0 -50 -51z" />
+<glyph unicode="X" horiz-adv-x="1394" d="M121 590q0 37 26.5 63.5t63.5 26.5h33v735q0 28 20 48t49 20q28 0 48 -20t20 -48v-57h635v57q0 28 20.5 48t48.5 20q29 0 48.5 -20t19.5 -48v-735h33q38 0 64 -26.5t26 -63.5t-26 -63.5t-64 -26.5h-8l-344 -203l340 -201q34 -20 34 -59q0 -28 -19.5 -48t-47.5 -20 q-18 0 -37 11l-406 239l-403 -239q-19 -11 -37 -11q-28 0 -48 20t-20 48q0 39 35 59l338 201l-342 203h-10q-37 0 -63.5 26.5t-26.5 63.5zM381 680h635v250h-635v-250zM489 500l209 -125l211 125h-420zM561 1174q0 -8 6 -11l64 -49l-21 -86q-2 -10 6 -14q3 -2 7 -1q4 0 8 3 l69 45l72 -45q4 -3 8 -3l6 2q7 5 5 13l-19 86l62 49q6 3 6 11q0 14 -13 14l-84 6l-28 74q-3 10 -15 10q-10 0 -12 -10l-31 -74l-82 -6q-14 0 -14 -14z" />
+<glyph unicode="Y" horiz-adv-x="1243" d="M92 494q0 303 201 436v321q0 137 96 233.5t232 96.5q138 0 233.5 -96.5t95.5 -233.5v-321q201 -133 201 -436q0 -245 -136.5 -383t-393.5 -138q-256 0 -392.5 138t-136.5 383zM475 1004q72 14 146 14q68 0 147 -14v247q0 62 -43 106t-104 44t-103.5 -44t-42.5 -106v-247z M512 555q0 -69 47 -92v-127q0 -26 18 -44t44 -18t43.5 18t17.5 44v127q47 23 47 92q0 48 -28 75t-80 27t-80.5 -27t-28.5 -75z" />
+<glyph unicode="Z" horiz-adv-x="1718" d="M131 944q0 190 82 337t223.5 228.5t321.5 89.5v37q0 41 29.5 71t70.5 30q43 0 73 -30t30 -71v-37q273 -12 448.5 -191t175.5 -464q0 -46 -31 -77t-77 -31h-516v-531q0 -54 35.5 -90.5t88.5 -36.5t90 36.5t37 90.5v64q0 41 30 70.5t71 29.5q43 0 72.5 -29.5t29.5 -70.5 v-64q0 -135 -96.5 -231.5t-233.5 -96.5q-136 0 -231.5 95.5t-95.5 232.5v531h-518q-45 0 -77 31.5t-32 76.5z" />
+<glyph unicode="a" horiz-adv-x="1726" d="M121 571q0 231 106 381t308 197v145q0 19 13 31t34 12h90q0 178 100 272.5t285 94.5h170q25 0 42 -17t17 -42t-17 -42.5t-42 -17.5h-170q-133 0 -198.5 -56.5t-65.5 -191.5h81q19 0 32.5 -12.5t13.5 -30.5v-145q203 -47 308 -196.5t105 -381.5q0 -282 -156 -440 t-450 -158t-450 158t-156 440zM913 858q0 -63 64 -63q63 0 63 63q0 30 -16.5 47t-46.5 17t-47 -17t-17 -47zM1167 1325v115q0 25 17.5 42t42.5 17t42 -17t17 -42v-115q0 -25 -17 -42t-42 -17t-42.5 17t-17.5 42zM1167 1849v115q0 25 17.5 42t42.5 17t42 -17t17 -42v-115 q0 -25 -17 -42t-42 -17t-42.5 17t-17.5 42zM1346 1458q0 24 18.5 42t40.5 18q24 0 43 -19l35 -35q18 -18 18 -43q0 -24 -18.5 -41.5t-40.5 -17.5q-25 0 -43 18l-35 35q-18 18 -18 43zM1346 1831q0 25 18 43l35 35q18 18 43 18q22 0 40.5 -17.5t18.5 -41.5q0 -25 -18 -43 l-35 -35q-18 -18 -43 -18q-22 0 -40.5 17.5t-18.5 41.5zM1372 1645q0 25 17.5 42t42.5 17h114q25 0 42.5 -17t17.5 -42t-17.5 -42.5t-42.5 -17.5h-114q-25 0 -42.5 17.5t-17.5 42.5z" />
+<glyph unicode="b" horiz-adv-x="931" d="M113 260v424q0 133 86 225h538q76 -85 82 -213h-121q-12 0 -21 -9t-9 -21t9 -21.5t21 -9.5h121v-109h-121q-12 0 -21 -9t-9 -21t9 -21.5t21 -9.5h121v-109h-121q-12 0 -21 -9t-9 -21t9 -21.5t21 -9.5h121v-35q0 -135 -90 -210t-262 -75q-173 0 -263.5 75t-90.5 210z M137 1020v168q0 26 18 43.5t44 17.5h536q26 0 44 -17.5t18 -43.5v-168q0 -26 -18 -44t-44 -18h-536q-26 0 -44 18t-18 44zM274 1298q0 50 29.5 87.5t81.5 52.5l-25 90q-8 28 -8 49q0 56 30.5 85.5t82.5 29.5t82.5 -29.5t30.5 -85.5q0 -17 -9 -49l-24 -90q52 -15 81 -52.5 t29 -87.5h-381z" />
+<glyph unicode="c" horiz-adv-x="1562" d="M133 111v770q0 56 43 88l539 395q29 20 65 20q39 0 68 -20l538 -395q44 -33 44 -88v-770q0 -46 -32.5 -78.5t-78.5 -32.5h-379v418q0 16 -11 27.5t-28 11.5h-239q-17 0 -28 -11.5t-11 -27.5v-418h-379q-46 0 -78.5 32.5t-32.5 78.5z" />
+<glyph unicode="d" horiz-adv-x="1910" d="M88 938q0 29 23 55l309 361q24 30 63 30q54 0 76 -45l170 -360q45 122 150.5 185t259.5 63q159 0 274 -90t150 -215l237 -107q23 -11 23 -37t-23 -37l-237 -106q-32 -132 -124 -209t-235 -94v-209h146q26 0 43.5 -18t17.5 -44t-17.5 -43.5t-43.5 -17.5h-420 q-26 0 -44 17.5t-18 43.5t18 44t44 18h141v209q-158 17 -253.5 108.5t-115.5 249.5l-555 166q-26 8 -42.5 30t-16.5 52zM1257 897q0 -28 15 -43.5t43 -15.5q57 0 57 59t-57 59q-28 0 -43 -15.5t-15 -43.5z" />
+<glyph unicode="e" horiz-adv-x="2174" d="M127 121v334q0 33 27 45v616q0 50 35.5 85.5t84.5 35.5h1627q49 0 84.5 -35.5t35.5 -85.5v-616q27 -12 27 -45v-334q0 -50 -35 -85.5t-86 -35.5h-1679q-51 0 -86 35.5t-35 85.5zM518 651q0 -65 35.5 -100t99.5 -35q65 0 101.5 35t36.5 100q0 68 -36.5 104t-101.5 36 q-64 0 -99.5 -36t-35.5 -104zM590 131q0 -51 51 -51t51 51t-51 51t-51 -51zM801 174q0 -51 51 -51t51 51t-51 51t-51 -51zM891 643q0 -11 8.5 -19t18.5 -8h339q11 0 19 8t8 19v137q0 10 -8 18.5t-19 8.5h-339q-10 0 -18.5 -8.5t-8.5 -18.5v-137zM1272 174q0 -51 51 -51 t51 51t-51 51t-51 -51zM1384 651q0 -65 36.5 -100t101.5 -35q64 0 99.5 35t35.5 100q0 68 -35.5 104t-99.5 36q-65 0 -101.5 -36t-36.5 -104zM1483 131q0 -51 51 -51t51 51t-51 51t-51 -51z" />
+<glyph unicode="f" horiz-adv-x="1331" d="M104 367v786q0 44 32.5 76.5t76.5 32.5t76.5 -32.5t32.5 -76.5v-293l26 12v160q0 45 32 77t75 32q45 0 76.5 -31.5t31.5 -77.5v-129h25v131q0 45 31.5 77t76.5 32q43 0 75 -32.5t32 -76.5v-162l26 -12v465q0 44 32 76.5t75 32.5q45 0 76.5 -32t31.5 -77v-510h74 q43 0 75 -32.5t32 -77.5q0 -29 -13 -58l-170 -379q-40 -90 -95.5 -150t-149.5 -97t-222 -37q-230 0 -350.5 99.5t-120.5 283.5z" />
+<glyph unicode="g" horiz-adv-x="1929" d="M143 709q0 33 23.5 56t56.5 23h135q33 0 56.5 -23t23.5 -56q0 -32 -24 -56t-56 -24h-135q-32 0 -56 24t-24 56zM393 221q0 33 25 58l45 47q25 22 57 22t56 -23t24 -57q0 -32 -22 -57l-48 -45q-25 -25 -57 -25q-31 0 -55.5 23.5t-24.5 56.5zM393 1196q0 33 24.5 56.5 t55.5 23.5q32 0 57 -25l48 -45q22 -25 22 -57q0 -34 -24 -57t-56 -23q-31 0 -57 23l-45 47q-25 25 -25 57zM547 709q0 206 110.5 315t307.5 109t307 -109t110 -315t-110 -315t-307 -109t-307.5 109t-110.5 315zM885 -39v135q0 33 23.5 56.5t56.5 23.5t56 -23.5t23 -56.5 v-135q0 -33 -23 -56.5t-56 -23.5t-56.5 23.5t-23.5 56.5zM885 1321v135q0 33 23.5 56.5t56.5 23.5t56 -23.5t23 -56.5v-135q0 -33 -23 -56.5t-56 -23.5t-56.5 23.5t-23.5 56.5zM1329 268q0 34 24 57t56 23t57 -22l45 -47q25 -25 25 -58t-24.5 -56.5t-55.5 -23.5 q-32 0 -57 25l-47 45q-23 26 -23 57zM1329 1149q0 31 23 57l47 45q25 25 57 25q31 0 55.5 -23.5t24.5 -56.5q0 -32 -25 -57l-45 -47q-26 -23 -57 -23q-32 0 -56 23t-24 57zM1491 709q0 33 23.5 56t56.5 23h135q33 0 56.5 -23t23.5 -56q0 -32 -24 -56t-56 -24h-135 q-32 0 -56 24t-24 56z" />
+<glyph unicode="h" horiz-adv-x="2172" d="M145 342q0 162 88.5 253.5t253.5 92.5q24 243 176.5 371.5t403.5 128.5q204 0 343.5 -85t199.5 -249q198 0 308 -109.5t110 -316.5q0 -208 -111.5 -318t-310.5 -110h-1125q-159 0 -247.5 88.5t-88.5 253.5z" />
+<glyph unicode="i" horiz-adv-x="2695" d="M125 877q0 26 18.5 44.5t44.5 18.5h107q26 0 44.5 -18.5t18.5 -44.5t-18.5 -45t-44.5 -19h-107q-26 0 -44.5 19t-18.5 45zM324 485q0 27 18 45l37 37q19 19 45 19q25 0 44 -18.5t19 -45.5t-18 -45l-37 -37q-18 -18 -45 -18q-25 0 -44 18t-19 45zM324 1264q0 27 19 45 t44 18q27 0 45 -18l37 -37q18 -18 18 -45t-19 -45.5t-44 -18.5q-26 0 -45 19l-37 37q-18 18 -18 45zM444 877q0 163 88 250t244 87q204 0 287 -141q-40 -48 -70 -110q-36 -74 -55 -172q-103 -6 -186 -65.5t-131 -158.5q-177 74 -177 310zM688 342q0 162 88.5 253.5 t253.5 92.5q24 243 176.5 371.5t403.5 128.5q204 0 343 -85t199 -249q198 0 308 -109.5t110 -316.5q0 -208 -111.5 -318t-310.5 -110h-1124q-159 0 -247.5 88.5t-88.5 253.5zM713 1364v106q0 26 18.5 45t44.5 19t45 -19t19 -45v-106q0 -26 -19 -45t-45 -19t-44.5 19 t-18.5 45zM1067 1227q0 27 18 45l37 37q18 18 45 18q26 0 45 -18t19 -45q0 -26 -19 -45l-36 -37q-19 -19 -46 -19q-25 0 -44 18.5t-19 45.5z" />
+<glyph unicode="j" horiz-adv-x="2129" d="M98 72q0 29 21.5 50t50.5 21h1790q29 0 50.5 -21t21.5 -50t-21.5 -50.5t-50.5 -21.5h-1790q-29 0 -50.5 21.5t-21.5 50.5zM369 193v528q0 37 26.5 63.5t63.5 26.5h1212q37 0 63.5 -26.5t26.5 -63.5v-528h-1392zM580 862v307h966v-307h-966zM580 1214v68q0 37 26.5 63.5 t63.5 26.5h786q37 0 63.5 -26.5t26.5 -63.5v-68h-966zM582 502q0 -49 49 -49t49 49t-49 49t-49 -49zM983 502q0 -39 21.5 -60.5t60.5 -21.5t60.5 21.5t21.5 60.5q0 82 -82 82t-82 -82zM991 1479v241q0 31 21.5 52.5t52.5 21.5t52.5 -21.5t21.5 -52.5v-241q0 -31 -21.5 -52.5 t-52.5 -21.5t-52.5 21.5t-21.5 52.5zM997 1888q0 21 24.5 55.5t31.5 57.5q3 10 12 10t12 -10q7 -23 31.5 -57.5t24.5 -55.5q0 -63 -68 -63t-68 63zM1446 502q0 -49 49 -49t49 49t-49 49t-49 -49z" />
+<glyph unicode="k" horiz-adv-x="1081" d="M102 326v530q0 134 72.5 221t212.5 113v375q-38 5 -63 32.5t-25 67.5q0 44 29 73t73 29h279q44 0 73 -29t29 -73q0 -40 -25 -67.5t-63 -32.5v-375q138 -26 211.5 -113.5t73.5 -220.5v-530q0 -169 -111 -261t-327 -92t-327.5 92t-111.5 261zM225 264q0 -15 15 -24 l194 -109q8 -4 15 -4q15 0 22 12l184 322l-243 137l-183 -319zM301 637l12 -57q2 -6 8 -8.5t11 1.5l55 45q5 4 3 11t-9 8l-68 12q-5 2 -9 -2t-3 -10zM356 740q-1 -2 -1 -3q0 -4 3 -6l41 -51q6 -6 13 -6t10 10l12 68q1 6 -4 10t-10 2l-55 -14q-7 -4 -9 -10zM455 670l239 -140 l154 269q6 12 6 18q0 16 -12 23l-195 110q-8 4 -14 4q-17 0 -25 -16zM625 881q0 11 7.5 18.5t18.5 7.5q7 0 15 -4l125 -72q12 -7 12 -22q0 -11 -8.5 -19t-18.5 -8q-8 0 -14 4l-125 72q-12 8 -12 23z" />
+<glyph unicode="l" horiz-adv-x="2801" d="M123 600q0 63 44 107.5t107 44.5t107.5 -44.5t44.5 -107.5q0 -58 16.5 -103.5t43.5 -73.5t64 -46.5t73.5 -25.5t76.5 -7h609l520 315v25h328q0 -69 -52 -104v-236q49 0 93.5 12.5t86 39.5t66.5 79.5t25 124.5q0 63 44 107.5t107 44.5t107.5 -44.5t44.5 -107.5 q0 -118 -47.5 -218.5t-126 -169.5t-182 -118t-214.5 -71.5t-223 -22.5h-971q-112 0 -223 22.5t-214 71.5t-182 118t-126 169.5t-47 218.5zM1452 344h428v236q-4 2 -8 5t-6 5l-2 2zM1829 770v82h323v82h60q24 0 37 -19l45 25q13 8 24 8q16 0 26.5 -10t10.5 -27q0 -19 -20 -32 l-178 -109h-328zM1833 934q19 80 113 94q-41 23 -41 82v18h-52q-20 0 -20 21q0 20 20 20h45v48q0 8 6.5 15t16.5 7h143q9 0 15 -7t6 -15v-48h45q20 0 20 -20q0 -21 -20 -21h-49v-18q0 -57 -45 -82q100 -14 116 -94h-319z" />
+<glyph unicode="m" horiz-adv-x="2273" d="M172 760v313q0 107 72.5 165t210.5 58t210 -58t72 -165v-313q0 -151 -131 -201v-438q0 -63 -44 -107.5t-107 -44.5t-107.5 44.5t-44.5 107.5v438q-131 50 -131 201zM307 1489q0 70 37.5 107.5t110.5 37.5t110 -37.5t37 -107.5t-37.5 -109t-109.5 -39t-110 39t-38 109z M987 201v1202q0 26 19 44.5t45 18.5t44.5 -18.5t18.5 -44.5v-1202q0 -26 -18.5 -45t-44.5 -19t-45 19t-19 45zM1339 518q0 26 9 78l90 477q24 130 86.5 176.5t195.5 46.5t196 -46.5t87 -176.5l90 -477q8 -47 8 -78q0 -77 -57.5 -117t-171.5 -51v-229q0 -63 -44.5 -107.5 t-107.5 -44.5t-107 44.5t-44 107.5v229q-114 11 -172 51t-58 117zM1546 1409q0 56 15 104t56 84.5t103 36.5t103 -36.5t56 -84.5t15 -104q0 -31 -16.5 -49.5t-46.5 -18.5h-221q-30 0 -47 18.5t-17 49.5z" />
+<glyph unicode="n" horiz-adv-x="1779" d="M164 197v1110q0 81 58 139.5t138 58.5h1059q83 0 140 -58t57 -140v-1110q0 -80 -57.5 -138.5t-139.5 -58.5h-1059q-79 0 -137.5 58.5t-58.5 138.5zM328 242q0 -32 22 -54t51 -22h977q31 0 50.5 21.5t19.5 54.5v1020q0 31 -20 54t-50 23h-977q-28 0 -50.5 -23.5 t-22.5 -53.5v-1020zM436 1720q0 22 13.5 35.5t35.5 13.5q21 0 37 -16l29 -31v160q0 21 14 35t35 14q20 0 34.5 -14.5t14.5 -34.5v-160l29 31q16 16 35 16q22 0 36.5 -13.5t14.5 -35.5q0 -20 -14 -34l-113 -113q-19 -19 -37 -19t-37 19l-114 113q-13 13 -13 34zM467 678v188 q0 61 43.5 94t126.5 33q81 0 123.5 -33t42.5 -94v-188q0 -96 -76 -123v-260q0 -37 -26.5 -63.5t-63.5 -26.5q-38 0 -65 26.5t-27 63.5v260q-78 26 -78 123zM547 1114q0 37 23 61.5t67 24.5t67 -24.5t23 -61.5q0 -39 -23 -63.5t-67 -24.5t-67 24.5t-23 63.5zM889 535 q0 7 6 43l51 288q13 76 49.5 101.5t116.5 25.5q81 0 119 -25t51 -102l51 -288q4 -24 4 -43q0 -90 -135 -103v-137q0 -37 -26.5 -63.5t-63.5 -26.5q-38 0 -64 26.5t-26 63.5v137q-133 13 -133 103zM1010 1067q0 52 25.5 92.5t76.5 40.5q56 0 80.5 -40t24.5 -93 q0 -23 -9.5 -32t-33.5 -9h-123q-24 0 -32.5 8.5t-8.5 32.5zM1014 1765q0 21 14 35l113 113q18 18 37 18q18 0 36 -18l111 -111q16 -16 16 -37t-14 -35t-35 -14q-20 0 -37 17l-28 30v-159q0 -21 -14 -35.5t-35 -14.5q-20 0 -35 15t-15 35v159l-28 -30q-17 -17 -35 -17 q-22 0 -36.5 13.5t-14.5 35.5z" />
+<glyph unicode="o" horiz-adv-x="2015" d="M135 1094q0 23 6 41l119 358q11 31 43 31q20 0 30.5 -11t18.5 -36l80 -240l309 -117l45 486q2 31 17 48t41 17q24 0 42.5 -18t26.5 -47l230 -631l307 -111q46 -17 72 -57t26 -86q0 -61 -45.5 -107.5t-107.5 -46.5q-25 0 -60 13l-1102 403q-42 14 -70 44t-28 67zM395 811 q0 23 16 38t38 15q23 0 39 -15t16 -38t-16 -38t-39 -15q-22 0 -38 15t-16 38zM438 86q0 37 25.5 62.5t60.5 25.5h1256q39 0 62.5 -25t23.5 -63q0 -36 -23.5 -61t-62.5 -25h-1256q-35 0 -60.5 25.5t-25.5 60.5zM547 758q0 22 15 37.5t38 15.5t38 -15.5t15 -37.5 q0 -24 -15 -40t-38 -16t-38 16t-15 40zM1202 510q0 23 15 38t38 15t38.5 -15t15.5 -38t-15.5 -38t-38.5 -15t-38 15t-15 38z" />
+<glyph unicode="p" horiz-adv-x="2801" d="M123 311v899q0 52 33 85.5t84 33.5h1339v37q0 30 21 50t49 20q30 0 50.5 -20t20.5 -50v-37h205q56 0 78 -49l199 -436l417 -238q60 -34 60 -104v-191q0 -50 -33 -83t-84 -33h-125q-12 -94 -74 -144.5t-161 -50.5q-101 0 -161.5 50t-70.5 145h-1139q-7 -94 -69 -144.5 t-162 -50.5q-98 0 -160 50.5t-75 144.5h-125q-51 0 -84 33t-33 83zM506 242q0 -47 24.5 -72t69.5 -25q44 0 72 25.5t28 71.5q0 45 -28 70.5t-72 25.5t-69 -25t-25 -71zM610 938q0 -25 17.5 -42t42.5 -17h108v-109q0 -25 17.5 -42t42.5 -17t42 17t17 42v109h109q26 0 42.5 17 t16.5 42t-16.5 42t-42.5 17h-109v109q0 26 -17 42.5t-42 16.5t-42.5 -16.5t-17.5 -42.5v-109h-108q-25 0 -42.5 -17t-17.5 -42zM1581 887q0 -17 12 -29t29 -12h375q17 0 29 12t12 29q0 8 -4 16l-105 252q-14 31 -47 31h-260q-18 0 -29.5 -11.5t-11.5 -29.5v-258zM2109 242 q0 -46 25.5 -71.5t67.5 -25.5q46 0 72 25t26 72q0 46 -26 71t-72 25q-42 0 -67.5 -25.5t-25.5 -70.5z" />
+<glyph unicode="q" horiz-adv-x="1196" d="M121 55v404q127 70 127 258q0 185 -127 258v403q0 23 16 39.5t39 16.5h838q23 0 39 -16.5t16 -39.5v-407q-121 -70 -121 -254q0 -180 121 -256v-406q0 -23 -16 -39t-39 -16h-307v1028q0 62 -44.5 106t-105.5 44t-105 -44t-44 -106v-1028h-232q-23 0 -39 16t-16 39z M467 653q0 33 19.5 51.5t50.5 18.5t50 -18.5t19 -51.5t-19 -51t-50 -18q-32 0 -51 18t-19 51z" />
+<glyph unicode="r" horiz-adv-x="1961" d="M143 190v465q0 141 102.5 241.5t248.5 100.5h718q145 0 248 -100.5t103 -241.5v-465q0 -15 -11 -25.5t-26 -10.5h-1346q-17 0 -27 10.5t-10 25.5zM256 29v77h236v-77q0 -12 -8.5 -20.5t-20.5 -8.5h-178q-12 0 -20.5 8.5t-8.5 20.5zM440 1370q0 39 31 64q59 47 166 73.5 t217 26.5q109 0 216.5 -26.5t166.5 -73.5q29 -26 29 -64q0 -32 -23 -56t-55 -24q-18 0 -27 6v-249h-616v249q-9 -6 -27 -6q-32 0 -55 24t-23 56zM1161 29v77h236v-77q0 -12 -8.5 -20.5t-20.5 -8.5h-180q-11 0 -19 8.5t-8 20.5zM1610 487v148h182q11 0 19 -8.5t8 -20.5v-92 q0 -10 -8.5 -18.5t-18.5 -8.5h-182z" />
+<glyph unicode="s" horiz-adv-x="1806" d="M70 588q0 59 35.5 134t89.5 140t125 109.5t135 44.5q28 0 52 -14.5t34 -40.5l241 -574q13 -26 13 -37q0 -28 -17 -45.5t-45 -17.5q-14 0 -28 4l-580 211q-24 8 -39.5 30.5t-15.5 55.5zM184 426l340 -117q13 -61 72 -164q16 -29 16 -59q0 -49 -30.5 -81t-77.5 -32 q-55 0 -109 58q-82 85 -139 197t-72 198zM555 1087q0 41 31.5 74.5t83 54t111.5 31t122 10.5t122 -10.5t111.5 -31t83 -54t31.5 -74.5q0 -15 -6 -30l-272 -676q-17 -45 -70 -45q-52 0 -69 45l-273 676q-6 15 -6 30zM1012 350q0 13 12 37l242 574q10 26 34 40.5t52 14.5 q64 0 135 -44.5t125 -109.5t89.5 -140t35.5 -134q0 -33 -16 -55.5t-40 -30.5l-579 -211q-14 -4 -29 -4q-28 0 -44.5 17.5t-16.5 45.5zM1194 86q0 30 16 59q59 103 72 164l340 117q-15 -86 -72 -198t-139 -197q-54 -58 -108 -58q-47 0 -78 32t-31 81z" />
+<glyph unicode="t" horiz-adv-x="1515" d="M84 899q0 46 32.5 78.5t78.5 32.5h278q9 138 102 200q-57 136 -57 299q0 91 9.5 163t23.5 114.5t31.5 70.5t32.5 38t28 10t28 -10t32 -38t31 -70.5t23 -114.5t9 -163q0 -134 -39 -256h25q43 135 138.5 260.5t200.5 199t183 73.5q55 0 55 -55q0 -60 -52 -141t-126 -152.5 t-153 -129t-134 -77.5q133 -52 142 -221h317q46 0 78.5 -32.5t32.5 -78.5t-32.5 -78.5t-78.5 -32.5h-125v-675q0 -46 -33.5 -79.5t-79.5 -33.5h-655q-46 0 -79.5 33.5t-33.5 79.5v675h-122q-46 0 -78.5 32.5t-32.5 78.5zM582 1010h92q0 21 -13 32t-34 11q-20 0 -32.5 -11 t-12.5 -32zM805 1010h92q0 21 -13 32t-34 11q-20 0 -32.5 -11t-12.5 -32z" />
+<glyph unicode="u" horiz-adv-x="2263" d="M123 78v1116q0 34 24 58t56 24h811q34 0 57 -24t23 -58v-1116q0 -31 -23.5 -54.5t-56.5 -23.5h-811q-32 0 -56 23.5t-24 54.5zM293 248q0 -15 11 -26t26 -11h557q15 0 26 11t11 26t-11 26t-26 11h-557q-15 0 -26 -11t-11 -26zM293 442q0 -15 11 -25.5t26 -10.5h557 q15 0 26 10.5t11 25.5t-11 26t-26 11h-557q-15 0 -26 -11t-11 -26zM293 637q0 -15 11 -26t26 -11h557q15 0 26 11t11 26t-11 26t-26 11h-557q-15 0 -26 -11t-11 -26zM293 821q0 -11 6.5 -17.5t17.5 -6.5h238q11 0 18 7t7 17q0 63 -38.5 97t-105.5 34t-105 -33.5t-38 -97.5z M373 1042q0 -63 63 -63q64 0 64 63q0 64 -64 64q-63 0 -63 -64zM1169 78v1116q0 33 23.5 57.5t54.5 24.5h99v-449q0 -11 8 -18.5t18 -7.5q13 0 25 12l73 70l72 -70q12 -12 25 -12q11 0 18.5 7.5t7.5 18.5v449h467q34 0 57 -24t23 -58v-1116q0 -31 -23.5 -54.5t-56.5 -23.5 h-813q-31 0 -54.5 23.5t-23.5 54.5zM1339 248q0 -15 11 -26t26 -11h557q15 0 26 11t11 26t-11 26t-26 11h-557q-15 0 -26 -11t-11 -26zM1339 442q0 -15 11 -25.5t26 -10.5h557q15 0 26 10.5t11 25.5t-11 26t-26 11h-557q-15 0 -26 -11t-11 -26zM1339 637q0 -15 11 -26 t26 -11h557q15 0 26 11t11 26t-11 26t-26 11h-557q-15 0 -26 -11t-11 -26zM1645 831q0 -15 10.5 -25.5t25.5 -10.5h252q15 0 26 10.5t11 25.5t-11 26t-26 11h-252q-15 0 -25.5 -11t-10.5 -26zM1645 1026q0 -15 10.5 -26t25.5 -11h252q15 0 26 11t11 26t-11 26t-26 11h-252 q-15 0 -25.5 -11t-10.5 -26z" />
+<glyph unicode="v" horiz-adv-x="2017" d="M94 362q0 152 106 258.5t257 106.5q62 0 112 -16l99 188l-27 84h-61q-22 0 -38 15.5t-16 37.5t16 38t38 16h258q22 0 37.5 -16t15.5 -38t-15.5 -37.5t-37.5 -15.5h-74q1 -4 6 -23.5t8 -29.5h539l-12 31q-7 18 -7 30q0 26 18 44t44 18h209q61 0 102 -42t41 -104 q0 -58 -40 -98.5t-103 -40.5h-8q-22 0 -37 14.5t-15 36.5t15 36.5t37 14.5h8q17 0 28 10t11 27q0 18 -10.5 29.5t-28.5 11.5h-135l77 -227q24 4 54 4q149 0 253.5 -106t104.5 -257q0 -152 -104.5 -257t-255.5 -105t-258 106t-107 256q0 105 56 192.5t139 129.5l-15 49 l-317 -381q-23 -27 -47.5 -38t-63.5 -11h-135q-24 -132 -122 -217.5t-236 -85.5q-151 0 -257 105t-106 257zM207 362q0 -103 73.5 -176t176.5 -73q89 0 157 53t88 137h-245q-25 0 -42.5 17t-17.5 42q0 15 11 33l112 213q-23 6 -63 6q-103 0 -176.5 -74t-73.5 -178zM545 424 h157q-25 89 -88 137zM664 664q123 -88 151 -240h21l-117 344zM821 825l137 -401q16 0 31 18l322 383h-490zM1311 362q0 -103 74 -176t178 -73q103 0 176 73t73 176q0 104 -73 178t-176 74h-21l74 -221q6 -18 6 -31q0 -25 -17 -42t-42 -17q-46 0 -62 47l-71 228 q-119 -77 -119 -216z" />
+<glyph unicode="w" horiz-adv-x="1071" d="M139 352q0 78 34.5 162t81 150.5t113.5 173t111 202.5q19 37 58 37q37 0 55 -37q44 -96 111 -202.5t113.5 -173t81 -150.5t34.5 -162q0 -191 -106 -289t-289 -98q-184 0 -291 98t-107 289z" />
+<glyph unicode="x" horiz-adv-x="1755" d="M82 96v1227q0 40 27 67t67 27h1403q40 0 67 -27t27 -67v-1227q0 -41 -27 -68.5t-67 -27.5h-1403q-40 0 -67 27.5t-27 68.5zM264 84q0 -9 6 -15t15 -6q20 0 20 21v1249q0 21 -20 21q-9 0 -15 -6t-6 -15v-1249zM385 709q0 -285 154 -436.5t428 -151.5q272 0 425.5 151.5 t153.5 436.5q0 286 -153.5 438.5t-425.5 152.5q-274 0 -428 -152.5t-154 -438.5zM772 709q0 97 51 146.5t144 49.5q91 0 140.5 -49.5t49.5 -146.5q0 -94 -50 -144.5t-140 -50.5q-92 0 -143.5 50.5t-51.5 144.5zM922 709q0 -45 45 -45q43 0 43 45t-43 45q-45 0 -45 -45z" />
+<glyph unicode="y" horiz-adv-x="1396" d="M68 883v127q0 40 29 69t69 29h430v-248h-506q-9 0 -15.5 7t-6.5 16zM133 98v697q0 9 7 15.5t16 6.5h440v-817h-365q-40 0 -69 29t-29 69zM293 1278q0 19 12 33l158 186q15 19 37 19q26 0 39 -25l127 -272q6 -12 6 -25q0 -18 -12.5 -30.5t-30.5 -12.5q-9 0 -21 4l-284 84 q-31 10 -31 39zM725 1194q0 13 6 25l127 272q12 25 39 25q22 0 37 -19l158 -186q12 -14 12 -33q0 -29 -31 -39l-285 -84q-12 -4 -20 -4q-18 0 -30.5 12.5t-12.5 30.5zM801 0v817h440q9 0 16 -6.5t7 -15.5v-697q0 -40 -29.5 -69t-69.5 -29h-364zM801 860v248h430q40 0 69 -29 t29 -69v-127q0 -9 -6.5 -16t-15.5 -7h-506z" />
+<glyph unicode="z" horiz-adv-x="1366" d="M94 272q0 148 79 225.5t220 77.5q34 0 58 -6v314q0 39 20.5 71t54.5 50v567q0 40 30 69t71 29q29 0 55 -16q29 16 57 16q41 0 71 -29t30 -69v-567q33 -18 54 -50.5t21 -70.5v-314q27 6 58 6q141 0 220 -77.5t79 -225.5q0 -145 -79.5 -222t-219.5 -77q-119 0 -193.5 56.5 t-97.5 165.5q-22 -108 -96 -165t-193 -57q-140 0 -219.5 77t-79.5 222zM254 272q0 -65 37.5 -100t101.5 -35t101.5 35t37.5 100q0 69 -37 104.5t-102 35.5t-102 -35.5t-37 -104.5zM604 782q0 -39 21 -60.5t57 -21.5q37 0 58.5 21.5t21.5 60.5q0 38 -21.5 59t-58.5 21 q-36 0 -57 -21t-21 -59zM655 754v55q0 11 8.5 19t18.5 8t18.5 -8t8.5 -19v-55q0 -10 -8.5 -18.5t-18.5 -8.5t-18.5 8.5t-8.5 18.5zM834 272q0 -65 37.5 -100t101.5 -35t101.5 35t37.5 100q0 69 -37 104.5t-102 35.5t-102 -35.5t-37 -104.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#x2000;" horiz-adv-x="1011" />
+<glyph unicode="&#x2001;" horiz-adv-x="2023" />
+<glyph unicode="&#x2002;" horiz-adv-x="1011" />
+<glyph unicode="&#x2003;" horiz-adv-x="2023" />
+<glyph unicode="&#x2004;" horiz-adv-x="674" />
+<glyph unicode="&#x2005;" horiz-adv-x="505" />
+<glyph unicode="&#x2006;" horiz-adv-x="337" />
+<glyph unicode="&#x2007;" horiz-adv-x="337" />
+<glyph unicode="&#x2008;" horiz-adv-x="252" />
+<glyph unicode="&#x2009;" horiz-adv-x="404" />
+<glyph unicode="&#x200a;" horiz-adv-x="112" />
+<glyph unicode="&#x202f;" horiz-adv-x="404" />
+<glyph unicode="&#x205f;" horiz-adv-x="505" />
+<glyph unicode="&#x25fc;" horiz-adv-x="1413" d="M0 0v1413h1413v-1413h-1413z" />
+</font>
+</defs></svg> 

BIN
jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.ttf


BIN
jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.woff


BIN
jurysys/static/css/Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.woff2


+ 5 - 0
jurysys/static/css/Bariol-Icons-Basic-Webfont/generator_config.txt

@@ -0,0 +1,5 @@
+# Font Squirrel Font-face Generator Configuration File
+# Upload this file to the generator to recreate the settings
+# you used to create these fonts.
+
+{"mode":"expert","formats":["ttf","woff","woff2","eotz","svg"],"tt_instructor":"default","fix_gasp":"xy","fix_vertical_metrics":"Y","metrics_ascent":"","metrics_descent":"","metrics_linegap":"","add_spaces":"Y","add_hyphens":"Y","fallback":"none","fallback_custom":"100","webonly":"Y","options_subset":"none","subset_custom":"","subset_custom_range":"","subset_ot_features_list":"","css_stylesheet":"stylesheet.css","filename_suffix":"-webfont","emsquare":"2048","spacing_adjustment":"0","rememberme":"Y"}

+ 129 - 0
jurysys/static/css/Bariol-Icons-Basic-Webfont/specimen_files/grid_12-825-55-15.css

@@ -0,0 +1,129 @@
+/*Notes about grid:
+Columns:      12
+Grid Width:   825px
+Column Width: 55px
+Gutter Width: 15px
+-------------------------------*/
+ 
+ 
+ 
+.section 		{margin-bottom: 18px;
+}
+.section:after	{content: ".";display: block;height: 0;clear: both;visibility: hidden;}
+.section 		{*zoom: 1;}
+ 
+.section .firstcolumn,
+.section .firstcol {margin-left: 0;}
+ 
+ 
+/* Border on left hand side of a column. */
+.border {
+  padding-left: 7px;
+  margin-left: 7px;
+  border-left: 1px solid #eee;
+}
+ 
+/* Border with more whitespace, spans one column. */
+.colborder {
+    padding-left: 42px;
+  margin-left: 42px;
+  border-left: 1px solid #eee;
+}
+ 
+
+ 
+/* The Grid Classes */
+.grid1, .grid1_2cols, .grid1_3cols, .grid1_4cols, .grid2, .grid2_3cols, .grid2_4cols, .grid3, .grid3_2cols, .grid3_4cols, .grid4, .grid4_3cols, .grid5, .grid5_2cols, .grid5_3cols, .grid5_4cols, .grid6, .grid6_4cols, .grid7, .grid7_2cols, .grid7_3cols, .grid7_4cols, .grid8, .grid8_3cols, .grid9, .grid9_2cols, .grid9_4cols, .grid10, .grid10_3cols, .grid10_4cols, .grid11, .grid11_2cols, .grid11_3cols, .grid11_4cols, .grid12
+{margin-left: 15px;float: left;display: inline; overflow: hidden;}
+ 
+ 
+.width1, .grid1, .span-1 {width: 55px;}
+.width1_2cols,.grid1_2cols {width: 20px;}
+.width1_3cols,.grid1_3cols  {width: 8px;}
+.width1_4cols,.grid1_4cols  {width: 2px;}
+.input_width1 {width: 49px;}
+ 
+.width2, .grid2, .span-2 {width: 125px;}
+.width2_3cols,.grid2_3cols  {width: 31px;}
+.width2_4cols,.grid2_4cols  {width: 20px;}
+.input_width2 {width: 119px;}
+ 
+.width3, .grid3, .span-3 {width: 195px;}
+.width3_2cols,.grid3_2cols {width: 90px;}
+.width3_4cols,.grid3_4cols  {width: 37px;}
+.input_width3 {width: 189px;}
+ 
+.width4, .grid4, .span-4 {width: 265px;}
+.width4_3cols,.grid4_3cols  {width: 78px;}
+.input_width4 {width: 259px;}
+ 
+.width5, .grid5, .span-5 {width: 335px;}
+.width5_2cols,.grid5_2cols {width: 160px;}
+.width5_3cols,.grid5_3cols  {width: 101px;}
+.width5_4cols,.grid5_4cols  {width: 72px;}
+.input_width5 {width: 329px;}
+ 
+.width6, .grid6, .span-6 {width: 405px;}
+.width6_4cols,.grid6_4cols  {width: 90px;}
+.input_width6 {width: 399px;}
+ 
+.width7, .grid7, .span-7 {width: 475px;}
+.width7_2cols,.grid7_2cols {width: 230px;}
+.width7_3cols,.grid7_3cols  {width: 148px;}
+.width7_4cols,.grid7_4cols  {width: 107px;}
+.input_width7 {width: 469px;}
+ 
+.width8, .grid8, .span-8 {width: 545px;}
+.width8_3cols,.grid8_3cols  {width: 171px;}
+.input_width8 {width: 539px;}
+ 
+.width9, .grid9, .span-9 {width: 615px;}
+.width9_2cols,.grid9_2cols {width: 300px;}
+.width9_4cols,.grid9_4cols  {width: 142px;}
+.input_width9 {width: 609px;}
+ 
+.width10, .grid10, .span-10 {width: 685px;}
+.width10_3cols,.grid10_3cols  {width: 218px;}
+.width10_4cols,.grid10_4cols  {width: 160px;}
+.input_width10 {width: 679px;}
+ 
+.width11, .grid11, .span-11 {width: 755px;}
+.width11_2cols,.grid11_2cols {width: 370px;}
+.width11_3cols,.grid11_3cols  {width: 241px;}
+.width11_4cols,.grid11_4cols  {width: 177px;}
+.input_width11 {width: 749px;}
+ 
+.width12, .grid12, .span-12 {width: 825px;}
+.input_width12 {width: 819px;}
+ 
+/* Subdivided grid spaces */
+.emptycols_left1, .prepend-1 {padding-left: 70px;}
+.emptycols_right1, .append-1 {padding-right: 70px;}
+.emptycols_left2, .prepend-2 {padding-left: 140px;}
+.emptycols_right2, .append-2 {padding-right: 140px;}
+.emptycols_left3, .prepend-3 {padding-left: 210px;}
+.emptycols_right3, .append-3 {padding-right: 210px;}
+.emptycols_left4, .prepend-4 {padding-left: 280px;}
+.emptycols_right4, .append-4 {padding-right: 280px;}
+.emptycols_left5, .prepend-5 {padding-left: 350px;}
+.emptycols_right5, .append-5 {padding-right: 350px;}
+.emptycols_left6, .prepend-6 {padding-left: 420px;}
+.emptycols_right6, .append-6 {padding-right: 420px;}
+.emptycols_left7, .prepend-7 {padding-left: 490px;}
+.emptycols_right7, .append-7 {padding-right: 490px;}
+.emptycols_left8, .prepend-8 {padding-left: 560px;}
+.emptycols_right8, .append-8 {padding-right: 560px;}
+.emptycols_left9, .prepend-9 {padding-left: 630px;}
+.emptycols_right9, .append-9 {padding-right: 630px;}
+.emptycols_left10, .prepend-10 {padding-left: 700px;}
+.emptycols_right10, .append-10 {padding-right: 700px;}
+.emptycols_left11, .prepend-11 {padding-left: 770px;}
+.emptycols_right11, .append-11 {padding-right: 770px;}
+.pull-1 {margin-left: -70px;}
+.push-1 {margin-right: -70px;margin-left: 18px;float: right;}
+.pull-2 {margin-left: -140px;}
+.push-2 {margin-right: -140px;margin-left: 18px;float: right;}
+.pull-3 {margin-left: -210px;}
+.push-3 {margin-right: -210px;margin-left: 18px;float: right;}
+.pull-4 {margin-left: -280px;}
+.push-4 {margin-right: -280px;margin-left: 18px;float: right;}

+ 396 - 0
jurysys/static/css/Bariol-Icons-Basic-Webfont/specimen_files/specimen_stylesheet.css

@@ -0,0 +1,396 @@
+@import url('grid_12-825-55-15.css');
+
+/*  
+	CSS Reset by Eric Meyer - Released under Public Domain
+    http://meyerweb.com/eric/tools/css/reset/
+*/
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend, table, 
+caption, tbody, tfoot, thead, tr, th, td 
+                  {margin: 0;padding: 0;border: 0;outline: 0;
+                  font-size: 100%;vertical-align: baseline;
+                  background: transparent;}
+body              {line-height: 1;}
+ol, ul            {list-style: none;}
+blockquote, q     {quotes: none;}
+blockquote:before, blockquote:after,
+q:before, q:after {content: '';	content: none;}
+:focus            {outline: 0;}
+ins               {text-decoration: none;}
+del               {text-decoration: line-through;}
+table             {border-collapse: collapse;border-spacing: 0;}
+
+
+
+
+body {
+	color: #000;
+	background-color: #dcdcdc;
+}
+
+a {
+	text-decoration: none;
+	color: #1883ba;
+}
+
+h1{
+	font-size: 32px;
+	font-weight: normal;
+	font-style: normal;
+	margin-bottom: 18px;
+}
+
+h2{
+	font-size: 18px;
+}
+
+#container {
+	width: 865px;
+	margin: 0px auto;
+}
+
+
+#header {
+	padding: 20px;
+	font-size: 36px;
+	background-color: #000;
+	color: #fff;
+}
+
+#header span {
+	color: #666;
+}
+#main_content {
+	background-color: #fff;
+	padding: 60px 20px 20px;
+}
+
+
+#footer p {
+	margin: 0;
+	padding-top: 10px;
+	padding-bottom: 50px;
+	color: #333;
+	font: 10px Arial, sans-serif;
+}
+
+.tabs {
+	width: 100%;
+	height: 31px;
+	background-color: #444;
+}
+.tabs li {
+	float:  left;
+	margin: 0;
+	overflow: hidden;
+	background-color: #444;
+}
+.tabs li a {
+	display: block;
+	color: #fff;
+	text-decoration: none;
+	font: bold 11px/11px 'Arial';
+	text-transform: uppercase;
+	padding: 10px 15px;
+	border-right: 1px solid #fff;
+}
+
+.tabs li a:hover {
+		background-color: #00b3ff;
+
+}
+
+.tabs li.active a {
+	color:  #000;
+	background-color: #fff;
+}
+
+
+
+div.huge {
+	
+	font-size: 300px;
+	line-height: 1em;
+	padding: 0;
+	letter-spacing: -.02em;
+	overflow: hidden;
+}
+div.glyph_range {
+	font-size: 72px;
+	line-height: 1.1em;
+}
+
+.size10{ font-size: 10px; }
+.size11{ font-size: 11px; }
+.size12{ font-size: 12px; }
+.size13{ font-size: 13px; }
+.size14{ font-size: 14px; }
+.size16{ font-size: 16px; }
+.size18{ font-size: 18px; }
+.size20{ font-size: 20px; }
+.size24{ font-size: 24px; }
+.size30{ font-size: 30px; }
+.size36{ font-size: 36px; }
+.size48{ font-size: 48px; }
+.size60{ font-size: 60px; }
+.size72{ font-size: 72px; }
+.size90{ font-size: 90px; }
+
+
+.psample_row1 {	height: 120px;}
+.psample_row1 {	height: 120px;}
+.psample_row2 {	height: 160px;}
+.psample_row3 {	height: 160px;}
+.psample_row4 {	height: 160px;}
+
+.psample {
+	overflow: hidden;
+	position: relative;
+}
+.psample p {
+	line-height: 1.3em;
+	display: block;
+	overflow: hidden;
+	margin: 0;
+}
+
+.psample span {
+	margin-right: .5em;
+}
+
+.white_blend {
+	width: 100%;
+	height: 61px;
+	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVkAAAA9CAYAAAAH4BojAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO1JREFUeNrs3TsKgFAMRUE/eer+NxztxMYuEWQG3ECKwwUF58ycAKixOAGAyAKILAAiCyCyACILgMgCiCyAyAIgsgAiCyCyAIgsgMgCiCwAIgsgsgAiC4DIAogsACIL0CWuZ3UGgLrIhjMA1EV2OAOAJQtgyQLwjOzmDAAiCyCyAIgsQFtkd2cAEFkAkQVAZAHaIns4A4AlC2DJAiCyACILILIAiCzAV5H1dQGAJQsgsgCILIDIAvwisl58AViyAJYsACILILIAIgvAe2T9EhxAZAFEFgCRBeiL7HAGgLrIhjMAWLIAliwAt1OAAQDwygTBulLIlQAAAABJRU5ErkJggg==);
+	position: absolute;
+	bottom: 0;
+}
+.black_blend {
+	width: 100%;
+	height: 61px;
+	background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVkAAAA9CAYAAAAH4BojAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAPJJREFUeNrs3TEKhTAQRVGjibr/9QoxhY2N3Ywo50A28IrLwP9g6b1PAMSYTQAgsgAiC4DIAogsgMgCILIAIgsgsgCILIDIAogsACILILIAIguAyAKILIDIAiCyACILgMgCZCnjLWYAiFGvB0BQZJsZAFyyAC5ZAO6RXc0AILIAIguAyAKkRXYzA4DIAogsACILkBbZ3QwALlkAlywAIgsgsgAiC4DIArwVWf8uAHDJAogsACILILIAv4isH74AXLIALlkARBZAZAFEFoDnyPokOIDIAogsACILkBfZZgaAuMhWMwC4ZAE+p4x3mAEgxinAAJ+XBbPWGkwAAAAAAElFTkSuQmCC);
+	position: absolute;
+	bottom: 0;
+}
+.fullreverse {
+	background:  #000 !important;
+	color:  #fff !important;
+	margin-left: -20px;
+	padding-left: 20px;
+	margin-right: -20px;
+	padding-right: 20px;
+	padding: 20px;
+	margin-bottom:0;
+}
+
+
+.sample_table td {
+	padding-top: 3px;
+	padding-bottom:5px;
+	padding-left: 5px;
+	vertical-align: middle;
+	line-height: 1.2em;
+}
+
+.sample_table td:first-child {
+	background-color: #eee;
+	text-align: right;
+	padding-right: 5px;
+	padding-left: 0;
+	padding: 5px;
+	font: 11px/12px "Courier New", Courier, mono;
+}
+
+code {
+	white-space: pre;
+	background-color: #eee;
+	display: block;
+	padding: 10px;
+	margin-bottom: 18px;
+	overflow: auto;
+}
+
+
+.bottom,.last 	{margin-bottom:0 !important; padding-bottom:0 !important;}
+
+.box  { 
+  padding: 18px; 
+  margin-bottom: 18px; 
+  background: #eee; 
+}
+
+.reverse,.reversed { background:  #000 !important;color:  #fff !important; border: none !important;}
+
+#bodycomparison {
+	position: relative;
+	overflow: hidden;
+	font-size: 72px;
+	height: 90px;
+	white-space: nowrap;
+}
+
+#bodycomparison div{
+	font-size: 72px;
+	line-height: 90px;
+	display: inline;
+	margin: 0 15px 0 0;
+	padding: 0;
+}
+
+#bodycomparison div span{
+	font: 10px Arial;
+	position: absolute;
+	left: 0;
+}
+#xheight {
+	float: none;
+	position: absolute;
+	color: #d9f3ff;
+	font-size: 72px;
+	line-height: 90px;
+}
+
+.fontbody {
+ position: relative;
+}
+.arialbody{
+	font-family: Arial;
+	position: relative;
+}
+.verdanabody{
+	font-family: Verdana;
+	position: relative;
+}
+.georgiabody{
+	font-family: Georgia;
+	position: relative;
+}
+
+/* @group Layout page
+ */
+
+#layout h1 {
+	font-size: 36px;
+	line-height: 42px;
+	font-weight: normal;
+	font-style: normal;
+}
+
+#layout h2 {
+	font-size: 24px;
+	line-height: 23px;
+	font-weight: normal;
+	font-style: normal;
+}
+
+#layout h3 {
+	font-size: 22px;
+	line-height: 1.4em;
+	margin-top: 1em;
+	font-weight: normal;
+	font-style: normal;
+}
+
+
+#layout p.byline {
+	font-size: 12px;
+	margin-top: 18px;
+	line-height: 12px;
+	margin-bottom: 0;
+}
+#layout p {
+	font-size: 14px;
+	line-height: 21px;
+	margin-bottom: .5em;
+}
+
+#layout p.large{
+	font-size: 18px;
+	line-height: 26px;
+}
+
+#layout .sidebar p{
+	font-size: 12px;
+	line-height: 1.4em;
+}
+
+#layout p.caption {
+	font-size: 10px;
+	margin-top: -16px;
+	margin-bottom: 18px;
+}
+
+/* @end */
+
+/* @group Glyphs */
+
+#glyph_chart div{
+	background-color: #d9f3ff;
+	color: black;
+	float: left;
+	font-size: 36px;
+	height: 1.2em;
+	line-height: 1.2em;
+	margin-bottom: 1px;
+	margin-right: 1px;
+	text-align: center;
+	width: 1.2em;
+	position: relative;
+	padding: .6em .2em .2em;
+}
+
+#glyph_chart div p {
+	position: absolute;
+	left: 0;
+	top: 0;
+	display: block;
+	text-align: center;
+	font: bold 9px Arial, sans-serif;
+	background-color: #3a768f;
+	width: 100%;
+	color: #fff;
+	padding: 2px 0;
+}
+
+
+#glyphs h1 {
+	font-family: Arial, sans-serif;
+}
+/* @end */
+
+/* @group Installing */
+
+#installing {
+	font: 13px Arial, sans-serif;
+}
+
+#installing p,
+#glyphs p{
+	line-height: 1.2em;
+	margin-bottom: 18px;
+	font: 13px Arial, sans-serif;
+}
+
+
+
+#installing h3{
+	font-size: 15px;
+	margin-top: 18px;
+}
+
+/* @end */
+
+#rendering h1 {
+	font-family: Arial, sans-serif;
+}
+.render_table td {
+	font: 11px "Courier New", Courier, mono;
+	vertical-align: middle;
+}
+
+

+ 16 - 0
jurysys/static/css/Bariol-Icons-Basic-Webfont/stylesheet.css

@@ -0,0 +1,16 @@
+/* Generated by Font Squirrel (https://www.fontsquirrel.com) on October 6, 2016 */
+
+
+
+@font-face {
+    font-family: 'bariol_iconsbasic';
+    src: url('bariol_icons_basic-webfont.eot');
+    src: url('bariol_icons_basic-webfont.eot?#iefix') format('embedded-opentype'),
+         url('bariol_icons_basic-webfont.woff2') format('woff2'),
+         url('bariol_icons_basic-webfont.woff') format('woff'),
+         url('bariol_icons_basic-webfont.ttf') format('truetype'),
+         url('bariol_icons_basic-webfont.svg#bariol_iconsbasic') format('svg');
+    font-weight: normal;
+    font-style: normal;
+
+}

BIN
jurysys/static/css/Bariol/bariol_bold-webfont.woff


BIN
jurysys/static/css/Bariol/bariol_bold_italic-webfont.woff


BIN
jurysys/static/css/Bariol/bariol_light-webfont.woff


BIN
jurysys/static/css/Bariol/bariol_light_italic-webfont.woff


BIN
jurysys/static/css/Bariol/bariol_regular-webfont.woff


BIN
jurysys/static/css/Bariol/bariol_regular_italic-webfont.woff


BIN
jurysys/static/css/Bariol/bariol_thin-webfont.woff


BIN
jurysys/static/css/Bariol/bariol_thin_italic-webfont.woff


+ 23 - 0
jurysys/static/css/Bariol/example.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <link rel="stylesheet" type="text/css"
+          href="style.css"/>
+</head>
+
+<body>
+
+<h1>Generated from: http://www.cufonfonts.com</h1><br/>
+<h1 style="font-family:'Bariol Regular';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+<h1 style="font-family:'Bariol Regular Italic';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+<h1 style="font-family:'Bariol Thin Italic';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+<h1 style="font-family:'Bariol Thin';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+<h1 style="font-family:'Bariol Light';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+<h1 style="font-family:'Bariol Light Italic';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+<h1 style="font-family:'Bariol Bold';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+<h1 style="font-family:'Bariol Bold Italic';font-weight:normal;font-size:42px">AaBbCcDdEeFfGgHhŞşIıİi Example</h1>
+
+
+</body>
+</html>

+ 64 - 0
jurysys/static/css/Bariol/style.css

@@ -0,0 +1,64 @@
+/* #### Generated By: http://www.cufonfonts.com #### */
+
+@font-face {
+font-family: 'Bariol Regular';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Regular'), url('bariol_regular-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Regular Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Regular Italic'), url('bariol_regular_italic-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Thin Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Thin Italic'), url('bariol_thin_italic-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Thin';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Thin'), url('bariol_thin-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Light';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Light'), url('bariol_light-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Light Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Light Italic'), url('bariol_light_italic-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Bold';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Bold'), url('bariol_bold-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Bold Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Bold Italic'), url('bariol_bold_italic-webfont.woff') format('woff');
+}

+ 202 - 0
jurysys/static/css/Open_Sans/LICENSE.txt

@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.

BIN
jurysys/static/css/Open_Sans/OpenSans-Bold.ttf


BIN
jurysys/static/css/Open_Sans/OpenSans-Regular.ttf


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 5 - 0
jurysys/static/css/bootstrap.min.css


+ 314 - 0
jurysys/static/css/styles.css

@@ -0,0 +1,314 @@
+/* #### Generated By: http://www.cufonfonts.com #### */
+
+@font-face {
+font-family: 'Bariol Regular';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Regular'), url('Bariol/bariol_regular-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Regular Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Regular Italic'), url('Bariol/bariol_regular_italic-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Thin Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Thin Italic'), url('Bariol/bariol_thin_italic-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Thin';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Thin'), url('Bariol/bariol_thin-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Light';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Light'), url('Bariol/bariol_light-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Light Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Light Italic'), url('bariol_light_italic-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Bold';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Bold'), url('Bariol/bariol_bold-webfont.woff') format('woff');
+}
+
+
+@font-face {
+font-family: 'Bariol Bold Italic';
+font-style: normal;
+font-weight: normal;
+src: local('Bariol Bold Italic'), url('Bariol/bariol_bold_italic-webfont.woff') format('woff');
+}
+
+@font-face {
+    font-family: 'bariol_iconsbasic';
+    src: url('Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.eot');
+    src: url('Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.eot?#iefix') format('embedded-opentype'),
+         url('Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.woff2') format('woff2'),
+         url('Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.woff') format('woff'),
+         url('Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.ttf') format('truetype'),
+         url('Bariol-Icons-Basic-Webfont/bariol_icons_basic-webfont.svg#bariol_iconsbasic') format('svg');
+    font-weight: normal;
+    font-style: normal;
+
+}
+
+/*.card-text {
+    @include media-breakpoint-only(lg) {
+      column-count: 4;
+    }
+    @include media-breakpoint-only(xl) {
+      column-count: 5;
+    }
+}*/
+
+
+@font-face {
+    font-family: "Open-Sans";
+   src: url(Open_Sans/OpenSans-Regular.ttf);
+}
+
+
+@font-face {
+
+    font-family: "Open-Sans";
+    src: url(Open_Sans/OpenSans-Bold.ttf);
+    font-weight: bold;
+
+}
+
+.card-columns {
+    @include media-breakpoint-only(lg) {
+      column-count: 4;
+    }
+    @include media-breakpoint-only(xl) {
+      column-count: 5;
+    }
+    @include media-breakpoint-only(sm) {
+      column-count: 2;
+    }
+
+    display: inline-block;
+}
+
+
+body {
+    font-family: 'Bariol Regular', sans-serif;
+}
+
+input[type='checkbox'].check {
+    -webkit-appearance:none;
+    width:30px;
+    height:30px;
+    background:white;
+    border-radius:0px;
+    border:1px solid;
+}
+input[type='checkbox'].check:checked {
+    background: black;
+}
+
+
+a {
+    color: black !important;
+}
+
+.boldkur {
+    font-size: large;
+    font-weight: 800;
+
+}
+
+.mediumkur {
+    font-weight: 800;
+}
+
+.kur {
+
+}
+
+.myborder {
+    color: black;
+    border-style: solid;
+    border-width: 5px;
+    border-color: black;
+}
+
+.navborder {
+    border-style: solid;
+    border-width: 2px;
+    border-color: black;
+    border-spacing: 5px;
+
+}
+
+
+/*mg.AA{
+    border-bottom-style: solid;
+    border-bottom-width: 7px;
+    border-bottom-color: lime;
+
+}
+
+img.SMA{
+    border-bottom-style: solid;
+    border-bottom-width: 7px;
+    border-bottom-color: blue;
+}
+
+img.PAUI{
+    border-bottom-style: solid;
+    border-bottom-width: 7px;
+    border-bottom-color: yellow;
+
+}
+
+.card.PAUI{
+    border-left-style: solid;
+    border-left-width: 7px;
+    border-left-color: yellow;
+
+}
+
+img.MA{
+    border-bottom-style: solid;
+    border-bottom-width: 7px;
+    border-bottom-color: aqua;
+
+
+}*/
+
+img.vote {
+    border-style: solid; !important;
+    border-width: 3px; !important;
+    border-color: lawngreen; !important;
+    border-radius:0;
+
+
+}
+
+.fett {
+
+}
+
+.border-blue{
+    border-style: solid;
+    border-width: 3px;
+    border-color: blue;
+}
+
+.border-thin{
+    border-style: solid;
+    border-width: 2px;
+    border-color: black;
+    padding-bottom: 0px;
+    margin: 0px;
+    margin-right:1px ;
+    margin-top: 2px;
+
+    line-height: 20px;
+
+
+    padding-top: 1px;
+    padding-bottom: 0px;
+    padding-right: 2px;
+    padding-left: 2px;
+
+}
+
+.hash{
+    border-style: solid;
+    border-width: 2px;
+    border-color: black;
+    padding-bottom: 0px;
+    border-top-color: black;
+    border-left-color: white;
+    border-right-color: white;
+    background: white;
+
+    margin: 0px;
+    margin-right:1px ;
+    margin-top: 2px;
+
+    line-height: 20px;
+
+
+    padding-top: 1px;
+    padding-bottom: 0px;
+    padding-right: 2px;
+    padding-left: 2px;
+}
+
+
+.mybtn {
+    color: black;
+    background-color: white;
+}
+
+
+.mybtn:hover {
+    color: white;
+    background-color: black;
+}
+
+
+
+
+button{
+    font-size: 15px;
+
+}
+
+
+.mark {
+    color: white;
+    background-color: black;
+}
+
+.red:hover {
+    color: red;
+}
+
+
+.form_border {
+    border-radius: 0;
+
+}
+
+
+.black {
+    color: black;
+}
+
+.fieldname{
+    margin-bottom: 5px;
+}
+
+.tag{
+    width: 100% ;
+    align-self: flex-end;
+    margin-bottom: 2px;
+}

BIN
jurysys/static/favicon.ico


+ 8 - 0
jurysys/static/featherlight.gallery.min.css

@@ -0,0 +1,8 @@
+/**
+ * Featherlight Gallery – an extension for the ultra slim jQuery lightbox
+ * Version 1.7.13 - http://noelboss.github.io/featherlight/
+ *
+ * Copyright 2018, Noël Raoul Bossart (http://www.noelboss.com)
+ * MIT Licensed.
+**/
+.featherlight-next,.featherlight-previous{display:block;position:absolute;top:25px;right:25px;bottom:0;left:80%;cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:rgba(0,0,0,0)}.featherlight-previous{left:25px;right:80%}.featherlight-next:hover,.featherlight-previous:hover{background:rgba(255,255,255,.25)}.featherlight-next span,.featherlight-previous span{display:none;position:absolute;top:50%;left:5%;width:82%;text-align:center;font-size:80px;line-height:80px;margin-top:-40px;text-shadow:0 0 5px #fff;color:#fff;font-style:normal;font-weight:400}.featherlight-next span{right:5%;left:auto}.featherlight-next:hover span,.featherlight-previous:hover span{display:inline-block}.featherlight-first-slide.featherlight-last-slide .featherlight-next,.featherlight-first-slide.featherlight-last-slide .featherlight-previous,.featherlight-loading .featherlight-next,.featherlight-loading .featherlight-previous,.featherlight-swipe-aware .featherlight-next,.featherlight-swipe-aware .featherlight-previous{display:none}@media only screen and (max-device-width:1024px){.featherlight-next:hover,.featherlight-previous:hover{background:0 0}.featherlight-next span,.featherlight-previous span{display:block}}@media only screen and (max-width:1024px){.featherlight-next,.featherlight-previous{top:10px;right:10px;left:85%}.featherlight-previous{left:10px;right:85%}.featherlight-next span,.featherlight-previous span{margin-top:-30px;font-size:40px}}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 6 - 0
jurysys/static/featherlight.gallery.min.js


+ 8 - 0
jurysys/static/featherlight.min.css

@@ -0,0 +1,8 @@
+/**
+ * Featherlight - ultra slim jQuery lightbox
+ * Version 1.7.13 - http://noelboss.github.io/featherlight/
+ *
+ * Copyright 2018, Noël Raoul Bossart (http://www.noelboss.com)
+ * MIT Licensed.
+**/
+html.with-featherlight{overflow:hidden}.featherlight{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:2147483647;text-align:center;white-space:nowrap;cursor:pointer;background:#333;background:rgba(0,0,0,0)}.featherlight:last-of-type{background:rgba(0,0,0,.8)}.featherlight:before{content:'';display:inline-block;height:100%;vertical-align:middle}.featherlight .featherlight-content{position:relative;text-align:left;vertical-align:middle;display:inline-block;overflow:auto;padding:25px 25px 0;border-bottom:25px solid transparent;margin-left:5%;margin-right:5%;max-height:95%;background:#fff;cursor:auto;white-space:normal}.featherlight .featherlight-inner{display:block}.featherlight link.featherlight-inner,.featherlight script.featherlight-inner,.featherlight style.featherlight-inner{display:none}.featherlight .featherlight-close-icon{position:absolute;z-index:9999;top:0;right:0;line-height:25px;width:25px;cursor:pointer;text-align:center;font-family:Arial,sans-serif;background:#fff;background:rgba(255,255,255,.3);color:#000;border:0;padding:0}.featherlight .featherlight-close-icon::-moz-focus-inner{border:0;padding:0}.featherlight .featherlight-image{width:100%}.featherlight-iframe .featherlight-content{border-bottom:0;padding:0;-webkit-overflow-scrolling:touch}.featherlight iframe{border:0}.featherlight *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@media only screen and (max-width:1024px){.featherlight .featherlight-content{margin-left:0;margin-right:0;max-height:98%;padding:10px 10px 0;border-bottom:10px solid transparent}}@media print{html.with-featherlight>*>:not(.featherlight){display:none}}

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 7 - 0
jurysys/static/featherlight.min.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
jurysys/static/jquery-3.2.1.slim.min.js


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 1 - 0
jurysys/static/jquery.min.js


BIN
jurysys/static/logo.png


BIN
jurysys/static/logo_LED.jpg


BIN
jurysys/static/logo_MAI.jpg


BIN
jurysys/static/logo_future.jpg


BIN
jurysys/static/newMAB.png


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 3 - 0
jurysys/static/popper.min.js


+ 60 - 0
jurysys/temp_file.py

@@ -0,0 +1,60 @@
+import os
+from tempfile import NamedTemporaryFile
+
+from django.conf import settings
+
+from django_file_form.models import UploadedFile
+
+try:
+    from pathlib import Path
+except ImportError:
+    from pathlib2 import Path
+
+
+class TempFile(object):
+    def __init__(self):
+        self.named_temporary_file = None
+
+    def create(self, content='abc', prefix=None):
+        if self.named_temporary_file:
+            raise Exception('Tempfile is already created')
+
+        def create_named_temporary_file():
+            f = NamedTemporaryFile(mode='w+b', prefix=prefix or 'tmp')
+            f.write(content.encode())
+            f.seek(0)
+
+            return f
+
+        self.named_temporary_file = create_named_temporary_file()
+
+    def base_name(self):
+        if not self.named_temporary_file:
+            raise Exception('Tempfile is not created')
+
+        return os.path.basename(self.named_temporary_file.name)
+
+    def path(self):
+        if not self.named_temporary_file:
+            raise Exception('Tempfile is not created')
+
+        return self.named_temporary_file.name
+
+    def destroy(self):
+        if self.named_temporary_file:
+            uploaded_file = self.uploaded_file()
+
+            if uploaded_file.exists():
+                uploaded_file.unlink()
+
+            self.named_temporary_file.close()
+            self.named_temporary_file = None
+
+            for uploaded_file in UploadedFile.objects.all():
+                uploaded_file.uploaded_file.delete()
+
+    def uploaded_file(self):
+        if not self.named_temporary_file:
+            raise Exception('Tempfile is not created')
+
+        return Path(settings.MEDIA_ROOT).joinpath('example', self.base_name())

+ 0 - 0
jurysys/templates/import-old-projects.html


+ 55 - 0
jurysys/templates/index.html

@@ -0,0 +1,55 @@
+{% extends "base_generic.html" %}
+{% load static %}
+
+
+{% block content %}
+<div style="background-color: white; margin-left: 20px;margin-right: 20px;padding-top: 30px" class="jumbotron">
+    <h2 style="margin-top: 0px" class="display-3">Dear Jury Members,</h2>
+
+    <p class="lead">so many great projects have submitted! <br>
+It has been a great success: we have never before received more submissions. We received around 70 projects. So this should be an excellent overview of how Media Architecture looks like these days.</p>
+  <hr class="my-4">
+
+<p>By clicking on the menu 'PROJECTS' you will get an overeview of all submissions that need to be voted.<br>
+You can filter the category by clicking the respective tag on top of the screen.<br>
+You should vote all projects, but if you forget to vote some project your other votes will count anyway.<br>
+</p>
+        <p>
+        You can filter the category by clicking the respective tag on top of the screen.<br>
+You should vote all projects, but if you forget to vote some project your other votes will count anyway.<br>
+There’s also a special tag “#not voted” to filter all the projects you haven’t been voted by you already.<br>
+Videos: Some of the projects have inline videos other have links to vimeo / youtube or other websites showing videos. Don’t miss the videos 🙂 <br>
+
+    </p>
+
+    <p>On this website you will be able to vote them by giving points between 0 and 10<br>
+    0   = weakest<br>
+    10 = best<br>
+    If you want, you can also add a short comment, that can be seen by the others as well. - but comments are not obligatory.<br>
+    </p>
+    <p>
+The jury meeting will take place next week on Monday Oct 1st at 9 CET - Central European (Summer) Time via WeChat <br>
+        the easiest way to join the jury meeting on Monday is:<br>
+1. Download WeChat on your mobile (if not already done)<br>
+2. Open The App WeChat<br>
+3. Click on the „+“ in the upper right corner<br>
+4. Select „ scan QR Code“<br>
+5. Scan the QR Code below<br><br>
+        <img src="{% get_static_prefix %}/code.jpg"><br>
+You have time to vote until the meetings begins.<br>
+    </p>
+    <p>
+Please make sure that you have a WeChat account and let us (Juan and me) know what you ID is, so that we can invite you to the jury conference on Oct 1.<br>
+Please respond to awards@mediaarchitecture.org - also in case of questions.<br>
+    </p>
+    <p>
+        It will take you around 2 - 3 hours to see all the projects and vote them. An amazing experience!<br>
+I wish you fun browsing the projects and "happy voting“
+    </p>
+    <p>
+best, Gernot</p>
+
+
+</div>
+
+{% endblock %}

+ 12 - 0
jurysys/templates/jurysys/about.html

@@ -0,0 +1,12 @@
+{% extends "base_generic.html" %}
+{% load static %}
+
+{% block content %}
+<div class="container" style="margin-top: 20px">
+
+{{ about_text | safe}}
+
+
+</div>
+
+{% endblock %}

+ 117 - 0
jurysys/templates/jurysys/add.html

@@ -0,0 +1,117 @@
+{% extends "base_generic.html" %}
+{% load static %}
+{% load crispy_forms_tags %}
+{% crispy project project.helper %}
+{% crispy credits credits.helper %}
+
+{% block content %}
+<link rel="stylesheet" href="{% static "ajaxuploader/css/fileuploader.css" %}">
+
+<style media="screen">
+  .form-error {
+    padding: 60 0 0 20;
+    color: #F00;
+
+  }
+</style>
+
+<div class="container-lg">
+  <form id='upload_mab' enctype="multipart/form-data" method="post">
+    {% csrf_token %}
+        <div class="col-sm-10">
+          <div class="">
+  &nbsp;
+</div>
+<h3>Submit your Project</h3>
+               <div class="">
+  &nbsp;
+</div>
+                  <div class="col-sm-10" style="margin-bottom: 5px">{{info_txt|safe}}</div>
+               <div class="">
+  &nbsp;
+</div>
+        </div>
+    <div class="col-sm-10">
+      {% crispy project %}
+    </div>
+
+    <div class="col-sm-10">
+      {{ description|crispy }}
+
+    </div>
+    <div class="col-sm-10">
+      {% crispy lnks lnks_helper %}
+
+    </div>
+
+
+    <div class="col-sm-10">
+      {% crispy interaction %}
+
+    </div>
+
+    <div class="col-sm-10">
+      {% crispy credits %}
+
+    </div>
+
+       <div class="col-sm-10">
+      {{ project.terms|as_crispy_field  }}
+
+    </div>
+             <div class="col-sm-10">
+
+       <p>Please read our <strong  style="cursor:pointer" data-toggle="modal" data-target="#exampleModalLong">Terms of Participation</strong></p>
+
+                   <!-- Modal -->
+                    <div class="modal fade" id="exampleModalLong" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
+                      <div class="modal-dialog" role="document">
+                        <div class="modal-content">
+                          <div class="modal-header">
+                            <h5 class="modal-title" id="exampleModalLongTitle">TERMS OF PARTICIPATION</h5>
+                            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                              <span aria-hidden="true">&times;</span>
+                            </button>
+                          </div>
+                          <div class="modal-body">
+                            <p>Please note that by submitting photos you give us the right to publish them at no costs in the exhibition, in the “media architecture compendium” (iPad and iPhone App available at the Apple App Store), on the mediaarchitecture.org website and in publications related to the exhibition and scientific publications of members of the Media Architecture Institute and you declare that you have the right for publishing and the dissemination of the photos.</p>
+                            <p>Due to technical and organizational constraints, the organizers of the Media Architecture Biennale 2018 reserve the right to determine the actual extent, timing and layout/editing of the above-mentioned publications and documentaries. <p>
+                            <p>The organizers and the sponsors of Media Architecture Biennale desire to make the results of the competition accessible to as large an audience as possible. To achieve this end, a public relations campaign aimed at particular media outlets (press, radio, TV and Internet) will be conducted.<p>
+                            <p>The organizers reserve the right to determine which of the submitted works will be included in the exhibitions and determine which of the submitted works will be awarded. The entrants hereby consent to making their works available for this purpose. <p>
+                            <p>The entrant hereby declares that he/ she is legally authorized to convey such rights to the extent stipulated above, that he/ she has obtained any and all necessary consent from third parties as called for by regulations governing copyright, personal property rights or other such legal provisions, and that he/ she is prepared to provide proof of such at any time if called upon by the organizers of Media Architecture Biennale 2018 to do so. <p>
+                            <p>Additional stipulations with regard to the conveyance of rights within the framework of agreements concluded in conjunction with participation in the exhibition and awards supplement the rights conveyed in this agreement but do not limit them in the absence of an express written agreement to the contrary. <p>
+                            <p>This agreement elaborating the terms of participation is governed by Austrian law with the exception of the United Nations Convention on Contracts for the International Sale of Goods and all norms serving as legal reference (Verweisungsnormen). The place of jurisdiction is Vienna. <p>
+                            <p>The participants convey to the organizers the non-exclusive right free of temporal or geographic restriction to publish or post the submitted works on presently existing video streaming sites such as YouTube, Vimeo, Flickr. <p>
+                          </div>
+                          <div class="modal-footer">
+                            <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
+                          </div>
+                        </div>
+                      </div>
+                    </div>
+             </div>
+
+    <div class="col-sm-10" style="margin-bottom: 5px">
+      <div class="buttonHolder">
+        <input type="submit" name="submit" class=" btn border-dark rounded-0 mybtn" style="margin-right: " value="Save">
+        <input type="submit" name="addImage" class="btn border-dark rounded-0 mybtn" value="Save & Add Media now">
+      </div>
+    </div>
+
+  </form>
+
+</div>
+
+<div class="">
+  &nbsp; &nbsp;
+</div>
+
+<script src="{% static "jquery/dist/jquery.js" %}"></script>
+<script src="{% static "ajaxuploader/js/fileuploader.js" %}"></script>
+<script src="{% static "file_form/file_form.js" %}"></script>
+<script>
+  $(function() {
+    initUploadFields($('#upload_mab'));
+  });
+</script>
+{% endblock %}

+ 55 - 0
jurysys/templates/jurysys/admin_panel.html

@@ -0,0 +1,55 @@
+{% extends "base_generic.html" %}
+{% load tags %}
+
+{% block content %}
+
+<div class="container-fluid">
+    {% if user.is_superuser %}
+
+<h3 style="margin-top: 10px">Projects Overview </h3>
+
+<form class="form-inline" method="POST"> {% csrf_token %}
+ <table class="table table-sm table-hover">
+
+     <thead class="">
+    <tr>
+        <th scope="col"></th>
+        <th scope="col"> Project</th>
+        <th scope="col"> Category</th>
+        <th scope="col"> Public</th>
+        <th scope="col"> Editable </th>
+        <th scope="col"> submitted</th>
+
+    </tr>
+    {% for project in project_list %}
+    <tr class=""   >
+        <td  scope="col"><img src="{{project.media_set.first.image_small.url}}"  width="50" height="50" alt="{{ project.pk }}"> </td>
+        <td  scope="col"> <a href="{% url 'project-detail' project.pk %}">   {{project.title|upper }} </a></td>
+         <td scope="col">
+        {% for category in project.category.all %}
+        {{category.short_name}}{% if not forloop.last %} | {% endif %}
+             {% endfor %}
+        </td>
+        <td scope="col">
+    <input type="checkbox" class="form-check-input check" id="{{ project.pk }}.public" name="{{ project.pk }}.public" {% if project.public %}checked="checked"{% endif %}>
+  </td>
+        <td scope="col">
+    <input type="checkbox" class="form-check-input check" id="{{ project.pk }}.edit" name="{{ project.pk }}.edit" {% if project.edit %}checked="checked"{% endif %}>
+ </td>
+        <td scope="col"> {{project.sumbitted}} </td>
+
+    </tr>
+    {% endfor %}
+
+
+
+
+ </table>
+    <button  class="btn border-dark rounded-0 mybtn" type="submit">Submit </button>
+</form>
+
+    {% else %}
+    <p>You are not authorized to view this page. </p>
+{% endif %}
+{% endblock %}
+

+ 14 - 0
jurysys/templates/jurysys/error_404.html

@@ -0,0 +1,14 @@
+{% load static %}
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>MAB20</title>
+</head>
+<body>
+<div class="conatiner-fluid" >
+    <img style="display: block;margin-left: auto;margin-right: auto;" src="{% get_static_prefix %}css/404.gif">
+</div>
+
+</body>
+</html>

+ 163 - 0
jurysys/templates/jurysys/file_upload.html

@@ -0,0 +1,163 @@
+{% extends "base_generic.html" %}
+{% load static %}
+{% load crispy_forms_tags %}
+{% crispy media media.helper %}
+
+
+{% block content %}
+
+
+
+<div class="container-fluid">
+
+    <h3 style="margin-top: 10px">{{project.title}} Media </h3>
+
+ <table class="table table-sm table-hover">
+
+
+    {% for pic in images %}
+    <tr class=""   >
+        <td  scope="col"><img src="{{pic.image_small.url}}"  width="50" height="50" alt="{{ pic.name_for }}"> </td>
+        <td  scope="col">    {{pic.name_for }} </td>
+        <td scope="col"> <a href="{% url 'delete-media' pk=pic.pk %}"><button  type="button" class="btn btn-default" style="font-family: bariol_iconsbasic">T </button> </a> </td>
+
+    </tr>
+    {% endfor %}
+      {% for pic in video %}
+    <tr class=""   >
+        <td  scope="col"><img src="{{pic.image.url}}"  width="50" height="50" alt="Video: {{ pic.name_for }}"> </td>
+        <td  scope="col">    {{pic.name_for }} </td>
+
+        <td scope="col" > <a href="{% url 'delete-video' pk=pic.pk %}"><button  type="button" class="btn btn-default" style="font-family: bariol_iconsbasic">T </button> </a></td>
+
+    </tr>
+    {% endfor %}
+
+
+
+
+ </table>
+    <a href="{% url 'project-detail' pk=project.pk %}">  <input  class="btn border-dark rounded-0 mybtn" value="Show Site"></a>
+</div >
+
+ <div class="">
+  &nbsp;
+</div>
+
+
+<div class="container-fluid">
+
+    <h4 style="margin-top: 10px">Upload new Media </h4>
+    {% if warning%}
+<div class="alert alert-danger rounded-0" role="alert">
+  {{warning}}
+</div>
+{% endif %}
+    <p style="margin-top: 10px">Please upload no more than 7 pictures and two videos. </p>
+
+    {% if video_count and media_count%}
+    <p style="margin-top: 10px">You have uploaded too many media items. You can delete Media to upload again.</p>
+    {% elif video_count%}
+    <p style="margin-top: 10px">You have uploaded too many videos. Make sure you only upload Photos.</p>
+
+
+ <link rel="stylesheet" href="{% static "ajaxuploader/css/fileuploader.css" %}">
+
+   <script src="{% static "jquery/dist/jquery.js" %}"></script>
+        <script src="{% static "ajaxuploader/js/fileuploader.js" %}"></script>
+        <script src="{% static "file_form/file_form.js" %}"></script>
+        <script>
+            $(function() {
+                initUploadFields($('#upload_mab'));
+            });
+        </script>
+
+
+<form id='upload_mab' enctype="multipart/form-data" method="post">
+    {% csrf_token %}
+
+     <div class="col-sm-10">
+         {% crispy media %}
+
+         {% include 'django_file_form/upload_template.html' %}
+        </div>
+     <div class="col-sm-10">
+
+        <div class="buttonHolder">
+        <input type="submit" name="add" class="btn border-dark rounded-0 mybtn" value="Add Media" >
+        </div>
+    </div>
+
+</form>
+
+       {% elif media_count%}
+    <p style="margin-top: 10px">You have uploaded too many photos. Make sure you only upload Videos.</p>
+    <link rel="stylesheet" href="{% static "ajaxuploader/css/fileuploader.css" %}">
+
+   <script src="{% static "jquery/dist/jquery.js" %}"></script>
+        <script src="{% static "ajaxuploader/js/fileuploader.js" %}"></script>
+        <script src="{% static "file_form/file_form.js" %}"></script>
+        <script>
+            $(function() {
+                initUploadFields($('#upload_mab'));
+            });
+        </script>
+
+
+<form id='upload_mab' enctype="multipart/form-data" method="post">
+    {% csrf_token %}
+
+     <div class="col-sm-10">
+         {% crispy media %}
+
+         {% include 'django_file_form/upload_template.html' %}
+        </div>
+     <div class="col-sm-10">
+
+        <div class="buttonHolder">
+        <input type="submit" name="add" class="btn border-dark rounded-0 mybtn" value="Add Media" >
+        </div>
+    </div>
+
+</form>
+               {% else %}
+
+      <link rel="stylesheet" href="{% static "ajaxuploader/css/fileuploader.css" %}">
+
+   <script src="{% static "jquery/dist/jquery.js" %}"></script>
+        <script src="{% static "ajaxuploader/js/fileuploader.js" %}"></script>
+        <script src="{% static "file_form/file_form.js" %}"></script>
+        <script>
+            $(function() {
+                initUploadFields($('#upload_mab'));
+            });
+        </script>
+
+
+<form id='upload_mab' enctype="multipart/form-data" method="post">
+    {% csrf_token %}
+
+     <div class="col-sm-10">
+         {% crispy media %}
+
+         {% include 'django_file_form/upload_template.html' %}
+        </div>
+     <div class="col-sm-10">
+
+        <div class="buttonHolder">
+        <input type="submit" name="add" class="btn border-dark rounded-0 mybtn" value="Add Media" >
+        </div>
+    </div>
+
+</form>
+
+
+           {% endif %}
+
+    </div>
+
+<div class="">
+  &nbsp;
+</div>
+
+{% endblock %}

+ 37 - 0
jurysys/templates/jurysys/form.html

@@ -0,0 +1,37 @@
+{% extends "base_generic.html" %}
+{% load static %}
+{% load crispy_forms_tags %}
+
+{% block content %}
+
+<style media="screen">
+
+  .form-error{
+    padding: 60 0 0 20;
+    color: #F00;
+
+  }
+</style>
+
+  <div class="col-sm-6">
+    <form method="post">
+      {% csrf_token %}
+      <!-- Left here in case we need to debug -->
+      {% if signup_errors %}
+      <div class='invalid-feedback' style="display: none;">{{ signup_errors }}</div>
+      {% endif %}
+      {% if contact_errors %}
+      <div class='invalid-feedback' style="display: none;" >{{ contact_errors }}</div>
+      {% endif %}
+      <!-- end of debug -->
+      {{ form|crispy }}
+
+
+      {% csrf_token %}
+      {{ signUp|crispy }}
+    <button type="submit" class="btn border-dark rounded-0 mybtn" >Register</button>  </form>
+    <div class="">
+      <br><br><br>
+    </div>
+     </div>
+{% endblock %}

+ 43 - 0
jurysys/templates/jurysys/media_overview.html

@@ -0,0 +1,43 @@
+{% extends "base_generic.html" %}
+{% load tags %}
+{% block script %}
+
+{% endblock %}
+
+{% block content %}
+
+<div class="container-fluid">
+
+    <h3 style="margin-top: 10px">{{project.title}} Media </h3>
+
+ <table class="table table-sm table-hover">
+
+
+    {% for pic in media %}
+    <tr class=""   >
+        <td  scope="col"><img src="{{pic.image_small.url}}"  width="50" height="50" alt="{{ pic.name_for }}"> </td>
+        <td  scope="col">    {{pic.name_for }} </td>
+        <td scope="col"> <a href="{% url 'delete-media' pk=pic.pk %}"><button  type="button" class="btn btn-default" style="font-family: bariol_iconsbasic">T </button> </a> </td>
+
+    </tr>
+    {% endfor %}
+      {% for pic in video %}
+    <tr class=""   >
+        <td  scope="col"><img src="{{pic.image.url}}"  width="50" height="50" alt="Video: {{ pic.name_for }}"> </td>
+        <td  scope="col">    {{pic.name_for }} </td>
+
+        <td scope="col" > <a href="{% url 'delete-video' pk=pic.pk %}"><button  type="button" class="btn btn-default" style="font-family: bariol_iconsbasic">T </button> </a></td>
+
+    </tr>
+    {% endfor %}
+
+
+
+
+ </table>
+
+         <a href="{% url 'add-Image' project.pk %}"> <button class="btn border-dark rounded-0 mybtn" type="submit">Add Media </button> </a>
+</div>
+
+
+{% endblock %}

+ 67 - 0
jurysys/templates/jurysys/myProjects.html

@@ -0,0 +1,67 @@
+{% extends "base_generic.html" %}
+{% load tags %}
+{% block script %}
+<script>
+    $(document).ready(function(){
+$('form').submit(function () {
+
+
+
+
+    if () {
+        alert('CID doubled');
+        return false;
+    }
+});
+
+});
+</script>
+{% endblock %}
+
+{% block content %}
+
+<div class="container-fluid">
+
+<h3 style="margin-top: 10px"> {{user.username}}'s Projects </h3>
+
+{% if project_list %}
+ <table class="table table-sm table-hover">
+    <caption>* FP = Future trends & Prototypes; AA = Animated Architecture; MA = Money Architecture; SMA = Spatial Media Art; PAUI = Participatory Architecture & Urban Interaction</caption>
+
+     <thead class="">
+    <tr>
+        <th scope="col"></th>
+        <th scope="col"> Project</th>
+        <th scope="col"> Category</th>
+        <th scope="col"> Editable</th>
+
+    </tr>
+    {% for project in project_list %}
+    <tr class="{% get_sucsess project %}"   >
+        <td  scope="col"><img src="{{project.media_set.first.image_small.url}}"  width="50" height="50" alt="{{ project.pk }}"> </td>
+        <td  scope="col"> <a href="{% url 'project-detail' project.pk %}">   {{project.title|upper }} </a></td>
+          <td scope="col">
+        {% for category in project.category.all %}
+        {{category.short_name}}{% if not forloop.last %} | {% endif %}
+             {% endfor %}
+        </td>
+        <td scope="col"> {% if project.edit %} <a href="{% url 'edit-project' project.pk %}"> edit Project </a> ; <a href="{% url 'add-Image' project.pk %}"> edit Media </a> {% else %} already sumbitted {% endif %} </td>
+
+    </tr>
+    {% endfor %}
+
+
+
+
+ </table>
+    <a href="{% url 'NewSubmitView' %}"><button class="btn border-dark rounded-0 mybtn" type="submit">Add Project </button> </a>
+ {% else %}
+<div class="container-fluid">
+
+    <h6>Seems like you haven't uploaded anything yet :(<br> Start Sumbitting now :  <a href="{% url 'NewSubmitView' %}"><button class="btn border-dark rounded-0 mybtn" type="submit">Add Projects </button> </a></h6>
+</div>
+
+{% endif %}
+
+{% endblock %}
+

+ 151 - 0
jurysys/templates/jurysys/project_detail.html

@@ -0,0 +1,151 @@
+{% extends "base_generic.html" %}
+{% load tags %}
+{% load static %}
+{% block script %}
+<link href="{% static 'featherlight.min.css' %}" type="text/css" rel="stylesheet" />
+<script src="{% static 'featherlight.min.js' %}" type="text/javascript" charset="utf-8"></script>
+<link href="{% static 'featherlight.gallery.min.css' %}" type="text/css" rel="stylesheet" />
+<script src="{% static 'featherlight.gallery.min.js' %}" type="text/javascript" charset="utf-8"></script>
+<script>
+$(document).ready(function(){
+
+$('.gallery').featherlightGallery({
+		previousIcon: '«',
+		nextIcon: '»',
+		galleryFadeIn: 250,
+		openSpeed: 250,
+	});
+
+});
+
+
+</script>
+
+
+{% endblock %}
+
+{% block content %}
+
+<hr style="color: black; background-color: black; margin-top: 0px; width: 130%; display: flex; margin-left: -20px; margin-right:20px ">
+
+<div clas="container">
+
+
+<h2 class="titlepro" style="margin-top: 7px;color: black; font-weight: bold">{{ project.title }}
+      <small class="text-muted">{% if project.year %} {{ project.year }}, {% endif %}  {% for country in project.country %} {{ country.name }}, {% endfor %} {% if project.city %} {{ project.city }} {% endif %}</small>
+</h2>
+<p class="lead kur"> {{ project.header }}</p>
+  <div class="row" style="display: flex">
+
+
+{% for media in project.media_set.all %}
+
+         <div style="flex: {% get_ratio media %}">
+    <img href="{{media.image_big.url}}" align="middle" src="{{media.image_norm.url }}" class="gallery img-fluid img-responsive"  alt="" style="width: 100%;height: auto;vertical-align: middle;">
+
+         </div>
+
+{% endfor %}
+
+
+
+  </div>
+
+
+    <div class="row" style="margin-top: 10px">
+     
+     <div class="col-sm-6">
+         <p ><h5 class="black"></h5></p>
+          {% for video in project.video_set.all %}
+
+          <video autoplay style="width: 100%;height: auto;vertical-align: middle; padding-bottom: 10px" controls>
+              <source src="{{video.image.url}}" type="video/mp4">
+          </video>
+
+      {% endfor %}
+         <p>{{project.teaser_txt}}</p>
+         <p>{{project.description_txt}}</p>
+
+         {% for link in project.link_set.all %}
+         <p> <a href="{{link.link}}">{{link.link}}</a></p>
+
+
+      {% endfor %}
+
+
+     </div>
+     <div class="col-sm-4">
+         {% if request.user|has_group:"jury" %}
+         <p ><h5 class="black mediumkur" style="margin: 0px">Please vote here:</h5></p>
+            <form class="form-inline needs-validation" method="POST"> {% csrf_token %}
+                <p><textarea style="margin-top: 0px;padding-top: 0px" type="text" rows="5" cols="25" class="form-control border-dark rounded-0" id="comment" name="comment" placeholder='{% get_comment project user %}'>{% get_comment project user %}</textarea></br>
+                <br> <input style='width: 50px;' type="number" class="form-control border-dark rounded-0" id="vote" name="vote" placeholder='{% get_int_vote project user %}' required> <button  class="btn border-dark rounded-0 mybtn" type="submit">Submit </button> </br>
+                </p>
+                <small class="form-text text-muted">
+                   <p style="margin-bottom: 0px">Only Values between 0 an 10 are taken into account.</p>
+                    <p style="margin-bottom: 0px">0 = weakest</p>
+                    <p style="margin-bottom: 0px">10 = excellent</p>
+
+
+                </small>
+
+                <div class="invalid-feedback"> Please enter a Vote between 0 an 10 </div>
+            </form>
+            <p style="margin-top: 4px"><strong>Award Categories:</strong> {% for cat in project.category.all %} {{cat.name}}{% if not forloop.last %}, {% endif %}{% endfor %}</p>
+         {% endif %}
+
+         <p ><h5 class="black mediumkur">Details</h5></p>
+
+         {% for field, value in credits %}
+         {% if value and not field == "ID" %}
+          <p class="fieldname"><strong class="mediumkur"> {{ field }} :</strong> {{ value }}</p>
+         {% endif %}
+         {% endfor %}
+
+          <p ><h5 class="mediumkur">Descriptions</h5></p>
+
+         {% for field, value in descriptions %}
+         {% if value and not field == "ID"%}
+          <p class="fieldname"><strong> {{ field }} :</strong> {{ value }}</p>
+         {% endif %}
+         {% endfor %}
+
+
+
+         <p ><h5 class="mediumkur">Participatory architecture & urban interaction</h5></p>
+
+         {% for field, value in interactions %}
+         {% if value and not field == "ID"%}
+          <p class="fieldname"><strong class="mediumkur"> {{ field }} :</strong> {{ value }}</p>
+         {% endif %}
+         {% endfor %}
+
+
+
+
+         <p ><h5 class="mediumkur">Mediacredits</h5></p>
+
+         {% for media in project.media_set.all %}
+         {% if media.copyright %}
+          <p class="fieldname"> {{ media.copyright }}</p>
+         {% endif %}
+         {% endfor %}
+         {% for media in project.video_set.all %}
+         {% if media.copyright %}
+          <p class="fieldname"> {{ media.copyright }}</p>
+         {% endif %}
+         {% endfor %}
+
+
+
+
+     </div>
+
+ </div>
+
+</div>
+    </div>
+
+
+
+{% endblock %}

+ 249 - 0
jurysys/templates/jurysys/project_overwiev.html

@@ -0,0 +1,249 @@
+{% extends "base_generic.html" %}
+{% load tags %}
+{% load countries %}
+{% load static %}
+
+{% block script %}
+<script>
+$(document).ready(function(){
+
+    $("#how").fadeOut(0);
+
+    $("#how").click(function(){
+
+        $("#how").fadeOut(200);
+    });
+
+    $("button#show").click(function(){
+        $(".card").show();
+        $("button").removeClass("mark");
+        $("#how").fadeOut(40);
+
+    });
+
+    $("button#vote").click(function(){
+        $(".card").show();
+        $("button").removeClass("mark");
+
+         $(".card").not(".notvote").hide();
+        $("button#vote").addClass("mark");
+
+        if($(".card").filter(":visible").length < 1){
+            $("#how").fadeIn(200)
+        } else{
+           $("#how").fadeOut(10)
+        }
+    });
+
+     {% for category in cat_list %}
+
+    {% if category %}
+
+    $("[id='{{category.short_name|cut:" "}}']").click(function(){
+        $(".card").show();
+        $("button").removeClass("mark");
+
+        $(".card").not(".{{category.short_name|cut:" "}}").hide();
+        $("[id='{{category.short_name|cut:" "}}']").addClass("mark");
+
+        if($(".card").filter(":visible").length < 1){
+            $("#how").fadeIn(200)
+        } else{
+           $("#how").fadeOut(10)
+        }
+    });
+
+    {% endif %}
+
+    {% endfor %}
+
+
+    {% for country in count_list %}
+
+    {% if country %}
+
+    $("[id='{{country.code}}']").click(function(){
+        $(".card").show();
+        $("button").removeClass("mark");
+
+        $(".card").not(".{{country.code}}").hide();
+        $("[id='{{country.code}}']").addClass("mark");
+
+        if($(".card").filter(":visible").length < 1){
+            $("#how").fadeIn(200)
+        } else{
+           $("#how").fadeOut(10)
+        }
+
+    });
+
+    {% endif %}
+
+    {% endfor %}
+
+    {% for year in year_list %}
+
+    $("[id='{{year}}']").click(function(){
+        $(".card").show();
+        $("button").removeClass("mark");
+
+        $(".card").not(".{{year}}").hide();
+        $("[id='{{year}}']").addClass("mark");
+
+        if($(".card").filter(":visible").length < 1){
+            $("#how").fadeIn(200)
+        } else{
+           $("#how").fadeOut(10)
+        }
+
+    });
+
+    {% endfor %}
+
+
+});
+</script>
+
+
+<style media="screen">
+  .card-columns .mab-card{
+      width: 97%;
+      height: 95%;
+      display: inline-block;
+      margin-top:4px;
+      max-width: 100%;
+  }
+
+  .mab-card-body{
+
+    padding: 5px;
+    padding-left: 0px;
+
+  }
+
+  .mab-project-title {
+
+    position: absolute;
+    bottom: 8px;
+    left: 16px;
+    color: white;
+    font-size: large;
+    font-weight: bold;
+    text-align: left;
+    background-color: rgba(0, 0, 0, 0);
+    text-shadow:  0 0 6px #444, 0 0 20px #888;
+
+  }
+
+  .mab-project-vote {
+
+    position: absolute;
+    top: 8px;
+    right: 16px;
+    color: white;
+    font-size: large
+  }
+
+  .mab-card-text {
+
+    color: black;
+    margin-top: 0px;
+
+  }
+
+</style>
+
+{% endblock %}
+
+
+
+
+
+
+{% block content %}
+
+<nav class="navbar-expand-sm tag" style="margin-left: 0px">
+  <button class="navbar-toggler border-thin mybtn rounded-0 tag navbar-expand-sm" type="button" data-toggle="collapse" data-target="#tags" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle tags" style="font-size: 15px">
+    <span class="mybtn"></span> Show All Tags ⋁
+  </button>
+  <div class="row border-dark collapse navbar-collapse" id="tags">
+    <div class="container-fluid">
+      <button id='show' class="border-thin mybtn " style="margin-right: 2px;margin-bottom: 2px">#Show All</button>
+      {% if user.is_authenticated %}
+      <button id='vote' class="border-thin mybtn " style="margin-right: 2px;margin-bottom: 2px">#Not Voted</button>
+      {% endif %}
+      {% for category in cat_list %}
+      <button id='{{category.short_name}}' class="border-thin mybtn " style="margin-right: 2px;margin-bottom: 2px">#{{category.name}}</button>
+      {% endfor %}
+
+      {% for year in year_list %}
+      <button id='{{year}}' class="border-thin mybtn " style="margin-right: 2px;margin-bottom: 2px">#{{year}}</button>
+      {% endfor %}
+
+    {% for country in count_list %}
+                <button id='{{country.code}}' class="border-thin mybtn " style="margin-right: 2px;margin-bottom: 2px" >#{{country.name}}</button>
+    {% endfor %}
+
+      </div>
+</div>
+
+</nav>
+
+
+<div id="how" style="margin-top: 5px;text-align: center;vertical-align: middle; max-height: 40px;" class="container-fluid">
+
+  <p style="color: black"> There are no projects matching your selection, as you have selected multiple tags.
+    Click <nobr><button id='show' class="border-thin mybtn" style="margin-right: 2px;margin-top: 15px">#Show All</button></nobr> to deselect all tags.
+  </p>
+</div>
+
+<! -- Start Cards --><div class="card-columns" style="margin-top: 7px; orphans: 1; windows:1;">
+
+  {{main_card|safe}}
+
+
+  {% for project in project_list %}
+
+  <div class="mab-card {% for name in project.country %} {{name.code}} {% endfor %} {{project.year}} {% for category in project.category.all %} {{category.short_name}} {% endfor %} card rounded-0 border-0 {% if user.is_authenticated %} {% get_vote_class project user %} {% endif %}" style="">
+    <a href="{% url 'project-detail' project.pk %}">
+      <div style="position: relative;text-align: center;">
+        <img class="{% if user.is_authenticated %}{% get_vote_class project user %} {% endif %} {% for category in project.category.all %} {{category.short_name}} {% endfor %} card-img-top rounded-0" src="{{project.media_set.first.image_norm.url}}" alt="image">
+        <div class="mab-project-title" style="">{{project.title|upper }}</div>
+        {% if user.is_authenticated %}
+        <div class="mab-project-vote" style="">{% get_vote project user %}</div>
+        {% endif %}
+      </div>
+    </a>
+    <div class="card-body mab-card-body" style="">
+      <!--<div class="border-0 d-flex justify-content">
+        <p class="card-title" style="margin-bottom: 3px"><a href="{% url 'project-detail' project.pk %}"> {{project.header }} </a></p>
+
+      </div>-->
+
+      <p class="mab-card-text card-text" style="">
+        {% for name in project.country %}
+        <button id='{{name.code}}' class="border-thin mybtn" style="">#{{name.name}}</button>
+        {% endfor %}
+
+        <button id='{{project.year}}' class="border-thin mybtn" style="">#{{project.year}}</button>
+
+        {% for category in project.category.all %}
+        <button id='{{category.short_name}}' class="border-thin mybtn" style="">#{{category.name}}</button>
+        {% endfor %}
+      </p>
+    </div>
+  </div>
+
+    {% endfor %}
+
+
+
+
+  {{sponsor_cards|safe}}
+
+
+<! -- End Cards --></div>
+
+
+
+{% endblock %}

+ 13 - 0
jurysys/templates/jurysys/submit.html

@@ -0,0 +1,13 @@
+{% extends "base_generic.html" %}
+{% load static %}
+
+{% block content %}
+<div class="container" style="margin-top: 20px">
+<h3>Welcome to the Media Architecture Submissions</h3><br>
+
+      {{submit_text|safe}}
+
+
+</div>
+
+{% endblock %}

+ 53 - 0
jurysys/templates/jurysys/voteDetail.html

@@ -0,0 +1,53 @@
+{% extends "base_generic.html" %}
+{% load tags %}
+
+{% block content %}
+
+<div class="container-fluid">
+
+
+    {% if user.is_superuser %}
+
+<h3 style="margin-top: 10px">Votesoverwiev </h3>
+
+
+ <table class="table table-sm table-hover">
+    <caption>* FP = Future trends & Prototypes; AA = Animated Architecture; MA = Money Architecture; SMA = Spatial Media Art; PAUI = Participatory Architecture & Urban Interaction</caption>
+
+     <thead class="">
+    <tr>
+        <th scope="col"></th>
+        <th scope="col"> Project</th>
+        <th scope="col"> Category</th>
+        <th scope="col"> Average</th>
+        {% for user in user %}
+        <th scope="col"> {{user.username}}</th>
+        {% endfor %}
+    </tr>
+    {% for project in project_list %}
+    <tr class="{% get_sucsess project %}"   >
+        <td  scope="col"><img src="{{project.media_set.first.image_small.url}}"  width="50" height="50" alt="image"> </td>
+        <td  scope="col"> <a href="{% url 'project-detail' project.pk %}">   {{project.title|upper }} </a></td>
+         <td scope="col">
+        {% for category in project.category.all %}
+        {{category.short_name}}{% if not forloop.last %} | {% endif %}
+             {% endfor %}
+        </td>
+        <td scope="col"> {% get_avg project %}</td>
+        {% for user in user %}
+        <td scope="col"><abbr title="{% get_vote_txt project user%}">  {% get_vote_simple project user %} </abbr></td>
+        {% endfor %}
+    </tr>
+    {% endfor %}
+
+
+
+
+ </table>
+</div>
+
+{% else %}
+    <p>You are not authorized to view this page. </p>
+{% endif %}
+{% endblock %}
+

+ 71 - 0
jurysys/templates/jurysys/votes_cid.html

@@ -0,0 +1,71 @@
+{% extends "base_generic.html" %}
+{% load tags %}
+{% block script %}
+<script>
+    $(document).ready(function(){
+$('form').submit(function () {
+
+
+
+
+    if () {
+        alert('CID doubled');
+        return false;
+    }
+});
+
+});
+</script>
+{% endblock %}
+
+{% block content %}
+
+<div class="container-fluid">
+
+    {% if user.is_superuser %}
+
+
+<h3 style="margin-top: 10px">Votesoverwiev </h3>
+
+<form class="form-inline" method="POST"> {% csrf_token %}
+ <table class="table table-sm table-hover">
+    <caption>* FP = Future trends & Prototypes; AA = Animated Architecture; MA = Money Architecture; SMA = Spatial Media Art; PAUI = Participatory Architecture & Urban Interaction</caption>
+
+     <thead class="">
+    <tr>
+        <th scope="col"></th>
+        <th scope="col"> Project</th>
+        <th scope="col"> Category</th>
+        <th scope="col"> Average</th>
+        <th scope="col"> CID</th>
+        <th scope="col"> submitted</th>
+
+    </tr>
+    {% for project in project_list %}
+    <tr class="{% get_sucsess project %}"   >
+        <td  scope="col"><img src="{{project.media_set.first.image_small.url}}"  width="50" height="50" alt="{{ project.pk }}"> </td>
+        <td  scope="col"> <a href="{% url 'project-detail' project.pk %}">   {{project.title|upper }} </a></td>
+         <td scope="col">
+        {% for category in project.category.all %}
+        {{category.short_name}}{% if not forloop.last %} | {% endif %}
+             {% endfor %}
+        </td>
+        <td scope="col"> {% get_avg project %}</td>
+        <td scope="col"> <input type="text" id="{{ project.pk }}cid" name="{{ project.pk }}.cid" placeholder="{{project.class_cid}}"> </td>
+        <td scope="col"> <input type="text" id="{{ project.pk }}sub" name="{{ project.pk }}.sub" placeholder="{{project.sumbitted}}"> </td>
+
+    </tr>
+    {% endfor %}
+
+
+
+
+ </table>
+    <button  class="btn border-dark rounded-0 mybtn" type="submit">Submit </button>
+</form>
+
+{% else %}
+    <p>You are not authorized to view this page. </p>
+{% endif %}
+    {% endblock %}
+

+ 23 - 0
jurysys/templates/mab18/importold.html

@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Import</title>
+</head>
+<body>
+<form class="form-inline needs-validation" method="POST">
+                {% csrf_token %}
+                <br>
+    <input style='width: 50px;' type="number" class="form-control border-dark rounded-0" id="from" name="from"  required>
+    <input style='width: 50px;' type="number" class="form-control border-dark rounded-0" id="to" name="to"  required>
+    <button  class="btn border-dark rounded-0 mybtn" type="submit">Submit </button>
+    </br>
+
+            </form>
+
+
+
+<p>{{faild|linebreaks}}</p>
+
+</body>
+</html>

+ 0 - 0
jurysys/templatetags/__init__.py


+ 134 - 0
jurysys/templatetags/tags.py

@@ -0,0 +1,134 @@
+from django import template
+from PIL import Image
+from django.conf import settings
+from django.db.models import Avg
+
+register = template.Library()
+from ..models import Project, User, Vote, Media, Contact
+
+@register.simple_tag
+def get_vote(project, user):
+    if user.groups.filter(name='jury').exists():
+        try:
+            vote = Vote.objects.get(juryMember=user, project=project)
+        except Vote.DoesNotExist:
+            return 'VOTE !'
+
+        return 'VOTE: ' + str(vote.vote)
+    return ''
+
+@register.simple_tag
+def get_int_vote(project, user):
+
+    try:
+        vote = Vote.objects.get(juryMember=user, project=project)
+
+    except Vote.DoesNotExist:
+        return 0
+
+    return vote.vote
+
+@register.simple_tag
+def get_comment(project, user):
+
+    try:
+        vote = Vote.objects.get(juryMember=user, project=project)
+
+    except Vote.DoesNotExist:
+        return 'Here is some space for your comments (not obligatory)'
+    if vote.comment=='':
+        return 'Here is some space for your comments (not obligatory)'
+
+    return vote.comment
+
+
+@register.simple_tag
+def get_ratio(media):
+    path = media.image.url
+
+    try:
+         with Image.open(settings.MEDIA_URL + path) as img:
+             width, height = img.size
+
+    except FileNotFoundError:
+        return 3;
+
+
+    return str(width/height)
+
+
+
+@register.simple_tag
+def get_vote_simple(project, user):
+    try:
+        vote = Vote.objects.get(juryMember=user, project=project)
+
+    except Vote.DoesNotExist:
+        return '-'
+
+    return str(vote.vote)
+
+
+@register.simple_tag
+def get_avg(project):
+    try:
+        votes = Vote.objects.filter(project=project)
+
+    except Vote.DoesNotExist:
+        return '-'
+
+    return votes.aggregate(Avg('vote'))['vote__avg']
+
+@register.simple_tag
+def get_countries(project_list):
+    countries = {''}
+    for project in project_list:
+
+       if not countries.__contains__(project.country):
+           countries.add(project.country)
+
+    return countries
+
+@register.simple_tag
+def get_vote_class(project, user):
+
+    try:
+        Vote.objects.get(juryMember=user, project=project)
+
+    except Vote.DoesNotExist:
+        return 'notvote'
+
+    return 'vote'
+
+@register.simple_tag
+def get_sucsess(project):
+    try:
+        votes = Vote.objects.filter(project=project)
+
+    except Vote.DoesNotExist:
+        return ''
+    if votes.aggregate(Avg('vote'))['vote__avg'] is not None:
+        if votes.aggregate(Avg('vote'))['vote__avg'] >= 7:
+            return 'table-success'
+
+    return ''
+
+@register.simple_tag
+def get_vote_txt(project, user):
+    try:
+        vote = Vote.objects.get(juryMember=user, project=project)
+
+    except Vote.DoesNotExist:
+        return ''
+
+    return str(vote.comment)
+
+@register.filter(name='has_group')
+def has_group(user, group_name):
+    return user.groups.filter(name=group_name).exists()
+
+@register.filter(name='has_project')
+def has_project(user, project):
+    contact = Contact.objects.get(user=user)
+    return Project.objects.filter(contact=contact).filter(pk=project).exists()
+

+ 3 - 0
jurysys/tests.py

@@ -0,0 +1,3 @@
+from django.test import TestCase
+
+# Create your tests here.

+ 33 - 0
jurysys/urls.py

@@ -0,0 +1,33 @@
+from django.urls import path
+from . import views
+from .views import *
+from django.conf import settings
+from django.conf.urls.static import static
+from django.views.generic import RedirectView
+from django.conf.urls import url, include
+
+urlpatterns = [
+    path('', RedirectView.as_view(url='projects/'), name='index'),
+    path('about/', views.about, name='about'),
+    path('submit/', views.submit, name='submit'),
+    path('projects/', views.ProjectsView.as_view(), name='projects'),
+    path('project/<int:pk>', views.DetailView.as_view(), name='project-detail'),
+    path('votes/', views.VoteView.as_view(), name='vote-detail'),
+    path('votescid/', views.CidView.as_view(), name='votecid-detail'),
+    path('admin_panel/', views.AdminView.as_view(), name='admin-panel'),
+    #path('import-old-projects/', importOldProjects.as_view(template_name="mab18/importold.html"), name='import-old-projects'),
+    #path('import-old-json/', importOldJson.as_view(template_name="mab18/importold.html"),name='import-old-json'),
+    path('light-box/', lightboximg.as_view(template_name="mab18/importold.html"),name='lightbox'),
+    path('register/', views.registerView.as_view(), name='registerView'),
+    path('addProject/', views.NewSubmitView.as_view(), name='NewSubmitView'),
+    path('myProjects/', views.UsersProjects.as_view(), name='MyProjects'),
+    path('editProject/<int:pk>', views.EditView.as_view(), name='edit-project'),
+    path('addImage/<int:pk>', views.uploadView.as_view(), name='add-Image'),
+    path('images/<int:pk>', views.MediaView.as_view(), name='media-overview'),
+    url(r'^delete_media/(?P<pk>\d+)/$', views.delete_media, name='delete-media'),
+    url(r'^delete_video/(?P<pk>\d+)/$', views.delete_video, name='delete-video'),
+    url(r'^upload/', include('django_file_form.urls')),
+    url(r'^handle_upload$', views.handle_upload, name='file_form_handle_upload'),
+    url(r'^upload_mab$', views.handle_upload, name='upload_mab'),
+    url(r'^home', views.home, name='home'),
+    ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 248 - 0
jurysys/views.py


+ 15 - 0
manage.py

@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+import os
+import sys
+
+if __name__ == "__main__":
+    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "MAB18_site.settings")
+    try:
+        from django.core.management import execute_from_command_line
+    except ImportError as exc:
+        raise ImportError(
+            "Couldn't import Django. Are you sure it's installed and "
+            "available on your PYTHONPATH environment variable? Did you "
+            "forget to activate a virtual environment?"
+        ) from exc
+    execute_from_command_line(sys.argv)

+ 12 - 0
requirements.txt

@@ -0,0 +1,12 @@
+django==2.2.10
+django-htmlmin==0.10.0
+Pillow==6.2.0
+django-smtp-ssl==1.0
+django-imagekit==4.0.2
+mysqlclient==1.3.13
+django-file-form==0.5.0
+django-crispy-forms==1.7.2
+django-constance[database]==2.6.0
+django-picklefield==2.1.1
+django-countries==5.5
+django-simple-captcha==0.5.12

+ 3 - 0
start.sh

@@ -0,0 +1,3 @@
+#!/bin/bash
+source ./venv/bin/activate
+python manage.py runserver 0.0.0.0:8000

+ 11 - 0
update.sh

@@ -0,0 +1,11 @@
+#!/bin/bash
+cd $(dirname $0)
+git checkout .
+git pull
+source ./venv/bin/activate
+pip install --disable-pip-version-check -r requirements.txt --no-cache
+./manage.py collectstatic --noinput
+./manage.py makemigrations
+./manage.py migrate
+touch ./${PWD##*/}/wsgi.py
+#./manage.py compilemessages -l de

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott