diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..724dc46a --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# Django # +*.log +*.pot +*.pyc +__pycache__ +db.sqlite3 diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..3f6be7b4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 sumit kumar + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 00000000..c54c7ab5 --- /dev/null +++ b/README.md @@ -0,0 +1,79 @@ +# Online Quiz +![developer](https://img.shields.io/badge/Developed%20By%20%3A-Sumit%20Kumar-red) +--- +## screenshots +### Homepage +![homepage snap](https://github.com/sumitkumar1503/onlinequiz/blob/master/static/screenshots/homepage.png?raw=true) +### Admin Dashboard +![dashboard snap](https://github.com/sumitkumar1503/onlinequiz/blob/master/static/screenshots/adminhomepage.png?raw=true) +### Exam Rules +![invoice snap](https://github.com/sumitkumar1503/onlinequiz/blob/master/static/screenshots/rules.png?raw=true) +### Exam +![doctor snap](https://github.com/sumitkumar1503/onlinequiz/blob/master/static/screenshots/exam.png?raw=true) +### Teacher +![doctor snap](https://github.com/sumitkumar1503/onlinequiz/blob/master/static/screenshots/teacher.png?raw=true) +--- +## Functions +### Admin +- Create Admin account using command +``` +py manage.py createsuperuser +``` +- After Login, can see Total Number Of Student, Teacher, Course, Questions are there in system on Dashboard. +- Can View, Update, Delete, Approve Teacher. +- Can View, Update, Delete Student. +- Can Also See Student Marks. +- Can Add, View, Delete Course/Exams. +- Can Add Questions To Respective Courses With Options, Correct Answer, And Marks. +- Can View And Delete Questions Too. + +### Teacher +- Apply for job in System. Then Login (Approval required by system admin, Then only teacher can login). +- After Login, can see Total Number Of Student, Course, Questions are there in system on Dashboard. +- Can Add, View, Delete Course/Exams. +- Can Add Questions To Respective Courses With Options, Correct Answer, And Marks. +- Can View And Delete Questions Too. +> **_NOTE:_** Basically Admin Will Hire Teachers To Manage Courses and Questions. + +### Student +- Create account (No Approval Required By Admin, Can Login After Signup) +- After Login, Can See How Many Courses/Exam And Questions Are There In System On Dashboard. +- Can Give Exam Any Time, There Is No Limit On Number Of Attempt. +- Can View Marks Of Each Attempt Of Each Exam. +- Question Pattern Is MCQ With 4 Options And 1 Correct Answer. +--- + +## HOW TO RUN THIS PROJECT +- Install Python(3.7.6) (Dont Forget to Tick Add to Path while installing Python) +- Open Terminal and Execute Following Commands : +``` +python -m pip install -r requirements. txt +``` +- Download This Project Zip Folder and Extract it +- Move to project folder in Terminal. Then run following Commands : +``` +py manage.py makemigrations +py manage.py migrate +py manage.py runserver +``` +- Now enter following URL in Your Browser Installed On Your Pc +``` +http://127.0.0.1:8000/ +``` + +## CHANGES REQUIRED FOR CONTACT US PAGE +- In settins.py file, You have to give your email and password +``` +EMAIL_HOST_USER = 'youremail@gmail.com' +EMAIL_HOST_PASSWORD = 'your email password' +EMAIL_RECEIVING_USER = 'youremail@gmail.com' +``` + +## Drawbacks/LoopHoles +- Admin/Teacher can add any number of questions to any course, But while adding course, admin provide question number. + + +## Feedback +Any suggestion and feedback is welcome. You can message me on facebook +- [Contact on Facebook](https://fb.com/sumit.luv) +- [Subscribe my Channel LazyCoder On Youtube](https://youtube.com/lazycoders) diff --git a/blood/__init__.py b/blood/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/blood/admin.py b/blood/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/blood/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/blood/apps.py b/blood/apps.py new file mode 100644 index 00000000..013e59cd --- /dev/null +++ b/blood/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class BloodConfig(AppConfig): + name = 'blood' diff --git a/blood/forms.py b/blood/forms.py new file mode 100644 index 00000000..603b25ac --- /dev/null +++ b/blood/forms.py @@ -0,0 +1,14 @@ +from django import forms + +from . import models + + +class BloodForm(forms.ModelForm): + class Meta: + model=models.Stock + fields=['bloodgroup','unit'] + +class RequestForm(forms.ModelForm): + class Meta: + model=models.BloodRequest + fields=['patient_name','patient_age','reason','bloodgroup','unit'] diff --git a/blood/migrations/0001_initial.py b/blood/migrations/0001_initial.py new file mode 100644 index 00000000..e9bb3874 --- /dev/null +++ b/blood/migrations/0001_initial.py @@ -0,0 +1,22 @@ +# Generated by Django 3.0.5 on 2021-01-17 13:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Stock', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('bloodgroup', models.CharField(max_length=10)), + ('unit', models.PositiveIntegerField(default=0)), + ], + ), + ] diff --git a/blood/migrations/0002_bloodrequest.py b/blood/migrations/0002_bloodrequest.py new file mode 100644 index 00000000..dcb23c27 --- /dev/null +++ b/blood/migrations/0002_bloodrequest.py @@ -0,0 +1,27 @@ +# Generated by Django 3.0.5 on 2021-01-18 16:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blood', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='BloodRequest', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=30)), + ('age', models.PositiveIntegerField()), + ('mobile', models.CharField(max_length=20)), + ('disease', models.CharField(max_length=100)), + ('reason', models.CharField(max_length=500)), + ('bloodgroup', models.CharField(max_length=10)), + ('unit', models.PositiveIntegerField(default=0)), + ('status', models.CharField(default='Pending', max_length=20)), + ], + ), + ] diff --git a/blood/migrations/0003_auto_20210213_1053.py b/blood/migrations/0003_auto_20210213_1053.py new file mode 100644 index 00000000..ab369fa0 --- /dev/null +++ b/blood/migrations/0003_auto_20210213_1053.py @@ -0,0 +1,44 @@ +# Generated by Django 3.0.5 on 2021-02-13 05:23 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('patient', '0001_initial'), + ('donor', '0001_initial'), + ('blood', '0002_bloodrequest'), + ] + + operations = [ + migrations.RenameField( + model_name='bloodrequest', + old_name='age', + new_name='patient_age', + ), + migrations.RenameField( + model_name='bloodrequest', + old_name='name', + new_name='patient_name', + ), + migrations.RemoveField( + model_name='bloodrequest', + name='disease', + ), + migrations.RemoveField( + model_name='bloodrequest', + name='mobile', + ), + migrations.AddField( + model_name='bloodrequest', + name='request_by_donor', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='donor.Donor'), + ), + migrations.AddField( + model_name='bloodrequest', + name='request_by_patient', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='patient.Patient'), + ), + ] diff --git a/blood/migrations/0004_bloodrequest_date.py b/blood/migrations/0004_bloodrequest_date.py new file mode 100644 index 00000000..b2269912 --- /dev/null +++ b/blood/migrations/0004_bloodrequest_date.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2021-02-13 06:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('blood', '0003_auto_20210213_1053'), + ] + + operations = [ + migrations.AddField( + model_name='bloodrequest', + name='date', + field=models.DateField(auto_now=True), + ), + ] diff --git a/blood/migrations/__init__.py b/blood/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/blood/models.py b/blood/models.py new file mode 100644 index 00000000..703c6108 --- /dev/null +++ b/blood/models.py @@ -0,0 +1,23 @@ +from django.db import models +from patient import models as pmodels +from donor import models as dmodels +class Stock(models.Model): + bloodgroup=models.CharField(max_length=10) + unit=models.PositiveIntegerField(default=0) + def __str__(self): + return self.bloodgroup + +class BloodRequest(models.Model): + request_by_patient=models.ForeignKey(pmodels.Patient,null=True,on_delete=models.CASCADE) + request_by_donor=models.ForeignKey(dmodels.Donor,null=True,on_delete=models.CASCADE) + patient_name=models.CharField(max_length=30) + patient_age=models.PositiveIntegerField() + reason=models.CharField(max_length=500) + bloodgroup=models.CharField(max_length=10) + unit=models.PositiveIntegerField(default=0) + status=models.CharField(max_length=20,default="Pending") + date=models.DateField(auto_now=True) + def __str__(self): + return self.bloodgroup + + \ No newline at end of file diff --git a/blood/tests.py b/blood/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/blood/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/blood/views.py b/blood/views.py new file mode 100644 index 00000000..8c4193dd --- /dev/null +++ b/blood/views.py @@ -0,0 +1,236 @@ +from django.shortcuts import render,redirect,reverse +from . import forms,models +from django.db.models import Sum,Q +from django.contrib.auth.models import Group +from django.http import HttpResponseRedirect +from django.contrib.auth.decorators import login_required,user_passes_test +from django.conf import settings +from datetime import date, timedelta +from django.core.mail import send_mail +from django.contrib.auth.models import User +from donor import models as dmodels +from patient import models as pmodels +from donor import forms as dforms +from patient import forms as pforms + +def home_view(request): + x=models.Stock.objects.all() + print(x) + if len(x)==0: + blood1=models.Stock() + blood1.bloodgroup="A+" + blood1.save() + + blood2=models.Stock() + blood2.bloodgroup="A-" + blood2.save() + + blood3=models.Stock() + blood3.bloodgroup="B+" + blood3.save() + + blood4=models.Stock() + blood4.bloodgroup="B-" + blood4.save() + + blood5=models.Stock() + blood5.bloodgroup="AB+" + blood5.save() + + blood6=models.Stock() + blood6.bloodgroup="AB-" + blood6.save() + + blood7=models.Stock() + blood7.bloodgroup="O+" + blood7.save() + + blood8=models.Stock() + blood8.bloodgroup="O-" + blood8.save() + + if request.user.is_authenticated: + return HttpResponseRedirect('afterlogin') + return render(request,'blood/index.html') + +def is_donor(user): + return user.groups.filter(name='DONOR').exists() + +def is_patient(user): + return user.groups.filter(name='PATIENT').exists() + + +def afterlogin_view(request): + if is_donor(request.user): + return redirect('donor/donor-dashboard') + + elif is_patient(request.user): + return redirect('patient/patient-dashboard') + else: + return redirect('admin-dashboard') + + +def admin_dashboard_view(request): + totalunit=models.Stock.objects.aggregate(Sum('unit')) + dict={ + + 'A1':models.Stock.objects.get(bloodgroup="A+"), + 'A2':models.Stock.objects.get(bloodgroup="A-"), + 'B1':models.Stock.objects.get(bloodgroup="B+"), + 'B2':models.Stock.objects.get(bloodgroup="B-"), + 'AB1':models.Stock.objects.get(bloodgroup="AB+"), + 'AB2':models.Stock.objects.get(bloodgroup="AB-"), + 'O1':models.Stock.objects.get(bloodgroup="O+"), + 'O2':models.Stock.objects.get(bloodgroup="O-"), + 'totaldonors':dmodels.Donor.objects.all().count(), + 'totalbloodunit':totalunit['unit__sum'], + 'totalrequest':models.BloodRequest.objects.all().count(), + 'totalapprovedrequest':models.BloodRequest.objects.all().filter(status='Approved').count() + } + return render(request,'blood/admin_dashboard.html',context=dict) + +def admin_blood_view(request): + dict={ + 'bloodForm':forms.BloodForm(), + 'A1':models.Stock.objects.get(bloodgroup="A+"), + 'A2':models.Stock.objects.get(bloodgroup="A-"), + 'B1':models.Stock.objects.get(bloodgroup="B+"), + 'B2':models.Stock.objects.get(bloodgroup="B-"), + 'AB1':models.Stock.objects.get(bloodgroup="AB+"), + 'AB2':models.Stock.objects.get(bloodgroup="AB-"), + 'O1':models.Stock.objects.get(bloodgroup="O+"), + 'O2':models.Stock.objects.get(bloodgroup="O-"), + } + if request.method=='POST': + bloodForm=forms.BloodForm(request.POST) + if bloodForm.is_valid() : + bloodgroup=bloodForm.cleaned_data['bloodgroup'] + stock=models.Stock.objects.get(bloodgroup=bloodgroup) + stock.unit=bloodForm.cleaned_data['unit'] + stock.save() + return HttpResponseRedirect('admin-blood') + return render(request,'blood/admin_blood.html',context=dict) + + +def admin_donor_view(request): + donors=dmodels.Donor.objects.all() + return render(request,'blood/admin_donor.html',{'donors':donors}) + +def update_donor_view(request,pk): + donor=dmodels.Donor.objects.get(id=pk) + user=dmodels.User.objects.get(id=donor.user_id) + userForm=dforms.DonorUserForm(instance=user) + donorForm=dforms.DonorForm(request.FILES,instance=donor) + mydict={'userForm':userForm,'donorForm':donorForm} + if request.method=='POST': + userForm=dforms.DonorUserForm(request.POST,instance=user) + donorForm=dforms.DonorForm(request.POST,request.FILES,instance=donor) + if userForm.is_valid() and donorForm.is_valid(): + user=userForm.save() + user.set_password(user.password) + user.save() + donor=donorForm.save(commit=False) + donor.user=user + donor.bloodgroup=donorForm.cleaned_data['bloodgroup'] + donor.save() + return redirect('admin-donor') + return render(request,'blood/update_donor.html',context=mydict) + + + +def delete_donor_view(request,pk): + donor=dmodels.Donor.objects.get(id=pk) + user=User.objects.get(id=donor.user_id) + user.delete() + donor.delete() + return HttpResponseRedirect('/admin-donor') + +def admin_patient_view(request): + patients=pmodels.Patient.objects.all() + return render(request,'blood/admin_patient.html',{'patients':patients}) + + +def update_patient_view(request,pk): + patient=pmodels.Patient.objects.get(id=pk) + user=pmodels.User.objects.get(id=patient.user_id) + userForm=pforms.PatientUserForm(instance=user) + patientForm=pforms.PatientForm(request.FILES,instance=patient) + mydict={'userForm':userForm,'patientForm':patientForm} + if request.method=='POST': + userForm=pforms.PatientUserForm(request.POST,instance=user) + patientForm=pforms.PatientForm(request.POST,request.FILES,instance=patient) + if userForm.is_valid() and patientForm.is_valid(): + user=userForm.save() + user.set_password(user.password) + user.save() + patient=patientForm.save(commit=False) + patient.user=user + patient.bloodgroup=patientForm.cleaned_data['bloodgroup'] + patient.save() + return redirect('admin-patient') + return render(request,'blood/update_patient.html',context=mydict) + + + +def delete_patient_view(request,pk): + patient=pmodels.Patient.objects.get(id=pk) + user=User.objects.get(id=patient.user_id) + user.delete() + patient.delete() + return HttpResponseRedirect('/admin-patient') + +def admin_request_view(request): + requests=models.BloodRequest.objects.all().filter(status='Pending') + return render(request,'blood/admin_request.html',{'requests':requests}) + +def admin_request_history_view(request): + requests=models.BloodRequest.objects.all().exclude(status='Pending') + return render(request,'blood/admin_request_history.html',{'requests':requests}) + +def admin_donation_view(request): + donations=dmodels.BloodDonate.objects.all() + return render(request,'blood/admin_donation.html',{'donations':donations}) + +def update_approve_status_view(request,pk): + req=models.BloodRequest.objects.get(id=pk) + message=None + bloodgroup=req.bloodgroup + unit=req.unit + stock=models.Stock.objects.get(bloodgroup=bloodgroup) + if stock.unit > unit: + stock.unit=stock.unit-unit + stock.save() + req.status="Approved" + + else: + message="Stock Doest Not Have Enough Blood To Approve This Request, Only "+str(stock.unit)+" Unit Available" + req.save() + + requests=models.BloodRequest.objects.all().filter(status='Pending') + return render(request,'blood/admin_request.html',{'requests':requests,'message':message}) + + +def update_reject_status_view(request,pk): + req=models.BloodRequest.objects.get(id=pk) + req.status="Rejected" + req.save() + return HttpResponseRedirect('/admin-request') + +def approve_donation_view(request,pk): + donation=dmodels.BloodDonate.objects.get(id=pk) + donation_blood_group=donation.bloodgroup + donation_blood_unit=donation.unit + + stock=models.Stock.objects.get(bloodgroup=donation_blood_group) + stock.unit=stock.unit+donation_blood_unit + stock.save() + + donation.status='Approved' + donation.save() + return HttpResponseRedirect('/admin-donation') + +def reject_donation_view(request,pk): + donation=dmodels.BloodDonate.objects.get(id=pk) + donation.status='Rejected' + donation.save() + return HttpResponseRedirect('/admin-donation') \ No newline at end of file diff --git a/bloodbankmanagement/__init__.py b/bloodbankmanagement/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/bloodbankmanagement/asgi.py b/bloodbankmanagement/asgi.py new file mode 100644 index 00000000..e3bc59b4 --- /dev/null +++ b/bloodbankmanagement/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for bloodbankmanagement project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bloodbankmanagement.settings') + +application = get_asgi_application() diff --git a/bloodbankmanagement/settings.py b/bloodbankmanagement/settings.py new file mode 100644 index 00000000..305b6201 --- /dev/null +++ b/bloodbankmanagement/settings.py @@ -0,0 +1,149 @@ +""" +Django settings for bloodbankmanagement project. + +Generated by 'django-admin startproject' using Django 3.0.5. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/3.0/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +TEMPLATE_DIR = os.path.join(BASE_DIR,'templates') +STATIC_DIR=os.path.join(BASE_DIR,'static') +MEDIA_ROOT=os.path.join(BASE_DIR,'static') + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '+zy!9k=9pql5gz9bkqjore)k6r!%w0atk(@(!(!zvp5e(t2i8n' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'widget_tweaks', + 'blood', + 'donor', + 'patient', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] +CSRF_COOKIE_SECURE=False +ROOT_URLCONF = 'bloodbankmanagement.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [TEMPLATE_DIR,], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'bloodbankmanagement.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/3.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'blood', + 'USER': 'root', + 'PASSWORD': 'root', + 'HOST': 'localhost', + 'PORT': '3306', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/3.0/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.0/howto/static-files/ + +STATIC_URL = '/static/' +STATICFILES_DIRS=[ +STATIC_DIR, + ] +LOGIN_REDIRECT_URL='/afterlogin' + +#for contact us give your gmail id and password +EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'smtp.gmail.com' +EMAIL_USE_TLS = True +EMAIL_PORT = 587 +EMAIL_HOST_USER = 'from@gmail.com' # this email will be used to send emails +EMAIL_HOST_PASSWORD = 'xyz' # host email password required +# now sign in with your host gmail account in your browser +# open following link and turn it ON +# https://myaccount.google.com/lesssecureapps +# otherwise you will get SMTPAuthenticationError at /contactus +# this process is required because google blocks apps authentication by default +EMAIL_RECEIVING_USER = ['to@gmail.com'] # email on which you will receive messages sent from website + diff --git a/bloodbankmanagement/urls.py b/bloodbankmanagement/urls.py new file mode 100644 index 00000000..cc5f4ab5 --- /dev/null +++ b/bloodbankmanagement/urls.py @@ -0,0 +1,49 @@ +"""bloodbankmanagement URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/3.0/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" +from django.contrib import admin +from django.urls import path,include +from django.contrib.auth.views import LogoutView,LoginView +from blood import views +urlpatterns = [ + path('admin/', admin.site.urls), + + + path('donor/',include('donor.urls')), + path('patient/',include('patient.urls')), + + + path('',views.home_view,name=''), + path('logout', LogoutView.as_view(template_name='blood/logout.html'),name='logout'), + + path('afterlogin', views.afterlogin_view,name='afterlogin'), + path('adminlogin', LoginView.as_view(template_name='blood/adminlogin.html'),name='adminlogin'), + path('admin-dashboard', views.admin_dashboard_view,name='admin-dashboard'), + path('admin-blood', views.admin_blood_view,name='admin-blood'), + path('admin-donor', views.admin_donor_view,name='admin-donor'), + path('admin-patient', views.admin_patient_view,name='admin-patient'), + path('update-donor/', views.update_donor_view,name='update-donor'), + path('delete-donor/', views.delete_donor_view,name='delete-donor'), + path('admin-request', views.admin_request_view,name='admin-request'), + path('update-patient/', views.update_patient_view,name='update-patient'), + path('delete-patient/', views.delete_patient_view,name='delete-patient'), + path('admin-donation', views.admin_donation_view,name='admin-donation'), + path('approve-donation/', views.approve_donation_view,name='approve-donation'), + path('reject-donation/', views.reject_donation_view,name='reject-donation'), + path('admin-request-history', views.admin_request_history_view,name='admin-request-history'), + path('update-approve-status/', views.update_approve_status_view,name='update-approve-status'), + path('update-reject-status/', views.update_reject_status_view,name='update-reject-status'), + +] diff --git a/bloodbankmanagement/wsgi.py b/bloodbankmanagement/wsgi.py new file mode 100644 index 00000000..6c93e289 --- /dev/null +++ b/bloodbankmanagement/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for bloodbankmanagement project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bloodbankmanagement.settings') + +application = get_wsgi_application() diff --git a/donor/__init__.py b/donor/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/donor/admin.py b/donor/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/donor/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/donor/apps.py b/donor/apps.py new file mode 100644 index 00000000..54ef02d0 --- /dev/null +++ b/donor/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class DonorConfig(AppConfig): + name = 'donor' diff --git a/donor/forms.py b/donor/forms.py new file mode 100644 index 00000000..31d3ab49 --- /dev/null +++ b/donor/forms.py @@ -0,0 +1,22 @@ +from django import forms +from django.contrib.auth.models import User +from . import models + + +class DonorUserForm(forms.ModelForm): + class Meta: + model=User + fields=['first_name','last_name','username','password'] + widgets = { + 'password': forms.PasswordInput() + } + +class DonorForm(forms.ModelForm): + class Meta: + model=models.Donor + fields=['bloodgroup','address','mobile','profile_pic'] + +class DonationForm(forms.ModelForm): + class Meta: + model=models.BloodDonate + fields=['age','bloodgroup','disease','unit'] diff --git a/donor/migrations/0001_initial.py b/donor/migrations/0001_initial.py new file mode 100644 index 00000000..a869484c --- /dev/null +++ b/donor/migrations/0001_initial.py @@ -0,0 +1,30 @@ +# Generated by Django 3.0.5 on 2021-01-17 10:51 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Donor', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('profile_pic', models.ImageField(blank=True, null=True, upload_to='profile_pic/Donor/')), + ('age', models.PositiveIntegerField()), + ('bloodgroup', models.CharField(max_length=10)), + ('disease', models.CharField(default='Nothing', max_length=100)), + ('address', models.CharField(max_length=40)), + ('mobile', models.CharField(max_length=20)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/donor/migrations/0002_auto_20210213_1602.py b/donor/migrations/0002_auto_20210213_1602.py new file mode 100644 index 00000000..04568b10 --- /dev/null +++ b/donor/migrations/0002_auto_20210213_1602.py @@ -0,0 +1,35 @@ +# Generated by Django 3.0.5 on 2021-02-13 10:32 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('donor', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='donor', + name='age', + ), + migrations.RemoveField( + model_name='donor', + name='disease', + ), + migrations.CreateModel( + name='BloodDonate', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('disease', models.CharField(default='Nothing', max_length=100)), + ('age', models.PositiveIntegerField()), + ('bloodgroup', models.CharField(max_length=10)), + ('unit', models.PositiveIntegerField(default=0)), + ('status', models.CharField(default='Pending', max_length=20)), + ('date', models.DateField(auto_now=True)), + ('donor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='donor.Donor')), + ], + ), + ] diff --git a/donor/migrations/__init__.py b/donor/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/donor/models.py b/donor/models.py new file mode 100644 index 00000000..770013d2 --- /dev/null +++ b/donor/models.py @@ -0,0 +1,33 @@ +from django.db import models +from django.contrib.auth.models import User + +class Donor(models.Model): + user=models.OneToOneField(User,on_delete=models.CASCADE) + profile_pic= models.ImageField(upload_to='profile_pic/Donor/',null=True,blank=True) + + + bloodgroup=models.CharField(max_length=10) + + + address = models.CharField(max_length=40) + mobile = models.CharField(max_length=20,null=False) + + @property + def get_name(self): + return self.user.first_name+" "+self.user.last_name + @property + def get_instance(self): + return self + def __str__(self): + return self.user.first_name + +class BloodDonate(models.Model): + donor=models.ForeignKey(Donor,on_delete=models.CASCADE) + disease=models.CharField(max_length=100,default="Nothing") + age=models.PositiveIntegerField() + bloodgroup=models.CharField(max_length=10) + unit=models.PositiveIntegerField(default=0) + status=models.CharField(max_length=20,default="Pending") + date=models.DateField(auto_now=True) + def __str__(self): + return self.donor \ No newline at end of file diff --git a/donor/tests.py b/donor/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/donor/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/donor/urls.py b/donor/urls.py new file mode 100644 index 00000000..3210167a --- /dev/null +++ b/donor/urls.py @@ -0,0 +1,13 @@ +from django.urls import path + +from django.contrib.auth.views import LoginView +from . import views +urlpatterns = [ + path('donorlogin', LoginView.as_view(template_name='donor/donorlogin.html'),name='donorlogin'), + path('donorsignup', views.donor_signup_view,name='donorsignup'), + path('donor-dashboard', views.donor_dashboard_view,name='donor-dashboard'), + path('donate-blood', views.donate_blood_view,name='donate-blood'), + path('donation-history', views.donation_history_view,name='donation-history'), + path('make-request', views.make_request_view,name='make-request'), + path('request-history', views.request_history_view,name='request-history'), +] \ No newline at end of file diff --git a/donor/views.py b/donor/views.py new file mode 100644 index 00000000..6a9756a8 --- /dev/null +++ b/donor/views.py @@ -0,0 +1,80 @@ +from django.shortcuts import render,redirect,reverse +from . import forms,models +from django.db.models import Sum,Q +from django.contrib.auth.models import Group +from django.http import HttpResponseRedirect +from django.contrib.auth.decorators import login_required,user_passes_test +from django.conf import settings +from datetime import date, timedelta +from django.core.mail import send_mail +from django.contrib.auth.models import User +from blood import forms as bforms +from blood import models as bmodels + +def donor_signup_view(request): + userForm=forms.DonorUserForm() + donorForm=forms.DonorForm() + mydict={'userForm':userForm,'donorForm':donorForm} + if request.method=='POST': + userForm=forms.DonorUserForm(request.POST) + donorForm=forms.DonorForm(request.POST,request.FILES) + if userForm.is_valid() and donorForm.is_valid(): + user=userForm.save() + user.set_password(user.password) + user.save() + donor=donorForm.save(commit=False) + donor.user=user + donor.bloodgroup=donorForm.cleaned_data['bloodgroup'] + donor.save() + my_donor_group = Group.objects.get_or_create(name='DONOR') + my_donor_group[0].user_set.add(user) + return HttpResponseRedirect('donorlogin') + return render(request,'donor/donorsignup.html',context=mydict) + + +def donor_dashboard_view(request): + donor= models.Donor.objects.get(user_id=request.user.id) + dict={ + 'requestpending': bmodels.BloodRequest.objects.all().filter(request_by_donor=donor).filter(status='Pending').count(), + 'requestapproved': bmodels.BloodRequest.objects.all().filter(request_by_donor=donor).filter(status='Approved').count(), + 'requestmade': bmodels.BloodRequest.objects.all().filter(request_by_donor=donor).count(), + 'requestrejected': bmodels.BloodRequest.objects.all().filter(request_by_donor=donor).filter(status='Rejected').count(), + } + return render(request,'donor/donor_dashboard.html',context=dict) + + +def donate_blood_view(request): + donation_form=forms.DonationForm() + if request.method=='POST': + donation_form=forms.DonationForm(request.POST) + if donation_form.is_valid(): + blood_donate=donation_form.save(commit=False) + blood_donate.bloodgroup=donation_form.cleaned_data['bloodgroup'] + donor= models.Donor.objects.get(user_id=request.user.id) + blood_donate.donor=donor + blood_donate.save() + return HttpResponseRedirect('donation-history') + return render(request,'donor/donate_blood.html',{'donation_form':donation_form}) + +def donation_history_view(request): + donor= models.Donor.objects.get(user_id=request.user.id) + donations=models.BloodDonate.objects.all().filter(donor=donor) + return render(request,'donor/donation_history.html',{'donations':donations}) + +def make_request_view(request): + request_form=bforms.RequestForm() + if request.method=='POST': + request_form=bforms.RequestForm(request.POST) + if request_form.is_valid(): + blood_request=request_form.save(commit=False) + blood_request.bloodgroup=request_form.cleaned_data['bloodgroup'] + donor= models.Donor.objects.get(user_id=request.user.id) + blood_request.request_by_donor=donor + blood_request.save() + return HttpResponseRedirect('request-history') + return render(request,'donor/makerequest.html',{'request_form':request_form}) + +def request_history_view(request): + donor= models.Donor.objects.get(user_id=request.user.id) + blood_request=bmodels.BloodRequest.objects.all().filter(request_by_donor=donor) + return render(request,'donor/request_history.html',{'blood_request':blood_request}) diff --git a/manage.py b/manage.py new file mode 100644 index 00000000..590fc297 --- /dev/null +++ b/manage.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'bloodbankmanagement.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/patient/__init__.py b/patient/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/patient/admin.py b/patient/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/patient/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/patient/apps.py b/patient/apps.py new file mode 100644 index 00000000..bd0da01c --- /dev/null +++ b/patient/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class PatientConfig(AppConfig): + name = 'patient' diff --git a/patient/forms.py b/patient/forms.py new file mode 100644 index 00000000..f8ab4a68 --- /dev/null +++ b/patient/forms.py @@ -0,0 +1,18 @@ +from django import forms +from django.contrib.auth.models import User +from . import models + + +class PatientUserForm(forms.ModelForm): + class Meta: + model=User + fields=['first_name','last_name','username','password'] + widgets = { + 'password': forms.PasswordInput() + } + +class PatientForm(forms.ModelForm): + + class Meta: + model=models.Patient + fields=['age','bloodgroup','disease','address','doctorname','mobile','profile_pic'] diff --git a/patient/migrations/0001_initial.py b/patient/migrations/0001_initial.py new file mode 100644 index 00000000..afed657c --- /dev/null +++ b/patient/migrations/0001_initial.py @@ -0,0 +1,31 @@ +# Generated by Django 3.0.5 on 2021-01-17 10:51 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Patient', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('profile_pic', models.ImageField(blank=True, null=True, upload_to='profile_pic/Patient/')), + ('age', models.PositiveIntegerField()), + ('bloodgroup', models.CharField(max_length=10)), + ('disease', models.CharField(max_length=100)), + ('doctorname', models.CharField(max_length=50)), + ('address', models.CharField(max_length=40)), + ('mobile', models.CharField(max_length=20)), + ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/patient/migrations/__init__.py b/patient/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/patient/models.py b/patient/models.py new file mode 100644 index 00000000..4663d526 --- /dev/null +++ b/patient/models.py @@ -0,0 +1,23 @@ +from django.db import models +from django.contrib.auth.models import User + +class Patient(models.Model): + user=models.OneToOneField(User,on_delete=models.CASCADE) + profile_pic= models.ImageField(upload_to='profile_pic/Patient/',null=True,blank=True) + + age=models.PositiveIntegerField() + bloodgroup=models.CharField(max_length=10) + disease=models.CharField(max_length=100) + doctorname=models.CharField(max_length=50) + + address = models.CharField(max_length=40) + mobile = models.CharField(max_length=20,null=False) + + @property + def get_name(self): + return self.user.first_name+" "+self.user.last_name + @property + def get_instance(self): + return self + def __str__(self): + return self.user.first_name \ No newline at end of file diff --git a/patient/tests.py b/patient/tests.py new file mode 100644 index 00000000..7ce503c2 --- /dev/null +++ b/patient/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/patient/urls.py b/patient/urls.py new file mode 100644 index 00000000..f441b00a --- /dev/null +++ b/patient/urls.py @@ -0,0 +1,11 @@ +from django.urls import path + +from django.contrib.auth.views import LoginView +from . import views +urlpatterns = [ + path('patientlogin', LoginView.as_view(template_name='patient/patientlogin.html'),name='patientlogin'), + path('patientsignup', views.patient_signup_view,name='patientsignup'), + path('patient-dashboard', views.patient_dashboard_view,name='patient-dashboard'), + path('make-request', views.make_request_view,name='make-request'), + path('my-request', views.my_request_view,name='my-request'), +] \ No newline at end of file diff --git a/patient/views.py b/patient/views.py new file mode 100644 index 00000000..d2561daf --- /dev/null +++ b/patient/views.py @@ -0,0 +1,63 @@ +from django.shortcuts import render,redirect,reverse +from . import forms,models +from django.db.models import Sum,Q +from django.contrib.auth.models import Group +from django.http import HttpResponseRedirect +from django.contrib.auth.decorators import login_required,user_passes_test +from django.conf import settings +from datetime import date, timedelta +from django.core.mail import send_mail +from django.contrib.auth.models import User +from blood import forms as bforms +from blood import models as bmodels + + +def patient_signup_view(request): + userForm=forms.PatientUserForm() + patientForm=forms.PatientForm() + mydict={'userForm':userForm,'patientForm':patientForm} + if request.method=='POST': + userForm=forms.PatientUserForm(request.POST) + patientForm=forms.PatientForm(request.POST,request.FILES) + if userForm.is_valid() and patientForm.is_valid(): + user=userForm.save() + user.set_password(user.password) + user.save() + patient=patientForm.save(commit=False) + patient.user=user + patient.bloodgroup=patientForm.cleaned_data['bloodgroup'] + patient.save() + my_patient_group = Group.objects.get_or_create(name='PATIENT') + my_patient_group[0].user_set.add(user) + return HttpResponseRedirect('patientlogin') + return render(request,'patient/patientsignup.html',context=mydict) + +def patient_dashboard_view(request): + patient= models.Patient.objects.get(user_id=request.user.id) + dict={ + 'requestpending': bmodels.BloodRequest.objects.all().filter(request_by_patient=patient).filter(status='Pending').count(), + 'requestapproved': bmodels.BloodRequest.objects.all().filter(request_by_patient=patient).filter(status='Approved').count(), + 'requestmade': bmodels.BloodRequest.objects.all().filter(request_by_patient=patient).count(), + 'requestrejected': bmodels.BloodRequest.objects.all().filter(request_by_patient=patient).filter(status='Rejected').count(), + + } + + return render(request,'patient/patient_dashboard.html',context=dict) + +def make_request_view(request): + request_form=bforms.RequestForm() + if request.method=='POST': + request_form=bforms.RequestForm(request.POST) + if request_form.is_valid(): + blood_request=request_form.save(commit=False) + blood_request.bloodgroup=request_form.cleaned_data['bloodgroup'] + patient= models.Patient.objects.get(user_id=request.user.id) + blood_request.request_by_patient=patient + blood_request.save() + return HttpResponseRedirect('my-request') + return render(request,'patient/makerequest.html',{'request_form':request_form}) + +def my_request_view(request): + patient= models.Patient.objects.get(user_id=request.user.id) + blood_request=bmodels.BloodRequest.objects.all().filter(request_by_patient=patient) + return render(request,'patient/my_request.html',{'blood_request':blood_request}) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..40cadf3b --- /dev/null +++ b/requirements.txt @@ -0,0 +1,6 @@ +asgiref==3.2.7 +Django==3.0.5 +django-widget-tweaks==1.4.8 +pytz==2020.1 +sqlparse==0.3.1 + diff --git a/static/css/main.css b/static/css/main.css new file mode 100644 index 00000000..57ea25af --- /dev/null +++ b/static/css/main.css @@ -0,0 +1,770 @@ + +/* ========================================================================== + #FONT + ========================================================================== */ +.font-robo { + font-family: "Roboto", "Arial", "Helvetica Neue", sans-serif; +} + +.font-poppins { + font-family: "Poppins", "Arial", "Helvetica Neue", sans-serif; +} + +.font-opensans { + font-family: "Open Sans", "Arial", "Helvetica Neue", sans-serif; +} + +/* ========================================================================== + #GRID + ========================================================================== */ +.row { + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.row .col-2:last-child .input-group-desc { + margin-bottom: 0; +} + +.row-space { + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -moz-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.row-refine { + margin: 0 -15px; +} + +.row-refine .col-3 .input-group-desc, +.row-refine .col-9 .input-group-desc { + margin-bottom: 0; +} + +.col-2 { + width: -webkit-calc((100% - 30px) / 2); + width: -moz-calc((100% - 30px) / 2); + width: calc((100% - 30px) / 2); +} + +@media (max-width: 767px) { + .col-2 { + width: 100%; + } +} + +.form-row { + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: center; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-bottom: 40px; +} + +.form-row .name { + width: 125px; + color: #555; + font-size: 15px; + font-weight: 700; +} + +.form-row .value { + width: -webkit-calc(100% - 125px); + width: -moz-calc(100% - 125px); + width: calc(100% - 125px); +} + +@media (max-width: 767px) { + .form-row { + display: block; + } + .form-row .name, + .form-row .value { + display: block; + width: 100%; + } + .form-row .name { + margin-bottom: 7px; + } +} + +.col-3, +.col-9 { + padding: 0 15px; + position: relative; + width: 100%; + min-height: 1px; +} + +.col-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 25%; + -moz-box-flex: 0; + -ms-flex: 0 0 25%; + flex: 0 0 25%; + max-width: 25%; +} + +@media (max-width: 767px) { + .col-3 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 35%; + -moz-box-flex: 0; + -ms-flex: 0 0 35%; + flex: 0 0 35%; + max-width: 35%; + } +} + +.col-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 75%; + -moz-box-flex: 0; + -ms-flex: 0 0 75%; + flex: 0 0 75%; + max-width: 75%; +} + +@media (max-width: 767px) { + .col-9 { + -webkit-box-flex: 0; + -webkit-flex: 0 0 65%; + -moz-box-flex: 0; + -ms-flex: 0 0 65%; + flex: 0 0 65%; + max-width: 65%; + } +} + +/* ========================================================================== + #BOX-SIZING + ========================================================================== */ +/** + * More sensible default box-sizing: + * css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice + */ +html { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +* { + padding: 0; + margin: 0; +} + +*, *:before, *:after { + -webkit-box-sizing: inherit; + -moz-box-sizing: inherit; + box-sizing: inherit; +} + +/* ========================================================================== + #RESET + ========================================================================== */ +/** + * A very simple reset that sits on top of Normalize.css. + */ +body, +h1, h2, h3, h4, h5, h6, +blockquote, p, pre, +dl, dd, ol, ul, +figure, +hr, +fieldset, legend { + margin: 0; + padding: 0; +} + +/** + * Remove trailing margins from nested lists. + */ +li > ol, +li > ul { + margin-bottom: 0; +} + +/** + * Remove default table spacing. + */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/** + * 1. Reset Chrome and Firefox behaviour which sets a `min-width: min-content;` + * on fieldsets. + */ +fieldset { + min-width: 0; + /* [1] */ + border: 0; +} + +button { + outline: none; + background: none; + border: none; +} + +/* ========================================================================== + #PAGE WRAPPER + ========================================================================== */ +.page-wrapper { + min-height: 100vh; +} + +body { + font-family: "Open Sans", "Arial", "Helvetica Neue", sans-serif; + font-weight: 400; + font-size: 14px; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 400; +} + +h1 { + font-size: 36px; +} + +h2 { + font-size: 30px; +} + +h3 { + font-size: 24px; +} + +h4 { + font-size: 18px; +} + +h5 { + font-size: 15px; +} + +h6 { + font-size: 13px; +} + +/* ========================================================================== + #BACKGROUND + ========================================================================== */ +.bg-blue { + background: #2c6ed5; +} + +.bg-red { + background: #fa4251; +} + +.bg-gra-01 { + background: -webkit-gradient(linear, left bottom, left top, from(#fbc2eb), to(#a18cd1)); + background: -webkit-linear-gradient(bottom, #fbc2eb 0%, #a18cd1 100%); + background: -moz-linear-gradient(bottom, #fbc2eb 0%, #a18cd1 100%); + background: -o-linear-gradient(bottom, #fbc2eb 0%, #a18cd1 100%); + background: linear-gradient(to top, #fbc2eb 0%, #a18cd1 100%); +} + +.bg-gra-02 { + background: -webkit-gradient(linear, left bottom, right top, from(#fc2c77), to(#6c4079)); + background: -webkit-linear-gradient(bottom left, #fc2c77 0%, #6c4079 100%); + background: -moz-linear-gradient(bottom left, #fc2c77 0%, #6c4079 100%); + background: -o-linear-gradient(bottom left, #fc2c77 0%, #6c4079 100%); + background: linear-gradient(to top right, #fc2c77 0%, #6c4079 100%); +} + +.bg-gra-03 { + background: -webkit-gradient(linear, left bottom, right top, from(#08aeea), to(#b721ff)); + background: -webkit-linear-gradient(bottom left, #08aeea 0%, #b721ff 100%); + background: -moz-linear-gradient(bottom left, #08aeea 0%, #b721ff 100%); + background: -o-linear-gradient(bottom left, #08aeea 0%, #b721ff 100%); + background: linear-gradient(to top right, #08aeea 0%, #b721ff 100%); +} + +/* ========================================================================== + #SPACING + ========================================================================== */ +.p-t-100 { + padding-top: 100px; +} + +.p-t-130 { + padding-top: 130px; +} + +.p-t-180 { + padding-top: 180px; +} + +.p-t-45 { + padding-top: 45px; +} + +.p-t-20 { + padding-top: 20px; +} + +.p-t-15 { + padding-top: 15px; +} + +.p-t-10 { + padding-top: 10px; +} + +.p-t-30 { + padding-top: 30px; +} + +.p-b-100 { + padding-bottom: 100px; +} + +.p-b-50 { + padding-bottom: 50px; +} + +.m-r-45 { + margin-right: 45px; +} + +.m-r-55 { + margin-right: 55px; +} + +.m-b-55 { + margin-bottom: 55px; +} + +/* ========================================================================== + #WRAPPER + ========================================================================== */ +.wrapper { + margin: 0 auto; +} + +.wrapper--w960 { + max-width: 960px; +} + +.wrapper--w790 { + max-width: 790px; +} + +.wrapper--w780 { + max-width: 780px; +} + +.wrapper--w680 { + max-width: 680px; +} + +/* ========================================================================== + #BUTTON + ========================================================================== */ +.btn { + display: inline-block; + line-height: 50px; + padding: 0 50px; + -webkit-transition: all 0.4s ease; + -o-transition: all 0.4s ease; + -moz-transition: all 0.4s ease; + transition: all 0.4s ease; + cursor: pointer; + font-size: 15px; + text-transform: uppercase; + font-weight: 700; + color: #fff; + font-family: inherit; +} + +.btn--radius { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn--radius-2 { + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.btn--pill { + -webkit-border-radius: 20px; + -moz-border-radius: 20px; + border-radius: 20px; +} + +.btn--green { + background: #57b846; +} + +.btn--green:hover { + background: #4dae3c; +} + +.btn--blue { + background: #4272d7; +} + +.btn--blue:hover { + background: #3868cd; +} + +.btn--red { + background: #ff4b5a; +} + +.btn--red:hover { + background: #eb3746; +} + +/* ========================================================================== + #DATE PICKER + ========================================================================== */ +td.active { + background-color: #2c6ed5; +} + +input[type="date" i] { + padding: 14px; +} + +.table-condensed td, .table-condensed th { + font-size: 14px; + font-family: "Roboto", "Arial", "Helvetica Neue", sans-serif; + font-weight: 400; +} + +.daterangepicker td { + width: 40px; + height: 30px; +} + +.daterangepicker { + border: none; + -webkit-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + display: none; + border: 1px solid #e0e0e0; + margin-top: 5px; +} + +.daterangepicker::after, .daterangepicker::before { + display: none; +} + +.daterangepicker thead tr th { + padding: 10px 0; +} + +.daterangepicker .table-condensed th select { + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + font-size: 14px; + padding: 5px; + outline: none; +} + +/* ========================================================================== + #FORM + ========================================================================== */ +input { + outline: none; + margin: 0; + border: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + width: 100%; + font-size: 14px; + font-family: inherit; +} + +.radio-container { + display: inline-block; + position: relative; + padding-left: 30px; + cursor: pointer; + font-size: 16px; + color: #666; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.radio-container input { + position: absolute; + opacity: 0; + cursor: pointer; +} + +.radio-container input:checked ~ .checkmark { + background-color: #e5e5e5; +} + +.radio-container input:checked ~ .checkmark:after { + display: block; +} + +.radio-container .checkmark:after { + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -moz-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + -o-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); + width: 12px; + height: 12px; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + background: #57b846; +} + +.checkmark { + position: absolute; + top: 50%; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); + left: 0; + height: 20px; + width: 20px; + background-color: #e5e5e5; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + border-radius: 50%; + -webkit-box-shadow: inset 0px 1px 3px 0px rgba(0, 0, 0, 0.08); + -moz-box-shadow: inset 0px 1px 3px 0px rgba(0, 0, 0, 0.08); + box-shadow: inset 0px 1px 3px 0px rgba(0, 0, 0, 0.08); +} + +.checkmark:after { + content: ""; + position: absolute; + display: none; +} + +.input--style-5 { + background: #e5e5e5; + line-height: 50px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + padding: 0 22px; + font-size: 16px; + color: #555; +} + +.input-group-desc { + position: relative; +} + +@media (max-width: 767px) { + .input-group-desc { + margin-bottom: 40px; + } +} + +.input-group { + position: relative; + margin: 0; +} + +.label { + color: #555; + font-size: 15px; + font-weight: 700; +} + +.label--block { + width: 100%; +} + +.label--desc { + position: absolute; + text-transform: capitalize; + display: block; + color: #999; + font-size: 14px; + margin: 0; + margin-top: 7px; + left: 0; +} + +/* ========================================================================== + #SELECT2 + ========================================================================== */ +.select--no-search .select2-search { + display: none !important; +} + +.select2-container--open .select2-dropdown--below { + border: none; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + border: 1px solid #e0e0e0; + margin-top: 5px; + overflow: hidden; +} + +.select2-container--default .select2-results__option { + padding-left: 22px; +} + +.rs-select2 .select2-container { + width: 100% !important; + outline: none; + background: #e5e5e5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.rs-select2 .select2-container .select2-selection--single { + outline: none; + border: none; + height: 50px; + background: transparent; +} + +.rs-select2 .select2-container .select2-selection--single .select2-selection__rendered { + line-height: 50px; + padding-left: 0; + color: #555; + font-size: 16px; + font-family: inherit; + padding-left: 22px; + padding-right: 50px; +} + +.rs-select2 .select2-container .select2-selection--single .select2-selection__arrow { + height: 50px; + right: 15px; + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: center; + -webkit-justify-content: center; + -moz-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -webkit-align-items: center; + -moz-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.rs-select2 .select2-container .select2-selection--single .select2-selection__arrow b { + display: none; +} + +.rs-select2 .select2-container .select2-selection--single .select2-selection__arrow:after { + font-family: "Material-Design-Iconic-Font"; + content: '\f2f9'; + font-size: 24px; + color: #999; + -webkit-transition: all 0.4s ease; + -o-transition: all 0.4s ease; + -moz-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.rs-select2 .select2-container.select2-container--open .select2-selection--single .select2-selection__arrow::after { + -webkit-transform: rotate(-180deg); + -moz-transform: rotate(-180deg); + -ms-transform: rotate(-180deg); + -o-transform: rotate(-180deg); + transform: rotate(-180deg); +} + +/* ========================================================================== + #TITLE + ========================================================================== */ +.title { + font-size: 24px; + text-transform: uppercase; + font-weight: 700; + text-align: center; + color: #fff; +} + +/* ========================================================================== + #CARD + ========================================================================== */ +.card { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + background: #fff; +} + +.card-5 { + background: #fff; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + -webkit-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); + box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.15); +} + +.card-5 .card-heading { + padding: 20px 0; + background: #1a1a1a; + -webkit-border-top-left-radius: 10px; + -moz-border-radius-topleft: 10px; + border-top-left-radius: 10px; + -webkit-border-top-right-radius: 10px; + -moz-border-radius-topright: 10px; + border-top-right-radius: 10px; +} + +.card-5 .card-body { + padding: 52px 85px; + padding-bottom: 73px; +} + +@media (max-width: 767px) { + .card-5 .card-body { + padding: 40px 30px; + padding-bottom: 50px; + } +} diff --git a/static/css/main.min.css b/static/css/main.min.css new file mode 100644 index 00000000..a85c922a --- /dev/null +++ b/static/css/main.min.css @@ -0,0 +1 @@ +.daterangepicker,.select2-container--open .select2-dropdown--below{-webkit-box-shadow:0 8px 20px 0 rgba(0,0,0,.15);-moz-box-shadow:0 8px 20px 0 rgba(0,0,0,.15)}.font-robo{font-family:Roboto,Arial,"Helvetica Neue",sans-serif}.font-poppins{font-family:Poppins,Arial,"Helvetica Neue",sans-serif}.font-opensans,body{font-family:"Open Sans",Arial,"Helvetica Neue",sans-serif}.row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.row .col-2:last-child .input-group-desc{margin-bottom:0}.row-space{-webkit-box-pack:justify;-webkit-justify-content:space-between;-moz-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.row-refine{margin:0 -15px}.row-refine .col-3 .input-group-desc,.row-refine .col-9 .input-group-desc{margin-bottom:0}.col-2{width:-webkit-calc((100% - 30px)/ 2);width:-moz-calc((100% - 30px)/ 2);width:calc((100% - 30px)/ 2)}@media (max-width:767px){.col-2{width:100%}}.form-row{display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:40px}.form-row .name{width:125px;color:#555;font-size:15px;font-weight:700}body,h1,h2,h3,h4,h5,h6{font-weight:400}.form-row .value{width:-webkit-calc(100% - 125px);width:-moz-calc(100% - 125px);width:calc(100% - 125px)}@media (max-width:767px){.form-row{display:block}.form-row .name,.form-row .value{display:block;width:100%}.form-row .name{margin-bottom:7px}}.col-3,.col-9{padding:0 15px;position:relative;width:100%;min-height:1px}*,blockquote,body,dd,dl,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,legend,ol,p,pre,ul{margin:0;padding:0}.col-3{-webkit-box-flex:0;-webkit-flex:0 0 25%;-moz-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}@media (max-width:767px){.col-3{-webkit-box-flex:0;-webkit-flex:0 0 35%;-moz-box-flex:0;-ms-flex:0 0 35%;flex:0 0 35%;max-width:35%}}.col-9{-webkit-box-flex:0;-webkit-flex:0 0 75%;-moz-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}@media (max-width:767px){.col-9{-webkit-box-flex:0;-webkit-flex:0 0 65%;-moz-box-flex:0;-ms-flex:0 0 65%;flex:0 0 65%;max-width:65%}}html{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*,:after,:before{-webkit-box-sizing:inherit;-moz-box-sizing:inherit;box-sizing:inherit}li>ol,li>ul{margin-bottom:0}table{border-collapse:collapse;border-spacing:0}fieldset{min-width:0;border:0}button{outline:0;background:0 0;border:none}.page-wrapper{min-height:100vh}body{font-size:14px}h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:18px}h5{font-size:15px}h6{font-size:13px}.bg-blue{background:#2c6ed5}.bg-red{background:#fa4251}.bg-gra-01{background:-webkit-gradient(linear,left bottom,left top,from(#fbc2eb),to(#a18cd1));background:-webkit-linear-gradient(bottom,#fbc2eb 0,#a18cd1 100%);background:-moz-linear-gradient(bottom,#fbc2eb 0,#a18cd1 100%);background:-o-linear-gradient(bottom,#fbc2eb 0,#a18cd1 100%);background:linear-gradient(to top,#fbc2eb 0,#a18cd1 100%)}.bg-gra-02{background:-webkit-gradient(linear,left bottom,right top,from(#fc2c77),to(#6c4079));background:-webkit-linear-gradient(bottom left,#fc2c77 0,#6c4079 100%);background:-moz-linear-gradient(bottom left,#fc2c77 0,#6c4079 100%);background:-o-linear-gradient(bottom left,#fc2c77 0,#6c4079 100%);background:linear-gradient(to top right,#fc2c77 0,#6c4079 100%)}.bg-gra-03{background:-webkit-gradient(linear,left bottom,right top,from(#08aeea),to(#b721ff));background:-webkit-linear-gradient(bottom left,#08aeea 0,#b721ff 100%);background:-moz-linear-gradient(bottom left,#08aeea 0,#b721ff 100%);background:-o-linear-gradient(bottom left,#08aeea 0,#b721ff 100%);background:linear-gradient(to top right,#08aeea 0,#b721ff 100%)}.p-t-100{padding-top:100px}.p-t-130{padding-top:130px}.p-t-180{padding-top:180px}.p-t-45{padding-top:45px}.p-t-20{padding-top:20px}.p-t-15{padding-top:15px}.p-t-10{padding-top:10px}.p-t-30{padding-top:30px}.p-b-100{padding-bottom:100px}.p-b-50{padding-bottom:50px}.m-r-45{margin-right:45px}.m-r-55{margin-right:55px}.m-b-55{margin-bottom:55px}.wrapper{margin:0 auto}.wrapper--w960{max-width:960px}.wrapper--w790{max-width:790px}.wrapper--w780{max-width:780px}.wrapper--w680{max-width:680px}.btn{display:inline-block;line-height:50px;padding:0 50px;-webkit-transition:all .4s ease;-o-transition:all .4s ease;-moz-transition:all .4s ease;transition:all .4s ease;cursor:pointer;font-size:15px;text-transform:uppercase;font-weight:700;color:#fff;font-family:inherit}.btn--radius{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn--radius-2{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.btn--pill{-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px}.btn--green{background:#57b846}.btn--green:hover{background:#4dae3c}.btn--blue{background:#4272d7}.btn--blue:hover{background:#3868cd}.btn--red{background:#ff4b5a}.btn--red:hover{background:#eb3746}td.active{background-color:#2c6ed5}input[type=datei]{padding:14px}.table-condensed td,.table-condensed th{font-size:14px;font-family:Roboto,Arial,"Helvetica Neue",sans-serif;font-weight:400}.label,.title{font-weight:700}.daterangepicker td{width:40px;height:30px}.daterangepicker{box-shadow:0 8px 20px 0 rgba(0,0,0,.15);display:none;border:1px solid #e0e0e0;margin-top:5px}.daterangepicker::after,.daterangepicker::before{display:none}.daterangepicker thead tr th{padding:10px 0}.daterangepicker .table-condensed th select{border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;font-size:14px;padding:5px;outline:0}input{outline:0;margin:0;border:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;width:100%;font-size:14px;font-family:inherit}.radio-container{display:inline-block;position:relative;padding-left:30px;cursor:pointer;font-size:16px;color:#666;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.radio-container input{position:absolute;opacity:0;cursor:pointer}.radio-container input:checked~.checkmark{background-color:#e5e5e5}.radio-container input:checked~.checkmark:after{display:block}.radio-container .checkmark:after{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:12px;height:12px;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;background:#57b846}.checkmark{position:absolute;top:50%;-webkit-transform:translateY(-50%);-moz-transform:translateY(-50%);-ms-transform:translateY(-50%);-o-transform:translateY(-50%);transform:translateY(-50%);left:0;height:20px;width:20px;background-color:#e5e5e5;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;-webkit-box-shadow:inset 0 1px 3px 0 rgba(0,0,0,.08);-moz-box-shadow:inset 0 1px 3px 0 rgba(0,0,0,.08);box-shadow:inset 0 1px 3px 0 rgba(0,0,0,.08)}.checkmark:after{content:"";position:absolute;display:none}.input-group,.input-group-desc{position:relative}.input--style-5{background:#e5e5e5;line-height:50px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:0 22px;font-size:16px;color:#555}@media (max-width:767px){.input-group-desc{margin-bottom:40px}}.input-group{margin:0}.label{color:#555;font-size:15px}.label--block{width:100%}.label--desc{position:absolute;text-transform:capitalize;display:block;color:#999;font-size:14px;margin:7px 0 0;left:0}.select--no-search .select2-search{display:none!important}.select2-container--open .select2-dropdown--below{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;box-shadow:0 8px 20px 0 rgba(0,0,0,.15);border:1px solid #e0e0e0;margin-top:5px;overflow:hidden}.select2-container--default .select2-results__option{padding-left:22px}.rs-select2 .select2-container{width:100%!important;outline:0;background:#e5e5e5;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.rs-select2 .select2-container .select2-selection--single{outline:0;border:none;height:50px;background:0 0}.card,.card-5{background:#fff}.rs-select2 .select2-container .select2-selection--single .select2-selection__rendered{line-height:50px;color:#555;font-size:16px;font-family:inherit;padding-left:22px;padding-right:50px}.rs-select2 .select2-container .select2-selection--single .select2-selection__arrow{height:50px;right:15px;display:-webkit-box;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-moz-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-moz-box-align:center;-ms-flex-align:center;align-items:center}.rs-select2 .select2-container .select2-selection--single .select2-selection__arrow b{display:none}.rs-select2 .select2-container .select2-selection--single .select2-selection__arrow:after{font-family:Material-Design-Iconic-Font;content:'\f2f9';font-size:24px;color:#999;-webkit-transition:all .4s ease;-o-transition:all .4s ease;-moz-transition:all .4s ease;transition:all .4s ease}.rs-select2 .select2-container.select2-container--open .select2-selection--single .select2-selection__arrow::after{-webkit-transform:rotate(-180deg);-moz-transform:rotate(-180deg);-ms-transform:rotate(-180deg);-o-transform:rotate(-180deg);transform:rotate(-180deg)}.title{font-size:24px;text-transform:uppercase;text-align:center;color:#fff}.card{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.card-5{-webkit-border-radius:10px;-moz-border-radius:10px;border-radius:10px;-webkit-box-shadow:0 8px 20px 0 rgba(0,0,0,.15);-moz-box-shadow:0 8px 20px 0 rgba(0,0,0,.15);box-shadow:0 8px 20px 0 rgba(0,0,0,.15)}.card-5 .card-heading{padding:20px 0;background:#1a1a1a;-webkit-border-top-left-radius:10px;-moz-border-radius-topleft:10px;border-top-left-radius:10px;-webkit-border-top-right-radius:10px;-moz-border-radius-topright:10px;border-top-right-radius:10px}.card-5 .card-body{padding:52px 85px 73px}@media (max-width:767px){.card-5 .card-body{padding:40px 30px 50px}} \ No newline at end of file diff --git a/static/image/homepage.jpg b/static/image/homepage.jpg new file mode 100644 index 00000000..1dbbfc80 Binary files /dev/null and b/static/image/homepage.jpg differ diff --git a/static/image/homepage.png b/static/image/homepage.png new file mode 100644 index 00000000..859d63a7 Binary files /dev/null and b/static/image/homepage.png differ diff --git a/static/image/logout.png b/static/image/logout.png new file mode 100644 index 00000000..e0ba681e Binary files /dev/null and b/static/image/logout.png differ diff --git a/static/vendor/select2/select2.min.css b/static/vendor/select2/select2.min.css new file mode 100644 index 00000000..60d59904 --- /dev/null +++ b/static/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/static/vendor/select2/select2.min.js b/static/vendor/select2/select2.min.js new file mode 100644 index 00000000..7ef2fda8 --- /dev/null +++ b/static/vendor/select2/select2.min.js @@ -0,0 +1 @@ +/*! Select2 4.0.5 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return v.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n,o=b&&b.split("/"),p=t.map,q=p&&p["*"]||{};if(a){for(a=a.split("/"),g=a.length-1,t.nodeIdCompat&&x.test(a[g])&&(a[g]=a[g].replace(x,"")),"."===a[0].charAt(0)&&o&&(n=o.slice(0,o.length-1),a=n.concat(a)),k=0;k0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}if((o||q)&&p){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),o)for(l=o.length;l>0;l-=1)if((e=p[o.slice(0,l).join("/")])&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&q&&q[d]&&(i=q[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=w.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),o.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){r[a]=b}}function j(a){if(e(s,a)){var c=s[a];delete s[a],u[a]=!0,n.apply(b,c)}if(!e(r,a)&&!e(u,a))throw new Error("No "+a);return r[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return a?k(a):[]}function m(a){return function(){return t&&t.config&&t.config[a]||{}}}var n,o,p,q,r={},s={},t={},u={},v=Object.prototype.hasOwnProperty,w=[].slice,x=/\.js$/;p=function(a,b){var c,d=k(a),e=d[0],g=b[1];return a=d[1],e&&(e=f(e,g),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(g)):f(a,g):(a=f(a,g),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},q={require:function(a){return g(a)},exports:function(a){var b=r[a];return void 0!==b?b:r[a]={}},module:function(a){return{id:a,uri:"",exports:r[a],config:m(a)}}},n=function(a,c,d,f){var h,k,m,n,o,t,v,w=[],x=typeof d;if(f=f||a,t=l(f),"undefined"===x||"function"===x){for(c=!c.length&&d.length?["require","exports","module"]:c,o=0;o0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h":">",'"':""","'":"'","/":"/"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('
    ');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('
  • '),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()});b.$results.find(".select2-results__option[aria-selected]").each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j",{class:"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):h-g<0&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");if("true"===c.attr("aria-selected"))return void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{}));d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),c<=2?this.$results.scrollTop(0):(g>this.$results.outerHeight()||g<0)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id,a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2");a(".select2.select2-container--open").each(function(){var b=a(this);this!=d[0]&&b.data("element").select2("close")})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){b.find(".selection").append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html(''),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},e.prototype.selectionContainer=function(){return a("")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('
      '),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection");return this.options.get("escapeMarkup")(c(a,b))},d.prototype.selectionContainer=function(){return a('
    • ×
    • ')},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d1||c)return a.call(this,b);this.clear();var d=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(d)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e0||0===c.length)){var d=a('×');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){if(a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented(),a.which===c.BACKSPACE&&""===e.$search.val()){var b=e.$searchContainer.prev(".select2-selection__choice");if(b.length>0){var d=b.data("data");e.searchRemoveChoice(d),a.preventDefault()}}});var f=document.documentMode,g=f&&f<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){if(g)return void e.$selection.off("input.search input.searchcheck");e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{a=.75*(this.$search.val().length+1)+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"}}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),null!=c.id?d+="-"+c.id.toString():d+="-"+a.generateChars(4),d},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h0&&b.term.length>this.maximumInputLength)return void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}});a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;if(d.maximumSelectionLength>0&&f>=d.maximumSelectionLength)return void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}});a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()||e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){e.showSearch(a)?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){e.$results.offset().top+e.$results.outerHeight(!1)+50>=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1)&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('
    • '),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a(""),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id;this.$container.parents().filter(b.hasScroll).off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.topf.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),null==l.tokenSeparators&&null==l.tokenizer||(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){null==c(d,e.children[g])&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var h=b(e.text).toUpperCase(),i=b(d.term).toUpperCase();return h.indexOf(i)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)},new D}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return e<=0?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;h=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=a&&0!==a.length||(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},e.prototype.render=function(){var b=a('');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("jquery-mousewheel",["jquery"],function(a){return a}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c}); \ No newline at end of file diff --git a/templates/blood/admin_blood.html b/templates/blood/admin_blood.html new file mode 100644 index 00000000..e7af9d00 --- /dev/null +++ b/templates/blood/admin_blood.html @@ -0,0 +1,149 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} + +

      +
      + +
      +
      +
      +
      +
      +

      A+

      +


      +
      + {{A1.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      B+

      +


      +
      + {{B1.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      O+

      +


      +
      + {{O1.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      AB+

      +


      +
      + {{AB1.unit}} +
      +
      +
      +
      +
      + +
      +
      +
      +
      +
      +

      A-

      +


      +
      + {{A2.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      B-

      +


      +
      + {{B2.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      O-

      +


      +
      + {{O2.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      AB-

      +


      +
      + {{AB2.unit}} +
      +
      +
      +
      +
      +
      +
      +

      Update Blood Unit


      +
      + +
      + {% csrf_token %} +
      + + +
      +
      + + +
      + +
      +
      + + +
      + + +{% endblock content %} diff --git a/templates/blood/admin_dashboard.html b/templates/blood/admin_dashboard.html new file mode 100644 index 00000000..c9c4d248 --- /dev/null +++ b/templates/blood/admin_dashboard.html @@ -0,0 +1,165 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +

      +
      + +
      +
      +
      +
      +
      +

      A+

      +


      +
      + {{A1.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      B+

      +


      +
      + {{B1.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      O+

      +


      +
      + {{O1.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      AB+

      +


      +
      + {{AB1.unit}} +
      +
      +
      +
      +
      + +
      +
      +
      +
      +
      +

      A-

      +


      +
      + {{A2.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      B-

      +


      +
      + {{B2.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      O-

      +


      +
      + {{O2.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +

      AB-

      +


      +
      + {{AB2.unit}} +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + +

      +
      + Total Donors
      + {{totaldonors}} +
      +
      +
      +
      +
      +
      +
      +
      + +

      +
      + Total Requests
      + {{totalrequest}} +
      +
      +
      +
      +
      +
      +
      +
      + +

      +
      + Approved Requests
      + {{totalapprovedrequest}} +
      +
      +
      +
      +
      +
      +
      +
      + +

      +
      + Total Blood Unit (in ml)
      + {{totalbloodunit}} +
      +
      +
      +
      +
      +
      + + +{% endblock content %} diff --git a/templates/blood/admin_donation.html b/templates/blood/admin_donation.html new file mode 100644 index 00000000..51586bae --- /dev/null +++ b/templates/blood/admin_donation.html @@ -0,0 +1,65 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + +

      +
      +

      BLOOD DONATION DETAILS


      + + + + + + + + + + + + + + + {% for t in donations %} + + + + + + + + + {% if t.status == 'Pending' %} + + {% elif t.status == 'Approved' %} + + + {% else %} + + {% endif %} + + {% endfor %} + + + +
      Donor NameDiseaseAgeBlood GroupUnitRequest DateStatusAction
      {{t.donor}} {{t.disease}} {{t.age}}{{t.bloodgroup}}{{t.unit}}{{t.date}}{{t.status}} + + + {{t.unit}} Unit Added To Stock0 Unit Added To Stock
      +
      + + +{% endblock content %} diff --git a/templates/blood/admin_donor.html b/templates/blood/admin_donor.html new file mode 100644 index 00000000..ae04355a --- /dev/null +++ b/templates/blood/admin_donor.html @@ -0,0 +1,41 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} +

      +
      +

      DONOR DETAILS


      + + + + + + + + + + + + + {% for t in donors %} + + + + + + + + + + {% endfor %} + + + +
      NameProfileBlood GroupAddressMobileAction
      {{t.get_name}} Profile Pic{{t.bloodgroup}}{{t.address}}{{t.mobile}} + + +
      +
      + + +{% endblock content %} diff --git a/templates/blood/admin_patient.html b/templates/blood/admin_patient.html new file mode 100644 index 00000000..51779d0f --- /dev/null +++ b/templates/blood/admin_patient.html @@ -0,0 +1,43 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} +

      +
      +

      PATIENT DETAILS


      + + + + + + + + + + + + + + {% for t in patients %} + + + + + + + + + + + {% endfor %} + + + +
      NameProfileBlood GroupAgeDiseaseMobileAction
      {{t.get_name}} Profile Pic{{t.bloodgroup}}{{t.age}}{{t.disease}}{{t.mobile}} + + +
      +
      + + +{% endblock content %} diff --git a/templates/blood/admin_request.html b/templates/blood/admin_request.html new file mode 100644 index 00000000..2b05915f --- /dev/null +++ b/templates/blood/admin_request.html @@ -0,0 +1,61 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} +

      +
      + {% if requests %} +

      Blood Requested


      + {% if message %} +
      {{message}}

      +{% else %} + +{% endif %} + + + + + + + + + + + + + + + + {% for t in requests %} + + + + + + + + + + + + + + + {% endfor %} + + + +
      Patient NameAgeReasonBlood GroupUnit (in ml)DateStatusAction
      {{t.patient_name}}{{t.patient_age}}{{t.reason}}{{t.bloodgroup}}{{t.unit}}{{t.date}}{{t.status}} + + + + +
      +{% else %} +
      No Blood Request By Patient / Donor !
      +{% endif %} + +
      + + +{% endblock content %} diff --git a/templates/blood/admin_request_history.html b/templates/blood/admin_request_history.html new file mode 100644 index 00000000..6dcc4cba --- /dev/null +++ b/templates/blood/admin_request_history.html @@ -0,0 +1,72 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + +

      +
      +

      Blood Request History


      + {% if message %} +
      {{message}}

      +{% else %} + +{% endif %} + + + + + + + + + + + + + + + + + {% for t in requests %} + + + + + + + + + + {% if t.status == 'Approved' %} + + + {% else %} + + + {% endif %} + + + + + {% endfor %} + + + +
      Patient NameAgeReasonBlood GroupUnit (in ml)DateStatusStock Status
      {{t.patient_name}}{{t.patient_age}}{{t.reason}}{{t.bloodgroup}}{{t.unit}}{{t.date}} Approved {{t.unit}} Unit Deducted From StockRejected 0 Unit Deducted From Stock
      +
      + + +{% endblock content %} diff --git a/templates/blood/adminbase.html b/templates/blood/adminbase.html new file mode 100644 index 00000000..68c231c9 --- /dev/null +++ b/templates/blood/adminbase.html @@ -0,0 +1,210 @@ + + + + + + ADMIN + + + + + + + + + + + +

      +
      + +
      + + +{% block content %} + +{% endblock content %} + + + +
      +
      + + + + + + + + + \ No newline at end of file diff --git a/templates/blood/adminlogin.html b/templates/blood/adminlogin.html new file mode 100644 index 00000000..c669d10d --- /dev/null +++ b/templates/blood/adminlogin.html @@ -0,0 +1,76 @@ +{%load static%} +{% load widget_tweaks %} + + + + + + + + + + + + + + + + + {% include "blood/navbar.html" %} + + + + +
      +
      +


      +
      +
      +

      Admin Login

      +
      +
      +
      + {% csrf_token %} +
      +
      Username
      +
      +
      + + {% render_field form.username class="input--style-5"%} + +
      +
      +
      +
      +
      Password
      +
      +
      + + {% render_field form.password class="input--style-5" %} +
      +
      +
      + + + + +
      + +
      +
      +
      +
      +
      +
      + +{% include "blood/footer.html" %} + + + + + + + + diff --git a/templates/blood/footer.html b/templates/blood/footer.html new file mode 100644 index 00000000..e84eb2d5 --- /dev/null +++ b/templates/blood/footer.html @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/templates/blood/index.html b/templates/blood/index.html new file mode 100644 index 00000000..d144a7ce --- /dev/null +++ b/templates/blood/index.html @@ -0,0 +1,44 @@ +{% load static %} + + + + + + + + + + {% include "blood/navbar.html" %} +
      +
      +
      +













      + + +



      + +
      +
      + + +
      + +

      “Opportunities knock the door sometimes, so don’t let it go and donate blood.” +

      + +

      - LazyCoder

      + +
      + {% include "blood/footer.html" %} + + + + + diff --git a/templates/blood/logout.html b/templates/blood/logout.html new file mode 100644 index 00000000..48231fb7 --- /dev/null +++ b/templates/blood/logout.html @@ -0,0 +1,72 @@ +{%load static%} + + + + + + + + + {% include "blood/navbar.html" %} +




      +
      + + + +
      +
      +
      +
      +
      +
      + +
      +
      +
      + +

      You Have Been Logged Out

      +
      +
      +
      +

      Thank you for using our website

      + + +
      +
      + +
      +
      +
      + + +
      + + +
      + + +
      + +
      + +
      + + + + +
      +




      +


      +{% include "blood/footer.html" %} + + + diff --git a/templates/blood/navbar.html b/templates/blood/navbar.html new file mode 100644 index 00000000..20538da0 --- /dev/null +++ b/templates/blood/navbar.html @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + +
      + +
      + + + + + \ No newline at end of file diff --git a/templates/blood/update_donor.html b/templates/blood/update_donor.html new file mode 100644 index 00000000..15f35f69 --- /dev/null +++ b/templates/blood/update_donor.html @@ -0,0 +1,127 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + + + + + + +
      +
      + +
      +
      +

      Update Donor

      +
      +
      +
      + {% csrf_token %} + +
      +
      First Name
      +
      +
      + {% render_field userForm.first_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Last Name
      +
      +
      + {% render_field userForm.last_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Username
      +
      +
      + {% render_field userForm.username|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Password
      +
      +
      + {% render_field userForm.password|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + + +
      +
      Blood Group
      +
      +
      + +
      +
      +
      + + +
      +
      Address
      +
      +
      + {% render_field donorForm.address|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Mobile
      +
      +
      + {% render_field donorForm.mobile|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Profile Pic
      +
      +
      + {% render_field donorForm.profile_pic|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + +
      + +
      +
      +
      + + +
      +
      +
      +
      + +{% endblock content %} diff --git a/templates/blood/update_patient.html b/templates/blood/update_patient.html new file mode 100644 index 00000000..22cee42d --- /dev/null +++ b/templates/blood/update_patient.html @@ -0,0 +1,152 @@ +{% extends 'blood/adminbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + + + + + + +
      +
      + +
      +
      +

      Update Patient

      +
      +
      +
      + {% csrf_token %} + +
      +
      First Name
      +
      +
      + {% render_field userForm.first_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Last Name
      +
      +
      + {% render_field userForm.last_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Username
      +
      +
      + {% render_field userForm.username|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Password
      +
      +
      + {% render_field userForm.password|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Age
      +
      +
      + {% render_field patientForm.age|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + +
      +
      Blood Group
      +
      +
      + +
      +
      +
      + +
      +
      Disease(if any)
      +
      +
      + {% render_field patientForm.disease|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Doctor
      +
      +
      + {% render_field patientForm.doctorname|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Address
      +
      +
      + {% render_field patientForm.address|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Mobile
      +
      +
      + {% render_field patientForm.mobile|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Profile Pic
      +
      +
      + {% render_field patientForm.profile_pic|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + +
      + +
      +
      +
      + + +
      +
      +
      +
      + +{% endblock content %} diff --git a/templates/donor/donate_blood.html b/templates/donor/donate_blood.html new file mode 100644 index 00000000..6f07d45e --- /dev/null +++ b/templates/donor/donate_blood.html @@ -0,0 +1,89 @@ +{% extends 'donor/donorbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + + + + + + +
      +
      + +
      +
      +

      DONATE BLOOD

      +
      +
      +
      + {% csrf_token %} + +
      +
      Blood Group
      +
      +
      + +
      +
      +
      + +
      +
      Unit (in ml)
      +
      +
      + {% render_field donation_form.unit|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Disease (if any)
      +
      +
      + {% render_field donation_form.disease|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Age
      +
      +
      + {% render_field donation_form.age|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + + + +
      + +
      +
      +
      + + +
      +
      +
      +
      + +{% endblock content %} diff --git a/templates/donor/donation_history.html b/templates/donor/donation_history.html new file mode 100644 index 00000000..5cf6672d --- /dev/null +++ b/templates/donor/donation_history.html @@ -0,0 +1,64 @@ +{% extends 'donor/donorbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + +

      +
      +

      My Donation History


      + + + + + + + + + + + + + + {% for t in donations %} + + + + + + + + + + {% if t.status == 'Approved' %} + + + {% elif t.status == 'Rejected' %} + + {% else %} + + {% endif %} + + + + {% endfor %} + + + +
      Donor AgeDisease (if any)Blood GroupUnitDateStatus
      {{t.age}} {{t.disease}}{{t.bloodgroup}}{{t.unit}}{{t.date}} ApprovedRejectedPending
      +
      + + +{% endblock content %} diff --git a/templates/donor/donor_dashboard.html b/templates/donor/donor_dashboard.html new file mode 100644 index 00000000..1c580f12 --- /dev/null +++ b/templates/donor/donor_dashboard.html @@ -0,0 +1,70 @@ +{% extends 'donor/donorbase.html' %} +{% block content %} +

      +
      + + +
      + +
      +
      +
      +
      + +

      +
      + Request Made
      + {{requestmade}} +
      +
      +
      +
      + +
      +
      +
      +
      + +

      +
      + Pending Request
      + {{requestpending}} +
      +
      +
      +
      + +
      +
      +
      +
      + +

      +
      + Approved Request
      + {{requestapproved}} +
      +
      +
      +
      +
      +
      +
      +
      + +

      +
      + Rejected Request
      + {{requestrejected}} +
      +
      +
      +
      + +
      + + +
      + + +{% endblock content %} diff --git a/templates/donor/donorbase.html b/templates/donor/donorbase.html new file mode 100644 index 00000000..98a2ce7a --- /dev/null +++ b/templates/donor/donorbase.html @@ -0,0 +1,209 @@ + + + + + + DONOR + + + + + + + + + + + +

      +
      + +
      + + +{% block content %} + +{% endblock content %} + + + +
      +
      + + + + + + + + + \ No newline at end of file diff --git a/templates/donor/donorlogin.html b/templates/donor/donorlogin.html new file mode 100644 index 00000000..3a0df87c --- /dev/null +++ b/templates/donor/donorlogin.html @@ -0,0 +1,76 @@ +{%load static%} +{% load widget_tweaks %} + + + + + + + + + + + + + + + + + {% include "blood/navbar.html" %} + + + + +
      +
      +


      +
      +
      +

      Donor Login

      +
      +
      +
      + {% csrf_token %} +
      +
      Username
      +
      +
      + {% render_field form.username class="input--style-5"%} +
      +
      +
      +
      +
      Password
      +
      +
      + {% render_field form.password class="input--style-5" %} +
      +
      +
      + + + + +
      + +
      +
      +
      +

      Does not have an account ? Click here to register

      + +
      +
      +
      +
      + +{% include "blood/footer.html" %} + + + + + + + + diff --git a/templates/donor/donorsignup.html b/templates/donor/donorsignup.html new file mode 100644 index 00000000..d26be225 --- /dev/null +++ b/templates/donor/donorsignup.html @@ -0,0 +1,151 @@ +{%load static%} +{% load widget_tweaks %} + + + + + + + + + + + + + + + + + + {% include "blood/navbar.html" %} + + + + +
      +
      +


      +
      +
      +

      Donor Signup

      +
      +
      +
      + {% csrf_token %} + +
      +
      First Name
      +
      +
      + {% render_field userForm.first_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Last Name
      +
      +
      + {% render_field userForm.last_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Username
      +
      +
      + {% render_field userForm.username|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Password
      +
      +
      + {% render_field userForm.password|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + + + +
      +
      Blood Group
      +
      +
      + +
      +
      +
      + + + +
      +
      Address
      +
      +
      + {% render_field donorForm.address|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Mobile
      +
      +
      + {% render_field donorForm.mobile|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Profile Pic
      +
      +
      + {% render_field donorForm.profile_pic|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + +
      + +
      +
      +
      +

      Already have an account ? Click here to login

      + +
      +
      +
      +
      + +{% include "blood/footer.html" %} + + + + + + + + diff --git a/templates/donor/makerequest.html b/templates/donor/makerequest.html new file mode 100644 index 00000000..3e97c8ca --- /dev/null +++ b/templates/donor/makerequest.html @@ -0,0 +1,99 @@ +{% extends 'donor/donorbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + + + + + + +
      +
      + +
      +
      +

      MAKE BLOOD REQUEST

      +
      +
      +
      + {% csrf_token %} + +
      +
      Patient Name
      +
      +
      + {% render_field request_form.patient_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Patient Age
      +
      +
      + {% render_field request_form.patient_age|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Reason
      +
      +
      + {% render_field request_form.reason|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Blood Group
      +
      +
      + +
      +
      +
      + +
      +
      Unit (in ml)
      +
      +
      + {% render_field request_form.unit|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + + + + +
      + +
      +
      +
      + + +
      +
      +
      +
      + +{% endblock content %} diff --git a/templates/donor/request_history.html b/templates/donor/request_history.html new file mode 100644 index 00000000..aba403d6 --- /dev/null +++ b/templates/donor/request_history.html @@ -0,0 +1,64 @@ +{% extends 'donor/donorbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + +

      +
      +

      My Blood Request


      + + + + + + + + + + + + + + + {% for t in blood_request %} + + + + + + + + + {% if t.status == 'Approved' %} + + + {% elif t.status == 'Rejected' %} + + {% else %} + + {% endif %} + + + + {% endfor %} + + + +
      Patient NamePatient AgeReasonBlood GroupUnitDateStatus
      {{t.patient_name}}{{t.patient_age}}{{t.reason}}{{t.bloodgroup}}{{t.unit}}{{t.date}} ApprovedRejectedPending
      +
      + + +{% endblock content %} diff --git a/templates/patient/makerequest.html b/templates/patient/makerequest.html new file mode 100644 index 00000000..4b1e282f --- /dev/null +++ b/templates/patient/makerequest.html @@ -0,0 +1,99 @@ +{% extends 'patient/patientbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + + + + + + +
      +
      + +
      +
      +

      MAKE BLOOD REQUEST

      +
      +
      +
      + {% csrf_token %} + +
      +
      Patient Name
      +
      +
      + {% render_field request_form.patient_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Patient Age
      +
      +
      + {% render_field request_form.patient_age|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Reason
      +
      +
      + {% render_field request_form.reason|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Blood Group
      +
      +
      + +
      +
      +
      + +
      +
      Unit (in ml)
      +
      +
      + {% render_field request_form.unit|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + + + + +
      + +
      +
      +
      + + +
      +
      +
      +
      + +{% endblock content %} diff --git a/templates/patient/my_request.html b/templates/patient/my_request.html new file mode 100644 index 00000000..aa2f0953 --- /dev/null +++ b/templates/patient/my_request.html @@ -0,0 +1,64 @@ +{% extends 'patient/patientbase.html' %} +{% block content %} +{% load widget_tweaks %} +{%load static%} + + + +

      +
      +

      My Blood Request


      + + + + + + + + + + + + + + + {% for t in blood_request %} + + + + + + + + + {% if t.status == 'Approved' %} + + + {% elif t.status == 'Rejected' %} + + {% else %} + + {% endif %} + + + + {% endfor %} + + + +
      Patient NamePatient AgeReasonBlood GroupUnitDateStatus
      {{t.patient_name}}{{t.patient_age}}{{t.reason}}{{t.bloodgroup}}{{t.unit}}{{t.date}} ApprovedRejectedPending
      +
      + + +{% endblock content %} diff --git a/templates/patient/patient_dashboard.html b/templates/patient/patient_dashboard.html new file mode 100644 index 00000000..f49be68c --- /dev/null +++ b/templates/patient/patient_dashboard.html @@ -0,0 +1,75 @@ +{% extends 'patient/patientbase.html' %} +{% block content %} + + + +

      +
      + + +
      +
      +
      +
      +
      + +

      +
      + Request Made
      + {{requestmade}} +
      +
      +
      +
      + +
      +
      +
      +
      + +

      +
      + Pending Request
      + {{requestpending}} +
      +
      +
      +
      + +
      +
      +
      +
      + +

      +
      + Approved Request
      + {{requestapproved}} +
      +
      +
      +
      +
      +
      +
      +
      + +

      +
      + Rejected Request
      + {{requestrejected}} +
      +
      +
      +
      + +
      +
      + + +{% endblock content %} diff --git a/templates/patient/patientbase.html b/templates/patient/patientbase.html new file mode 100644 index 00000000..e19f2e01 --- /dev/null +++ b/templates/patient/patientbase.html @@ -0,0 +1,206 @@ + + + + + + PATIENT + + + + + + + + + + + +

      +
      + +
      + + +{% block content %} + +{% endblock content %} + + + +
      +
      + + + + + + + + + \ No newline at end of file diff --git a/templates/patient/patientlogin.html b/templates/patient/patientlogin.html new file mode 100644 index 00000000..0b9f72c7 --- /dev/null +++ b/templates/patient/patientlogin.html @@ -0,0 +1,77 @@ +{%load static%} +{% load widget_tweaks %} + + + + + + + + + + + + + + + + + {% include "blood/navbar.html" %} + + + + +
      +
      +


      +
      +
      +

      Patient Login

      +
      +
      +
      + {% csrf_token %} +
      +
      Username
      +
      +
      + {% render_field form.username class="input--style-5"%} + +
      +
      +
      +
      +
      Password
      +
      +
      + {% render_field form.password class="input--style-5" %} +
      +
      +
      + + + + +
      + +
      +
      +
      +

      Does not have an account ? Click here to register

      + +
      +
      +
      +
      + +{% include "blood/footer.html" %} + + + + + + + + diff --git a/templates/patient/patientsignup.html b/templates/patient/patientsignup.html new file mode 100644 index 00000000..c48c51f7 --- /dev/null +++ b/templates/patient/patientsignup.html @@ -0,0 +1,176 @@ +{%load static%} +{% load widget_tweaks %} + + + + + + + + + + + + + + + + + + {% include "blood/navbar.html" %} + + + + +
      +
      +


      +
      +
      +

      Patient Signup

      +
      +
      +
      + {% csrf_token %} + +
      +
      First Name
      +
      +
      + {% render_field userForm.first_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Last Name
      +
      +
      + {% render_field userForm.last_name|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Username
      +
      +
      + {% render_field userForm.username|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Password
      +
      +
      + {% render_field userForm.password|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Age
      +
      +
      + {% render_field patientForm.age|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + +
      +
      Blood Group
      +
      +
      + +
      +
      +
      + +
      +
      Disease
      +
      +
      + {% render_field patientForm.disease|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Doctor Name
      +
      +
      + {% render_field patientForm.doctorname|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Address
      +
      +
      + {% render_field patientForm.address|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Mobile
      +
      +
      + {% render_field patientForm.mobile|attr:'required:true' class="input--style-5" %} +
      +
      +
      + +
      +
      Profile Pic
      +
      +
      + {% render_field patientForm.profile_pic|attr:'required:true' class="input--style-5" %} +
      +
      +
      + + + + + +
      + +
      +
      +
      +

      Already have an account ? Click here to login

      + +
      +
      +
      +
      + +{% include "blood/footer.html" %} + + + + + + + +