Initial commit

This commit is contained in:
Joshua Rubingh committed 2020-11-13 15:31:14 +01:00
1 parent 2af942da5a
commit 10e2a34143
103 files changed
+3609

No files matched your search

+1
View File
@@ -0,0 +1 @@
default_app_config = 'apps.RUG_template.apps.RugTemplateConfig'
+3
View File
@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.
+8
View File
@@ -0,0 +1,8 @@
from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _
class RugTemplateConfig(AppConfig):
name = 'apps.RUG_template'
label = 'RUG_template'
verbose_name = _('RUG Template')
verbose_name_plural = _('RUG Template')
@@ -0,0 +1,213 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-30 15:42+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps/RUG_template/apps.py:7 apps/RUG_template/apps.py:8
msgid "RUG Template"
msgstr ""
#: apps/RUG_template/templates/400.html:4
#: apps/RUG_template/templates/400.html:5
msgid "Oops, sorry, bad request (400)"
msgstr ""
#: apps/RUG_template/templates/400.html:7
#: apps/RUG_template/templates/404.html:7
msgid ""
"Unfortunately, the link to this page does not work, the page (temporarily) "
"does not exist or it has been moved."
msgstr ""
#: apps/RUG_template/templates/403.html:4
#: apps/RUG_template/templates/403.html:5
msgid "Oops, sorry, forbidden access (403)"
msgstr ""
#: apps/RUG_template/templates/403.html:7
msgid "Unfortunately, you do not have rights to access this url."
msgstr ""
#: apps/RUG_template/templates/404.html:4
#: apps/RUG_template/templates/404.html:5
msgid "Oops, sorry, page not found (404)"
msgstr ""
#: apps/RUG_template/templates/500.html:4
#: apps/RUG_template/templates/500.html:5
msgid "Oops, sorry, server error (500)"
msgstr ""
#: apps/RUG_template/templates/500.html:7
msgid "Unfortunately, something went wrong on the server."
msgstr ""
#: apps/RUG_template/templates/admin/base_site.html:24
msgid "Language"
msgstr ""
#: apps/RUG_template/templates/admin/base_site.html:32
msgid "Documentation"
msgstr ""
#: apps/RUG_template/templates/admin/base_site.html:36
msgid "Change password"
msgstr ""
#: apps/RUG_template/templates/admin/base_site.html:38
msgid "Log out"
msgstr ""
#: apps/RUG_template/templates/base.html:7
msgid "Welcome at RUG"
msgstr ""
#: apps/RUG_template/templates/base.html:113
msgid "Language selection"
msgstr ""
#: apps/RUG_template/templates/index.html:4
#: apps/RUG_template/templates/index.html:5
msgid "Welcome to the RUG Template page"
msgstr ""
#: apps/RUG_template/templates/index.html:7
msgid "Simple RUG Template"
msgstr ""
#: apps/RUG_template/templates/index.html:8
msgid "Some more text"
msgstr ""
#: apps/RUG_template/templates/menu.html:4
msgid "Section"
msgstr ""
#: apps/RUG_template/templates/menu.html:7
msgid "Menu item"
msgstr ""
#: apps/RUG_template/templates/pager.html:13
msgid "previous"
msgstr ""
#: apps/RUG_template/templates/pager.html:21
msgid "next"
msgstr ""
#: apps/RUG_template/templates/registration/login.html:4
#: apps/RUG_template/templates/registration/login.html:5
#: apps/RUG_template/templates/registration/login.html:8
#: apps/RUG_template/templates/registration/login.html:18
msgid "Login"
msgstr ""
#: apps/RUG_template/templates/registration/login.html:10
msgid ""
"You can login here to create your schedules. If you do not have a login, "
"please contact: some_one@rug.nl"
msgstr ""
#: apps/RUG_template/templates/registration/login.html:24
msgid "Lost password?"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_complete.html:4
#: apps/RUG_template/templates/registration/password_reset_complete.html:5
#: apps/RUG_template/templates/registration/password_reset_complete.html:7
msgid "Password reset complete"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_complete.html:9
#, python-format
msgid ""
"Your new password has been set. You can log in now on the <a href="
"\"%(login_url)s\">log in page</a>."
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_confirm.html:4
#: apps/RUG_template/templates/registration/password_reset_confirm.html:5
#: apps/RUG_template/templates/registration/password_reset_confirm.html:7
msgid "Set a new password!"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_confirm.html:9
msgid "Here you can set a new password."
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_confirm.html:17
msgid "Change my password"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_confirm.html:23
msgid ""
"The password reset link was invalid, possibly because it has already been "
"used. Please request a new password reset."
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_done.html:4
#: apps/RUG_template/templates/registration/password_reset_done.html:5
#: apps/RUG_template/templates/registration/password_reset_done.html:8
msgid "Reset password, email sent"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_done.html:11
msgid ""
"We've emailed you instructions for setting your password. You should receive "
"the email shortly!"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_email.html:2
#, python-format
msgid ""
"You're receiving this email because you requested a password reset for your "
"user account at %(site_name)s.\n"
"\n"
"Please go to the following page and choose a new password:\n"
"\n"
"%(protocol)s://%(domain)s%(reset_url)s\n"
"\n"
"Your username, in case you've forgotten: %(user)s\n"
"\n"
"Thanks for using our site!\n"
"\n"
"The %(site_name)s team"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_form.html:4
#: apps/RUG_template/templates/registration/password_reset_form.html:5
#: apps/RUG_template/templates/registration/password_reset_form.html:8
msgid "Reset password"
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_form.html:10
msgid ""
"Here you can request a password reset. Please enter your email address that "
"is used for registration."
msgstr ""
#: apps/RUG_template/templates/registration/password_reset_form.html:17
msgid "Reset my password"
msgstr ""
#: apps/RUG_template/templates/singup.html:4
#: apps/RUG_template/templates/singup.html:5
#: apps/RUG_template/templates/singup.html:7
#: apps/RUG_template/templates/singup.html:14
msgid "Singup"
msgstr ""
@@ -0,0 +1,240 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-07-30 15:42+0200\n"
"PO-Revision-Date: 2020-05-27 15:59+0200\n"
"Last-Translator: Joshua Rubingh <j.g.rubingh@rug.nl>\n"
"Language-Team: \n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.0.6\n"
#: apps/RUG_template/apps.py:7 apps/RUG_template/apps.py:8
msgid "RUG Template"
msgstr "RUG Template"
#: apps/RUG_template/templates/400.html:4
#: apps/RUG_template/templates/400.html:5
msgid "Oops, sorry, bad request (400)"
msgstr "Oeps, sorry, pagina niet gevonden (404)"
#: apps/RUG_template/templates/400.html:7
#: apps/RUG_template/templates/404.html:7
msgid ""
"Unfortunately, the link to this page does not work, the page (temporarily) "
"does not exist or it has been moved."
msgstr ""
"Helaas werkt de link naar deze pagina niet, de pagina bestaat (tijdelijk) "
"niet of is verplaatst."
#: apps/RUG_template/templates/403.html:4
#: apps/RUG_template/templates/403.html:5
msgid "Oops, sorry, forbidden access (403)"
msgstr "Oeps, sorry, geen toegang (403)"
#: apps/RUG_template/templates/403.html:7
msgid "Unfortunately, you do not have rights to access this url."
msgstr "Helaas heb je geen rechten om toegang te krijgen tot deze URL."
#: apps/RUG_template/templates/404.html:4
#: apps/RUG_template/templates/404.html:5
msgid "Oops, sorry, page not found (404)"
msgstr "Oeps, sorry, pagina niet gevonden (404)"
#: apps/RUG_template/templates/500.html:4
#: apps/RUG_template/templates/500.html:5
msgid "Oops, sorry, server error (500)"
msgstr "Oeps, sorry, server error (500)"
#: apps/RUG_template/templates/500.html:7
msgid "Unfortunately, something went wrong on the server."
msgstr "Helaas is er iets misgegaan op de server."
#: apps/RUG_template/templates/admin/base_site.html:24
msgid "Language"
msgstr "Taal"
#: apps/RUG_template/templates/admin/base_site.html:32
msgid "Documentation"
msgstr "Documentatie"
#: apps/RUG_template/templates/admin/base_site.html:36
msgid "Change password"
msgstr "Verander wachtwoord"
#: apps/RUG_template/templates/admin/base_site.html:38
msgid "Log out"
msgstr "Logouit"
#: apps/RUG_template/templates/base.html:7
msgid "Welcome at RUG"
msgstr "Welkom bij de RUG"
#: apps/RUG_template/templates/base.html:113
msgid "Language selection"
msgstr "Taal keuze"
#: apps/RUG_template/templates/index.html:4
#: apps/RUG_template/templates/index.html:5
msgid "Welcome to the RUG Template page"
msgstr "Welkom bij de RUG Template pagina"
#: apps/RUG_template/templates/index.html:7
msgid "Simple RUG Template"
msgstr "Simpel RUG Template"
#: apps/RUG_template/templates/index.html:8
msgid "Some more text"
msgstr "Nog wat tekst"
#: apps/RUG_template/templates/menu.html:4
msgid "Section"
msgstr "Sectie"
#: apps/RUG_template/templates/menu.html:7
msgid "Menu item"
msgstr "Menu item"
#: apps/RUG_template/templates/pager.html:13
msgid "previous"
msgstr "vorige"
#: apps/RUG_template/templates/pager.html:21
msgid "next"
msgstr "volgende"
#: apps/RUG_template/templates/registration/login.html:4
#: apps/RUG_template/templates/registration/login.html:5
#: apps/RUG_template/templates/registration/login.html:8
#: apps/RUG_template/templates/registration/login.html:18
msgid "Login"
msgstr "Login"
#: apps/RUG_template/templates/registration/login.html:10
msgid ""
"You can login here to create your schedules. If you do not have a login, "
"please contact: some_one@rug.nl"
msgstr ""
"Hier kunt u inloggen om nieuwe roosters te maken. Als je geen login hebt "
"neem dan contact op met iemand@rug.nl"
#: apps/RUG_template/templates/registration/login.html:24
msgid "Lost password?"
msgstr "Wachtwoord kwijt?"
#: apps/RUG_template/templates/registration/password_reset_complete.html:4
#: apps/RUG_template/templates/registration/password_reset_complete.html:5
#: apps/RUG_template/templates/registration/password_reset_complete.html:7
msgid "Password reset complete"
msgstr "Wachtwoord reset is kompleet"
#: apps/RUG_template/templates/registration/password_reset_complete.html:9
#, python-format
msgid ""
"Your new password has been set. You can log in now on the <a href="
"\"%(login_url)s\">log in page</a>."
msgstr ""
"Je nieuwe wachtwoord is ingesteld. Je kunt nu inloggen via de <a href="
"\"%(login_url)s\">inlog pagina</a>."
#: apps/RUG_template/templates/registration/password_reset_confirm.html:4
#: apps/RUG_template/templates/registration/password_reset_confirm.html:5
#: apps/RUG_template/templates/registration/password_reset_confirm.html:7
msgid "Set a new password!"
msgstr "Stel een nieuw wachtwoord in!"
#: apps/RUG_template/templates/registration/password_reset_confirm.html:9
msgid "Here you can set a new password."
msgstr "Hier kun je een nieuw wachtwoord instellen."
#: apps/RUG_template/templates/registration/password_reset_confirm.html:17
msgid "Change my password"
msgstr "Verander mijn wachtwoord"
#: apps/RUG_template/templates/registration/password_reset_confirm.html:23
msgid ""
"The password reset link was invalid, possibly because it has already been "
"used. Please request a new password reset."
msgstr ""
"De link voor het opnieuw instellen van het wachtwoord was ongeldig, mogelijk "
"omdat deze al is gebruikt. Vraag een nieuwe reset van het wachtwoord aan."
#: apps/RUG_template/templates/registration/password_reset_done.html:4
#: apps/RUG_template/templates/registration/password_reset_done.html:5
#: apps/RUG_template/templates/registration/password_reset_done.html:8
msgid "Reset password, email sent"
msgstr "Wachtwoord is gereset, email is verstuurd"
#: apps/RUG_template/templates/registration/password_reset_done.html:11
msgid ""
"We've emailed you instructions for setting your password. You should receive "
"the email shortly!"
msgstr ""
"We hebben u een e-mail gestuurd met instructies voor het instellen van uw "
"wachtwoord. U ontvangt de e-mail binnenkort!"
#: apps/RUG_template/templates/registration/password_reset_email.html:2
#, python-format
msgid ""
"You're receiving this email because you requested a password reset for your "
"user account at %(site_name)s.\n"
"\n"
"Please go to the following page and choose a new password:\n"
"\n"
"%(protocol)s://%(domain)s%(reset_url)s\n"
"\n"
"Your username, in case you've forgotten: %(user)s\n"
"\n"
"Thanks for using our site!\n"
"\n"
"The %(site_name)s team"
msgstr ""
"Je ontvangt deze e-mail omdat je een wachtwoord reset hebt aangevraagd voor "
"je gebruikersaccount op%(site_name)s.\n"
"\n"
"Ga naar de volgende pagina en kies een nieuw wachtwoord:\n"
"\n"
"%(protocol)s://%(domain)s%(reset_url)s\n"
"\n"
"Uw gebruikersnaam, voor het geval u het bent vergeten: %(user)s\n"
"\n"
"Bedankt voor het gebruiken van onze site!\n"
"\n"
"Het team van %(site_name)s"
#: apps/RUG_template/templates/registration/password_reset_form.html:4
#: apps/RUG_template/templates/registration/password_reset_form.html:5
#: apps/RUG_template/templates/registration/password_reset_form.html:8
msgid "Reset password"
msgstr "Reset wachtwoord"
#: apps/RUG_template/templates/registration/password_reset_form.html:10
msgid ""
"Here you can request a password reset. Please enter your email address that "
"is used for registration."
msgstr ""
"Hier kunt u een wachtwoord reset aanvragen. Voer uw e-mailadres in dat wordt "
"gebruikt voor registratie."
#: apps/RUG_template/templates/registration/password_reset_form.html:17
msgid "Reset my password"
msgstr "Reset mijn wachtwoord"
#: apps/RUG_template/templates/singup.html:4
#: apps/RUG_template/templates/singup.html:5
#: apps/RUG_template/templates/singup.html:7
#: apps/RUG_template/templates/singup.html:14
msgid "Singup"
msgstr "Opgeven"
#~ msgid "Password reset"
#~ msgstr "Wachtwoord reset"
@@ -0,0 +1,38 @@
import pytz
import requests
from ipware import get_client_ip
from django.utils import timezone
# make sure you add `TimezoneMiddleware` appropriately in settings.py: 'apps.RUG_template.middleware.TimezoneMiddleware'
class TimezoneMiddleware:
""" Middleware to check user timezone. """
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
client_ip, is_routable = get_client_ip(request)
user_time_zone = request.session.get('user_time_zone', None)
try:
if user_time_zone is None and is_routable and client_ip is not None:
# Here we use an online service to get visitor info. Maybe not the nicest way to do it, but it is a way
# Also we only check when we get a public IP address. Local networks will not be checked online
# https://freegeoip.app
freegeoip_response = requests.get('https://freegeoip.app/json/{0}'.format(client_ip))
freegeoip_response_json = freegeoip_response.json()
user_time_zone = freegeoip_response_json['time_zone']
if user_time_zone:
request.session['user_time_zone'] = user_time_zone
timezone.activate(pytz.timezone(user_time_zone))
except:
pass
response = self.get_response(request)
# Code to be executed for each request/response after
# the view is called.
return response
Whitespace-only changes.
+3
View File
@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.
Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

@@ -0,0 +1 @@
!function(){var n={y:function(n){return 1===n?"χρόνος":"χρόνια"},mo:function(n){return 1===n?"μήνας":"μήνες"},w:function(n){return 1===n?"εβδομάδα":"εβδομάδες"},d:function(n){return 1===n?"μέρα":"μέρες"},h:function(n){return 1===n?"ώρα":"ώρες"},m:function(n){return 1===n?"λεπτό":"λεπτά"},s:function(n){return 1===n?"δευτερόλεπτο":"δευτερόλεπτα"},ms:function(n){return 1===n?"χιλιοστό του δευτερολέπτου":"χιλιοστά του δευτερολέπτου"},decimal:","},y={ar:{y:function(n){return 1===n?"سنة":"سنوات"},mo:function(n){return 1===n?"شهر":"أشهر"},w:function(n){return 1===n?"أسبوع":"أسابيع"},d:function(n){return 1===n?"يوم":"أيام"},h:function(n){return 1===n?"ساعة":"ساعات"},m:function(n){return 2<n&&n<11?"دقائق":"دقيقة"},s:function(n){return 1===n?"ثانية":"ثواني"},ms:function(n){return 1===n?"جزء من الثانية":"أجزاء من الثانية"},decimal:","},bg:{y:function(n){return["години","година","години"][i(n)]},mo:function(n){return["месеца","месец","месеца"][i(n)]},w:function(n){return["седмици","седмица","седмици"][i(n)]},d:function(n){return["дни","ден","дни"][i(n)]},h:function(n){return["часа","час","часа"][i(n)]},m:function(n){return["минути","минута","минути"][i(n)]},s:function(n){return["секунди","секунда","секунди"][i(n)]},ms:function(n){return["милисекунди","милисекунда","милисекунди"][i(n)]},decimal:","},ca:{y:function(n){return"any"+(1===n?"":"s")},mo:function(n){return"mes"+(1===n?"":"os")},w:function(n){return"setman"+(1===n?"a":"es")},d:function(n){return"di"+(1===n?"a":"es")},h:function(n){return"hor"+(1===n?"a":"es")},m:function(n){return"minut"+(1===n?"":"s")},s:function(n){return"segon"+(1===n?"":"s")},ms:function(n){return"milisegon"+(1===n?"":"s")},decimal:","},cs:{y:function(n){return["rok","roku","roky","let"][o(n)]},mo:function(n){return["měsíc","měsíce","měsíce","měsíců"][o(n)]},w:function(n){return["týden","týdne","týdny","týdnů"][o(n)]},d:function(n){return["den","dne","dny","dní"][o(n)]},h:function(n){return["hodina","hodiny","hodiny","hodin"][o(n)]},m:function(n){return["minuta","minuty","minuty","minut"][o(n)]},s:function(n){return["sekunda","sekundy","sekundy","sekund"][o(n)]},ms:function(n){return["milisekunda","milisekundy","milisekundy","milisekund"][o(n)]},decimal:","},da:{y:"år",mo:function(n){return"måned"+(1===n?"":"er")},w:function(n){return"uge"+(1===n?"":"r")},d:function(n){return"dag"+(1===n?"":"e")},h:function(n){return"time"+(1===n?"":"r")},m:function(n){return"minut"+(1===n?"":"ter")},s:function(n){return"sekund"+(1===n?"":"er")},ms:function(n){return"millisekund"+(1===n?"":"er")},decimal:","},de:{y:function(n){return"Jahr"+(1===n?"":"e")},mo:function(n){return"Monat"+(1===n?"":"e")},w:function(n){return"Woche"+(1===n?"":"n")},d:function(n){return"Tag"+(1===n?"":"e")},h:function(n){return"Stunde"+(1===n?"":"n")},m:function(n){return"Minute"+(1===n?"":"n")},s:function(n){return"Sekunde"+(1===n?"":"n")},ms:function(n){return"Millisekunde"+(1===n?"":"n")},decimal:","},el:n,en:{y:function(n){return"year"+(1===n?"":"s")},mo:function(n){return"month"+(1===n?"":"s")},w:function(n){return"week"+(1===n?"":"s")},d:function(n){return"day"+(1===n?"":"s")},h:function(n){return"hour"+(1===n?"":"s")},m:function(n){return"minute"+(1===n?"":"s")},s:function(n){return"second"+(1===n?"":"s")},ms:function(n){return"millisecond"+(1===n?"":"s")},decimal:"."},es:{y:function(n){return"año"+(1===n?"":"s")},mo:function(n){return"mes"+(1===n?"":"es")},w:function(n){return"semana"+(1===n?"":"s")},d:function(n){return"día"+(1===n?"":"s")},h:function(n){return"hora"+(1===n?"":"s")},m:function(n){return"minuto"+(1===n?"":"s")},s:function(n){return"segundo"+(1===n?"":"s")},ms:function(n){return"milisegundo"+(1===n?"":"s")},decimal:","},et:{y:function(n){return"aasta"+(1===n?"":"t")},mo:function(n){return"kuu"+(1===n?"":"d")},w:function(n){return"nädal"+(1===n?"":"at")},d:function(n){return"päev"+(1===n?"":"a")},h:function(n){return"tund"+(1===n?"":"i")},m:function(n){return"minut"+(1===n?"":"it")},s:function(n){return"sekund"+(1===n?"":"it")},ms:function(n){return"millisekund"+(1===n?"":"it")},decimal:","},fa:{y:"سال",mo:"ماه",w:"هفته",d:"روز",h:"ساعت",m:"دقیقه",s:"ثانیه",ms:"میلی ثانیه",decimal:"."},fi:{y:function(n){return 1===n?"vuosi":"vuotta"},mo:function(n){return 1===n?"kuukausi":"kuukautta"},w:function(n){return"viikko"+(1===n?"":"a")},d:function(n){return"päivä"+(1===n?"":"ä")},h:function(n){return"tunti"+(1===n?"":"a")},m:function(n){return"minuutti"+(1===n?"":"a")},s:function(n){return"sekunti"+(1===n?"":"a")},ms:function(n){return"millisekunti"+(1===n?"":"a")},decimal:","},fo:{y:"ár",Line truncated
@@ -0,0 +1,64 @@
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
function init_password_toggles() {
jQuery('input[type="password"]').each(function(counter,value){
jQuery('<button type="button" class="password_toggle password_hidden icon" title="Toggle password" />').text('Toggle password').insertAfter(value);
});
jQuery('button.password_toggle').on('click',function(event){
event.preventDefault();
toggle_password(this);
});
}
function toggle_password(button) {
button = jQuery(button);
let password_field = button.prev('input');
let show = password_field.attr('type') == 'password';
password_field.attr('type',( show ? 'text' : 'password' ));
button.removeClass('password_hidden password_shown').addClass(( show ? 'password_shown' : 'password_hidden' ))
}
function human_sizes(value) {
const units = ['B','KB','MB','GB','TB','HB'];
const unit_value = 1000;
let counter = 0;
while (value / unit_value > 1) {
value /= unit_value;
counter++;
}
return value + '' + units[counter];
}
function label_required_fields() {
jQuery('input,textarea,select').filter('[required]:visible').each(function(counter,value){
let field = jQuery(value);
jQuery('label[for="' + field.attr('id') + '"]').append('<span class="required">*</span>');
});
/*
jQuery('select').each(function(counter,value){
let field = jQuery(value);
console.log(jQuery('label[for="' + field.attr('id') + '"]'));
jQuery('label[for="' + field.attr('id') + '"]').append('<span class="required">*</span>');
});
*/
}
jQuery(function(){
jQuery.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", Cookies.get('csrftoken'));
}
}
});
init_password_toggles();
label_required_fields();
});
@@ -0,0 +1,252 @@
/**
* https://raw.githubusercontent.com/elo80ka/django-dynamic-formset/master/src/jquery.formset.js
* jQuery Formset 1.5-pre
* @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com)
* @requires jQuery 1.2.6 or later
*
* Copyright (c) 2009, Stanislaus Madueke
* All rights reserved.
*
* Licensed under the New BSD License
* See: http://www.opensource.org/licenses/bsd-license.php
*/
;(function($) {
$.fn.formset = function(opts)
{
var options = $.extend({}, $.fn.formset.defaults, opts),
flatExtraClasses = options.extraClasses.join(' '),
totalForms = $('#id_' + options.prefix + '-TOTAL_FORMS'),
maxForms = $('#id_' + options.prefix + '-MAX_NUM_FORMS'),
minForms = $('#id_' + options.prefix + '-MIN_NUM_FORMS'),
childElementSelector = 'input,select,textarea,label,div',
$$ = $(this),
applyExtraClasses = function(row, ndx) {
if (options.extraClasses) {
row.removeClass(flatExtraClasses);
row.addClass(options.extraClasses[ndx % options.extraClasses.length]);
}
},
updateElementIndex = function(elem, prefix, ndx) {
var idRegex = new RegExp(prefix + '-(\\d+|__prefix__)-'),
replacement = prefix + '-' + ndx + '-';
if (elem.attr("for")) elem.attr("for", elem.attr("for").replace(idRegex, replacement));
if (elem.attr('id')) elem.attr('id', elem.attr('id').replace(idRegex, replacement));
if (elem.attr('name')) elem.attr('name', elem.attr('name').replace(idRegex, replacement));
},
hasChildElements = function(row) {
return row.find(childElementSelector).length > 0;
},
showAddButton = function() {
return maxForms.length == 0 || // For Django versions pre 1.2
(maxForms.val() == '' || (maxForms.val() - totalForms.val() > 0));
},
/**
* Indicates whether delete link(s) can be displayed - when total forms > min forms
*/
showDeleteLinks = function() {
return minForms.length == 0 || // For Django versions pre 1.7
(minForms.val() == '' || (totalForms.val() - minForms.val() > 0));
},
insertDeleteLink = function(row) {
var delCssSelector = $.trim(options.deleteCssClass).replace(/\s+/g, '.'),
addCssSelector = $.trim(options.addCssClass).replace(/\s+/g, '.');
var delButtonHTML = '<a class="' + options.deleteCssClass + '" href="javascript:void(0)">' + options.deleteText +'</a>';
if (options.deleteContainerClass) {
// If we have a specific container for the remove button,
// place it as the last child of that container:
row.find('[class*="' + options.deleteContainerClass + '"]').append(delButtonHTML);
} else if (row.is('TR')) {
// If the forms are laid out in table rows, insert
// the remove button into the last table cell:
row.children(':last').append(delButtonHTML);
} else if (row.is('UL') || row.is('OL')) {
// If they're laid out as an ordered/unordered list,
// insert an <li> after the last list item:
row.append('<li>' + delButtonHTML + '</li>');
} else {
// Otherwise, just insert the remove button as the
// last child element of the form's container:
row.append(delButtonHTML);
}
// Check if we're under the minimum number of forms - not to display delete link at rendering
if (!showDeleteLinks()){
row.find('a.' + delCssSelector).hide();
}
row.find('a.' + delCssSelector).click(function() {
var row = $(this).parents('.' + options.formCssClass),
del = row.find('input:hidden[id $= "-DELETE"]'),
buttonRow = row.siblings("a." + addCssSelector + ', .' + options.formCssClass + '-add'),
forms;
if (del.length) {
// We're dealing with an inline formset.
// Rather than remove this form from the DOM, we'll mark it as deleted
// and hide it, then let Django handle the deleting:
del.val('on');
row.hide();
forms = $('.' + options.formCssClass).not(':hidden');
totalForms.val(forms.length);
} else {
row.remove();
// Update the TOTAL_FORMS count:
forms = $('.' + options.formCssClass).not('.formset-custom-template');
totalForms.val(forms.length);
}
for (var i=0, formCount=forms.length; i<formCount; i++) {
// Apply `extraClasses` to form rows so they're nicely alternating:
applyExtraClasses(forms.eq(i), i);
if (!del.length) {
// Also update names and IDs for all child controls (if this isn't
// a delete-able inline formset) so they remain in sequence:
forms.eq(i).find(childElementSelector).each(function() {
updateElementIndex($(this), options.prefix, i);
});
}
}
// Check if we've reached the minimum number of forms - hide all delete link(s)
if (!showDeleteLinks()){
$('a.' + delCssSelector).each(function(){$(this).hide();});
}
// Check if we need to show the add button:
if (buttonRow.is(':hidden') && showAddButton()) buttonRow.show();
// If a post-delete callback was provided, call it with the deleted form:
if (options.removed) options.removed(row);
return false;
});
};
$$.each(function(i) {
var row = $(this),
del = row.find('input:checkbox[id $= "-DELETE"]');
if (del.length) {
// If you specify "can_delete = True" when creating an inline formset,
// Django adds a checkbox to each form in the formset.
// Replace the default checkbox with a hidden field:
if (del.is(':checked')) {
// If an inline formset containing deleted forms fails validation, make sure
// we keep the forms hidden (thanks for the bug report and suggested fix Mike)
del.before('<input type="hidden" name="' + del.attr('name') +'" id="' + del.attr('id') +'" value="on" />');
row.hide();
} else {
del.before('<input type="hidden" name="' + del.attr('name') +'" id="' + del.attr('id') +'" />');
}
// Hide any labels associated with the DELETE checkbox:
$('label[for="' + del.attr('id') + '"]').hide();
del.remove();
}
if (hasChildElements(row)) {
row.addClass(options.formCssClass);
if (row.is(':visible')) {
insertDeleteLink(row);
applyExtraClasses(row, i);
}
}
});
if ($$.length) {
var hideAddButton = !showAddButton(),
addButton, template;
if (options.formTemplate) {
// If a form template was specified, we'll clone it to generate new form instances:
template = (options.formTemplate instanceof $) ? options.formTemplate : $(options.formTemplate);
template.removeAttr('id').addClass(options.formCssClass + ' formset-custom-template');
template.find(childElementSelector).each(function() {
updateElementIndex($(this), options.prefix, '__prefix__');
});
insertDeleteLink(template);
} else {
// Otherwise, use the last form in the formset; this works much better if you've got
// extra (>= 1) forms (thnaks to justhamade for pointing this out):
if (options.hideLastAddForm) $('.' + options.formCssClass + ':last').hide();
template = $('.' + options.formCssClass + ':last').clone(true).removeAttr('id');
template.find('input:hidden[id $= "-DELETE"]').remove();
// Clear all cloned fields, except those the user wants to keep (thanks to brunogola for the suggestion):
template.find(childElementSelector).not(options.keepFieldValues).each(function() {
var elem = $(this);
// If this is a checkbox or radiobutton, uncheck it.
// This fixes Issue 1, reported by Wilson.Andrew.J:
if (elem.is('input:checkbox') || elem.is('input:radio')) {
elem.attr('checked', false);
} else {
elem.val('');
}
});
}
// FIXME: Perhaps using $.data would be a better idea?
options.formTemplate = template;
var addButtonHTML = '<a class="' + options.addCssClass + '" href="javascript:void(0)">' + options.addText + '</a>';
if (options.addContainerClass) {
// If we have a specific container for the "add" button,
// place it as the last child of that container:
var addContainer = $('[class*="' + options.addContainerClass + '"');
addContainer.append(addButtonHTML);
addButton = addContainer.find('[class="' + options.addCssClass + '"]');
} else if ($$.is('TR')) {
// If forms are laid out as table rows, insert the
// "add" button in a new table row:
var numCols = $$.eq(0).children().length, // This is a bit of an assumption :|
buttonRow = $('<tr><td colspan="' + numCols + '">' + addButtonHTML + '</tr>').addClass(options.formCssClass + '-add');
$$.parent().append(buttonRow);
addButton = buttonRow.find('a');
} else {
// Otherwise, insert it immediately after the last form:
$$.filter(':last').after(addButtonHTML);
addButton = $$.filter(':last').next();
}
if (hideAddButton) addButton.hide();
addButton.click(function() {
var formCount = parseInt(totalForms.val()),
row = options.formTemplate.clone(true).removeClass('formset-custom-template'),
buttonRow = $($(this).parents('tr.' + options.formCssClass + '-add').get(0) || this),
delCssSelector = $.trim(options.deleteCssClass).replace(/\s+/g, '.');
applyExtraClasses(row, formCount);
row.insertBefore(buttonRow).show();
row.find(childElementSelector).each(function() {
updateElementIndex($(this), options.prefix, formCount);
});
totalForms.val(formCount + 1);
// Check if we're above the minimum allowed number of forms -> show all delete link(s)
if (showDeleteLinks()){
$('a.' + delCssSelector).each(function(){$(this).show();});
}
// Check if we've exceeded the maximum allowed number of forms:
if (!showAddButton()) buttonRow.hide();
// If a post-add callback was supplied, call it with the added form:
if (options.added) options.added(row);
return false;
});
}
return $$;
};
/* Setup plugin defaults */
$.fn.formset.defaults = {
prefix: 'form', // The form prefix for your django formset
formTemplate: null, // The jQuery selection cloned to generate new form instances
addText: 'add another', // Text for the add link
deleteText: 'remove', // Text for the delete link
addContainerClass: null, // Container CSS class for the add link
deleteContainerClass: null, // Container CSS class for the delete link
addCssClass: 'add-row', // CSS class applied to the add link
deleteCssClass: 'delete-row', // CSS class applied to the delete link
formCssClass: 'dynamic-form', // CSS class applied to each form in a formset
extraClasses: [], // Additional CSS classes, which will be applied to each form in turn
keepFieldValues: '', // jQuery selector for fields whose values should be kept when the form is cloned
added: null, // Function called each time a new form is added
removed: null, // Function called each time a form is deleted
hideLastAddForm: false // When set to true, hide last empty add form (becomes visible when clicking on add button)
};
})(jQuery);
@@ -0,0 +1 @@
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&"object"==typeof module.exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){return function(A){"use strict";var L=A.tablesorter={version:"2.31.3",parsers:[],widgets:[],defaults:{theme:"default",widthFixed:!1,showProcessing:!1,headerTemplate:"{content}",onRenderTemplate:null,onRenderHeader:null,cancelSelection:!0,tabIndex:!0,dateFormat:"mmddyyyy",sortMultiSortKey:"shiftKey",sortResetKey:"ctrlKey",usNumberFormat:!0,delayInit:!1,serverSideSorting:!1,resort:!0,headers:{},ignoreCase:!0,sortForce:null,sortList:[],sortAppend:null,sortStable:!1,sortInitialOrder:"asc",sortLocaleCompare:!1,sortReset:!1,sortRestart:!1,emptyTo:"bottom",stringTo:"max",duplicateSpan:!0,textExtraction:"basic",textAttribute:"data-text",textSorter:null,numberSorter:null,initWidgets:!0,widgetClass:"widget-{name}",widgets:[],widgetOptions:{zebra:["even","odd"]},initialized:null,tableClass:"",cssAsc:"",cssDesc:"",cssNone:"",cssHeader:"",cssHeaderRow:"",cssProcessing:"",cssChildRow:"tablesorter-childRow",cssInfoBlock:"tablesorter-infoOnly",cssNoSort:"tablesorter-noSort",cssIgnoreRow:"tablesorter-ignoreRow",cssIcon:"tablesorter-icon",cssIconNone:"",cssIconAsc:"",cssIconDesc:"",cssIconDisabled:"",pointerClick:"click",pointerDown:"mousedown",pointerUp:"mouseup",selectorHeaders:"> thead th, > thead td",selectorSort:"th, td",selectorRemove:".remove-me",debug:!1,headerList:[],empties:{},strings:{},parsers:[],globalize:0,imgAttr:0},css:{table:"tablesorter",cssHasChild:"tablesorter-hasChildRow",childRow:"tablesorter-childRow",colgroup:"tablesorter-colgroup",header:"tablesorter-header",headerRow:"tablesorter-headerRow",headerIn:"tablesorter-header-inner",icon:"tablesorter-icon",processing:"tablesorter-processing",sortAsc:"tablesorter-headerAsc",sortDesc:"tablesorter-headerDesc",sortNone:"tablesorter-headerUnSorted"},language:{sortAsc:"Ascending sort applied, ",sortDesc:"Descending sort applied, ",sortNone:"No sort applied, ",sortDisabled:"sorting is disabled",nextAsc:"activate to apply an ascending sort",nextDesc:"activate to apply a descending sort",nextNone:"activate to remove the sort"},regex:{templateContent:/\{content\}/g,templateIcon:/\{icon\}/g,templateName:/\{name\}/i,spaces:/\s+/g,nonWord:/\W/g,formElements:/(input|select|button|textarea)/i,chunk:/(^([+\-]?(?:\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,chunks:/(^\\0|\\0$)/,hex:/^0x[0-9a-f]+$/i,comma:/,/g,digitNonUS:/[\s|\.]/g,digitNegativeTest:/^\s*\([.\d]+\)/,digitNegativeReplace:/^\s*\(([.\d]+)\)/,digitTest:/^[\-+(]?\d+[)]?$/,digitReplace:/[,.'"\s]/g},string:{max:1,min:-1,emptymin:1,emptymax:-1,zero:0,none:0,"null":0,top:!0,bottom:!1},keyCodes:{enter:13},dates:{},instanceMethods:{},setup:function(t,r){if(t&&t.tHead&&0!==t.tBodies.length&&!0!==t.hasInitialized){var e,o="",s=A(t),a=A.metadata;t.hasInitialized=!1,t.isProcessing=!0,t.config=r,A.data(t,"tablesorter",r),L.debug(r,"core")&&(console[console.group?"group":"log"]("Initializing tablesorter v"+L.version),A.data(t,"startoveralltimer",new Date)),r.supportsDataObject=((e=A.fn.jquery.split("."))[0]=parseInt(e[0],10),1<e[0]||1===e[0]&&4<=parseInt(e[1],10)),r.emptyTo=r.emptyTo.toLowerCase(),r.stringTo=r.stringTo.toLowerCase(),r.last={sortList:[],clickedIndex:-1},/tablesorter\-/.test(s.attr("class"))||(o=""!==r.theme?" tablesorter-"+r.theme:""),r.namespace?r.namespace="."+r.namespace.replace(L.regex.nonWord,""):r.namespace=".tablesorter"+Math.random().toString(16).slice(2),r.table=t,r.$table=s.addClass(L.css.table+" "+r.tableClass+o+" "+r.namespace.slice(1)).attr("role","grid"),r.$headers=s.find(r.selectorHeaders),r.$table.children().children("tr").attr("role","row"),r.$tbodies=s.children("tbody:not(."+r.cssInfoBlock+")").attr({"aria-live":"polite","aria-relevant":"all"}),r.$table.children("caption").length&&((o=r.$table.children("caption")[0]).id||(o.id=r.namespace.slice(1)+"caption"),r.$table.attr("aria-labelledby",o.id)),r.widgetInit={},r.textExtraction=r.$table.attr("data-text-extraction")||r.textExtraction||"basic",L.buildHeaders(r),L.fixColumnWidth(t),L.addWidgetFromClass(t),L.applyWidgetOptions(t),L.setupParsers(r),r.totalRows=0,r.debug&&L.validateOptions(r),r.delayInit||L.buildCache(r),L.bindEvents(t,r.$headers,!0),L.bindMethods(r),r.supportsDataObject&&void 0!==s.data().sortlist?r.sortList=s.data().sortlist:a&&s.metadata()&&s.metadata().sortlist&&(r.sortList=s.metadata().sortlist),L.applyWidget(t,!0),0<r.sortList.length?(r.last.sortList=r.sortList,L.sortOn(r,r.sortList,{},!r.initWidgets)):(L.setHeadersCss(r),r.initWidgets&&L.applyWidget(t,!1)),r.showProcessing&&s.unbind("sortBegin"+r.namespace+" sortEnd"+r.namespace).bind("sortBegin"+r.namespace+" sortEnd"+r.namespace,function(e){clearTimeout(r.timerProcessing),L.isProcessing(t),"sortBegin"===e.type&&(r.timerProcessing=setTimeout(function(){L.isProcessing(t,!0)},500))}),t.hasInitialized=!0,t.isProcessing=!1,L.debug(r,"core")&&(console.log("Overall initializatioLine truncated
@@ -0,0 +1,151 @@
/*
* Konami-JS ~
* :: Now with support for touch events and multiple instances for
* :: those situations that call for multiple easter eggs!
* Code: https://github.com/snaptortoise/konami-js
* Copyright (c) 2009 George Mandis (georgemandis.com, snaptortoise.com)
* Version: 1.6.2 (7/17/2018)
* Licensed under the MIT License (http://opensource.org/licenses/MIT)
* Tested in: Safari 4+, Google Chrome 4+, Firefox 3+, IE7+, Mobile Safari 2.2.1+ and Android
*/
var Konami = function (callback) {
var konami = {
addEvent: function (obj, type, fn, ref_obj) {
if (obj.addEventListener)
obj.addEventListener(type, fn, false);
else if (obj.attachEvent) {
// IE
obj["e" + type + fn] = fn;
obj[type + fn] = function () {
obj["e" + type + fn](window.event, ref_obj);
}
obj.attachEvent("on" + type, obj[type + fn]);
}
},
removeEvent: function (obj, eventName, eventCallback) {
if (obj.removeEventListener) {
obj.removeEventListener(eventName, eventCallback);
} else if (obj.attachEvent) {
obj.detachEvent(eventName);
}
},
input: "",
pattern: "38384040373937396665",
keydownHandler: function (e, ref_obj) {
if (ref_obj) {
konami = ref_obj;
} // IE
konami.input += e ? e.keyCode : event.keyCode;
if (konami.input.length > konami.pattern.length) {
konami.input = konami.input.substr((konami.input.length - konami.pattern.length));
}
if (konami.input === konami.pattern) {
konami.code(konami._currentLink);
konami.input = '';
e.preventDefault();
return false;
}
},
load: function (link) {
this._currentLink = link;
this.addEvent(document, "keydown", this.keydownHandler, this);
this.iphone.load(link);
},
unload: function () {
this.removeEvent(document, 'keydown', this.keydownHandler);
this.iphone.unload();
},
code: function (link) {
window.location = link
},
iphone: {
start_x: 0,
start_y: 0,
stop_x: 0,
stop_y: 0,
tap: false,
capture: false,
orig_keys: "",
keys: ["UP", "UP", "DOWN", "DOWN", "LEFT", "RIGHT", "LEFT", "RIGHT", "TAP", "TAP"],
input: [],
code: function (link) {
konami.code(link);
},
touchmoveHandler: function (e) {
if (e.touches.length === 1 && konami.iphone.capture === true) {
var touch = e.touches[0];
konami.iphone.stop_x = touch.pageX;
konami.iphone.stop_y = touch.pageY;
konami.iphone.tap = false;
konami.iphone.capture = false;
konami.iphone.check_direction();
}
},
touchendHandler: function () {
konami.iphone.input.push(konami.iphone.check_direction());
if (konami.iphone.input.length > konami.iphone.keys.length) konami.iphone.input.shift();
if (konami.iphone.input.length === konami.iphone.keys.length) {
var match = true;
for (var i = 0; i < konami.iphone.keys.length; i++) {
if (konami.iphone.input[i] !== konami.iphone.keys[i]) {
match = false;
}
}
if (match) {
konami.iphone.code(konami._currentLink);
}
}
},
touchstartHandler: function (e) {
konami.iphone.start_x = e.changedTouches[0].pageX;
konami.iphone.start_y = e.changedTouches[0].pageY;
konami.iphone.tap = true;
konami.iphone.capture = true;
},
load: function (link) {
this.orig_keys = this.keys;
konami.addEvent(document, "touchmove", this.touchmoveHandler);
konami.addEvent(document, "touchend", this.touchendHandler, false);
konami.addEvent(document, "touchstart", this.touchstartHandler);
},
unload: function () {
konami.removeEvent(document, 'touchmove', this.touchmoveHandler);
konami.removeEvent(document, 'touchend', this.touchendHandler);
konami.removeEvent(document, 'touchstart', this.touchstartHandler);
},
check_direction: function () {
x_magnitude = Math.abs(this.start_x - this.stop_x);
y_magnitude = Math.abs(this.start_y - this.stop_y);
x = ((this.start_x - this.stop_x) < 0) ? "RIGHT" : "LEFT";
y = ((this.start_y - this.stop_y) < 0) ? "DOWN" : "UP";
result = (x_magnitude > y_magnitude) ? x : y;
result = (this.tap === true) ? "TAP" : result;
return result;
}
}
}
typeof callback === "string" && konami.load(callback);
if (typeof callback === "function") {
konami.code = callback;
konami.load();
}
return konami;
};
if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {
module.exports = Konami;
} else {
if (typeof define === 'function' && define.amd) {
define([], function() {
return Konami;
});
} else {
window.Konami = Konami;
}
}
@@ -0,0 +1,2 @@
!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?module.exports=a():"function"==typeof define&&define.amd?define(a):e.moment=a()}(this,function(){"use strict";var e,n;function M(){return e.apply(null,arguments)}function _(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function i(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function h(e,a){return Object.prototype.hasOwnProperty.call(e,a)}function o(e){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(e).length;var a;for(a in e)if(h(e,a))return;return 1}function r(e){return void 0===e}function m(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function d(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function u(e,a){for(var t=[],s=0;s<e.length;++s)t.push(a(e[s],s));return t}function l(e,a){for(var t in a)h(a,t)&&(e[t]=a[t]);return h(a,"toString")&&(e.toString=a.toString),h(a,"valueOf")&&(e.valueOf=a.valueOf),e}function c(e,a,t,s){return Ha(e,a,t,s,!0).utc()}function L(e){return null==e._pf&&(e._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),e._pf}function Y(e){if(null==e._isValid){var a=L(e),t=n.call(a.parsedDateParts,function(e){return null!=e}),s=!isNaN(e._d.getTime())&&a.overflow<0&&!a.empty&&!a.invalidEra&&!a.invalidMonth&&!a.invalidWeekday&&!a.weekdayMismatch&&!a.nullInput&&!a.invalidFormat&&!a.userInvalidated&&(!a.meridiem||a.meridiem&&t);if(e._strict&&(s=s&&0===a.charsLeftOver&&0===a.unusedTokens.length&&void 0===a.bigHour),null!=Object.isFrozen&&Object.isFrozen(e))return s;e._isValid=s}return e._isValid}function y(e){var a=c(NaN);return null!=e?l(L(a),e):L(a).userInvalidated=!0,a}n=Array.prototype.some?Array.prototype.some:function(e){for(var a=Object(this),t=a.length>>>0,s=0;s<t;s++)if(s in a&&e.call(this,a[s],s,a))return!0;return!1};var f=M.momentProperties=[],a=!1;function p(e,a){var t,s,n;if(r(a._isAMomentObject)||(e._isAMomentObject=a._isAMomentObject),r(a._i)||(e._i=a._i),r(a._f)||(e._f=a._f),r(a._l)||(e._l=a._l),r(a._strict)||(e._strict=a._strict),r(a._tzm)||(e._tzm=a._tzm),r(a._isUTC)||(e._isUTC=a._isUTC),r(a._offset)||(e._offset=a._offset),r(a._pf)||(e._pf=L(a)),r(a._locale)||(e._locale=a._locale),0<f.length)for(t=0;t<f.length;t++)r(n=a[s=f[t]])||(e[s]=n);return e}function k(e){p(this,e),this._d=new Date(null!=e._d?e._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===a&&(a=!0,M.updateOffset(this),a=!1)}function D(e){return e instanceof k||null!=e&&null!=e._isAMomentObject}function T(e){!1===M.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+e)}function t(n,r){var d=!0;return l(function(){if(null!=M.deprecationHandler&&M.deprecationHandler(null,n),d){for(var e,a,t=[],s=0;s<arguments.length;s++){if(e="","object"==typeof arguments[s]){for(a in e+="\n["+s+"] ",arguments[0])h(arguments[0],a)&&(e+=a+": "+arguments[0][a]+", ");e=e.slice(0,-2)}else e=arguments[s];t.push(e)}T(n+"\nArguments: "+Array.prototype.slice.call(t).join("")+"\n"+(new Error).stack),d=!1}return r.apply(this,arguments)},r)}var s,g={};function w(e,a){null!=M.deprecationHandler&&M.deprecationHandler(e,a),g[e]||(T(a),g[e]=!0)}function v(e){return"undefined"!=typeof Function&&e instanceof Function||"[object Function]"===Object.prototype.toString.call(e)}function b(e,a){var t,s=l({},e);for(t in a)h(a,t)&&(i(e[t])&&i(a[t])?(s[t]={},l(s[t],e[t]),l(s[t],a[t])):null!=a[t]?s[t]=a[t]:delete s[t]);for(t in e)h(e,t)&&!h(a,t)&&i(e[t])&&(s[t]=l({},s[t]));return s}function H(e){null!=e&&this.set(e)}M.suppressDeprecationWarnings=!1,M.deprecationHandler=null,s=Object.keys?Object.keys:function(e){var a,t=[];for(a in e)h(e,a)&&t.push(a);return t};function S(e,a,t){var s=""+Math.abs(e),n=a-s.length;return(0<=e?t?"+":"":"-")+Math.pow(10,Math.max(0,n)).toString().substr(1)+s}var j=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,x=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,O={},P={};function W(e,a,t,s){var n="string"==typeof s?function(){return this[s]()}:s;e&&(P[e]=n),a&&(P[a[0]]=function(){return S(n.apply(this,arguments),a[1],a[2])}),t&&(P[t]=function(){return this.localeData().ordinal(n.apply(this,arguments),e)})}function A(e,a){return e.isValid()?(a=E(a,e.localeData()),O[a]=O[a]||function(s){for(var e,n=s.match(j),a=0,r=n.length;a<r;a++)P[n[a]]?n[a]=P[n[a]]:n[a]=(e=n[a]).match(/\[[\s\S]/)?e.replace(/^\[|\]$/g,""):e.replace(/\\/g,"");return function(e){for(var a="",t=0;t<r;t++)a+=v(n[t])?n[t].call(e,s):n[t];return a}}(a),O[a](e)):e.localeData().invalidDate()}function E(e,a){var t=5;function s(e){return a.longDateFormat(e)||eLine truncated
//# sourceMappingURL=moment-with-locales.min.js.map
@@ -0,0 +1,7 @@
/*
* Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance,
* please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use,
* make sure you copy the url from the website since the url may change between versions.
* */
!function(e){e(["jquery"],function(e){return function(){function t(e,t,n){return g({type:O.error,iconClass:m().iconClasses.error,message:e,optionsOverride:n,title:t})}function n(t,n){return t||(t=m()),v=e("#"+t.containerId),v.length?v:(n&&(v=d(t)),v)}function o(e,t,n){return g({type:O.info,iconClass:m().iconClasses.info,message:e,optionsOverride:n,title:t})}function s(e){C=e}function i(e,t,n){return g({type:O.success,iconClass:m().iconClasses.success,message:e,optionsOverride:n,title:t})}function a(e,t,n){return g({type:O.warning,iconClass:m().iconClasses.warning,message:e,optionsOverride:n,title:t})}function r(e,t){var o=m();v||n(o),u(e,o,t)||l(o)}function c(t){var o=m();return v||n(o),t&&0===e(":focus",t).length?void h(t):void(v.children().length&&v.remove())}function l(t){for(var n=v.children(),o=n.length-1;o>=0;o--)u(e(n[o]),t)}function u(t,n,o){var s=!(!o||!o.force)&&o.force;return!(!t||!s&&0!==e(":focus",t).length)&&(t[n.hideMethod]({duration:n.hideDuration,easing:n.hideEasing,complete:function(){h(t)}}),!0)}function d(t){return v=e("<div/>").attr("id",t.containerId).addClass(t.positionClass),v.appendTo(e(t.target)),v}function p(){return{tapToDismiss:!0,toastClass:"toast",containerId:"toast-container",debug:!1,showMethod:"fadeIn",showDuration:300,showEasing:"swing",onShown:void 0,hideMethod:"fadeOut",hideDuration:1e3,hideEasing:"swing",onHidden:void 0,closeMethod:!1,closeDuration:!1,closeEasing:!1,closeOnHover:!0,extendedTimeOut:1e3,iconClasses:{error:"toast-error",info:"toast-info",success:"toast-success",warning:"toast-warning"},iconClass:"toast-info",positionClass:"toast-top-right",timeOut:5e3,titleClass:"toast-title",messageClass:"toast-message",escapeHtml:!1,target:"body",closeHtml:'<button type="button">&times;</button>',closeClass:"toast-close-button",newestOnTop:!0,preventDuplicates:!1,progressBar:!1,progressClass:"toast-progress",rtl:!1}}function f(e){C&&C(e)}function g(t){function o(e){return null==e&&(e=""),e.replace(/&/g,"&amp;").replace(/"/g,"&quot;").replace(/'/g,"&#39;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function s(){c(),u(),d(),p(),g(),C(),l(),i()}function i(){var e="";switch(t.iconClass){case"toast-success":case"toast-info":e="polite";break;default:e="assertive"}I.attr("aria-live",e)}function a(){E.closeOnHover&&I.hover(H,D),!E.onclick&&E.tapToDismiss&&I.click(b),E.closeButton&&j&&j.click(function(e){e.stopPropagation?e.stopPropagation():void 0!==e.cancelBubble&&e.cancelBubble!==!0&&(e.cancelBubble=!0),E.onCloseClick&&E.onCloseClick(e),b(!0)}),E.onclick&&I.click(function(e){E.onclick(e),b()})}function r(){I.hide(),I[E.showMethod]({duration:E.showDuration,easing:E.showEasing,complete:E.onShown}),E.timeOut>0&&(k=setTimeout(b,E.timeOut),F.maxHideTime=parseFloat(E.timeOut),F.hideEta=(new Date).getTime()+F.maxHideTime,E.progressBar&&(F.intervalId=setInterval(x,10)))}function c(){t.iconClass&&I.addClass(E.toastClass).addClass(y)}function l(){E.newestOnTop?v.prepend(I):v.append(I)}function u(){if(t.title){var e=t.title;E.escapeHtml&&(e=o(t.title)),M.append(e).addClass(E.titleClass),I.append(M)}}function d(){if(t.message){var e=t.message;E.escapeHtml&&(e=o(t.message)),B.append(e).addClass(E.messageClass),I.append(B)}}function p(){E.closeButton&&(j.addClass(E.closeClass).attr("role","button"),I.prepend(j))}function g(){E.progressBar&&(q.addClass(E.progressClass),I.prepend(q))}function C(){E.rtl&&I.addClass("rtl")}function O(e,t){if(e.preventDuplicates){if(t.message===w)return!0;w=t.message}return!1}function b(t){var n=t&&E.closeMethod!==!1?E.closeMethod:E.hideMethod,o=t&&E.closeDuration!==!1?E.closeDuration:E.hideDuration,s=t&&E.closeEasing!==!1?E.closeEasing:E.hideEasing;if(!e(":focus",I).length||t)return clearTimeout(F.intervalId),I[n]({duration:o,easing:s,complete:function(){h(I),clearTimeout(k),E.onHidden&&"hidden"!==P.state&&E.onHidden(),P.state="hidden",P.endTime=new Date,f(P)}})}function D(){(E.timeOut>0||E.extendedTimeOut>0)&&(k=setTimeout(b,E.extendedTimeOut),F.maxHideTime=parseFloat(E.extendedTimeOut),F.hideEta=(new Date).getTime()+F.maxHideTime)}function H(){clearTimeout(k),F.hideEta=0,I.stop(!0,!0)[E.showMethod]({duration:E.showDuration,easing:E.showEasing})}function x(){var e=(F.hideEta-(new Date).getTime())/F.maxHideTime*100;q.width(e+"%")}var E=m(),y=t.iconClass||E.iconClass;if("undefined"!=typeof t.optionsOverride&&(E=e.extend(E,t.optionsOverride),y=t.optionsOverride.iconClass||y),!O(E,t)){T++,v=n(E,!0);var k=null,I=e("<div/>"),M=e("<div/>"),B=e("<div/>"),q=e("<div/>"),j=e(E.closeHtml),F={intervalId:null,hideEta:null,maxHideTime:null},P={toastId:T,state:"visible",startTime:new Date,options:E,map:t};return s(),r(),a(),f(P),E.debug&&console&&console.log(P),I}}function m(){return e.extend({},p(),b.options)}function h(e){v||(v=n()),e.is(":visible")||(e.remove(),e=null,0===v.children().length&&(v.remove(),w=void 0))}var v,C,w,T=0,O={error:"error",info:"info",success:"success",warning:"warning"},b={clear:r,remove:c,error:t,getContainer:n,info:o,options:{},subscribe:s,successLine truncated
//# sourceMappingURL=toastr.js.map
@@ -0,0 +1,155 @@
.rug-wrapper {
max-width: 80% !important;
}
.rug-width-m-8-24 {
width: 25%;
}
.rug-panel--content {
max-width: none;
}
.rug-nav--main__item {
display: none;
}
.rug-nav--main__item:first-of-type,
.rug-nav--main__item:last-of-type {
display: block;
}
.rug-breadcrumbs {
display: none;
}
p {
max-width: none;
}
table {
width: 100%;
}
table.stripe tr:nth-child(even) {
background-color: #f2f2f2;
}
table.stripe td {
white-space: nowrap;
overflow: hidden;
}
table.stripe td.empty {
text-align: center;
}
.pointer {
cursor: pointer;
}
form#new_schedule_form input:not([type=checkbox]) {
width: 100%
}
.text-danger {
color: #721c24;
}
.required {
color: red;
}
span.required {
margin-left: 0.2rem;
}
.alert-warning {
color: #856404;
background-color: #fff3cd;
border-color: #ffeeba;
}
.alert-success {
color: #155724;
background-color: #d4edda;
border-color: #c3e6cb;
}
.alert-danger {
color: #721c24;
background-color: #f8d7da;
border-color: #f5c6cb;
}
.form-control {
display: block;
width: 100%;
height: calc(1.5em + .75rem + 2px);
padding: .375rem .75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 1px solid #ced4da;
border-radius: .25rem;
transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
.icon {
height: 1rem;
width: auto;
}
h1 .icon {
height: 1.5rem;
}
/* Password toggles */
input[readonly] {
border: none;
background-color: transparent;
/* width: 75px;*/
}
button.password_toggle {
width: 1.8rem;
overflow: hidden;
text-indent: -999%;
white-space: nowrap;
cursor: pointer;
background-color: transparent;
background-repeat: no-repeat;
background-size: auto 100%;
background-position: center;
margin-left: 0.2rem;
border: none;
}
button.password_toggle.password_hidden {
background-image: url('../images/eye-open.png');
}
button.password_toggle.password_shown {
background-image: url('../images/eye-closed.png');
}
/* End Password toggles */
.add-row {
margin: 6px 0 0 0;
padding-left: 24px;
background: url('../images/plus-icon.png') no-repeat left center;
background-size: auto 80%;
}
.delete-row {
display:block;
margin: 6px 0 0 0;
padding-left: 20px;
background: url('../images/minus-icon.png') no-repeat left center;
background-size: auto 80%;
}
@@ -0,0 +1,8 @@
img.i18n_flag {
width: 16px;
vertical-align: text-top;
}
form#language_form {
display: inline;
}
@@ -0,0 +1 @@
/* * Note that this is toastr v2.1.3, the "latest" version in url has no more maintenance, * please go to https://cdnjs.com/libraries/toastr.js and pick a certain version you want to use, * make sure you copy the url from the website since the url may change between versions. * */ .toast-title{font-weight:700}.toast-message{-ms-word-wrap:break-word;word-wrap:break-word}.toast-message a,.toast-message label{color:#FFF}.toast-message a:hover{color:#CCC;text-decoration:none}.toast-close-button{position:relative;right:-.3em;top:-.3em;float:right;font-size:20px;font-weight:700;color:#FFF;-webkit-text-shadow:0 1px 0 #fff;text-shadow:0 1px 0 #fff;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80);line-height:1}.toast-close-button:focus,.toast-close-button:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.4;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);filter:alpha(opacity=40)}.rtl .toast-close-button{left:-.3em;float:left;right:.3em}button.toast-close-button{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.toast-top-center{top:0;right:0;width:100%}.toast-bottom-center{bottom:0;right:0;width:100%}.toast-top-full-width{top:0;right:0;width:100%}.toast-bottom-full-width{bottom:0;right:0;width:100%}.toast-top-left{top:12px;left:12px}.toast-top-right{top:12px;right:12px}.toast-bottom-right{right:12px;bottom:12px}.toast-bottom-left{bottom:12px;left:12px}#toast-container{position:fixed;z-index:999999;pointer-events:none}#toast-container *{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#toast-container>div{position:relative;pointer-events:auto;overflow:hidden;margin:0 0 6px;padding:15px 15px 15px 50px;width:300px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;background-position:15px center;background-repeat:no-repeat;-moz-box-shadow:0 0 12px #999;-webkit-box-shadow:0 0 12px #999;box-shadow:0 0 12px #999;color:#FFF;opacity:.8;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);filter:alpha(opacity=80)}#toast-container>div.rtl{direction:rtl;padding:15px 50px 15px 15px;background-position:right 15px center}#toast-container>div:hover{-moz-box-shadow:0 0 12px #000;-webkit-box-shadow:0 0 12px #000;box-shadow:0 0 12px #000;opacity:1;-ms-filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);filter:alpha(opacity=100);cursor:pointer}#toast-container>.toast-info{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=)!important}#toast-container>.toast-error{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=)!important}#toast-container>.toast-success{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==)!important}#toast-container>.toast-warning{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QALine truncated
@@ -0,0 +1,17 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Oops, sorry, bad request (400)" %}{% endblock %}
{% block pagetitle %}<span style="color:red">{% trans "Oops, sorry, bad request (400)" %}</span>{% endblock %}
{% block content %}
<p>{% trans "Unfortunately, the link to this page does not work, the page (temporarily) does not exist or it has been moved." %}</p>
<style>
.rug-breadcrumbs {
display:none
}
.rug-layout__item.rug-width-m-8-24 {
display:none
}
</style>
{% endblock %}
@@ -0,0 +1,17 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Oops, sorry, forbidden access (403)" %}{% endblock %}
{% block pagetitle %}<span style="color:red">{% trans "Oops, sorry, forbidden access (403)" %}</span>{% endblock %}
{% block content %}
<p>{% trans "Unfortunately, you do not have rights to access this url." %}</p>
<style>
.rug-breadcrumbs {
display:none
}
.rug-layout__item.rug-width-m-8-24 {
display:none
}
</style>
{% endblock %}
@@ -0,0 +1,17 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Oops, sorry, page not found (404)" %}{% endblock %}
{% block pagetitle %}<span style="color:red">{% trans "Oops, sorry, page not found (404)" %}</span>{% endblock %}
{% block content %}
<p>{% trans "Unfortunately, the link to this page does not work, the page (temporarily) does not exist or it has been moved." %}</p>
<style>
.rug-breadcrumbs {
display:none
}
.rug-layout__item.rug-width-m-8-24 {
display:none
}
</style>
{% endblock %}
@@ -0,0 +1,17 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Oops, sorry, server error (500)" %}{% endblock %}
{% block pagetitle %}<span style="color:red">{% trans "Oops, sorry, server error (500)" %}</span>{% endblock %}
{% block content %}
<p>{% trans "Unfortunately, something went wrong on the server." %}</p>
<style>
.rug-breadcrumbs {
display:none
}
.rug-layout__item.rug-width-m-8-24 {
display:none
}
</style>
{% endblock %}
@@ -0,0 +1,38 @@
{% extends "admin/base_site.html" %}
{% load static %}
{% load i18n %}
{% block extrahead %}
<link rel="shortcut icon" href="{% static 'RUG_template/images/favicon.ico' %}" />
<link rel="stylesheet" type="text/css" href="{% static 'RUG_template/style/custom_admin.css' %}"/>
{% endblock %}
{% block userlinks %}
{% comment %} Language choice. Should be put somewhere else when finale designs are done. {% endcomment %}
<form action="{% url 'set_language' %}" method="post" id="language_form" name="language_form">
{% csrf_token %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
<input name="next" type="hidden" value="{% if redirect_to %}{{ redirect_to }}{% endif %}">
<input type="hidden" name="language" id="language" value="{{LANGUAGE_CODE}}">
{% for language in languages %}
<a onclick="document.getElementById('language').value='{{ language.code }}'; document.forms['language_form'].submit(); return false;" href="#">
{% with 'RUG_template/images/flag-'|add:language.code|add:'.png' as image_static %}
<img class="i18n_flag" src="{% static image_static %}" title="{% trans 'Language' %} {{ language.name_translated }}"/>
{% endwith %}
</a> /
{% endfor %}
</form>
{% if user.is_active and user.is_staff %}
{% url 'django-admindocs-docroot' as docsroot %}
{% if docsroot %}
<a href="{{ docsroot }}">{% trans 'Documentation' %}</a> /
{% endif %}
{% endif %}
{% if user.has_usable_password %}
<a href="{% url 'admin:password_change' %}">{% trans 'Change password' %}</a> /
{% endif %}
<a href="{% url 'admin:logout' %}">{% trans 'Log out' %}</a>
{% endblock %}
@@ -0,0 +1,634 @@
{% load static %}
{% load i18n %}
<!DOCTYPE html>
<html prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article#" lang="nl">
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>{% block title %}{% trans "Welcome at RUG" %}{% endblock %}</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link href="https://www.rug.nl/_definition/shared/css/jquery-smoothness/jquery-ui.min.css?version=2019-12-12" rel="stylesheet">
<link href="https://www.rug.nl/_definition/shared/css/jquery-ui-timepicker-addon.css?version=2019-12-12" rel="stylesheet">
<link href="https://www.rug.nl/_definition/shared/css/styles_v2.css?version=2019-12-12" rel="stylesheet" type="text/css">
<link href="https://www.rug.nl/_definition/shared/css/fotorama.css?version=2019-12-12" rel="stylesheet" type="text/css">
<link href="https://www.rug.nl/apple-touch-icon-57x57.png" sizes="57x57" rel="apple-touch-icon">
<link href="https://www.rug.nl/apple-touch-icon-114x114.png" sizes="114x114" rel="apple-touch-icon">
<link href="https://www.rug.nl/apple-touch-icon-72x72.png" sizes="72x72" rel="apple-touch-icon">
<link href="https://www.rug.nl/apple-touch-icon-144x144.png" sizes="144x144" rel="apple-touch-icon">
<link href="https://www.rug.nl/apple-touch-icon-60x60.png" sizes="60x60" rel="apple-touch-icon">
<link href="https://www.rug.nl/apple-touch-icon-120x120.png" sizes="120x120" rel="apple-touch-icon">
<link href="https://www.rug.nl/apple-touch-icon-76x76.png" sizes="76x76" rel="apple-touch-icon">
<link href="https://www.rug.nl/apple-touch-icon-152x152.png" sizes="152x152" rel="apple-touch-icon">
<link href="https://www.rug.nl/icon.ico" rel="shortcut icon">
<meta content="#cc0000" name="msapplication-TileColor">
<meta content="https://www.rug.nl/mstile-144x144.png" name="msapplication-TileImage">
<meta content="user-scalable=1, initial-scale=1.0" name="viewport">
<script src="https://www.rug.nl/_definition/shared/js/jquery.js?version=2019-12-12" type="text/javascript"></script>
<script type="text/javascript">jQuery.noConflict();</script>
<script src="https://www.rug.nl/_definition/shared/js/jquery-ui.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/jquery-ui-timepicker-addon.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/js-cookie.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/md5.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/rug-shared.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/jquery.dialogOptions.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/jquery.dialogOptions-rug.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/messages!js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/formfunctions.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/imagesloaded.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/jquery.mobile.custom.min.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/fotorama.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/interface.bundle.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/content.bundle.js?version=2019-12-12" type="text/javascript"></script>
<script src="https://www.rug.nl/_definition/shared/js/filemanager.bundle.js?version=2019-12-12" type="text/javascript"></script>
<script type="text/javascript" src="https://www.rug.nl/_definition/shared/js/cross-frame.js?version=2019-12-12"></script>
{% comment %} Requires the Django application django_js_reverse {% endcomment %}
<script src="{% url 'js_reverse' %}" type="text/javascript"></script>
{% comment %} Easter egg ;) {% endcomment %}
<script type="text/javascript" src="{% static 'RUG_template/javascript/konami.js' %}"></script>
{% comment %} Use for general Django inline formsets {% endcomment %}
<script type="text/javascript" src="{% static 'RUG_template/javascript/jquery.formset.js' %}"></script>
{% comment %} Toastr {% endcomment %}
<link href="{% static 'RUG_template/style/toastr.min.css' %}" rel="stylesheet"/>
<script type="text/javascript" src="{% static 'RUG_template/javascript/toastr.min.js' %}"></script>
{% comment %} MomentJS with locales {% endcomment %}
<script type="text/javascript" src="{% static 'RUG_template/javascript/moment-with-locales.min.js' %}"></script>
<script type="text/javascript" src="{% static 'RUG_template/javascript/humanize-duration.min.js' %}"></script>
{% comment %} Add Tablesorter.js {% endcomment %}
<script type="text/javascript" src="{% static 'RUG_template/javascript/jquery.tablesorter.min.js' %}"></script>
{% comment %} Basic RUG Template CSS and Javascript {% endcomment %}
<link href="{% static 'RUG_template/style/base.css' %}" rel="stylesheet"/>
<script type="text/javascript" src="{% static 'RUG_template/javascript/javascript.js' %}"></script>
{% comment %} Custom CSS and Javascript from the Django Project {% endcomment %}
<link rel="stylesheet" href="{% static 'style/style.css' %} ">
<script type="text/javascript" src="{% static 'javascript/javascript.js' %}"></script>
</head>
<body itemtype="http://schema.org/WebPage" itemscope="itemscope" id="top" class="page--topicpage"><!--googleoff: all-->
<noscript>
<strong>Javascript must be enabled for the correct page display</strong>
</noscript>
<a href="#main" class="rug-hidden-visually rug-hidden-visually--focusable">Skip to Content</a><a href="#nav" class="rug-hidden-visually rug-hidden-visually--focusable">Skip to Navigation</a>
<header data-toggle-group="mainmenu" data-toggle-class="rug-site-header--open" data-toggle-id="menu-show" class="rug-site-header js--togglable-item js--sticky-header">
<div class="rug-wrapper rug-wrapper--big rug-wrapper--flush">
<div class="rug-site-header__bar">
<a class="rug-site-header__item" accesskey="1" href="https://www.rug.nl/"><img class="rug-site-logo" src="https://www.rug.nl/_definition/shared/images/logo--nl.svg" alt="Rijksuniversiteit Groningen"><span class="rug-hidden-visually">Rijksuniversiteit Groningen</span></a><span class="rug-site-header__item"><span class="rug-site-header__text rug-site-header__slogan rug-hidden-l">founded in 1614 &nbsp;-&nbsp; top 100 university</span></span>
<div class="rug-site-header__item rug-site-header__item--close">
<a href="#" data-toggle-group="mainmenu" data-toggle-class="rug-toggleable" data-toggle-id="menu-hide" class="rug-button rug-font-white rug-button--nav js--togglable-switch">Sluiten<span class="rug-icon rug-icon--l rug-icon--close rug-ml-xxs" aria-hidden="true"></span></a>
</div>
<nav class="rug-site-header__item">
<ul class="rug-nav--meta">
<li class="rug-nav--meta__item rug-nav--meta__item--mobile">
<a href="#" data-toggle-group="mainmenu" data-toggle-class="rug-toggleable" data-toggle-id="menu-show" class="js-id--main_menu_toggle js--togglable-switch rug-font-black"><span class="rug-icon rug-icon--menu rug-mr-s" aria-hidden="true"></span><span class="rug-icon rug-icon--search" aria-hidden="true"></span><span class="rug-hidden-visually">Menu en zoeken</span></a>
</li>
<li class="rug-nav--meta__item">
<a href="https://www.rug.nl/info/contact" accesskey="5" class="rug-nav--meta__link js--main-menu-clone">Contact</a>
</li>
<li class="rug-nav--meta__item">
<a href="https://myuniversity.rug.nl/infonet/medewerkers/dashboard/" accesskey="5" class="rug-nav--meta__link js--main-menu-clone">My University</a>
</li>
<li class="rug-nav--meta__item">
<a href="https://studentportal.rug.nl/" accesskey="5" class="rug-nav--meta__link js--main-menu-clone">Student Portal</a>
</li>
<li class="rug-nav--meta__item" title="{% trans "Language selection" %}">
{% comment %} Language choice. Should be put somewhere else when finale designs are done. {% endcomment %}
<form action="{% url 'set_language' %}" method="post" id="language_form">
{% csrf_token %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% comment %} Here we set the MomentJS locale for all date and time actions {% endcomment %}
<script type="text/javascript">
moment.locale('{{LANGUAGE_CODE}}');
</script>
{% comment %} <input name="next" type="hidden" value="{{ redirect_to|default:"" }}"> {% endcomment %}
<input type="hidden" name="language" id="language" value="{{LANGUAGE_CODE}}">
{% for language in languages %}
<a onclick="jQuery('form#language_form input#language').val('{{ language.code }}'); jQuery('form#language_form').submit(); return false; " class="rug-mr-xs" href="#">
<span class="rug-sprite--flag--{{ language.code }}"></span><span class="rug-hidden-visually">{{ language.name_local }}</span></a>
{% endfor %}
</form>
</li>
</ul>
</nav>
</div>
</div>
<div class="rug-background-menu rug-shadow-box-inset">
<div class="rug-wrapper rug-wrapper--big rug-wrapper--flush">
<form name="gs" id="search-form" action="https://www.rug.nl/search/" class="rug-site-search rug-mb-0">
<fieldset class="rug-mb-0 rug-shadow-box">
<legend class="rug-hidden-visually">Zoeken</legend><label for="searchtext" class="rug-hidden-visually">Zoeken</label><input placeholder="Zoeken..." id="searchtext" type="text" accesskey="4" autocomplete="off" role="combobox" aria-haspopup="false" name="q" class="rug-site-search__input q text"><input value="true" name="isNewSearch" type="hidden"><button type="submit" class="rug-site-search__button"><span class="rug-icon rug-icon--l rug-icon--search" aria-hidden="true"></span><span class="rug-hidden-visually">Zoeken</span></button>
</fieldset>
</form>
<nav class="rug-nav--main__container">
<ul class="rug-nav--main" id="nav">
<li class="rug-nav--main__item">
<a href="/" data-path="/" class="rug-nav--main__button"><span class="rug-icon rug-icon--home" aria-hidden="true"></span><span class="rug-hidden-visually">Home</span></a>
</li>
<li data-path="/education/index.xml" class="rug-nav--main__item">
<a href="https://www.rug.nl/education/" class="rug-nav--main__link js--noclick-m"><span>Onderwijs</span><span class="rug-icon rug-icon--s rug-icon--caret-down rug-nav--main__icon" aria-hidden="true"></span></a>
<div class="rug-nav--flyout">
<div class="rug-layout rug-layout--l">
<div class="rug-layout__item rug-layout__item">
<ul class="rug-nav--flyout__list">
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/" class="rug-nav--flyout__link rug-link--caret">Onderwijs</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/bachelor/" class="rug-nav--flyout__link rug-link--caret">Bachelor</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/master/" class="rug-nav--flyout__link rug-link--caret">Master</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/exchange/" class="rug-nav--flyout__link rug-link--caret">Exchange</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/phd-programmes/" class="rug-nav--flyout__link rug-link--caret">Promotietrajecten</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/summer-winter-schools/" class="rug-nav--flyout__link rug-link--caret">Summer / Winter schools</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/society-business/knowledge-and-learning/" class="rug-nav--flyout__link rug-link--caret">Kennis en leren</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/contact/" class="rug-nav--flyout__link rug-link--caret">Contact</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li data-path="/research/index.xml" class="rug-nav--main__item">
<a href="https://www.rug.nl/research/" class="rug-nav--main__link js--noclick-m"><span>Onderzoek</span><span class="rug-icon rug-icon--s rug-icon--caret-down rug-nav--main__icon" aria-hidden="true"></span></a>
<div class="rug-nav--flyout rug-nav--flyout--discoverable">
<div class="rug-layout rug-layout--l">
<div class="rug-layout__item rug-layout__item rug-width-m-12-24">
<ul class="rug-nav--flyout__list">
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/research/" class="rug-nav--flyout__link rug-link--caret">Onderzoek</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/research/researchthemes/" class="rug-nav--flyout__link rug-link--caret">Onderzoeksthema's</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/research/societal-themes/" class="rug-nav--flyout__link rug-link--caret">Maatschappelijke thema's</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/research/institute-per-faculty/" class="rug-nav--flyout__link rug-link--caret">Onderzoekscentra en -instituten</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/education/phd-programmes/" class="rug-nav--flyout__link rug-link--caret">Promotietrajecten</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/research/portal/persons/search.html" class="rug-nav--flyout__link rug-link--caret">Deskundigen</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/research/pure/" class="rug-nav--flyout__link rug-link--caret">Onderzoeksdatabase</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/research/video-slider/" class="rug-nav--flyout__link rug-link--caret">Onderzoeksvideo's</a>
</li>
</ul>
</div>
<div class="rug-layout__item rug-width-m-12-24 js--show-random-child">
<a href="https://www.rug.nl/library/" class="rug-nav--flyout__link">
<figure class="rug-mb-s">
<img src="https://www.rug.nl/cmb/images/verwerken.jpg" alt=""></figure>Bibliotheek</a>
</div>
</div>
</div>
</li>
<li data-path="/society-business/index.xml" class="rug-nav--main__item">
<a href="https://www.rug.nl/society-business/" class="rug-nav--main__link js--noclick-m"><span>Maatschappij/bedrijven</span><span class="rug-icon rug-icon--s rug-icon--caret-down rug-nav--main__icon" aria-hidden="true"></span></a>
<div class="rug-nav--flyout">
<div class="rug-layout rug-layout--l">
<div class="rug-layout__item rug-layout__item">
<ul class="rug-nav--flyout__list">
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/society-business/" class="rug-nav--flyout__link rug-link--caret">Maatschappij/bedrijven</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/society-business/knowledge-and-learning/" class="rug-nav--flyout__link rug-link--caret">Kennis en leren</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/society-business/doing-research-together/" class="rug-nav--flyout__link rug-link--caret">Samen onderzoek doen</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/society-business/young-talent/" class="rug-nav--flyout__link rug-link--caret">Jong talent</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li data-path="/alumni/index.xml" class="rug-nav--main__item">
<a href="https://www.rug.nl/alumni/" class="rug-nav--main__link js--noclick-m"><span>Alumni</span><span class="rug-icon rug-icon--s rug-icon--caret-down rug-nav--main__icon" aria-hidden="true"></span></a>
<div class="rug-nav--flyout">
<div class="rug-layout rug-layout--l">
<div class="rug-layout__item rug-layout__item">
<ul class="rug-nav--flyout__list">
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/" class="rug-nav--flyout__link rug-link--caret">Alumni</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/for-alumni/" class="rug-nav--flyout__link rug-link--caret">Voor alumni</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/about-alumni/" class="rug-nav--flyout__link rug-link--caret">Over alumni</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/about-alumni/ambassadors/2019-2020/become-an-international-alumni-ambassador_" class="rug-nav--flyout__link rug-link--caret">Become an International Alumni Ambassador!</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/magazines-and-newsletters/" class="rug-nav--flyout__link rug-link--caret">Magazines en nieuwsbrieven</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/support-research-and-education/" class="rug-nav--flyout__link rug-link--caret">Steun onderzoek en onderwijs</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/contact/" class="rug-nav--flyout__link rug-link--caret">Contact</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/update-your-information/" class="rug-nav--flyout__link rug-link--caret">Wijzigingen doorgeven</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li data-path="/magazine/index.xml" class="rug-nav--main__item">
<a href="https://www.rug.nl/magazine/" class="rug-nav--main__link js--noclick-m"><span>Magazine</span><span class="rug-icon rug-icon--s rug-icon--caret-down rug-nav--main__icon" aria-hidden="true"></span></a>
<div class="rug-nav--flyout">
<div class="rug-layout rug-layout--l">
<div class="rug-layout__item rug-layout__item">
<ul class="rug-nav--flyout__list">
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/magazine/" class="rug-nav--flyout__link rug-link--caret">Magazine</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li data-path="/about-us/index.xml" class="rug-nav--main__item">
<a href="https://www.rug.nl/about-us/" class="rug-nav--main__link js--noclick-m"><span>Over ons</span><span class="rug-icon rug-icon--s rug-icon--caret-down rug-nav--main__icon" aria-hidden="true"></span></a>
<div class="rug-nav--flyout">
<div class="rug-layout rug-layout--l">
<div class="rug-layout__item rug-layout__item">
<ul class="rug-nav--flyout__list">
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/" class="rug-nav--flyout__link rug-link--caret">Over ons</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/who-are-we/strategic-plan/" class="rug-nav--flyout__link rug-link--caret">Strategisch Plan 2015-2020</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/who-are-we/" class="rug-nav--flyout__link rug-link--caret">Wie zijn wij?</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/news-and-events/" class="rug-nav--flyout__link rug-link--caret">Nieuws en evenementen</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/where-do-we-stand/" class="rug-nav--flyout__link rug-link--caret">Onze positie</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/organization/" class="rug-nav--flyout__link rug-link--caret">Onze organisatie</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/work-with-us/" class="rug-nav--flyout__link rug-link--caret">Werken bij de RUG</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/organization/faculties/" class="rug-nav--flyout__link rug-link--caret">Faculteiten</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/internationalization/" class="rug-nav--flyout__link rug-link--caret">Internationalization</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/collaboration/" class="rug-nav--flyout__link rug-link--caret">Samenwerkingsverbanden</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/about-us/how-to-find-us/" class="rug-nav--flyout__link rug-link--caret">Waar vindt u ons</a>
</li>
<li class="rug-nav--flyout__item">
<a href="https://www.rug.nl/alumni/support-research-and-education/" class="rug-nav--flyout__link rug-link--caret">Steun de RUG</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li class="rug-nav--main__item">
<a href="https://www.rug.nl/search/" class="rug-nav--main__button rug-nav--main__button--last rug-text-nowrap"><span class="rug-icon rug-icon--search" aria-hidden="true"></span><span class="rug-hidden-l rug-ml-xs">Zoeken</span></a>
</li>
</ul>
</nav>
</div>
</div>
</header>
<div class="rug-wrapper rug-wrapper--knee-high">
<div class="rug-breadcrumbs js--shrink-to-fit" itemprop="breadcrumb">
<a class="rug-breadcrumbs__link js--shrinkable" href="https://www.rug.nl/education/">Onderwijs</a><span class="rug-icon rug-icon--angle-right rug-breadcrumbs__divider"></span><a class="rug-breadcrumbs__link js--shrinkable" href="https://www.rug.nl/education/exchange/">Exchange</a>
</div>
<script type="text/javascript">
jQuery(function() {
navigation.openLastSubMenu();
});
</script>
</div>
<!--googleon: all--><div class="rug-background-white" id="main">
<div id="content" class="rug-wrapper rug-wrapper--overlay">
<div class="rug-layout">
<div class="rug-layout__item rug-width-m-8-24">
<!--googleoff: all-->
<nav>
<ul data-toggle-group="mainmenu" data-toggle-class="rug-block-max-m" data-toggle-id="menu-show" class="js--id-content-menu rug-nav--secondary rug-shadow-box js--togglable-item">
<li class="rug-nav--secondary__item rug-block-max-m ">
<a href="#" data-toggle-mode="togglable" data-toggle-group="submenu" data-toggle-class="rug-nav--secondary__link--selected" data-toggle-id="menu-main" class="rug-nav--secondary__link js--togglable-switch">HOME</a>
<ul data-toggle-group="submenu" data-toggle-class="rug-block" data-toggle-id="menu-main" class="js-id--mobilehome rug-nav--secondary__sub rug-nav--secondary__sub--hidden js--togglable-item">
<li data-menu-id="510d8573-cf08-4df5-beaf-72e59fc08035-33.14" class="rug-nav--secondary__sub__item">
<a href="https://www.rug.nl/education/" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text">Onderwijs</span></a>
</li>
<li data-menu-id="3ae46c16-ad2e-444e-a43f-af867c3010a1-36.154" class="rug-nav--secondary__sub__item">
<a href="https://www.rug.nl/research/" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text">Onderzoek</span></a>
</li>
<li data-menu-id="6728218e-6801-4701-a152-95d1eb7068fb-33.35" class="rug-nav--secondary__sub__item">
<a href="https://www.rug.nl/society-business/" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text">Maatschappij/bedrijven</span></a>
</li>
<li data-menu-id="cf576754-17bf-47a8-94c9-ebe3998623e2-33.31" class="rug-nav--secondary__sub__item">
<a href="https://www.rug.nl/alumni/" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text">Alumni</span></a>
</li>
<li data-menu-id="cdc6fddf-0fd0-44ad-ad19-c0df0260e44c-33.13" class="rug-nav--secondary__sub__item">
<a href="https://www.rug.nl/magazine/" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text">Magazine</span></a>
</li>
<li data-menu-id="82960c9f-53bd-4ea8-a9f7-b004b86378f6-36.154" class="rug-nav--secondary__sub__item">
<a href="https://www.rug.nl/about-us/" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text rug-b-0">Over ons</span></a>
</li>
</ul>
</li>
{% block menu %}
{% include "menu.html" %}
{% endblock %}
<li class="rug-nav--secondary__item rug-block-max-m">
<ul class="rug-nav--secondary__sub rug-nav--secondary__sub--meta">
<li class="rug-nav--secondary__sub__item">
<a href="https://www.rug.nl/about-us/how-to-find-us/contact" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text rug-nav--secondary__sub__link-text--meta">Contact</span></a>
</li>
<li class="rug-nav--secondary__sub__item">
<a href="https://myuniversity.rug.nl/infonet/medewerkers/dashboard/" class="rug-nav--secondary__sub__link"><span class="rug-nav--secondary__sub__link-text rug-nav--secondary__sub__link-text--meta">My University</span></a>
</li>
<li class="rug-nav--secondary__sub__item">
<a href="https://studentportal.rug.nl/" class="rug-nav--secondary__sub__link" target="_blank"><span class="rug-nav--secondary__sub__link-text rug-nav--secondary__sub__link-text--meta rug-b-0">Student Portal</span></a>
</li>
<li class="rug-nav--secondary__sub__item rug-nav--secondary__sub__item--languages" title="Language select">
<a onclick="setLanguageCookie('nl',''); reloadWithoutLangParameter(); return false;" class="rug-mr-xs" href="#"><span class="rug-sprite--flag--nl"></span><span class="rug-hidden-visually">Nederlands</span></a><a onclick="setLanguageCookie('en',''); reloadWithoutLangParameter(); return false;" class="rug-mr-xs" href="#"><span class="rug-sprite--flag--en"></span><span class="rug-hidden-visually">English</span></a>
</li>
</ul>
</li>
</ul>
</nav>
<!--googleon: all-->
</div>
<div data-toggle-group="mainmenu" data-toggle-id="menu-show" data-toggle-class="rug-hidden-m--block" class="rug-layout__item rug-width-m-16-24">
<!--googleoff: snippet-->
<div class="rug-panel--content rug-panel--content--border">
<h1 class="rug-mb-0 rug-clearfix" lang="en">
<span lang="en">{% block pagetitle %} -=PageTitle=- {% endblock %}</span>
</h1>
</div>
<div id="target-content-holder"></div>
<!--googleon: snippet-->
<div>
{% if messages %}
{% for message in messages %}
<script>
toastr.{{ message.tags }}('{{ message }}');
</script>
{% endfor %}
{% endif %}
<article class="rug-clearfix rug-theme--content rug-mb" lang="en">
<div>
{% block content %} -=PageContent=- {% endblock %}
</div>
</article>
<!--googleoff: all-->
<div class="rug-layout rug-mt">
</div>
<!--googleon: all-->
</div>
<!--googleoff: all-->
<div class="rug-site-tools">
<a title="Print this page" href="#" data-label="page-tools print" data-category="button" class="js--analytics rug-site-tools__link rug-site-tools__icon" onClick="window.print(); return false;"><span class="rug-icon rug-icon--printer rug-mh-xxs" aria-hidden="true"></span><span class="rug-hidden-visually">print</span></a>
</div>
<!--googleon: all-->
</div>
</div>
</div>
</div><!--googleoff: all--><div data-toggle-group="mainmenu" data-toggle-id="menu-show" data-toggle-class="rug-hidden-m--block" class="rug-wrapper">
<aside class="rug-panel rug-panel--primary rug-p-0 rug-mt">
<div class="rug-layout rug-col-l-8-24 rug-col-s-12-24 rug-overflow-hidden rug-layout--no-margins"></div>
</aside>
</div><!--googleon: all-->
<!--googleoff: all--><div data-toggle-group="mainmenu" data-toggle-id="menu-show" data-toggle-class="rug-hidden-m--block" class="rug-background-white rug-pv-l rug-text-center">
<div class="rug-wrapper">
<div class="rug-layout">
<div class="rug-layout__item">
<span class="rug-mr-m">Volg de RUG</span><a href="https://www.facebook.com/universityofgroningen" class=""><span title="facebook" class="rug-icon rug-icon--l rug-icon--facebook"></span><span class="rug-hidden-visually">facebook</span></a> <a href="https://twitter.com/univgroningen" class=""><span title="twitter" class="rug-icon rug-icon--l rug-icon--twitter"></span><span class="rug-hidden-visually">twitter</span></a> <a href="https://www.linkedin.com/school/rijksuniversiteit-groningen/" class=""><span title="linkedin" class="rug-icon rug-icon--l rug-icon--linkedin"></span><span class="rug-hidden-visually">linkedin</span></a> <a href="https://www.rug.nl/corporate/nieuws/RSSfeeds" class=""><span title="rss" class="rug-icon rug-icon--l rug-icon--rss"></span><span class="rug-hidden-visually">rss</span></a> <a href="https://www.instagram.com/universityofgroningen/" class=""><span title="instagram" class="rug-icon rug-icon--l rug-icon--instagram"></span><span class="rug-hidden-visually">instagram</span></a> <a href="https://www.youtube.com/universityGroningen" class=""><span title="youtube" class="rug-icon rug-icon--l rug-icon--youtube"></span><span class="rug-hidden-visually">youtube</span></a>
</div>
</div>
</div>
</div>
<footer data-toggle-group="mainmenu" data-toggle-id="menu-show" data-toggle-class="rug-hidden-m--block"><div class="rug-doormat rug-background-neutral-30">
<div class="rug-wrapper">
<div class="rug-layout rug-layout--no-margins">
<div class="rug-layout__item rug-width-s-12-24 rug-width-l-6-24">
<a href="https://www.rug.nl/education/" class="rug-doormat__heading__link rug-doormat__heading__link--desktop">Studiekiezers</a><a href="https://www.rug.nl/education/" class="rug-doormat__heading__link rug-doormat__heading__link--mobile js--equal js--togglable-switch" data-toggle-id="N10006" data-toggle-class="rug-doormat__heading__link--active" data-toggle-group="js-id-doormat" data-toggle-mode="togglable">Studiekiezers</a>
<ul class="rug-doormat__list rug-list--unstyled">
<li>
<a href="https://www.rug.nl/education/" class="rug-doormat__link rug-doormat__link--mobile">Studiekiezers</a>
</li>
<li>
<a href="https://www.rug.nl/education/bachelor/events/" class="rug-doormat__link">Voorlichtingsactiviteiten voor studiekiezers</a>
</li>
<li>
<a href="https://www.rug.nl/bachelors/" class="rug-doormat__link">Bacheloropleidingen</a>
</li>
<li>
<a href="https://www.rug.nl/education/master/" class="rug-doormat__link">Masteropleidingen</a>
</li>
<li>
<a href="https://www.rug.nl/gmw/lerarenopleiding/" class="rug-doormat__link">Lerarenopleiding</a>
</li>
<li>
<a href="https://www.rug.nl/society-business/scholierenacademie/" class="rug-doormat__link">Scholierenacademie</a>
</li>
<li>
<a href="https://www.rug.nl/education/summer-winter-schools/" class="rug-doormat__link">Summer Schools</a>
</li>
<li>
<a href="https://www.rug.nl/education/honours-college/" class="rug-doormat__link">Honours College</a>
</li>
<li>
<a href="https://www.rug.nl/education/phd-programmes/" class="rug-doormat__link">Promotietrajecten</a>
</li>
<li>
<a href="https://www.rug.nl/education/faq/" class="rug-doormat__link">Veelgestelde vragen</a>
</li>
</ul>
</div>
<div class="rug-layout__item rug-width-s-12-24 rug-width-l-6-24">
<a href="https://www.rug.nl/society-business/" class="rug-doormat__heading__link rug-doormat__heading__link--desktop">Maatschappij/bedrijven</a><a href="https://www.rug.nl/society-business/" class="rug-doormat__heading__link rug-doormat__heading__link--mobile js--equal js--togglable-switch" data-toggle-id="N100DA" data-toggle-class="rug-doormat__heading__link--active" data-toggle-group="js-id-doormat" data-toggle-mode="togglable">Maatschappij/bedrijven</a>
<ul class="rug-doormat__list rug-list--unstyled">
<li>
<a href="https://www.rug.nl/society-business/" class="rug-doormat__link rug-doormat__link--mobile">Maatschappij/bedrijven</a>
</li>
<li>
<a href="https://www.rug.nl/library/" class="rug-doormat__link">Universiteitsbibliotheek</a>
</li>
<li>
<a href="https://www.rug.nl/research/portal/persons/search.html" class="rug-doormat__link">Zoek een deskundige</a>
</li>
<li>
<a href="https://www.rug.nl/language-centre/" class="rug-doormat__link">Talencentrum</a>
</li>
<li>
<a href="https://www.rug.nl/society-business/doing-research-together/ipbd/" class="rug-doormat__link">IP &amp; Business Development</a>
</li>
<li>
<a href="https://www.rug.nl/society-business/centre-for-information-technology/" class="rug-doormat__link">Centrum voor Informatie Technologie</a>
</li>
<li>
<a href="https://www.rug.nl/university-museum/" class="rug-doormat__link">Universiteitsmuseum</a>
</li>
<li>
<a href="https://shop.housing.rug.nl/shopuw/" class="rug-doormat__link" target="_blank">Universiteitswinkel</a>
</li>
<li>
<a href="https://www.rug.nl/careerservices/" class="rug-doormat__link">Career Services</a>
</li>
<li>
<a href="http://sggroningen.nl/" class="rug-doormat__link" target="_blank">Studium Generale</a>
</li>
<li>
<a href="https://www.rug.nl/about-us/who-are-we/sustainability/greenoffice/" class="rug-doormat__link">Duurzame universiteit</a>
</li>
<li>
<a href="https://www.rug.nl/society-business/science-shops/" class="rug-doormat__link">Wetenschapswinkel</a>
</li>
</ul>
</div>
<div class="rug-layout__item rug-width-s-12-24 rug-width-l-6-24">
<a href="https://www.rug.nl/alumni/" class="rug-doormat__heading__link rug-doormat__heading__link--desktop">Alumni</a><a href="https://www.rug.nl/alumni/" class="rug-doormat__heading__link rug-doormat__heading__link--mobile js--equal js--togglable-switch" data-toggle-id="N101CF" data-toggle-class="rug-doormat__heading__link--active" data-toggle-group="js-id-doormat" data-toggle-mode="togglable">Alumni</a>
<ul class="rug-doormat__list rug-list--unstyled">
<li>
<a href="https://www.rug.nl/alumni/" class="rug-doormat__link rug-doormat__link--mobile">Alumni</a>
</li>
<li>
<a href="https://www.rug.nl/alumni/news-events/events/" class="rug-doormat__link">Alumni activiteiten</a>
</li>
<li>
<a href="https://www.rug.nl/alumni/magazines-and-newsletters/" class="rug-doormat__link">Magazines en nieuwsbrieven</a>
</li>
<li>
<a href="https://www.rug.nl/alumni/update-your-information/" class="rug-doormat__link">Wijzigingen doorgeven</a>
</li>
<li>
<a href="https://www.rug.nl/alumni/support-research-and-education/" class="rug-doormat__link">Steun onderzoek en onderwijs</a>
</li>
</ul>
</div>
<div class="rug-layout__item rug-width-s-12-24 rug-width-l-6-24">
<a href="https://www.rug.nl/about-us/" class="rug-doormat__heading__link rug-doormat__heading__link--desktop">Over ons</a><a href="https://www.rug.nl/about-us/" class="rug-doormat__heading__link rug-doormat__heading__link--mobile js--equal js--togglable-switch" data-toggle-id="N1022C" data-toggle-class="rug-doormat__heading__link--active" data-toggle-group="js-id-doormat" data-toggle-mode="togglable">Over ons</a>
<ul class="rug-doormat__list rug-list--unstyled">
<li>
<a href="https://www.rug.nl/about-us/" class="rug-doormat__link rug-doormat__link--mobile">Over ons</a>
</li>
<li>
<a href="https://www.rug.nl/about-us/how-to-find-us/" class="rug-doormat__link">Waar vindt u ons</a>
</li>
<li>
<a href="https://www.rug.nl/about-us/work-with-us/job-opportunities/" class="rug-doormat__link">Vacatures</a>
</li>
<li>
<a href="https://www.rug.nl/feb/" class="rug-doormat__link">Faculteit Economie en Bedrijfskunde</a>
</li>
<li>
<a href="https://www.rug.nl/gmw/" class="rug-doormat__link">Faculteit Gedrags- en Maatschappijwetenschappen</a>
</li>
<li>
<a href="https://www.rug.nl/ggw/" class="rug-doormat__link">Faculteit Godgeleerdheid en Godsdienstwetenschap</a>
</li>
<li>
<a href="https://www.rug.nl/let/" class="rug-doormat__link">Faculteit der Letteren</a>
</li>
<li>
<a href="https://www.rug.nl/umcg/" class="rug-doormat__link">Faculteit Medische Wetenschappen</a>
</li>
<li>
<a href="https://www.rug.nl/rechten/" class="rug-doormat__link">Faculteit Rechtsgeleerdheid</a>
</li>
<li>
<a href="https://www.rug.nl/frw/" class="rug-doormat__link">Faculteit Ruimtelijke Wetenschappen</a>
</li>
<li>
<a href="https://www.rug.nl/filosofie/" class="rug-doormat__link">Faculteit Wijsbegeerte</a>
</li>
<li>
<a href="https://www.rug.nl/fse/" class="rug-doormat__link">Faculty of Science and Engineering</a>
</li>
<li>
<a href="https://www.rug.nl/ucg/" class="rug-doormat__link">University College Groningen</a>
</li>
<li>
<a href="https://www.rug.nl/cf/" class="rug-doormat__link">Campus Frysl&acirc;n</a>
</li>
<li>
<a href="https://www.rug.nl/kvi-cart/" class="rug-doormat__link">KVI-CART</a>
</li>
<li>
<a href="https://www.rug.nl/about-us/organization/bureau-of-the-university/" class="rug-doormat__link">Bureau van de Universiteit</a>
</li>
<li>
<a href="https://www.rug.nl/about-us/organization/service-departments/facilitair-bedrijf" class="rug-doormat__link">Facilitair bedrijf</a>
</li>
<li>
<a href="https://www.rug.nl/about-us/organization/bureau-of-the-university/communication" class="rug-doormat__link">Communicatie</a>
</li>
<li>
<a href="https://www.rug.nl/about-us/news-and-events/events/calendar/" class="rug-doormat__link">Agenda</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div data-toggle-group="mainmenu" data-toggle-id="menu-show" data-toggle-class="rug-hidden-m--block" class="rug-doormat rug-background-white rug-pv-l rug-text-center">
<div class="rug-wrapper">
<a class="rug-font-default rug-doormat__metalink" href="https://www.rug.nl/info/disclaimer-copyright">Disclaimer &amp; Copyright</a> <a class="rug-font-default rug-doormat__metalink" href="https://www.rug.nl/info/privacy">Privacy</a> <a class="rug-font-default rug-doormat__metalink" href="https://www.rug.nl/info/cookies">Cookies</a> <a class="rug-font-default rug-doormat__metalink" href="!sso">Inloggen</a>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,9 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Welcome to the RUG Template page" %}{% endblock %}
{% block pagetitle %}{% trans "Welcome to the RUG Template page" %}{% endblock %}
{% block content %}
<p><strong>{% trans "Simple RUG Template" %}</strong></p>
<p>{% trans "Some more text" %}</p>
{% endblock %}
@@ -0,0 +1,10 @@
{% load i18n %}
<li class="rug-nav--secondary__item">
<a class="rug-nav--secondary__link js--togglable-switch" data-toggle-class="rug-nav--secondary__link--selected" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31" data-toggle-mode="togglable">{% trans "Section" %}</a>
<ul class="rug-nav--secondary__sub rug-nav--secondary__sub--hidden js--togglable-item" data-toggle-class="rug-block" data-toggle-group="submenu" data-toggle-id="menu-2427370b-9435-44d9-bca7-b93ec9d03cc0-33.31">
<li class="rug-nav--secondary__sub__item" data-menu-id="b512aa55-f0cb-4588-9054-302caa5fa951-33.34">
<a class="rug-nav--secondary__sub__link" href="#"><span class="rug-nav--secondary__sub__link-text">{% trans "Menu item" %}</span></a>
</li>
</ul>
</li>
@@ -0,0 +1,29 @@
{% load i18n %}
{% if page_obj.paginator.num_pages > 1 %}
<ul class="rug-list--inline" >
{% if page_obj.has_previous %}
{% comment %}
<li class="rug-list--inline__item">
<a href="?page=1" name="page" class="rug-button rug-button--small rug-button--neutral" value="1"><span>«« {% trans "first" %}</span></a>
</li>
{% endcomment %}
<li class="rug-list--inline__item">
<a href="?page={{ page_obj.previous_page_number }}" name="prev" class="rug-button rug-button--small rug-button--neutral" value="« {% trans "previous" %}"><span>« {% trans "previous" %}</span></a>
</li>
{% endif %}
<li class="rug-list--inline__item">
<a name="page" class="rug-button rug-button--small rug-button--secondary" value="{{ page_obj.number }}"><span>{{ page_obj.number }}</span></a>
</li>
{% if page_obj.has_next %}
<li class="rug-list--inline__item">
<a href="?page={{ page_obj.next_page_number }}" name="next" class="rug-button rug-button--small rug-button--neutral" value="{% trans "next" %} »"><span>{% trans "next" %} »</span></a>
</li>
{% comment %}
<li class="rug-list--inline__item">
<a href="?page={{ page_obj.paginator.num_pages }}" name="page" class="rug-button rug-button--small rug-button--neutral" value="{% trans "last" %} »»"><span>{% trans "last" %} »»</span></a>
</li>
{% endcomment %}
{% endif %}
</ul>
{% endif %}
@@ -0,0 +1,25 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Login" %}{% endblock %}
{% block pagetitle %}{% trans "Login" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Login" %}</strong>
<br />
{% blocktrans %}You can login here to create your schedules. If you do not have a login, please contact: some_one@rug.nl{% endblocktrans %}
</p>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}">
<table>
{{ form.as_table }}
<tr>
<td colspan="2"><input type="submit" value="{% trans "Login" %}"></td>
</tr>
</table>
</form>
<br />
{# Assumes you setup the password_reset view in your URLconf #}
<p><a href="{% url 'password_reset' %}">{% trans "Lost password?" %}</a></p>
{% endblock %}
@@ -0,0 +1,10 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Password reset complete" %}{% endblock %}
{% block pagetitle %}{% trans "Password reset complete" %}{% endblock %}
{% block content %}
<p><strong>{% trans "Password reset complete" %}</strong></p>
{% url 'login' as login_url %}
<p>{% blocktrans %}Your new password has been set. You can log in now on the <a href="{{ login_url }}">log in page</a>.{% endblocktrans %}</p>
{% endblock %}
@@ -0,0 +1,26 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Set a new password!" %}{% endblock %}
{% block pagetitle %}{% trans "Set a new password!" %}{% endblock %}
{% block content %}
<p><strong>{% trans "Set a new password!" %}</strong><br />
{% if validlink %}
{% blocktrans %}Here you can set a new password.{% endblocktrans %}
</p>
<form method="POST">
<table>
{% csrf_token %}
{{ form.as_table }}
<tr>
<td colspan="2">
<input type="submit" value="{% trans "Change my password" %}">
</td>
</tr>
</table>
</form>
{% else %}
{% trans "The password reset link was invalid, possibly because it has already been used. Please request a new password reset." %}</p>
{% endif %}
{% endblock %}
@@ -0,0 +1,13 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Reset password, email sent" %}{% endblock %}
{% block pagetitle %}{% trans "Reset password, email sent" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Reset password, email sent" %}</strong>
<br />
<br />
{% blocktrans %}We've emailed you instructions for setting your password. You should receive the email shortly!{% endblocktrans %}
</p>
{% endblock %}
@@ -0,0 +1,13 @@
{% load i18n %}{% url 'password_reset_confirm' uidb64=uid token=token as reset_url%}
{% autoescape off %}{% blocktrans %}You're receiving this email because you requested a password reset for your user account at {{ site_name }}.
Please go to the following page and choose a new password:
{{ protocol}}://{{ domain }}{{ reset_url }}
Your username, in case you've forgotten: {{ user }}
Thanks for using our site!
The {{ site_name }} team{% endblocktrans %}
{% endautoescape %}
@@ -0,0 +1,21 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Reset password" %}{% endblock %}
{% block pagetitle %}{% trans "Reset password" %}{% endblock %}
{% block content %}
<p>
<strong>{% trans "Reset password" %}</strong>
<br />
{% blocktrans %}Here you can request a password reset. Please enter your email address that is used for registration.{% endblocktrans %}
</p>
<form method="post" action="{% url 'password_reset' %}">
{% csrf_token %}
<table>
{{ form.as_table }}
<tr>
<td colspan="2"><input type="submit" value="{% trans "Reset my password"%} "></td>
</tr>
</table>
</form>
{% endblock %}
@@ -0,0 +1,18 @@
{% extends 'base.html' %} <!-- Add this for inheritance -->
{% load i18n %}
{% block title %}{% trans "Singup" %}{% endblock %}
{% block pagetitle %}{% trans "Singup" %}{% endblock %}
{% block content %}
<p><strong>{% trans "Singup" %}</strong></p>
<form method="post" action="{% url 'signup' %}">
{% csrf_token %}
<table>
{{ form.as_table }}
<tr>
<td colspan="2"><input type="submit" value="{% trans "Singup" %}"></td>
</tr>
</table>
</form>
{% endblock %}
+3
View File
@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.
+7
View File
@@ -0,0 +1,7 @@
from django.urls import path, include
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
+7
View File
@@ -0,0 +1,7 @@
from django.shortcuts import render
# Create your views here.
def index(request):
template_name = 'index.html'
return render(request, template_name, {})