diff --git a/.gitignore b/.gitignore index c33a9b09..c16cc608 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,6 @@ manlocal.py db.sqlite3 .DS_Store *.mo +/htmlcov +/.coverage *.log diff --git a/.travis.yml b/.travis.yml index dc2eb5b1..f336ea7d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: python python: "2.7" -before_install: - - sudo apt-get update && sudo apt-get --reinstall install -qq language-pack-en language-pack-de install: "pip install -r requirements/dev.txt" env: DJANGO_SETTINGS_MODULE=volunteer_planner.settings.local script: py.test --create-db tests/ +notifications: + email: false diff --git a/.tx/config b/.tx/config new file mode 100644 index 00000000..76918ef0 --- /dev/null +++ b/.tx/config @@ -0,0 +1,9 @@ +[main] +host = https://www.transifex.com + +[volunteer-planner.django] +file_filter = locale//LC_MESSAGES/django.po +source_file = locale/en/LC_MESSAGES/django.po +source_lang = en +type = PO + diff --git a/README.md b/README.md index f38b5fc7..5d696571 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ -# volunteer_planner +# volunteer-planner.org A platform to schedule shifts of volunteers. +**TODO**: Add general project description and goals, ie. link to wiki. + ## Project Setup ### 0. Prerequisites (Ubuntu 14.04 example) @@ -109,13 +111,18 @@ You might consider to use this example `postactivate` script git fetch --all git status -#### 2.3.1 Setup your local environment (optional) +*Note:* You'll need to re-active your virtual environment after each change to it's `postactivate` hook to take effect. Just run `workon vp` again, to make sure your current venv session has executed the `postactivate` hook. + +#### 2.3.1 ... settings module for using MySQL + +When you prefer to use MySQL locally, you'll probably need to use the settings module `volunteer_planner.settings.local_mysql` instead of `volunteer_planner.settings.local`. + +#### 2.3.2 Setup your local environment (optional) Also, if you need to use non-default settings values, setting (exporting) the environment variables in your virtualenvs' `postactivate` hook is a good place if you're not using an IDE to configure your environment variables. - ### 3. Initialize the database with Django Activate your env and change dir to your local forks' git repository (if not done yet). @@ -167,32 +174,37 @@ A good read on TDD is the free o'Reilly eBook ["Test-Driven Development with Pyt To run the tests, run the following command (with your virtual env activated, see 3.) - $ py.test [/path/to/volunteer_planner.git/] + $ py.test -v [/path/to/volunteer_planner.git/] -### Translations +If you want to generate a coverage report as well, run -Can create/update the translations file with + $ py.test --cov=. --cov-report html --cov-report term-missing --no-cov-on-fail -v -``` -./manage.py makemessages --no-obsolete --no-wrap -``` - -The options are intended to make the output more git-friendly. +This generates a nice HTML coverage page, to poke around which can be found at `/path/to/volunteer_planner.git/htmlcov/index.html`. -Compile the messages file with +*Note*: The directory `htmlcov` is git-ignored. +### Translations +We use transiflex for managing translations. +You first need to make sure that the transiflex client is installed. ``` -./manage.py compilemessages +pip install transifex-client ``` +For further installation infos check http://docs.transifex.com/client/setup/ + +The workflow is like + +1. you code you stuff +2. "./manage.py makemessages --no-obsolete --no-wrap" The options are intended to make the output more git-friendly. +3. "tx push -s django" +3. do translations on transiflex +4. "tx pull" +5. "./manage.py compilemessages" +6. test if it looks good +7. commit push with git Your local installation should be translated then. The .mo file created by compilemessages is gitignored, you'll need to (re-)generate it locally every time the .po file changes. -### CSS / Less - -We use less for precompiling css. The less file you will find in -`scheduler/static/bootstrap/less/project.less` To make this work you can just -initialize the folder with "npm install -g" and then let grunt watch for -changes. diff --git a/registration/__init__.py b/accounts/management/__init__.py similarity index 100% rename from registration/__init__.py rename to accounts/management/__init__.py diff --git a/registration/management/__init__.py b/accounts/management/commands/__init__.py similarity index 100% rename from registration/management/__init__.py rename to accounts/management/commands/__init__.py diff --git a/registration/management/commands/clean_expired.py b/accounts/management/commands/clean_expired.py similarity index 54% rename from registration/management/commands/clean_expired.py rename to accounts/management/commands/clean_expired.py index beca94f8..0ffd53d5 100644 --- a/registration/management/commands/clean_expired.py +++ b/accounts/management/commands/clean_expired.py @@ -17,5 +17,16 @@ def add_arguments(self, parser): def handle(self, *args, **options): self.stdout.write('Deleting expired user registrations') - dry_run = True if self.OPT_SIMULATE in options and options[self.OPT_SIMULATE] else False - RegistrationProfile.objects.delete_expired_users(dry_run) + dry_run = True if self.OPT_SIMULATE in options and options[ + self.OPT_SIMULATE] else False + if dry_run: + user_count, reg_profile_count = 0, 0 + for profile in RegistrationProfile.objects.select_related( + 'user').exclude(user__is_active=True): + if profile.activation_key_expired(): + user_count += 1 + reg_profile_count += 1 + print "Would delete {} User and {} RegistrationProfile objects".format( + user_count, reg_profile_count) + else: + RegistrationProfile.objects.delete_expired_users() diff --git a/registration/migrations/0001_initial.py b/accounts/migrations/0001_initial.py similarity index 56% rename from registration/migrations/0001_initial.py rename to accounts/migrations/0001_initial.py index 931ba31c..f64ca352 100644 --- a/registration/migrations/0001_initial.py +++ b/accounts/migrations/0001_initial.py @@ -13,16 +13,14 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='RegistrationProfile', + name='UserAccount', fields=[ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('activation_key', models.CharField(max_length=40, verbose_name='activation key')), - ('user', models.ForeignKey(verbose_name='user', to=settings.AUTH_USER_MODEL, unique=True)), + ('user', models.OneToOneField(related_name='account', to=settings.AUTH_USER_MODEL)), ], options={ - 'verbose_name': 'registration profile', - 'verbose_name_plural': 'registration profiles', + 'verbose_name': 'user account', + 'verbose_name_plural': 'user accounts', }, - bases=(models.Model,), ), ] diff --git a/accounts/models.py b/accounts/models.py index 71a83623..cbc67db1 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -1,3 +1,23 @@ +# coding: utf-8 + +from django.conf import settings from django.db import models +from django.utils.translation import ugettext_lazy as _ +from registration.signals import user_activated +from django.dispatch import receiver + + +class UserAccount(models.Model): + user = models.OneToOneField(settings.AUTH_USER_MODEL, + related_name='account') + + class Meta: + verbose_name = _('user account') + verbose_name_plural = _('user accounts') + +@receiver(user_activated) +def registration_completed(sender, user, request, **kwargs): + account, created = UserAccount.objects.get_or_create(user=user) + print account, created + -# Create your models here. diff --git a/accounts/templates/user_account_edit.html b/accounts/templates/user_account_edit.html index 4c2148cf..fd6241f9 100644 --- a/accounts/templates/user_account_edit.html +++ b/accounts/templates/user_account_edit.html @@ -1,4 +1,4 @@ -{% extends 'home.html' %} +{% extends 'base_non_logged_in.html' %} {% load i18n %} {% block title %}{{ user.username }}{% endblock %} diff --git a/accounts/templates/user_detail.html b/accounts/templates/user_detail.html index 2c3ad3e4..104a4261 100644 --- a/accounts/templates/user_detail.html +++ b/accounts/templates/user_detail.html @@ -1,4 +1,4 @@ -{% extends 'home.html' %} +{% extends 'base_non_logged_in.html' %} {% load i18n %} {% block title %}{{ user.username }}{% endblock %} diff --git a/blueprint/admin.py b/blueprint/admin.py index fe2953ba..53e5a8a9 100644 --- a/blueprint/admin.py +++ b/blueprint/admin.py @@ -1,6 +1,6 @@ from django.contrib import admin from django import forms - +from django.utils.translation import ugettext_lazy as _ from .models import BluePrintCreator, NeedBluePrint @@ -12,7 +12,7 @@ class Meta: def clean(self): try: if BluePrintCreator.objects.get(location=self.data['location']): - raise forms.ValidationError("Ort hat bereits eine Vorlage!") + raise forms.ValidationError(_("There is already a blueprint for this location!")) except Exception: return self.cleaned_data diff --git a/blueprint/models.py b/blueprint/models.py index 9d4d04f8..930fc6f4 100644 --- a/blueprint/models.py +++ b/blueprint/models.py @@ -1,16 +1,16 @@ # coding: utf-8 from django.db import models - +from django.utils.translation import ugettext_lazy as _ class BluePrintCreator(models.Model): class Meta: - verbose_name = "Vorlage" - verbose_name_plural = "Vorlagen" + verbose_name = _("Blueprint") + verbose_name_plural = _("Blueprints") - title = models.CharField(verbose_name="Name der Vorlage", max_length=255) - location = models.ForeignKey('scheduler.Location', verbose_name="Ort") - needs = models.ManyToManyField('NeedBluePrint', verbose_name="Schichten") + title = models.CharField(verbose_name=_("blueprint title"), max_length=255) + location = models.ForeignKey('scheduler.Location', verbose_name=_("location")) + needs = models.ManyToManyField('NeedBluePrint', verbose_name=_("shifts")) def __unicode__(self): return u'{}'.format(self.title) @@ -18,13 +18,13 @@ def __unicode__(self): class NeedBluePrint(models.Model): class Meta: - verbose_name = "Schicht Vorlage" - verbose_name_plural = "Schicht Vorlagen" + verbose_name = _("Blueprint Item") + verbose_name_plural = _("Blueprint Items") - topic = models.ForeignKey('scheduler.Topics', verbose_name="Hilfetyp") - from_time = models.CharField(verbose_name='Uhrzeit von', max_length=5) - to_time = models.CharField(verbose_name='Uhrzeit bis', max_length=5) - slots = models.IntegerField(verbose_name="Anz. benoetigter Freiwillige") + topic = models.ForeignKey('scheduler.Topics', verbose_name=_("topic")) + from_time = models.CharField(verbose_name=_('from hh:mm'), max_length=5) + to_time = models.CharField(verbose_name=_('until hh:mm'), max_length=5) + slots = models.IntegerField(verbose_name=_("number of volunteers needed")) def get_location(self): return self.blueprintcreator_set.all().get().location diff --git a/blueprint/templates/blueprint_executor.html b/blueprint/templates/blueprint_executor.html index ba42e68b..08c49057 100644 --- a/blueprint/templates/blueprint_executor.html +++ b/blueprint/templates/blueprint_executor.html @@ -1,8 +1,9 @@ +{% load i18n %} - + - {% block title %}Home{% endblock %} + {% block title %}{% trans "Home" %}{% endblock %} @@ -70,7 +71,7 @@
-

Blueprint auf folgenden Tag anwenden:

+

{% trans "Apply template for the following day:" %}

-

Date:

+

{% trans "Date" %}:

- +

@@ -89,4 +90,4 @@

Blueprint auf folgenden Tag anwenden:

- \ No newline at end of file + diff --git a/common/templatetags/string_filters.py b/common/templatetags/string_filters.py deleted file mode 100644 index ec16fc25..00000000 --- a/common/templatetags/string_filters.py +++ /dev/null @@ -1,8 +0,0 @@ -from django import template - -register = template.Library() - - -@register.filter -def split(value, separator=' '): - return value.split(separator) diff --git a/common/templatetags/volunteer_stats.py b/common/templatetags/volunteer_stats.py new file mode 100644 index 00000000..efab3c2c --- /dev/null +++ b/common/templatetags/volunteer_stats.py @@ -0,0 +1,46 @@ +# coding: utf-8 + +from datetime import timedelta + +from django import template +from django.contrib.auth.models import User +from django.db.models import Count +from django.utils import timezone + +from scheduler.models import Need, Location + +register = template.Library() + + +@register.assignment_tag +def get_facility_count(): + return Location.objects.filter().count() + + +@register.assignment_tag +def get_volunteer_number(): + return User.objects.filter(is_active=True).count() + + +@register.assignment_tag +def get_volunteer_hours(): + """ + Returns the number of total volunteer hours worked. + """ + finished_needs = Need.objects.filter( + starting_time__lte=timezone.now()).annotate( + slots_done=Count('helpers')) + delta = timedelta() + for need in finished_needs: + delta += need.slots_done * (need.ending_time - need.starting_time) + hours = int(delta.total_seconds() / 3600) + return hours + + +@register.assignment_tag +def get_volunteer_stats(): + return { + 'volunteer_count': get_volunteer_number(), + 'facility_count': get_facility_count(), + 'volunteer_hours': get_volunteer_hours(), + } diff --git a/common/templatetags/vpfilters.py b/common/templatetags/vpfilters.py new file mode 100644 index 00000000..3b4148f6 --- /dev/null +++ b/common/templatetags/vpfilters.py @@ -0,0 +1,51 @@ +# coding: utf-8 + +from numbers import Number + +from django import template + +register = template.Library() + + +@register.filter +def subtract(lhs, rhs): + rhs = int(rhs) if not isinstance(rhs, Number) else rhs + lhs = int(lhs) if not isinstance(lhs, Number) else lhs + return rhs - lhs + + +@register.filter +def divide(lhs, rhs): + lhs = float(lhs) if not isinstance(lhs, Number) else lhs + rhs = float(rhs) if not isinstance(rhs, Number) else rhs + return lhs / rhs if rhs else None + + +@register.filter +def contains(enumeratable, obj): + return obj in enumeratable + + +@register.filter +def split(value, separator=' '): + return value.split(separator) + + +@register.filter +def eq(lhs, rhs): + return lhs == rhs + + +@register.filter +def neq(lhs, rhs): + return lhs != rhs + + +@register.filter +def yes(lhs, rhs, default=""): + return rhs if lhs else default + + +@register.filter +def no(lhs, rhs, default=""): + return rhs if not lhs else default diff --git a/google_tools/templatetags/__init__.py b/google_tools/templatetags/__init__.py new file mode 100644 index 00000000..3117685a --- /dev/null +++ b/google_tools/templatetags/__init__.py @@ -0,0 +1,2 @@ +# coding: utf-8 + diff --git a/google_tools/templatetags/google_links.py b/google_tools/templatetags/google_links.py new file mode 100644 index 00000000..4a6302ac --- /dev/null +++ b/google_tools/templatetags/google_links.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +from django import template +from django.utils.translation import pgettext_lazy + +register = template.Library() + + +def url_encoded_location(location): + return u'+'.join(u'{}'.format(location).split(u' ')) + + +@register.filter +def google_maps_search(location): + location = url_encoded_location(location) + pattern = pgettext_lazy('maps search url pattern', + u'https://www.google.com/maps/place/{location}') + return pattern.format(location=location) + + +@register.filter +def google_maps_directions(destination, departure=None): + departure = url_encoded_location(departure) if departure else '' + destination = url_encoded_location(destination) + + pattern = pgettext_lazy(u'maps directions url pattern', + u'https://www.google.com/maps/dir/{departure}/{destination}/') + + return pattern.format(departure=departure, destination=destination) diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 51fa1c7e..8a2e6281 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -1,28 +1,44 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. # -#, fuzzy +# Translators: +# audrey liehn , 2015 +# Caroline Elis , 2015 +# Christoph, 2015 +# Christoph, 2015 +# Christoph, 2015 +# Dorian Cantzen , 2015 +# Franziska Böttger , 2015 +# Peter Palmreuther , 2015 msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-20 01:45+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" +"POT-Creation-Date: 2015-10-04 01:03+0200\n" +"PO-Revision-Date: 2015-10-03 17:44+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: German (http://www.transifex.com/coders4help/volunteer-planner/language/de/)\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#: accounts/models.py:15 +msgid "user account" +msgstr "Benutzerkonto" + +#: accounts/models.py:16 +msgid "user accounts" +msgstr "Benutzerkonten" + #: accounts/templates/user_account_edit.html:16 msgid "Save" msgstr "Speichern" -#: accounts/templates/user_detail.html:14 registration/forms.py:34 +#: accounts/templates/user_detail.html:14 templates/registration/login.html:23 +#: templates/registration/registration_form.html:22 msgid "Username" msgstr "Benutzername" @@ -34,7 +50,8 @@ msgstr "Vorname" msgid "Last name" msgstr "Nachname" -#: accounts/templates/user_detail.html:17 registration/forms.py:37 +#: accounts/templates/user_detail.html:17 +#: templates/registration/registration_form.html:18 msgid "Email" msgstr "E-Mail Adresse" @@ -42,160 +59,546 @@ msgstr "E-Mail Adresse" msgid "Edit Account" msgstr "Account bearbeiten" -#: notifications/models.py:13 -msgid "title" -msgstr "Titel" +#: blueprint/models.py:8 +msgid "Blueprint Item" +msgstr "Schicht-Einzel-Vorlage" -#: notifications/models.py:14 -msgid "subtitle" -msgstr "Untertitel" - -#: notifications/models.py:15 -msgid "articletext" -msgstr "Artikeltext" +#: blueprint/models.py:9 +msgid "Blueprint Items" +msgstr "Schicht-Einzel-Vorlagen" -#: registration/admin.py:35 -msgid "Activate users" -msgstr "Benutzer aktivieren" +#: blueprint/models.py:11 +msgid "blueprint title" +msgstr "Vorlagen Titel" -#: registration/admin.py:56 -msgid "Re-send activation emails" -msgstr "Aktivierungsmail erneut versenden" +#: blueprint/models.py:12 scheduler/models.py:58 scheduler/models.py:163 +msgid "location" +msgstr "Ort" -#: registration/forms.py:35 -msgid "This value may contain only letters, numbers and @/./+/-/_ characters." -msgstr "Der Wert darf nur Buchstaben, Zahlen und die Zeichen @, ., +, - und _ enthalten" +#: blueprint/models.py:13 scheduler/models.py:78 +msgid "shifts" +msgstr "Schichten" -#: registration/forms.py:39 -msgid "Password" -msgstr "Passwort" +#: blueprint/models.py:21 +msgid "Blueprint" +msgstr "Vorlage" -#: registration/forms.py:41 -msgid "Password (again)" -msgstr "Passwort (noch einmal)" +#: blueprint/models.py:22 +msgid "Blueprints" +msgstr "Vorlagen" -#: registration/forms.py:51 -msgid "A user with that username already exists." -msgstr "Es gibt bereits einen Benutzer mit diesem Benutzernamen." +#: blueprint/models.py:24 +msgid "topic" +msgstr "Hilfethema" -#: registration/forms.py:58 -msgid "A user with that email already exists. Please login instead." -msgstr "Die Emailadresse ist bereits bekannt. Bitte logge Dich ein mit Deinem Benutzername und Password." +#: blueprint/models.py:25 +msgid "from hh:mm" +msgstr "von hh:mm" -#: registration/forms.py:82 -msgid "I have read and agree to the Terms of Service" -msgstr "Ich habe die Nutzungsbedingungen gelesen und stimme ihnen zu" +#: blueprint/models.py:26 +msgid "until hh:mm" +msgstr "bis hh:mm" -#: registration/forms.py:83 -msgid "You must agree to the terms to register" -msgstr "Du musst den Nutzungsbedingungen zustimmen" +#: blueprint/models.py:27 +msgid "number of volunteers needed" +msgstr "Anzahl der benötigten Freiwilligen" -#: registration/forms.py:99 -msgid "This email address is already in use. Please supply a different email address." -msgstr "Diese E-Mail Adresse ist bereits registriert. Bitte verwende eine andere E-Mailadresse." +#: blueprint/templates/blueprint_executor.html:6 +msgid "Home" +msgstr "Start" -#: registration/forms.py:124 -msgid "Registration using free email addresses is prohibited. Please supply a different email address." -msgstr "Die Registrierung mit einer E-Mail-Adresses dieses Anbieters ist leider verboten. Bitte verwende eine andere E-Mailadresse." +#: blueprint/templates/blueprint_executor.html:74 +msgid "Apply template for the following day:" +msgstr "Vorlage für diesen Tag anwenden:" -#: registration/models.py:219 -msgid "user" -msgstr "Benutzer" +#: blueprint/templates/blueprint_executor.html:82 +msgid "Date" +msgstr "Datum" -#: registration/models.py:220 -msgid "activation key" -msgstr "Aktivierungsschlüssel" +#: blueprint/templates/blueprint_executor.html:85 +msgid "apply" +msgstr "anwenden" -#: registration/templates/activate.html:5 -msgid "Activation complete" -msgstr "Benutzeraccout aktiviert" +#: google_tools/templatetags/google_links.py:17 +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.google.com/maps/place/{location}" +msgstr "https://www.google.de/maps/place/{location}" -#: registration/templates/activate.html:7 -msgid "Activation problem" -msgstr "Benutzeraccount konnte nicht aktiviert werden" +#: google_tools/templatetags/google_links.py:27 +#, python-brace-format +msgctxt "maps directions url pattern" +msgid "https://www.google.com/maps/dir/{departure}/{destination}/" +msgstr "https://www.google.de/maps/dir/{departure}/{destination}/" + +#: non_logged_in_area/templates/base_non_logged_in.html:46 +#: templates/registration/login.html:3 templates/registration/login.html:10 +msgid "Login" +msgstr "Login" + +#: non_logged_in_area/templates/base_non_logged_in.html:49 +msgid "Start helping" +msgstr "Hilf mit" + +#: non_logged_in_area/templates/base_non_logged_in.html:76 +msgid "Main page" +msgstr "Startseite" + +#: non_logged_in_area/templates/base_non_logged_in.html:79 +#: non_logged_in_area/templates/faqs.html:5 +msgid "Frequently Asked Questions" +msgstr "Häufig gestellte Fragen" + +#: non_logged_in_area/templates/base_non_logged_in.html:82 +msgid "Contact" +msgstr "Kontakt" + +#: non_logged_in_area/templates/base_non_logged_in.html:85 +msgid "Imprint" +msgstr "Impressum" + +#: non_logged_in_area/templates/base_non_logged_in.html:88 +msgid "Terms of Service" +msgstr "Benutzungsbedingungen" + +#: non_logged_in_area/templates/base_non_logged_in.html:91 +msgid "Privacy Policy" +msgstr "Privatsphäre" + +#: non_logged_in_area/templates/faqs.html:10 +msgctxt "FAQ Q1" +msgid "How does volunteer-planner work?" +msgstr "Wie funktioniert der Volunteer Planner?" + +#: non_logged_in_area/templates/faqs.html:19 +msgctxt "FAQ A1.1" +msgid "Create an account." +msgstr "Erstelle ein Account." + +#: non_logged_in_area/templates/faqs.html:25 +msgctxt "FAQ A1.2" +msgid "Confirm your email address by clicking the activation link you've been sent." +msgstr "Bestätige Deine E-Mail-Adresse, indem Du auf den Link in der Aktivierungs-E-Mail klickst." + +#: non_logged_in_area/templates/faqs.html:32 +msgctxt "FAQ A1.3" +msgid "Log in." +msgstr "Logge Dich ein." + +#: non_logged_in_area/templates/faqs.html:37 +msgctxt "FAQ A1.4" +msgid "Choose a place to help and a shift and sign up to help." +msgstr "Wähle einen Ort und eine Zeit zum Helfen und trage Dich ein." + +#: non_logged_in_area/templates/faqs.html:42 +msgctxt "FAQ A1.5" +msgid "Get there on time and start helping out." +msgstr "Sei zu Schichtbeginn vor Ort und hilf." + +#: non_logged_in_area/templates/faqs.html:51 +msgctxt "FAQ Q2" +msgid "How can I unsubscribe from a shift?" +msgstr "Ich kann meine Schicht doch nicht wahrnehmen. Was soll ich tun?" + +#: non_logged_in_area/templates/faqs.html:57 +msgctxt "FAQ A2" +msgid "No problem. Log-in again look for the shift you planned to do and unsubscribe. Then other volunteers can again subscribe." +msgstr "Kein Problem. Logge dich wieder ein, suche deine gewählte Schicht und trage dich wieder aus. Dann sehen die anderen User, dass dort in der Schicht wieder ein Platz frei ist und können einspringen." + +#: non_logged_in_area/templates/faqs.html:66 +msgctxt "FAQ Q3" +msgid "Are there more shelters coming into volunteer-planner?" +msgstr "Kommen weitere Flüchtlingsunterkünfte hinzu?" + +#: non_logged_in_area/templates/faqs.html:70 +#: non_logged_in_area/templates/faqs.html:138 shiftmailer/models.py:13 +msgid "email" +msgstr "E-Mail" -#: registration/templates/activate.html:14 +#: non_logged_in_area/templates/faqs.html:72 +#, python-format +msgctxt "FAQ A3" +msgid "Yes! If you are a volunteer worker in a refugee shelter and they also want to use volunteer-planner please contact us via %(email_url)s." +msgstr "Ja! Falls du in einer Flüchtlingsunterkunft aktiv bist, die ebenfalls diese Plattform nutzen möchte, bitte kontaktiere uns per %(email_url)s" + +#: non_logged_in_area/templates/faqs.html:82 +msgctxt "FAQ Q4" +msgid "I registered but I didn't get any activation link. What can I do?" +msgstr "Ich habe mich registriert, aber keine Email mit einem Bestätigungs-Link erhalten. Was soll ich tun?" + +#: non_logged_in_area/templates/faqs.html:89 +msgctxt "FAQ A4" +msgid "Please look into your email-spam folder. If you can't find something please wait another 30 minutes. Email delivery can sometimes take longer." +msgstr "Bitte schaue in den Spam-Ordner deines Email-Postfachs. Falls sie dort nicht zu finden ist, gedulde dich bitte: Der Email-Versand kann bis zu 30 Minuten dauern." + +#: non_logged_in_area/templates/faqs.html:99 +msgctxt "FAQ Q5" +msgid "Do I have to be vaccinated to help at the camps/shelters?" +msgstr "Muss ich geimpft sein um vor Ort zu helfen?" + +#: non_logged_in_area/templates/faqs.html:105 +msgctxt "FAQ A5" +msgid "You are not supposed to be vaccinated. BUT: Where there are a lot of people deseases can flourish better." +msgstr "Du musst nicht geimpft sein. Aber: An allen Orten, an denen viele Menschen auf engem Raum zusammenleben, können sich Krankheiten leichter verbreiten. Somit sind die üblichen Impfungen empfehlenswert." + +#: non_logged_in_area/templates/faqs.html:114 +msgctxt "FAQ Q6" +msgid "Who is volunteer-planner.org?" +msgstr "Wer macht den volunteer-planner.org?" + +#: non_logged_in_area/templates/faqs.html:120 +msgctxt "FAQ A6" +msgid "We are Coders4Help, a group of international volunteering programmers, designers and projectmanagers." +msgstr "Wir sind Coders4Help, eine Gruppe von ehrenamtlichen Programmierern, Designern und Projektmanagern." + +#: non_logged_in_area/templates/faqs.html:130 +msgctxt "FAQ Q7" +msgid "How can I help you?" +msgstr "Wie kann ich euch helfen?" + +#: non_logged_in_area/templates/faqs.html:137 +msgid "Facebook site" +msgstr "Facebook-Seite" + +#: non_logged_in_area/templates/faqs.html:139 #, python-format -msgid "Thanks %(account)s, activation complete! You may now login using the username and password you set at registration." -msgstr "Danke %(account)s, die Aktivierung ist abgeschlossen! Du kannst dich jetzt mit deinem Benutzernamen und Passwort, welche du bei der Registrierung gewählt hast einloggen." +msgctxt "FAQ A7" +msgid "Currently we need help to translate, write texts and create awesome designs. Want to help? Write a message on our %(facebook_link)s or send an %(email_url)s." +msgstr "Wir brauchen aktuell Hilfe bei Übersetzungen, Design und Texten.? Schreibe uns bitte eine Nachricht auf unserer %(facebook_link)s oder sende uns eine %(email_url)s." -#: registration/templates/activate.html:19 -msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." -msgstr "Uuppss – Entweder dein Account wurde bereits aktiviert oder der Aktivierungschlüssel ist ungültig oder abgelaufen." +#: non_logged_in_area/templates/home.html:25 +msgid "I want to help!" +msgstr "Ich will helfen!" -#: registration/templates/login.html:15 -msgid "Your username and password didn't match. Please try again." -msgstr "Benutzername und Passort ungültig. Bitte versuche es erneut." +#: non_logged_in_area/templates/home.html:27 +msgid "Register and see where you can help" +msgstr "Registriere Dich und erfahre wo du helfen kannst" -#: scheduler/apps.py:7 -msgid "Scheduler" -msgstr "Schichtplaner" +#: non_logged_in_area/templates/home.html:32 +msgid "Organize volunteers!" +msgstr "Freiwillige organisieren!" -#: scheduler/models.py:17 -msgid "shift" -msgstr "Schicht" +#: non_logged_in_area/templates/home.html:34 +msgid "Register a shelter and organize volunteers" +msgstr "Registriere eine Unterkunft und organisiere Freiwillige" -#: scheduler/models.py:18 -msgid "shifts" -msgstr "Schichten" +#: non_logged_in_area/templates/home.html:48 +msgid "Places to help" +msgstr "Orte zum Helfen" -#: scheduler/models.py:20 scheduler/models.py:67 -msgid "helptype" -msgstr "Hilfebereich" +#: non_logged_in_area/templates/home.html:55 +msgid "Registered Volunteers" +msgstr "Registrierte Freiwillige" -#: scheduler/models.py:20 -msgid "helptype_text" -msgstr "Jeder Hilfebereich hat so viele Planelemente wie es Arbeitsschichten geben soll. Dies ist EINE Arbeitsschicht für einen bestimmten Tag" +#: non_logged_in_area/templates/home.html:62 +msgid "Worked Hours" +msgstr "Gearbeitete Stunden" -#: scheduler/models.py:21 scheduler/models.py:90 -msgid "location" +#: non_logged_in_area/templates/home.html:74 +msgid "What is it all about?" +msgstr "Was ist volunteer-planner.org?" + +#: non_logged_in_area/templates/home.html:77 +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "Du willst Flüchtlingen helfen? volunteer-planner.org zeigt Dir wo, wann und wie du helfen kannst: direkt vor Ort." + +#: non_logged_in_area/templates/home.html:85 +msgid "This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference." +msgstr "Die Plattform ist werbefrei und gemeinnützig. Ein internationales Team von Helfern vor Ort, Programmierern, Projektmanagern und Designern helfen freiwillig und unentgeltlich um den volunteer-planner voranzubringen." + +#: non_logged_in_area/templates/home.html:98 +msgid "You can help at this locations:" +msgstr "Helfe hier vor Ort:" + +#: notifications/models.py:13 +msgid "title" +msgstr "Titel" + +#: notifications/models.py:14 +msgid "subtitle" +msgstr "Untertitel" + +#: notifications/models.py:15 +msgid "text" +msgstr "Text" + +#: places/models.py:20 scheduler/models.py:143 shiftmailer/models.py:10 +msgid "name" +msgstr "Nachname" + +#: places/models.py:21 +msgid "slug" +msgstr "Slug" + +#: places/models.py:69 places/models.py:84 +msgid "country" +msgstr "Land" + +#: places/models.py:70 +msgid "countries" +msgstr "Länder" + +#: places/models.py:87 places/models.py:106 +msgid "region" +msgstr "Region" + +#: places/models.py:88 +msgid "regions" +msgstr "Regionen" + +#: places/models.py:109 places/models.py:129 +msgid "area" +msgstr "Gebiet" + +#: places/models.py:110 +msgid "areas" +msgstr "Gebiete" + +#: places/models.py:132 scheduler/models.py:160 +msgid "place" msgstr "Ort" -#: scheduler/models.py:23 +#: places/models.py:133 +msgid "places" +msgstr "Orte" + +#: scheduler/apps.py:7 +msgid "Scheduler" +msgstr "Schichtplaner" + +#: scheduler/models.py:56 scheduler/models.py:128 +msgid "help type" +msgstr "Hilfebereich" + +#: scheduler/models.py:57 +msgid "HELP_TYPE_HELP" +msgstr "" + +#: scheduler/models.py:60 msgid "starting time" msgstr "Beginn" -#: scheduler/models.py:24 +#: scheduler/models.py:62 msgid "ending time" msgstr "Ende" -#: scheduler/models.py:28 +#: scheduler/models.py:71 msgid "number of needed volunteers" msgstr "Anz. benötigter Freiwillige" -#: scheduler/models.py:68 -msgid "helptypes" +#: scheduler/models.py:77 +msgid "shift" +msgstr "Schicht" + +#: scheduler/models.py:115 +msgid "shift helper" +msgstr "Schichthelfer" + +#: scheduler/models.py:116 +msgid "shift helpers" +msgstr "Schichthelfer" + +#: scheduler/models.py:129 +msgid "help types" msgstr "Hilfebereiche" -#: scheduler/models.py:91 +#: scheduler/models.py:145 +msgid "address" +msgstr "Adresse" + +#: scheduler/models.py:147 +msgid "city" +msgstr "Ort" + +#: scheduler/models.py:149 +msgid "postal code" +msgstr "Postleitzahl" + +#: scheduler/models.py:151 +msgid "latitude" +msgstr "Breite" + +#: scheduler/models.py:153 +msgid "longitude" +msgstr "Länge" + +#: scheduler/models.py:155 +msgid "description" +msgstr "Beschreibung" + +#: scheduler/models.py:164 msgid "locations" msgstr "Orte" -#: scheduler/models.py:112 -msgid "working hours" -msgstr "Arbeitsstunden" +#: scheduler/templates/geographic_helpdesk.html:69 +msgid "Show on Google Maps" +msgstr "Auf Google Maps anzeigen" + +#: scheduler/templates/geographic_helpdesk.html:78 +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "Schichten" + +#: scheduler/templates/geographic_helpdesk.html:110 +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "Derzeit sind keine Schichten geplant für %(geographical_name)s." + +#: scheduler/templates/helpdesk.html:8 +msgid "Important news" +msgstr "Ankündigungen" + +#: scheduler/templates/helpdesk.html:14 +#, python-format +msgid "%(location_name)s on %(date)s" +msgstr "%(location_name)s am %(date)s" + +#: scheduler/templates/helpdesk.html:26 +msgid "Volunteers wanted" +msgstr "Freiwillige gesucht" + +#: scheduler/templates/helpdesk.html:51 +msgid "open shifts" +msgstr "offene Schichten" + +#: scheduler/templates/helpdesk_breadcrumps.html:6 +msgid "Helpdesk" +msgstr "Helpdesk" + +#: scheduler/templates/helpdesk_single.html:6 +#, python-format +msgctxt "title with location" +msgid "Schedule for %(location_name)s" +msgstr "Schichtplan für %(location_name)s" + +#: scheduler/templates/helpdesk_single.html:23 +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "Schichtplan für den %(schedule_date)s" + +#: scheduler/templates/helpdesk_single.html:49 +msgid "Time" +msgstr "Zeit" + +#: scheduler/templates/helpdesk_single.html:51 +msgid "Helpers" +msgstr "Helfer" -#: scheduler/views.py:91 +#: scheduler/templates/helpdesk_single.html:55 +msgid "Start" +msgstr "Von" + +#: scheduler/templates/helpdesk_single.html:56 +msgid "End" +msgstr "Bis" + +#: scheduler/templates/helpdesk_single.html:58 +msgid "Required" +msgstr "Benötigt" + +#: scheduler/templates/helpdesk_single.html:59 +msgid "Status" +msgstr "Status" + +#: scheduler/templates/helpdesk_single.html:60 +msgid "Users" +msgstr "Benutzer" + +#: scheduler/templates/helpdesk_single.html:61 +msgid "You" +msgstr "Du" + +#: scheduler/templates/helpdesk_single.html:85 +#, python-format +msgid "%(slots_left)s more" +msgstr "noch %(slots_left)s" + +#: scheduler/templates/helpdesk_single.html:89 +msgid "Covered" +msgstr "Abgedeckt" + +#: scheduler/templates/helpdesk_single.html:129 +msgid "Drop out" +msgstr "Absagen" + +#: scheduler/templates/helpdesk_single.html:136 +msgid "Sign up" +msgstr "Mitmachen" + +#: scheduler/templates/shift_cancellation_notification.html:1 +#, python-format +msgid "" +"\n" +"Hallo,\n" +"\n" +"leider musste auf Wunsch der Zuständigen die folgende Schicht abgesagt werden:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"%(shift.starting_time.date)s von %(shift.starting_time.time)s bis %(shift.ending_time.time)s\n" +"\n" +"Dies hier ist eine automatisch generierte Email. Bei Fragen, wenden Sie sich bitte an die Emailadresse, die bei den Unterkünften in der Beschreibung angegeben ist.\n" +"\n" +"Liebe Grüße vom Volunteer Planner\n" +"volunteer-planner.org\n" +msgstr "" + +#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"\n" +"Hallo,\n" +"\n" +"wir mussten die folgende Schicht zeitlich anpassen:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"%(old.starting_time.date)s von %(old.starting_time.time)s bis %(old.ending_time.time)s\n" +"\n" +"Die neuen Schichtzeiten sind:\n" +"\n" +"am %(shift.starting_time.date)s von %(shift.starting_time.time)s bis %(shift.ending_time.time)s.\n" +"\n" +"Wenn Sie zur neuen Uhrzeit unglücklicher Weise nicht mehr helfen kännen, bitten\n" +"wir Sie, sich im Volunteer-Planner aus dieser Schicht auszutragen, damit jemand\n" +"anderes die Chance erhält, zu unterstützen. Vielen Dank :)\n" +"\n" +"Dies hier ist eine automatisch generierte Email. Bei Fragen, wenden Sie sich\n" +"bitte an die Emailadresse, die bei den Unterkünften in der Beschreibung angegeben\n" +"ist.\n" +"\n" +"Liebe Grüße vom Volunteer Planner\n" +"volunteer-planner.org\n" +msgstr "" + +#: scheduler/views.py:70 msgid "The submitted data was invalid." msgstr "Die eingegebenen Daten sind ungültig." +#: scheduler/views.py:77 +msgid "User account does not exist." +msgstr "Benutzerkonto existiert nicht." + +#: scheduler/views.py:93 +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "Wir konnten Dich nicht für die Schicht eintragen, da Du zur gleichen Zeit schon an mindestens einer anderen teilnimmst:" + #: scheduler/views.py:104 +msgid "You were successfully added to this shift." +msgstr "Du hast Dich erfolgreich für die Schicht angemeldet." + +#: scheduler/views.py:107 #, python-brace-format -msgid "We can't add you to this shift because you've already agreed to other shifts at the same time: {conflicts}" -msgstr "Du kannst der Schicht nicht beitreten, da Du bereits an anderen mit überschneidenden Zeiten teilnehmen: {conflicts}" +msgid "You already signed up for this shift at {date_time}." +msgstr "Du hast Dich bereits am {date_time} für diese Schicht eingetragen." -#: scheduler/views.py:109 -msgid "You were successfully added to this shift." -msgstr "Du hast sich erfolgreich für die Schicht angemeldet." +#: scheduler/views.py:118 +msgid "You successfully left this shift." +msgstr "Du hast Deine Teilnahme abgesagt." #: shiftmailer/models.py:9 msgid "given_name" msgstr "Vorname" -#: shiftmailer/models.py:10 -msgid "name" -msgstr "Nachname" - #: shiftmailer/models.py:11 msgid "position" msgstr "Position" @@ -204,9 +607,107 @@ msgstr "Position" msgid "organisation" msgstr "Organisation" -#: shiftmailer/models.py:13 -msgid "email" -msgstr "E-Mail" +#: shiftmailer/templates/shifts_today.html:1 +#, python-format +msgctxt "shift today title" +msgid "Schedule for %(organization_name)s on %(date)s" +msgstr "Schichtplan für %(organization_name)s am %(date)s" + +#: shiftmailer/templates/shifts_today.html:6 +msgid "All data is private and not supposed to be given away!" +msgstr "Alle Daten sind vertraulich und nicht zur Weitergabe an Dritte bestimmt!" + +#: shiftmailer/templates/shifts_today.html:15 +#, python-format +msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" +msgstr "folgende %(volunteer_count)s Freiwilligen haben sich für %(start_time)s bis %(end_time)s Uhr angemeldet:" + +#: templates/partials/footer.html:9 +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "Fragen? Schreib' uns: %(mailto_link)s" + +#: templates/partials/navigation_bar.html:8 +msgid "Toggle navigation" +msgstr "Navigation umschalten" + +#: templates/partials/navigation_bar.html:23 +msgid "FAQ" +msgstr "F.A.Q." + +#: templates/partials/navigation_bar.html:39 +msgid "Account" +msgstr "Benutzerkonto" + +#: templates/partials/navigation_bar.html:43 +msgid "Help" +msgstr "Hilfe" + +#: templates/partials/navigation_bar.html:46 +msgid "Logout" +msgstr "Ausloggen" + +#: templates/partials/navigation_bar.html:50 +msgid "Admin" +msgstr "Verwaltung" + +#: templates/partials/region_selection.html:13 +msgid "Regions" +msgstr "Regionen" + +#: templates/registration/activate.html:5 +msgid "Activation complete" +msgstr "Benutzeraccout aktiviert" + +#: templates/registration/activate.html:7 +msgid "Activation problem" +msgstr "Benutzeraccount konnte nicht aktiviert werden" + +#: templates/registration/activate.html:14 +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "einloggen" + +#: templates/registration/activate.html:15 +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "Danke %(account)s, die Aktivierung ist abgeschlossen! Du kannst dich jetzt mit deinem Benutzernamen und Passwort %(login_link)s." + +#: templates/registration/activate.html:20 +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "Uuppss – Entweder dein Account wurde bereits aktiviert oder der Aktivierungschlüssel ist ungültig oder abgelaufen." + +#: templates/registration/activation_complete.html:3 +msgid "Activation successful!" +msgstr "Aktivierung erfolgreich!" + +#: templates/registration/activation_complete.html:9 +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "Schön, dass Du dabei bist." + +#: templates/registration/activation_complete.html:12 +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "Du kannst Dich hier einloggen." + +#: templates/registration/login.html:15 +msgid "Your username and password didn't match. Please try again." +msgstr "Benutzername und Passort ungültig. Bitte versuche es erneut." + +#: templates/registration/login.html:26 +#: templates/registration/registration_form.html:26 +msgid "Password" +msgstr "Passwort" + +#: templates/registration/login.html:36 +#: templates/registration/password_reset_form.html:6 +msgid "Forgot your password?" +msgstr "Passwort vergessen?" + +#: templates/registration/login.html:40 +msgid "Help and sign-up" +msgstr "Hilfe und Anmeldung" #: templates/registration/password_change_done.html:3 msgid "Password changed" @@ -237,10 +738,16 @@ msgstr "Passwort ändern" msgid "Password reset complete" msgstr "Passwort wurde geändert" -#: templates/registration/password_reset_complete.html:7 +#: templates/registration/password_reset_complete.html:8 +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "einloggen" + +#: templates/registration/password_reset_complete.html:9 #, python-format -msgid "Your password has been reset! You may now log in." -msgstr "Dein Passwort wurde geändert. Du kannst dich jetzt erneut anmelden." +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "Dein Passwort wurde geändert. Du kannst dich jetzt wieder %(login_link)s." #: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" @@ -298,18 +805,71 @@ msgstr "" msgid "Reset password" msgstr "Passwort zurücksetzen" -#: templates/registration/password_reset_form.html:6 -msgid "Forgot your password?" -msgstr "Passwort vergessen?" - #: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "Kein Problem! Wir schicken Dir eine E-Mail mit der Anleitung wie Du Dein Passort zurücksetzen kannst." -#: volunteer_planner/settings/base.py:131 +#: templates/registration/registration_complete.html:3 +msgid "Activation email sent" +msgstr "Aktivierungsemail wurde versandt" + +#: templates/registration/registration_complete.html:7 +#: tests/registration/test_registration.py:144 +msgid "An activation mail will be sent to you email address." +msgstr "Dir wird jetzt eine Aktivierungs-E-Mail zugesendet." + +#: templates/registration/registration_complete.html:13 +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "Bitte bestätige Deine Anmeldung, indem Du den entsprechenden Link in der E-Mail anklickst. Wenn Du in 10 Minuten noch keine E-Mail bekommen haben solltest, schaue bitte in Deinem Spamordner nach." + +#: templates/registration/registration_form.html:3 +msgid "Register for an account" +msgstr "Erstelle ein Account" + +#: templates/registration/registration_form.html:8 +msgid "Registration" +msgstr "Anmeldung" + +#: templates/registration/registration_form.html:21 +msgid "Username already exists. Please choose a different username." +msgstr "Dieser Benutzername ist bereits vergeben. Bitte wähle einen anderen aus." + +#: templates/registration/registration_form.html:23 +msgid "Don't use spaces or special characters" +msgstr "Bitte keine Leer- oder Sonderzeichen verwenden" + +#: templates/registration/registration_form.html:29 +msgid "Repeat password" +msgstr "Passwort wiederholen" + +#: templates/registration/registration_form.html:31 +msgid "Sign-up" +msgstr "Eintragen" + +#: tests/registration/test_registration.py:42 +msgid "This field is required." +msgstr "Dieses Feld ist zwingend erforderlich." + +#: tests/registration/test_registration.py:81 +msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." +msgstr "Bitte einen gültigen Benutzernamen wählen (erlaubte Sonderzeichen: @/./+/-/_)." + +#: tests/registration/test_registration.py:109 +msgid "A user with that username already exists." +msgstr "Es gibt bereits einen Benutzer mit diesem Benutzernamen." + +#: tests/registration/test_registration.py:130 +msgid "The two password fields didn't match." +msgstr "Die Passwörter stimmen nicht überein." + +#: volunteer_planner/settings/base.py:135 msgid "German" msgstr "Deutsch" -#: volunteer_planner/settings/base.py:132 +#: volunteer_planner/settings/base.py:136 msgid "English" msgstr "Englisch" + +#: volunteer_planner/settings/base.py:137 +msgid "Hungarian" +msgstr "Ungarisch" diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po new file mode 100644 index 00000000..8d64cf99 --- /dev/null +++ b/locale/en/LC_MESSAGES/django.po @@ -0,0 +1,864 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-04 01:03+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: en\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: accounts/models.py:15 +msgid "user account" +msgstr "" + +#: accounts/models.py:16 +msgid "user accounts" +msgstr "" + +#: accounts/templates/user_account_edit.html:16 +msgid "Save" +msgstr "" + +#: accounts/templates/user_detail.html:14 templates/registration/login.html:23 +#: templates/registration/registration_form.html:22 +msgid "Username" +msgstr "" + +#: accounts/templates/user_detail.html:15 +msgid "First name" +msgstr "" + +#: accounts/templates/user_detail.html:16 +msgid "Last name" +msgstr "" + +#: accounts/templates/user_detail.html:17 +#: templates/registration/registration_form.html:18 +msgid "Email" +msgstr "" + +#: accounts/templates/user_detail.html:20 +msgid "Edit Account" +msgstr "" + +#: blueprint/models.py:8 +msgid "Blueprint Item" +msgstr "" + +#: blueprint/models.py:9 +msgid "Blueprint Items" +msgstr "" + +#: blueprint/models.py:11 +msgid "blueprint title" +msgstr "" + +#: blueprint/models.py:12 scheduler/models.py:58 scheduler/models.py:163 +msgid "location" +msgstr "" + +#: blueprint/models.py:13 scheduler/models.py:78 +msgid "shifts" +msgstr "" + +#: blueprint/models.py:21 +#, fuzzy +#| msgid "Imprint" +msgid "Blueprint" +msgstr "Impressum" + +#: blueprint/models.py:22 +msgid "Blueprints" +msgstr "" + +#: blueprint/models.py:24 +msgid "topic" +msgstr "" + +#: blueprint/models.py:25 +msgid "from hh:mm" +msgstr "" + +#: blueprint/models.py:26 +msgid "until hh:mm" +msgstr "" + +#: blueprint/models.py:27 +msgid "number of volunteers needed" +msgstr "" + +#: blueprint/templates/blueprint_executor.html:6 +msgid "Home" +msgstr "" + +#: blueprint/templates/blueprint_executor.html:74 +msgid "Apply template for the following day:" +msgstr "" + +#: blueprint/templates/blueprint_executor.html:82 +msgid "Date" +msgstr "" + +#: blueprint/templates/blueprint_executor.html:85 +msgid "apply" +msgstr "" + +#: google_tools/templatetags/google_links.py:17 +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.google.com/maps/place/{location}" +msgstr "" + +#: google_tools/templatetags/google_links.py:27 +#, python-brace-format +msgctxt "maps directions url pattern" +msgid "https://www.google.com/maps/dir/{departure}/{destination}/" +msgstr "" + +#: non_logged_in_area/templates/base_non_logged_in.html:46 +#: templates/registration/login.html:3 templates/registration/login.html:10 +msgid "Login" +msgstr "" + +#: non_logged_in_area/templates/base_non_logged_in.html:49 +msgid "Start helping" +msgstr "" + +#: non_logged_in_area/templates/base_non_logged_in.html:76 +msgid "Main page" +msgstr "" + +#: non_logged_in_area/templates/base_non_logged_in.html:79 +#: non_logged_in_area/templates/faqs.html:5 +msgid "Frequently Asked Questions" +msgstr "" + +#: non_logged_in_area/templates/base_non_logged_in.html:82 +msgid "Contact" +msgstr "" + +#: non_logged_in_area/templates/base_non_logged_in.html:85 +msgid "Imprint" +msgstr "Impressum" + +#: non_logged_in_area/templates/base_non_logged_in.html:88 +msgid "Terms of Service" +msgstr "Benutzungsbedingungen" + +#: non_logged_in_area/templates/base_non_logged_in.html:91 +msgid "Privacy Policy" +msgstr "Privatssphäre" + +#: non_logged_in_area/templates/faqs.html:10 +#, fuzzy +#| msgid "How does volunteer-planner work?" +msgctxt "FAQ Q1" +msgid "How does volunteer-planner work?" +msgstr "Wie funktioniert volunteer-planner?" + +#: non_logged_in_area/templates/faqs.html:19 +msgctxt "FAQ A1.1" +msgid "Create an account." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:25 +msgctxt "FAQ A1.2" +msgid "Confirm your email address by clicking the activation link you've been sent." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:32 +msgctxt "FAQ A1.3" +msgid "Log in." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:37 +msgctxt "FAQ A1.4" +msgid "Choose a place to help and a shift and sign up to help." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:42 +msgctxt "FAQ A1.5" +msgid "Get there on time and start helping out." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:51 +#, fuzzy +#| msgid "How can I unsubscribe from a shift?" +msgctxt "FAQ Q2" +msgid "How can I unsubscribe from a shift?" +msgstr "Wie kann ich mich für eine Schicht anmelden?" + +#: non_logged_in_area/templates/faqs.html:57 +msgctxt "FAQ A2" +msgid "No problem. Log-in again look for the shift you planned to do and unsubscribe. Then other volunteers can again subscribe." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:66 +msgctxt "FAQ Q3" +msgid "Are there more shelters coming into volunteer-planner?" +msgstr "" + +#: non_logged_in_area/templates/faqs.html:70 +#: non_logged_in_area/templates/faqs.html:138 shiftmailer/models.py:13 +msgid "email" +msgstr "" + +#: non_logged_in_area/templates/faqs.html:72 +#, python-format +msgctxt "FAQ A3" +msgid "Yes! If you are a volunteer worker in a refugee shelter and they also want to use volunteer-planner please contact us via %(email_url)s." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:82 +msgctxt "FAQ Q4" +msgid "I registered but I didn't get any activation link. What can I do?" +msgstr "" + +#: non_logged_in_area/templates/faqs.html:89 +msgctxt "FAQ A4" +msgid "Please look into your email-spam folder. If you can't find something please wait another 30 minutes. Email delivery can sometimes take longer." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:99 +msgctxt "FAQ Q5" +msgid "Do I have to be vaccinated to help at the camps/shelters?" +msgstr "" + +#: non_logged_in_area/templates/faqs.html:105 +msgctxt "FAQ A5" +msgid "You are not supposed to be vaccinated. BUT: Where there are a lot of people deseases can flourish better." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:114 +#, fuzzy +#| msgid "How does volunteer-planner work?" +msgctxt "FAQ Q6" +msgid "Who is volunteer-planner.org?" +msgstr "Wie funktioniert volunteer-planner?" + +#: non_logged_in_area/templates/faqs.html:120 +msgctxt "FAQ A6" +msgid "We are Coders4Help, a group of international volunteering programmers, designers and projectmanagers." +msgstr "" + +#: non_logged_in_area/templates/faqs.html:130 +msgctxt "FAQ Q7" +msgid "How can I help you?" +msgstr "" + +#: non_logged_in_area/templates/faqs.html:137 +msgid "Facebook site" +msgstr "" + +#: non_logged_in_area/templates/faqs.html:139 +#, python-format +msgctxt "FAQ A7" +msgid "Currently we need help to translate, write texts and create awesome designs. Want to help? Write a message on our %(facebook_link)s or send an %(email_url)s." +msgstr "" + +#: non_logged_in_area/templates/home.html:25 +msgid "I want to help!" +msgstr "" + +#: non_logged_in_area/templates/home.html:27 +msgid "Register and see where you can help" +msgstr "" + +#: non_logged_in_area/templates/home.html:32 +msgid "Organize volunteers!" +msgstr "" + +#: non_logged_in_area/templates/home.html:34 +msgid "Register a shelter and organize volunteers" +msgstr "" + +#: non_logged_in_area/templates/home.html:48 +msgid "Places to help" +msgstr "" + +#: non_logged_in_area/templates/home.html:55 +msgid "Registered Volunteers" +msgstr "" + +#: non_logged_in_area/templates/home.html:62 +msgid "Worked Hours" +msgstr "" + +#: non_logged_in_area/templates/home.html:74 +msgid "What is it all about?" +msgstr "" + +#: non_logged_in_area/templates/home.html:77 +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +#: non_logged_in_area/templates/home.html:85 +msgid "This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference." +msgstr "" + +#: non_logged_in_area/templates/home.html:98 +msgid "You can help at this locations:" +msgstr "" + +#: notifications/models.py:13 +msgid "title" +msgstr "" + +#: notifications/models.py:14 +msgid "subtitle" +msgstr "" + +#: notifications/models.py:15 +msgid "text" +msgstr "" + +#: places/models.py:20 scheduler/models.py:143 shiftmailer/models.py:10 +msgid "name" +msgstr "" + +#: places/models.py:21 +msgid "slug" +msgstr "" + +#: places/models.py:69 places/models.py:84 +msgid "country" +msgstr "" + +#: places/models.py:70 +msgid "countries" +msgstr "" + +#: places/models.py:87 places/models.py:106 +msgid "region" +msgstr "" + +#: places/models.py:88 +msgid "regions" +msgstr "" + +#: places/models.py:109 places/models.py:129 +msgid "area" +msgstr "" + +#: places/models.py:110 +msgid "areas" +msgstr "" + +#: places/models.py:132 scheduler/models.py:160 +msgid "place" +msgstr "" + +#: places/models.py:133 +msgid "places" +msgstr "" + +#: scheduler/apps.py:7 +msgid "Scheduler" +msgstr "" + +#: scheduler/models.py:56 scheduler/models.py:128 +msgid "help type" +msgstr "" + +#: scheduler/models.py:57 +msgid "HELP_TYPE_HELP" +msgstr "" + +#: scheduler/models.py:60 +msgid "starting time" +msgstr "" + +#: scheduler/models.py:62 +msgid "ending time" +msgstr "" + +#: scheduler/models.py:71 +msgid "number of needed volunteers" +msgstr "" + +#: scheduler/models.py:77 +msgid "shift" +msgstr "" + +#: scheduler/models.py:115 +msgid "shift helper" +msgstr "" + +#: scheduler/models.py:116 +msgid "shift helpers" +msgstr "" + +#: scheduler/models.py:129 +msgid "help types" +msgstr "" + +#: scheduler/models.py:145 +msgid "address" +msgstr "" + +#: scheduler/models.py:147 +msgid "city" +msgstr "" + +#: scheduler/models.py:149 +msgid "postal code" +msgstr "" + +#: scheduler/models.py:151 +msgid "latitude" +msgstr "" + +#: scheduler/models.py:153 +msgid "longitude" +msgstr "" + +#: scheduler/models.py:155 +msgid "description" +msgstr "" + +#: scheduler/models.py:164 +msgid "locations" +msgstr "" + +#: scheduler/templates/geographic_helpdesk.html:69 +msgid "Show on Google Maps" +msgstr "" + +#: scheduler/templates/geographic_helpdesk.html:78 +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#: scheduler/templates/geographic_helpdesk.html:110 +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +#: scheduler/templates/helpdesk.html:8 +msgid "Important news" +msgstr "" + +#: scheduler/templates/helpdesk.html:14 +#, python-format +msgid "%(location_name)s on %(date)s" +msgstr "" + +#: scheduler/templates/helpdesk.html:26 +msgid "Volunteers wanted" +msgstr "" + +#: scheduler/templates/helpdesk.html:51 +msgid "open shifts" +msgstr "" + +#: scheduler/templates/helpdesk_breadcrumps.html:6 +msgid "Helpdesk" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:6 +#, python-format +msgctxt "title with location" +msgid "Schedule for %(location_name)s" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:23 +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:49 +msgid "Time" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:51 +msgid "Helpers" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:55 +msgid "Start" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:56 +msgid "End" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:58 +msgid "Required" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:59 +msgid "Status" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:60 +msgid "Users" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:61 +msgid "You" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:85 +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:89 +msgid "Covered" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:129 +msgid "Drop out" +msgstr "" + +#: scheduler/templates/helpdesk_single.html:136 +msgid "Sign up" +msgstr "" + +#: scheduler/templates/shift_cancellation_notification.html:1 +#, python-format +msgid "" +"\n" +"Hallo,\n" +"\n" +"leider musste auf Wunsch der Zuständigen die folgende Schicht abgesagt werden:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"%(shift.starting_time.date)s von %(shift.starting_time.time)s bis %(shift.ending_time.time)s\n" +"\n" +"Dies hier ist eine automatisch generierte Email. Bei Fragen, wenden Sie sich bitte an die Emailadresse, die bei den Unterkünften in der Beschreibung angegeben ist.\n" +"\n" +"Liebe Grüße vom Volunteer Planner\n" +"volunteer-planner.org\n" +msgstr "" + +#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"\n" +"Hallo,\n" +"\n" +"wir mussten die folgende Schicht zeitlich anpassen:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"%(old.starting_time.date)s von %(old.starting_time.time)s bis %(old.ending_time.time)s\n" +"\n" +"Die neuen Schichtzeiten sind:\n" +"\n" +"am %(shift.starting_time.date)s von %(shift.starting_time.time)s bis %(shift.ending_time.time)s.\n" +"\n" +"Wenn Sie zur neuen Uhrzeit unglücklicher Weise nicht mehr helfen kännen, bitten\n" +"wir Sie, sich im Volunteer-Planner aus dieser Schicht auszutragen, damit jemand\n" +"anderes die Chance erhält, zu unterstützen. Vielen Dank :)\n" +"\n" +"Dies hier ist eine automatisch generierte Email. Bei Fragen, wenden Sie sich\n" +"bitte an die Emailadresse, die bei den Unterkünften in der Beschreibung angegeben\n" +"ist.\n" +"\n" +"Liebe Grüße vom Volunteer Planner\n" +"volunteer-planner.org\n" +msgstr "" + +#: scheduler/views.py:70 +msgid "The submitted data was invalid." +msgstr "" + +#: scheduler/views.py:77 +msgid "User account does not exist." +msgstr "" + +#: scheduler/views.py:93 +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +#: scheduler/views.py:104 +msgid "You were successfully added to this shift." +msgstr "" + +#: scheduler/views.py:107 +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +#: scheduler/views.py:118 +msgid "You successfully left this shift." +msgstr "" + +#: shiftmailer/models.py:9 +msgid "given_name" +msgstr "" + +#: shiftmailer/models.py:11 +msgid "position" +msgstr "" + +#: shiftmailer/models.py:12 +msgid "organisation" +msgstr "" + +#: shiftmailer/templates/shifts_today.html:1 +#, python-format +msgctxt "shift today title" +msgid "Schedule for %(organization_name)s on %(date)s" +msgstr "" + +#: shiftmailer/templates/shifts_today.html:6 +msgid "All data is private and not supposed to be given away!" +msgstr "" + +#: shiftmailer/templates/shifts_today.html:15 +#, python-format +msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" +msgstr "" + +#: templates/partials/footer.html:9 +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +#: templates/partials/navigation_bar.html:8 +msgid "Toggle navigation" +msgstr "" + +#: templates/partials/navigation_bar.html:23 +msgid "FAQ" +msgstr "" + +#: templates/partials/navigation_bar.html:39 +msgid "Account" +msgstr "" + +#: templates/partials/navigation_bar.html:43 +msgid "Help" +msgstr "" + +#: templates/partials/navigation_bar.html:46 +msgid "Logout" +msgstr "" + +#: templates/partials/navigation_bar.html:50 +msgid "Admin" +msgstr "" + +#: templates/partials/region_selection.html:13 +msgid "Regions" +msgstr "" + +#: templates/registration/activate.html:5 +msgid "Activation complete" +msgstr "" + +#: templates/registration/activate.html:7 +msgid "Activation problem" +msgstr "" + +#: templates/registration/activate.html:14 +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#: templates/registration/activate.html:15 +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +#: templates/registration/activate.html:20 +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +#: templates/registration/activation_complete.html:3 +msgid "Activation successful!" +msgstr "" + +#: templates/registration/activation_complete.html:9 +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +#: templates/registration/activation_complete.html:12 +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#: templates/registration/login.html:15 +msgid "Your username and password didn't match. Please try again." +msgstr "" + +#: templates/registration/login.html:26 +#: templates/registration/registration_form.html:26 +msgid "Password" +msgstr "" + +#: templates/registration/login.html:36 +#: templates/registration/password_reset_form.html:6 +msgid "Forgot your password?" +msgstr "" + +#: templates/registration/login.html:40 +msgid "Help and sign-up" +msgstr "" + +#: templates/registration/password_change_done.html:3 +msgid "Password changed" +msgstr "" + +#: templates/registration/password_change_done.html:7 +msgid "Password successfully changed!" +msgstr "" + +#: templates/registration/password_change_form.html:3 +#: templates/registration/password_change_form.html:6 +msgid "Change Password" +msgstr "" + +#: templates/registration/password_change_form.html:11 +#: templates/registration/password_change_form.html:13 +#: templates/registration/password_reset_form.html:12 +#: templates/registration/password_reset_form.html:14 +msgid "Email address" +msgstr "" + +#: templates/registration/password_change_form.html:15 +#: templates/registration/password_reset_confirm.html:13 +msgid "Change password" +msgstr "" + +#: templates/registration/password_reset_complete.html:3 +msgid "Password reset complete" +msgstr "" + +#: templates/registration/password_reset_complete.html:8 +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#: templates/registration/password_reset_complete.html:9 +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +#: templates/registration/password_reset_confirm.html:3 +msgid "Enter new password" +msgstr "" + +#: templates/registration/password_reset_confirm.html:6 +msgid "Enter your new password below to reset your password" +msgstr "" + +#: templates/registration/password_reset_done.html:3 +msgid "Password reset" +msgstr "" + +#: templates/registration/password_reset_done.html:6 +msgid "We sent you an email with a link to reset your password." +msgstr "" + +#: templates/registration/password_reset_done.html:7 +msgid "Please check your email and click the link to continue." +msgstr "" + +#: templates/registration/password_reset_email.html:3 +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#: templates/registration/password_reset_email.html:12 +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +#: templates/registration/password_reset_form.html:3 +#: templates/registration/password_reset_form.html:16 +msgid "Reset password" +msgstr "" + +#: templates/registration/password_reset_form.html:7 +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +#: templates/registration/registration_complete.html:3 +msgid "Activation email sent" +msgstr "" + +#: templates/registration/registration_complete.html:7 +#: tests/registration/test_registration.py:144 +msgid "An activation mail will be sent to you email address." +msgstr "" + +#: templates/registration/registration_complete.html:13 +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +#: templates/registration/registration_form.html:3 +msgid "Register for an account" +msgstr "" + +#: templates/registration/registration_form.html:8 +msgid "Registration" +msgstr "" + +#: templates/registration/registration_form.html:21 +msgid "Username already exists. Please choose a different username." +msgstr "" + +#: templates/registration/registration_form.html:23 +msgid "Don't use spaces or special characters" +msgstr "" + +#: templates/registration/registration_form.html:29 +msgid "Repeat password" +msgstr "" + +#: templates/registration/registration_form.html:31 +msgid "Sign-up" +msgstr "" + +#: tests/registration/test_registration.py:42 +msgid "This field is required." +msgstr "" + +#: tests/registration/test_registration.py:81 +msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." +msgstr "" + +#: tests/registration/test_registration.py:109 +msgid "A user with that username already exists." +msgstr "" + +#: tests/registration/test_registration.py:130 +msgid "The two password fields didn't match." +msgstr "" + +#: volunteer_planner/settings/base.py:135 +msgid "German" +msgstr "" + +#: volunteer_planner/settings/base.py:136 +msgid "English" +msgstr "" + +#: volunteer_planner/settings/base.py:137 +msgid "Hungarian" +msgstr "" diff --git a/locale/hu/LC_MESSAGES/django.po b/locale/hu/LC_MESSAGES/django.po new file mode 100644 index 00000000..91a0a602 --- /dev/null +++ b/locale/hu/LC_MESSAGES/django.po @@ -0,0 +1,933 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Christoph, 2015 +# Christoph, 2015 +# Christoph, 2015 +# Julia Biro , 2015 +# Nagy László, 2015 +# Nagy László, 2015 +# Péter Gerner , 2015 +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-10-04 01:03+0200\n" +"PO-Revision-Date: 2015-10-03 17:40+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Hungarian (http://www.transifex.com/coders4help/volunteer-planner/language/hu/)\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: accounts/models.py:15 +msgid "user account" +msgstr "felhasználói fiók" + +#: accounts/models.py:16 +msgid "user accounts" +msgstr "felhasználói fiókok" + +#: accounts/templates/user_account_edit.html:16 +msgid "Save" +msgstr "Mentés" + +#: accounts/templates/user_detail.html:14 templates/registration/login.html:23 +#: templates/registration/registration_form.html:22 +msgid "Username" +msgstr "Felhasználónév" + +#: accounts/templates/user_detail.html:15 +msgid "First name" +msgstr "Keresztnév" + +#: accounts/templates/user_detail.html:16 +msgid "Last name" +msgstr "Vezetéknév" + +#: accounts/templates/user_detail.html:17 +#: templates/registration/registration_form.html:18 +msgid "Email" +msgstr "E-mail" + +#: accounts/templates/user_detail.html:20 +msgid "Edit Account" +msgstr "Fiók szerkesztése" + +#: blueprint/models.py:8 +msgid "Blueprint Item" +msgstr "" + +#: blueprint/models.py:9 +msgid "Blueprint Items" +msgstr "" + +#: blueprint/models.py:11 +msgid "blueprint title" +msgstr "" + +#: blueprint/models.py:12 scheduler/models.py:58 scheduler/models.py:163 +msgid "location" +msgstr "helyszín" + +#: blueprint/models.py:13 scheduler/models.py:78 +msgid "shifts" +msgstr "műszakok" + +#: blueprint/models.py:21 +msgid "Blueprint" +msgstr "" + +#: blueprint/models.py:22 +msgid "Blueprints" +msgstr "" + +#: blueprint/models.py:24 +msgid "topic" +msgstr "" + +#: blueprint/models.py:25 +msgid "from hh:mm" +msgstr "" + +#: blueprint/models.py:26 +msgid "until hh:mm" +msgstr "" + +#: blueprint/models.py:27 +msgid "number of volunteers needed" +msgstr "" + +#: blueprint/templates/blueprint_executor.html:6 +msgid "Home" +msgstr "Kezdőlap" + +#: blueprint/templates/blueprint_executor.html:74 +msgid "Apply template for the following day:" +msgstr "Válassz sablont a következő napra:" + +#: blueprint/templates/blueprint_executor.html:82 +msgid "Date" +msgstr "Dátum" + +#: blueprint/templates/blueprint_executor.html:85 +msgid "apply" +msgstr "kiválaszt" + +#: google_tools/templatetags/google_links.py:17 +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.google.com/maps/place/{location}" +msgstr "https://www.google.com/maps/place/{location}" + +#: google_tools/templatetags/google_links.py:27 +#, python-brace-format +msgctxt "maps directions url pattern" +msgid "https://www.google.com/maps/dir/{departure}/{destination}/" +msgstr "https://www.google.com/maps/dir/{departure}/{destination}/" + +#: non_logged_in_area/templates/base_non_logged_in.html:46 +#: templates/registration/login.html:3 templates/registration/login.html:10 +msgid "Login" +msgstr "Bejelentkezés" + +#: non_logged_in_area/templates/base_non_logged_in.html:49 +msgid "Start helping" +msgstr "Kezdődhet a segítségnyújtás" + +#: non_logged_in_area/templates/base_non_logged_in.html:76 +msgid "Main page" +msgstr "Kezdőoldal" + +#: non_logged_in_area/templates/base_non_logged_in.html:79 +#: non_logged_in_area/templates/faqs.html:5 +msgid "Frequently Asked Questions" +msgstr "Gyakori kérdések" + +#: non_logged_in_area/templates/base_non_logged_in.html:82 +msgid "Contact" +msgstr "Kapcsolat" + +#: non_logged_in_area/templates/base_non_logged_in.html:85 +msgid "Imprint" +msgstr "Impresszum" + +#: non_logged_in_area/templates/base_non_logged_in.html:88 +msgid "Terms of Service" +msgstr "Használati feltételek" + +#: non_logged_in_area/templates/base_non_logged_in.html:91 +msgid "Privacy Policy" +msgstr "Magánszféra" + +#: non_logged_in_area/templates/faqs.html:10 +msgctxt "FAQ Q1" +msgid "How does volunteer-planner work?" +msgstr "Hogyan működik a volunteer-planner?" + +#: non_logged_in_area/templates/faqs.html:19 +msgctxt "FAQ A1.1" +msgid "Create an account." +msgstr "Azonosító létrehozása" + +#: non_logged_in_area/templates/faqs.html:25 +msgctxt "FAQ A1.2" +msgid "Confirm your email address by clicking the activation link you've been sent." +msgstr "Az elküldött levélben lévő aktivációs linkre kattintva igazold az e-mail cím hitelességét." + +#: non_logged_in_area/templates/faqs.html:32 +msgctxt "FAQ A1.3" +msgid "Log in." +msgstr "Bejelentkezés" + +#: non_logged_in_area/templates/faqs.html:37 +msgctxt "FAQ A1.4" +msgid "Choose a place to help and a shift and sign up to help." +msgstr "Válassz egy helyszínt és egy beosztást, és iratkozz fel segítőnek." + +#: non_logged_in_area/templates/faqs.html:42 +msgctxt "FAQ A1.5" +msgid "Get there on time and start helping out." +msgstr "Legyél ott időben és kezdhetsz is segíteni." + +#: non_logged_in_area/templates/faqs.html:51 +msgctxt "FAQ Q2" +msgid "How can I unsubscribe from a shift?" +msgstr "Hogyan tudok egy beosztásról leiratkozni?" + +#: non_logged_in_area/templates/faqs.html:57 +msgctxt "FAQ A2" +msgid "No problem. Log-in again look for the shift you planned to do and unsubscribe. Then other volunteers can again subscribe." +msgstr "Semmi gond. Jelentkezz be újból a tervezett beosztásra, és iratkozz le róla. A többi önkéntes újra jelentkezhet." + +#: non_logged_in_area/templates/faqs.html:66 +msgctxt "FAQ Q3" +msgid "Are there more shelters coming into volunteer-planner?" +msgstr "Lesz több helyszín is a volunteer-planner-ben?" + +#: non_logged_in_area/templates/faqs.html:70 +#: non_logged_in_area/templates/faqs.html:138 shiftmailer/models.py:13 +msgid "email" +msgstr "e-mail" + +#: non_logged_in_area/templates/faqs.html:72 +#, python-format +msgctxt "FAQ A3" +msgid "Yes! If you are a volunteer worker in a refugee shelter and they also want to use volunteer-planner please contact us via %(email_url)s." +msgstr "Igen, ha önkéntes munkára jelentkeztél egy helyszínre, és ők szintén a volunteer-planner-t akarják használni, lépj velünk kapcsolatba a %(email_url)s e-mail címen." + +#: non_logged_in_area/templates/faqs.html:82 +msgctxt "FAQ Q4" +msgid "I registered but I didn't get any activation link. What can I do?" +msgstr "Már regisztráltam, de nem kaptam aktiváló e-mailt. Mit tehetek?" + +#: non_logged_in_area/templates/faqs.html:89 +msgctxt "FAQ A4" +msgid "Please look into your email-spam folder. If you can't find something please wait another 30 minutes. Email delivery can sometimes take longer." +msgstr "Ellenőrizd a levélszemét könyvtárat! Ha ott sincs, akkor várj még 30 percet, az e-mail kézbesítés néha tovább tarthat." + +#: non_logged_in_area/templates/faqs.html:99 +msgctxt "FAQ Q5" +msgid "Do I have to be vaccinated to help at the camps/shelters?" +msgstr "Szükség van-e oltásokra ahhoz, hogy önkéntes lehessek?" + +#: non_logged_in_area/templates/faqs.html:105 +msgctxt "FAQ A5" +msgid "You are not supposed to be vaccinated. BUT: Where there are a lot of people deseases can flourish better." +msgstr "Nem várjuk el, hogy beoltasd magad. De ahol sok ember van egy helyen, ott betegségek gyorsabban el tudnak terjedni." + +#: non_logged_in_area/templates/faqs.html:114 +msgctxt "FAQ Q6" +msgid "Who is volunteer-planner.org?" +msgstr "Mi a pontosan a volunteer-planner.org?" + +#: non_logged_in_area/templates/faqs.html:120 +msgctxt "FAQ A6" +msgid "We are Coders4Help, a group of international volunteering programmers, designers and projectmanagers." +msgstr "Mi vagyunk a Coders4Help, egy önkéntes fejlesztőkből, mérnökökből és projektmenedzserekből álló, nemzetközi csoport." + +#: non_logged_in_area/templates/faqs.html:130 +msgctxt "FAQ Q7" +msgid "How can I help you?" +msgstr "Miben segíthetek nektek?" + +#: non_logged_in_area/templates/faqs.html:137 +msgid "Facebook site" +msgstr "Facebook oldal" + +#: non_logged_in_area/templates/faqs.html:139 +#, python-format +msgctxt "FAQ A7" +msgid "Currently we need help to translate, write texts and create awesome designs. Want to help? Write a message on our %(facebook_link)s or send an %(email_url)s." +msgstr "Jelenleg segítségre fordításban, szövegírásban és tervezésben van szükségünk. Ha segíteni akarsz, küldj üzenetet %(facebook_link)s vagy e-mailt %(email_url)s." + +#: non_logged_in_area/templates/home.html:25 +msgid "I want to help!" +msgstr "Szeretnék segíteni!" + +#: non_logged_in_area/templates/home.html:27 +msgid "Register and see where you can help" +msgstr "Regisztrálj, és válaszd ki miben tudsz segíteni!" + +#: non_logged_in_area/templates/home.html:32 +msgid "Organize volunteers!" +msgstr "Szervezz önkénteseket!" + +#: non_logged_in_area/templates/home.html:34 +msgid "Register a shelter and organize volunteers" +msgstr "Regisztrájl egy helyszínt és szervezz oda önkénteseket!" + +#: non_logged_in_area/templates/home.html:48 +msgid "Places to help" +msgstr "Segítségre váró helyszínek" + +#: non_logged_in_area/templates/home.html:55 +msgid "Registered Volunteers" +msgstr "Regisztrált önkéntesek" + +#: non_logged_in_area/templates/home.html:62 +msgid "Worked Hours" +msgstr "Munkaórák" + +#: non_logged_in_area/templates/home.html:74 +msgid "What is it all about?" +msgstr "Miről szól ez az egész?" + +#: non_logged_in_area/templates/home.html:77 +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "Önkéntesként segítenél a menedékkérőknek? A Volunteer-Planner.org megmutatja, hol, mikor és hogyan segíthetsz." + +#: non_logged_in_area/templates/home.html:85 +msgid "This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference." +msgstr "Ez a platform nem szolgál üzleti célokat, és hirdetésektől is mentes. Egy fejlesztőkből, mérnökökből és projektmenedzserekből álló, önkéntes nemzetközi csoport legjobb tudása szerint készíti és működteti, hogy segíthessünk." + +#: non_logged_in_area/templates/home.html:98 +msgid "You can help at this locations:" +msgstr "Ezeken a helyszíneken segíthetsz:" + +#: notifications/models.py:13 +msgid "title" +msgstr "cím" + +#: notifications/models.py:14 +msgid "subtitle" +msgstr "alcím" + +#: notifications/models.py:15 +msgid "text" +msgstr "szöveg" + +#: places/models.py:20 scheduler/models.py:143 shiftmailer/models.py:10 +msgid "name" +msgstr "név" + +#: places/models.py:21 +msgid "slug" +msgstr "slug" + +#: places/models.py:69 places/models.py:84 +msgid "country" +msgstr "ország" + +#: places/models.py:70 +msgid "countries" +msgstr "országok" + +#: places/models.py:87 places/models.py:106 +msgid "region" +msgstr "régió" + +#: places/models.py:88 +msgid "regions" +msgstr "régiók" + +#: places/models.py:109 places/models.py:129 +msgid "area" +msgstr "terület" + +#: places/models.py:110 +msgid "areas" +msgstr "területek" + +#: places/models.py:132 scheduler/models.py:160 +msgid "place" +msgstr "hely" + +#: places/models.py:133 +msgid "places" +msgstr "helyek" + +#: scheduler/apps.py:7 +msgid "Scheduler" +msgstr "Ütemező" + +#: scheduler/models.py:56 scheduler/models.py:128 +msgid "help type" +msgstr "segítség típusa" + +#: scheduler/models.py:57 +msgid "HELP_TYPE_HELP" +msgstr "HELP_TYPE_HELP" + +#: scheduler/models.py:60 +msgid "starting time" +msgstr "kezdés ideje" + +#: scheduler/models.py:62 +msgid "ending time" +msgstr "befejezés ideje" + +#: scheduler/models.py:71 +msgid "number of needed volunteers" +msgstr "a szükséges önkéntesek száma" + +#: scheduler/models.py:77 +msgid "shift" +msgstr "műszak" + +#: scheduler/models.py:115 +msgid "shift helper" +msgstr "beosztásban segítő" + +#: scheduler/models.py:116 +msgid "shift helpers" +msgstr "beosztásban segítők" + +#: scheduler/models.py:129 +msgid "help types" +msgstr "segítség típusai" + +#: scheduler/models.py:145 +msgid "address" +msgstr "cím" + +#: scheduler/models.py:147 +msgid "city" +msgstr "város" + +#: scheduler/models.py:149 +msgid "postal code" +msgstr "irányítószám" + +#: scheduler/models.py:151 +msgid "latitude" +msgstr "szélességi fok" + +#: scheduler/models.py:153 +msgid "longitude" +msgstr "hosszúsági fok" + +#: scheduler/models.py:155 +msgid "description" +msgstr "leírás" + +#: scheduler/models.py:164 +msgid "locations" +msgstr "helyszínek" + +#: scheduler/templates/geographic_helpdesk.html:69 +msgid "Show on Google Maps" +msgstr "Nézet a Google Maps-ben" + +#: scheduler/templates/geographic_helpdesk.html:78 +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "beosztás" + +#: scheduler/templates/geographic_helpdesk.html:110 +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "Új beosztások a/az %(geographical_name)s helyszínen." + +#: scheduler/templates/helpdesk.html:8 +msgid "Important news" +msgstr "Fontos hírek" + +#: scheduler/templates/helpdesk.html:14 +#, python-format +msgid "%(location_name)s on %(date)s" +msgstr "%(location_name)s %(date)s időpontban" + +#: scheduler/templates/helpdesk.html:26 +msgid "Volunteers wanted" +msgstr "Önkéntest várunk" + +#: scheduler/templates/helpdesk.html:51 +msgid "open shifts" +msgstr "üres beosztás" + +#: scheduler/templates/helpdesk_breadcrumps.html:6 +msgid "Helpdesk" +msgstr "Helpdes" + +#: scheduler/templates/helpdesk_single.html:6 +#, python-format +msgctxt "title with location" +msgid "Schedule for %(location_name)s" +msgstr "%(location_name)s beosztás" + +#: scheduler/templates/helpdesk_single.html:23 +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "%(schedule_date)s beosztás" + +#: scheduler/templates/helpdesk_single.html:49 +msgid "Time" +msgstr "Időpont" + +#: scheduler/templates/helpdesk_single.html:51 +msgid "Helpers" +msgstr "Segítők" + +#: scheduler/templates/helpdesk_single.html:55 +msgid "Start" +msgstr "Kezdés" + +#: scheduler/templates/helpdesk_single.html:56 +msgid "End" +msgstr "Vége" + +#: scheduler/templates/helpdesk_single.html:58 +msgid "Required" +msgstr "Szükséges" + +#: scheduler/templates/helpdesk_single.html:59 +msgid "Status" +msgstr "Állapot" + +#: scheduler/templates/helpdesk_single.html:60 +msgid "Users" +msgstr "Felhasználók" + +#: scheduler/templates/helpdesk_single.html:61 +msgid "You" +msgstr "Te" + +#: scheduler/templates/helpdesk_single.html:85 +#, python-format +msgid "%(slots_left)s more" +msgstr "%(slots_left)s szabadon" + +#: scheduler/templates/helpdesk_single.html:89 +msgid "Covered" +msgstr "Betöltve" + +#: scheduler/templates/helpdesk_single.html:129 +msgid "Drop out" +msgstr "Elvet" + +#: scheduler/templates/helpdesk_single.html:136 +msgid "Sign up" +msgstr "Regisztráció" + +#: scheduler/templates/shift_cancellation_notification.html:1 +#, python-format +msgid "" +"\n" +"Hallo,\n" +"\n" +"leider musste auf Wunsch der Zuständigen die folgende Schicht abgesagt werden:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"%(shift.starting_time.date)s von %(shift.starting_time.time)s bis %(shift.ending_time.time)s\n" +"\n" +"Dies hier ist eine automatisch generierte Email. Bei Fragen, wenden Sie sich bitte an die Emailadresse, die bei den Unterkünften in der Beschreibung angegeben ist.\n" +"\n" +"Liebe Grüße vom Volunteer Planner\n" +"volunteer-planner.org\n" +msgstr "" +"\n" +"Szia,\n" +"\n" +"\n" +"sajnos a szervezők kérésére a következő beosztást törölnünk kell:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"\n" +"%(shift.starting_time.date)s %(shift.starting_time.time)s - %(shift.ending_time.time)s\n" +"\n" +"\n" +"Ez egy automatikusan generált e-mail. Kérdés esetén írj arra az e-mail címre,\n" +"\n" +"amely a helyszín leírásánál szerepel!\n" +"\n" +"\n" +"A Volunteer Planner csapata\n" +"\n" +"volunteer-planner.org\n" + +#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"\n" +"Hallo,\n" +"\n" +"wir mussten die folgende Schicht zeitlich anpassen:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"%(old.starting_time.date)s von %(old.starting_time.time)s bis %(old.ending_time.time)s\n" +"\n" +"Die neuen Schichtzeiten sind:\n" +"\n" +"am %(shift.starting_time.date)s von %(shift.starting_time.time)s bis %(shift.ending_time.time)s.\n" +"\n" +"Wenn Sie zur neuen Uhrzeit unglücklicher Weise nicht mehr helfen kännen, bitten\n" +"wir Sie, sich im Volunteer-Planner aus dieser Schicht auszutragen, damit jemand\n" +"anderes die Chance erhält, zu unterstützen. Vielen Dank :)\n" +"\n" +"Dies hier ist eine automatisch generierte Email. Bei Fragen, wenden Sie sich\n" +"bitte an die Emailadresse, die bei den Unterkünften in der Beschreibung angegeben\n" +"ist.\n" +"\n" +"Liebe Grüße vom Volunteer Planner\n" +"volunteer-planner.org\n" +msgstr "" +"\n" +"Szia,\n" +"\n" +"\n" +"a következő beosztás idejét meg kellett változtatnunk:\n" +"\n" +"%(shift.topic.title)s, %(shift.location.name)s\n" +"\n" +"%(old.starting_time.date)s %(old.starting_time.time)s - %(old.ending_time.time)s\n" +"\n" +"\n" +"Az új időbeosztás:\n" +"\n" +"%(shift.starting_time.date)s %(shift.starting_time.time)s - %(shift.ending_time.time)s.\n" +"\n" +"\n" +"Ha az új időpont nem megfelelő, kérjük, jelentkezz le erről az időpontról\n" +"\n" +"a Volunteer-Planner.org-on. Így a többi önkéntes számára felszabadul az időpont.\n" +"\n" +"\n" +"Köszönjük a közreműködést :)\n" +"\n" +"\n" +"Ez egy automatikusan generált e-mail. Kérdés esetén írj arra az e-mail címre,\n" +"\n" +"amely a helyszín leírásánál szerepel!\n" +"\n" +"\n" +"A Volunteer Planner csapata\n" +"\n" +"volunteer-planner.org\n" + +#: scheduler/views.py:70 +msgid "The submitted data was invalid." +msgstr "A megadott adat érvénytelen volt." + +#: scheduler/views.py:77 +msgid "User account does not exist." +msgstr "Ez a felhasználói azonosító nem létezik." + +#: scheduler/views.py:93 +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "Nem tudunk ehhez a beosztáshoz hozzáadni, mert ebben az időben egy másik beosztásban már szerepelsz." + +#: scheduler/views.py:104 +msgid "You were successfully added to this shift." +msgstr "Sikeresen hozzáadtunk ehhez a beosztáshoz." + +#: scheduler/views.py:107 +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "Erre a műszakra {date_time}-kor már jelentkeztél." + +#: scheduler/views.py:118 +msgid "You successfully left this shift." +msgstr "Sikeresen kiléptél a beosztásból" + +#: shiftmailer/models.py:9 +msgid "given_name" +msgstr "keresztnév" + +#: shiftmailer/models.py:11 +msgid "position" +msgstr "pozíció" + +#: shiftmailer/models.py:12 +msgid "organisation" +msgstr "szervezet" + +#: shiftmailer/templates/shifts_today.html:1 +#, python-format +msgctxt "shift today title" +msgid "Schedule for %(organization_name)s on %(date)s" +msgstr "A %(organization_name)s csoport beosztása %(date)s-n" + +#: shiftmailer/templates/shifts_today.html:6 +msgid "All data is private and not supposed to be given away!" +msgstr "Minden adat bizalmas és nem adható tovább!" + +#: shiftmailer/templates/shifts_today.html:15 +#, python-format +msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" +msgstr "%(start_time)s-tól %(end_time)s-ig %(volunteer_count)s önkéntes irtakozott fel:" + +#: templates/partials/footer.html:9 +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "Kérdések? Tedd fel itt: %(mailto_link)s" + +#: templates/partials/navigation_bar.html:8 +msgid "Toggle navigation" +msgstr "Navigáció átváltása" + +#: templates/partials/navigation_bar.html:23 +msgid "FAQ" +msgstr "GYIK" + +#: templates/partials/navigation_bar.html:39 +msgid "Account" +msgstr "Azonosító" + +#: templates/partials/navigation_bar.html:43 +msgid "Help" +msgstr "Segítség" + +#: templates/partials/navigation_bar.html:46 +msgid "Logout" +msgstr "Kijelentkezés" + +#: templates/partials/navigation_bar.html:50 +msgid "Admin" +msgstr "adminisztrátor" + +#: templates/partials/region_selection.html:13 +msgid "Regions" +msgstr "Régió" + +#: templates/registration/activate.html:5 +msgid "Activation complete" +msgstr "Az aktiváció kész." + +#: templates/registration/activate.html:7 +msgid "Activation problem" +msgstr "Probléma van az aktivációval." + +#: templates/registration/activate.html:14 +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "bejelentkezhetsz" + +#: templates/registration/activate.html:15 +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "Üdv %(account)s, az aktiválás rendben megtörtént! Most már %(login_link)s, a korábban megadott felhasználói nevet és jelszót használva." + +#: templates/registration/activate.html:20 +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "Hoppá – Ön már vagy előzőleg aktiválta a felhasználói fiókját, vagy az aktivációs kulcs érvénytelen, vagy lejárt." + +#: templates/registration/activation_complete.html:3 +msgid "Activation successful!" +msgstr "Az aktiválás sikerült!" + +#: templates/registration/activation_complete.html:9 +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "Köszönjük a regisztrációt!" + +#: templates/registration/activation_complete.html:12 +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "Itt lehet bejelentkezni." + +#: templates/registration/login.html:15 +msgid "Your username and password didn't match. Please try again." +msgstr "A felhasználónév és a jelszó nem megfelelő. Próbálja újra." + +#: templates/registration/login.html:26 +#: templates/registration/registration_form.html:26 +msgid "Password" +msgstr "Jelszó" + +#: templates/registration/login.html:36 +#: templates/registration/password_reset_form.html:6 +msgid "Forgot your password?" +msgstr "Elfelejtette a jelszavát?" + +#: templates/registration/login.html:40 +msgid "Help and sign-up" +msgstr "Segíts és regisztrálj!" + +#: templates/registration/password_change_done.html:3 +msgid "Password changed" +msgstr "A jelszó megváltozott" + +#: templates/registration/password_change_done.html:7 +msgid "Password successfully changed!" +msgstr "A jelszót sikeresen megváltoztatta!" + +#: templates/registration/password_change_form.html:3 +#: templates/registration/password_change_form.html:6 +msgid "Change Password" +msgstr "Jelszó megváltoztatása" + +#: templates/registration/password_change_form.html:11 +#: templates/registration/password_change_form.html:13 +#: templates/registration/password_reset_form.html:12 +#: templates/registration/password_reset_form.html:14 +msgid "Email address" +msgstr "E-mail cím" + +#: templates/registration/password_change_form.html:15 +#: templates/registration/password_reset_confirm.html:13 +msgid "Change password" +msgstr "Jelszó megváltoztatása" + +#: templates/registration/password_reset_complete.html:3 +msgid "Password reset complete" +msgstr "A jelszó-visszaállítás kész." + +#: templates/registration/password_reset_complete.html:8 +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "Bejelentkezés" + +#: templates/registration/password_reset_complete.html:9 +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "Visszaállítottuk a jelszót. A %(login_link)s linken újra bejelentkezhetsz." + +#: templates/registration/password_reset_confirm.html:3 +msgid "Enter new password" +msgstr "Adjon meg új jelszót" + +#: templates/registration/password_reset_confirm.html:6 +msgid "Enter your new password below to reset your password" +msgstr "Írja be az új jelszavát alább, hogy visszaállítsa a jelszavát." + +#: templates/registration/password_reset_done.html:3 +msgid "Password reset" +msgstr "Jelszó visszaállítás" + +#: templates/registration/password_reset_done.html:6 +msgid "We sent you an email with a link to reset your password." +msgstr "Elküldtünk önnek egy e-mailt egy hivatkozással, amivel visszaállíthatja a jelszavát." + +#: templates/registration/password_reset_done.html:7 +msgid "Please check your email and click the link to continue." +msgstr "Kérem, ellenőrizze az e-mailjét és kattintson a hivatkozásra a folytatáshoz." + +#: templates/registration/password_reset_email.html:3 +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" +"Ezt az e-mailt azért kapta, mert ön (vagy valaki az ön nevében)\n" +"\n" +"azt ön jelszavának a visszaállítását kérte a %(domain)s weboldalon. Ha nem szeretné\n" +"\n" +"visszaállítani a jelszavát, kérem hagyja figyelmen kívül ezt az üzenetet.\n" +"\n" +"\n" +"\n" +"A jelszava visszaállításához kattintson a következő hivatkozásra, vagy másolja ki és illessze be\n" +"a böngészőjébe:" + +#: templates/registration/password_reset_email.html:12 +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" +"\n" +"A felhasználóneve, ha esetleg elfelejtette volna: %(username)s\n" +"\n" +"\n" +"\n" +"Üdvözlettel,\n" +"\n" +"%(site_name)s management\n" + +#: templates/registration/password_reset_form.html:3 +#: templates/registration/password_reset_form.html:16 +msgid "Reset password" +msgstr "Jelszó visszaállítása" + +#: templates/registration/password_reset_form.html:7 +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "Semmi gond! Elküldjük önnek, hogy hogyan állíthatja vissza a jelszavát." + +#: templates/registration/registration_complete.html:3 +msgid "Activation email sent" +msgstr "Az akitváló e-mailt elküldtük!" + +#: templates/registration/registration_complete.html:7 +#: tests/registration/test_registration.py:144 +msgid "An activation mail will be sent to you email address." +msgstr "A regisztrációt aktiváló e-mailt küldünk az e-mail címedre." + +#: templates/registration/registration_complete.html:13 +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "Erősítsd meg a regisztrációs szándékodat az e-malben kapott linkre kattintva. Ha nem kapsz e-mailt, nézd meg a levélszemetet tartalmazó könyvtárat 10 perc múlva." + +#: templates/registration/registration_form.html:3 +msgid "Register for an account" +msgstr "Felhasználói regisztráció" + +#: templates/registration/registration_form.html:8 +msgid "Registration" +msgstr "Regisztráció" + +#: templates/registration/registration_form.html:21 +msgid "Username already exists. Please choose a different username." +msgstr "Már létezik ez a felhasználói név. Kérjük, válassz egy másikat!" + +#: templates/registration/registration_form.html:23 +msgid "Don't use spaces or special characters" +msgstr "Ne használj space-t vagy speciális karaktereket" + +#: templates/registration/registration_form.html:29 +msgid "Repeat password" +msgstr "Ismételd meg a jelszót" + +#: templates/registration/registration_form.html:31 +msgid "Sign-up" +msgstr "Regisztráció" + +#: tests/registration/test_registration.py:42 +msgid "This field is required." +msgstr "Kötelezően megadandó érték." + +#: tests/registration/test_registration.py:81 +msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." +msgstr "Egy érvényes felhasználói nevet adj meg, ami betüből, számból és a következő karakterekből állhat: @/./+/-/_ " + +#: tests/registration/test_registration.py:109 +msgid "A user with that username already exists." +msgstr "Ezzel a felhasználónévvel már létezik felhasználó." + +#: tests/registration/test_registration.py:130 +msgid "The two password fields didn't match." +msgstr "A két jelszó nem egyezik!" + +#: volunteer_planner/settings/base.py:135 +msgid "German" +msgstr "Német" + +#: volunteer_planner/settings/base.py:136 +msgid "English" +msgstr "Angol" + +#: volunteer_planner/settings/base.py:137 +msgid "Hungarian" +msgstr "Magyar" diff --git a/manage.py b/manage.py index 6084f048..339368a1 100755 --- a/manage.py +++ b/manage.py @@ -3,7 +3,7 @@ import sys if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "volunteer_planner.settings.local") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "volunteer_planner.settings.local_mysql") from django.core.management import execute_from_command_line diff --git a/registration/management/commands/__init__.py b/non_logged_in_area/__init__.py similarity index 100% rename from registration/management/commands/__init__.py rename to non_logged_in_area/__init__.py diff --git a/non_logged_in_area/admin.py b/non_logged_in_area/admin.py new file mode 100644 index 00000000..8c38f3f3 --- /dev/null +++ b/non_logged_in_area/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/registration/migrations/__init__.py b/non_logged_in_area/migrations/__init__.py similarity index 100% rename from registration/migrations/__init__.py rename to non_logged_in_area/migrations/__init__.py diff --git a/non_logged_in_area/models.py b/non_logged_in_area/models.py new file mode 100644 index 00000000..71a83623 --- /dev/null +++ b/non_logged_in_area/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/non_logged_in_area/static/bootstrap4/css/bootstrap.css b/non_logged_in_area/static/bootstrap4/css/bootstrap.css new file mode 100644 index 00000000..908c89ea --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/css/bootstrap.css @@ -0,0 +1,6301 @@ +/*! + * Bootstrap v4.0.0-alpha (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +@charset "UTF-8"; +/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden], +template { + display: none; +} + +a { + background-color: transparent; +} + +a:active { + outline: 0; +} + +a:hover { + outline: 0; +} + +abbr[title] { + border-bottom: 1px dotted; +} + +b, +strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +h1 { + margin: .67em 0; + font-size: 2em; +} + +mark { + color: #000; + background: #ff0; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -.5em; +} + +sub { + bottom: -.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 1em 40px; +} + +hr { + height: 0; + -webkit-box-sizing: content-box; + box-sizing: content-box; +} + +pre { + overflow: auto; +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} + +button { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +input { + line-height: normal; +} + +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; +} + +optgroup { + font-weight: bold; +} + +table { + border-spacing: 0; + border-collapse: collapse; +} + +td, +th { + padding: 0; +} + +@media print { + *, + *:before, + *:after { + text-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} + +html { + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +*, +*:before, +*:after { + -webkit-box-sizing: inherit; + box-sizing: inherit; +} + +@-moz-viewport { + width: device-width; +} + +@-ms-viewport { + width: device-width; +} + +@-webkit-viewport { + width: device-width; +} + +@viewport { + width: device-width; +} + +html { + font-size: 16px; + + -webkit-tap-highlight-color: transparent; +} + +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 1rem; + line-height: 1.5; + color: #373a3c; + background-color: #fff; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: .5rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #818a91; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: bold; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +a { + color: #0275d8; + text-decoration: none; +} + +a:focus, +a:hover { + color: #014c8c; + text-decoration: underline; +} + +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; +} + +[role="button"] { + cursor: pointer; +} + +table { + background-color: transparent; +} + +caption { + padding-top: .75rem; + padding-bottom: .75rem; + color: #818a91; + text-align: left; + caption-side: bottom; +} + +th { + text-align: left; +} + +label { + display: inline-block; + margin-bottom: .5rem; +} + +input, +button, +select, +textarea { + margin: 0; + line-height: inherit; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; +} + +input[type="search"] { + -webkit-appearance: none; +} + +output { + display: inline-block; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +h1, .h1, +h2, .h2, +h3, .h3 { + margin-bottom: .5rem; +} + +h4, .h4, +h5, .h5, +h6, .h6 { + margin-bottom: .5rem; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 3.5rem; + font-weight: 300; +} + +.display-2 { + font-size: 4.5rem; + font-weight: 300; +} + +.display-3 { + font-size: 5.5rem; + font-weight: 300; +} + +.display-4 { + font-size: 6rem; + font-weight: 300; +} + +hr { + margin-top: 1rem; + margin-bottom: 1rem; + border: 0; + border-top: .0625rem solid rgba(0, 0, 0, .1); +} + +small, +.small { + font-size: 80%; + font-weight: normal; +} + +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +.dl-horizontal { + margin-right: -1.875rem; + margin-left: -1.875rem; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + content: " "; +} + +.dl-horizontal:after { + clear: both; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + padding: .5rem 1rem; + margin-bottom: 1rem; + font-size: 1.25rem; + border-left: .25rem solid #eceeef; +} + +.blockquote p:last-child, +.blockquote ul:last-child, +.blockquote ol:last-child { + margin-bottom: 0; +} + +.blockquote footer { + display: block; + font-size: 80%; + line-height: 1.5; + color: #818a91; +} + +.blockquote footer:before { + content: "\2014 \00A0"; +} + +.blockquote-reverse { + padding-right: 1rem; + padding-left: 0; + text-align: right; + border-right: .25rem solid #eceeef; + border-left: 0; +} + +.blockquote-reverse footer:before { + content: ""; +} + +.blockquote-reverse footer:after { + content: "\00A0 \2014"; +} + +.figure { + display: inline-block; +} + +.figure > img { + margin-bottom: .5rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #818a91; +} + +.img-responsive, .figure > img, .carousel-inner > .carousel-item > img, +.carousel-inner > .carousel-item > a > img { + display: block; + max-width: 100%; + height: auto; +} + +.img-rounded { + border-radius: .3rem; +} + +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: .25rem; + line-height: 1.5; + background-color: #fff; + border: 1px solid #ddd; + border-radius: .25rem; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} + +.img-circle { + border-radius: 50%; +} + +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} + +code { + padding: .2rem .4rem; + font-size: 90%; + color: #bd4147; + background-color: #f7f7f9; + border-radius: .25rem; +} + +kbd { + padding: .2rem .4rem; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: .2rem; +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + font-size: 90%; + line-height: 1.5; + color: #373a3c; +} + +pre code { + padding: 0; + font-size: inherit; + color: inherit; + background-color: transparent; + border-radius: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + padding-right: .9375rem; + padding-left: .9375rem; + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +@media (min-width: 34em) { + .container { + max-width: 34rem; + } +} + +@media (min-width: 48em) { + .container { + max-width: 45rem; + } +} + +@media (min-width: 62em) { + .container { + max-width: 60rem; + } +} + +@media (min-width: 75em) { + .container { + max-width: 72.25rem; + } +} + +.container-fluid { + padding-right: .9375rem; + padding-left: .9375rem; + margin-right: auto; + margin-left: auto; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + content: " "; +} + +.container-fluid:after { + clear: both; +} + +.row { + margin-right: -.9375rem; + margin-left: -.9375rem; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + position: relative; + min-height: 1px; + padding-right: .9375rem; + padding-left: .9375rem; +} + +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} + +.col-xs-1 { + width: 8.333333%; +} + +.col-xs-2 { + width: 16.666667%; +} + +.col-xs-3 { + width: 25%; +} + +.col-xs-4 { + width: 33.333333%; +} + +.col-xs-5 { + width: 41.666667%; +} + +.col-xs-6 { + width: 50%; +} + +.col-xs-7 { + width: 58.333333%; +} + +.col-xs-8 { + width: 66.666667%; +} + +.col-xs-9 { + width: 75%; +} + +.col-xs-10 { + width: 83.333333%; +} + +.col-xs-11 { + width: 91.666667%; +} + +.col-xs-12 { + width: 100%; +} + +.col-xs-pull-0 { + right: auto; +} + +.col-xs-pull-1 { + right: 8.333333%; +} + +.col-xs-pull-2 { + right: 16.666667%; +} + +.col-xs-pull-3 { + right: 25%; +} + +.col-xs-pull-4 { + right: 33.333333%; +} + +.col-xs-pull-5 { + right: 41.666667%; +} + +.col-xs-pull-6 { + right: 50%; +} + +.col-xs-pull-7 { + right: 58.333333%; +} + +.col-xs-pull-8 { + right: 66.666667%; +} + +.col-xs-pull-9 { + right: 75%; +} + +.col-xs-pull-10 { + right: 83.333333%; +} + +.col-xs-pull-11 { + right: 91.666667%; +} + +.col-xs-pull-12 { + right: 100%; +} + +.col-xs-push-0 { + left: auto; +} + +.col-xs-push-1 { + left: 8.333333%; +} + +.col-xs-push-2 { + left: 16.666667%; +} + +.col-xs-push-3 { + left: 25%; +} + +.col-xs-push-4 { + left: 33.333333%; +} + +.col-xs-push-5 { + left: 41.666667%; +} + +.col-xs-push-6 { + left: 50%; +} + +.col-xs-push-7 { + left: 58.333333%; +} + +.col-xs-push-8 { + left: 66.666667%; +} + +.col-xs-push-9 { + left: 75%; +} + +.col-xs-push-10 { + left: 83.333333%; +} + +.col-xs-push-11 { + left: 91.666667%; +} + +.col-xs-push-12 { + left: 100%; +} + +.col-xs-offset-0 { + margin-left: 0; +} + +.col-xs-offset-1 { + margin-left: 8.333333%; +} + +.col-xs-offset-2 { + margin-left: 16.666667%; +} + +.col-xs-offset-3 { + margin-left: 25%; +} + +.col-xs-offset-4 { + margin-left: 33.333333%; +} + +.col-xs-offset-5 { + margin-left: 41.666667%; +} + +.col-xs-offset-6 { + margin-left: 50%; +} + +.col-xs-offset-7 { + margin-left: 58.333333%; +} + +.col-xs-offset-8 { + margin-left: 66.666667%; +} + +.col-xs-offset-9 { + margin-left: 75%; +} + +.col-xs-offset-10 { + margin-left: 83.333333%; +} + +.col-xs-offset-11 { + margin-left: 91.666667%; +} + +.col-xs-offset-12 { + margin-left: 100%; +} + +@media (min-width: 34em) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-1 { + width: 8.333333%; + } + .col-sm-2 { + width: 16.666667%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-4 { + width: 33.333333%; + } + .col-sm-5 { + width: 41.666667%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-7 { + width: 58.333333%; + } + .col-sm-8 { + width: 66.666667%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-10 { + width: 83.333333%; + } + .col-sm-11 { + width: 91.666667%; + } + .col-sm-12 { + width: 100%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-pull-1 { + right: 8.333333%; + } + .col-sm-pull-2 { + right: 16.666667%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-4 { + right: 33.333333%; + } + .col-sm-pull-5 { + right: 41.666667%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-7 { + right: 58.333333%; + } + .col-sm-pull-8 { + right: 66.666667%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-10 { + right: 83.333333%; + } + .col-sm-pull-11 { + right: 91.666667%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-push-1 { + left: 8.333333%; + } + .col-sm-push-2 { + left: 16.666667%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-4 { + left: 33.333333%; + } + .col-sm-push-5 { + left: 41.666667%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-7 { + left: 58.333333%; + } + .col-sm-push-8 { + left: 66.666667%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-10 { + left: 83.333333%; + } + .col-sm-push-11 { + left: 91.666667%; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-offset-0 { + margin-left: 0; + } + .col-sm-offset-1 { + margin-left: 8.333333%; + } + .col-sm-offset-2 { + margin-left: 16.666667%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-4 { + margin-left: 33.333333%; + } + .col-sm-offset-5 { + margin-left: 41.666667%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-7 { + margin-left: 58.333333%; + } + .col-sm-offset-8 { + margin-left: 66.666667%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-10 { + margin-left: 83.333333%; + } + .col-sm-offset-11 { + margin-left: 91.666667%; + } + .col-sm-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 48em) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-1 { + width: 8.333333%; + } + .col-md-2 { + width: 16.666667%; + } + .col-md-3 { + width: 25%; + } + .col-md-4 { + width: 33.333333%; + } + .col-md-5 { + width: 41.666667%; + } + .col-md-6 { + width: 50%; + } + .col-md-7 { + width: 58.333333%; + } + .col-md-8 { + width: 66.666667%; + } + .col-md-9 { + width: 75%; + } + .col-md-10 { + width: 83.333333%; + } + .col-md-11 { + width: 91.666667%; + } + .col-md-12 { + width: 100%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-pull-1 { + right: 8.333333%; + } + .col-md-pull-2 { + right: 16.666667%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-4 { + right: 33.333333%; + } + .col-md-pull-5 { + right: 41.666667%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-7 { + right: 58.333333%; + } + .col-md-pull-8 { + right: 66.666667%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-10 { + right: 83.333333%; + } + .col-md-pull-11 { + right: 91.666667%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-push-0 { + left: auto; + } + .col-md-push-1 { + left: 8.333333%; + } + .col-md-push-2 { + left: 16.666667%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-4 { + left: 33.333333%; + } + .col-md-push-5 { + left: 41.666667%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-7 { + left: 58.333333%; + } + .col-md-push-8 { + left: 66.666667%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-10 { + left: 83.333333%; + } + .col-md-push-11 { + left: 91.666667%; + } + .col-md-push-12 { + left: 100%; + } + .col-md-offset-0 { + margin-left: 0; + } + .col-md-offset-1 { + margin-left: 8.333333%; + } + .col-md-offset-2 { + margin-left: 16.666667%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-4 { + margin-left: 33.333333%; + } + .col-md-offset-5 { + margin-left: 41.666667%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-7 { + margin-left: 58.333333%; + } + .col-md-offset-8 { + margin-left: 66.666667%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-10 { + margin-left: 83.333333%; + } + .col-md-offset-11 { + margin-left: 91.666667%; + } + .col-md-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 62em) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-1 { + width: 8.333333%; + } + .col-lg-2 { + width: 16.666667%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-4 { + width: 33.333333%; + } + .col-lg-5 { + width: 41.666667%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-7 { + width: 58.333333%; + } + .col-lg-8 { + width: 66.666667%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-10 { + width: 83.333333%; + } + .col-lg-11 { + width: 91.666667%; + } + .col-lg-12 { + width: 100%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-pull-1 { + right: 8.333333%; + } + .col-lg-pull-2 { + right: 16.666667%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-4 { + right: 33.333333%; + } + .col-lg-pull-5 { + right: 41.666667%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-7 { + right: 58.333333%; + } + .col-lg-pull-8 { + right: 66.666667%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-10 { + right: 83.333333%; + } + .col-lg-pull-11 { + right: 91.666667%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-push-1 { + left: 8.333333%; + } + .col-lg-push-2 { + left: 16.666667%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-4 { + left: 33.333333%; + } + .col-lg-push-5 { + left: 41.666667%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-7 { + left: 58.333333%; + } + .col-lg-push-8 { + left: 66.666667%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-10 { + left: 83.333333%; + } + .col-lg-push-11 { + left: 91.666667%; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-offset-0 { + margin-left: 0; + } + .col-lg-offset-1 { + margin-left: 8.333333%; + } + .col-lg-offset-2 { + margin-left: 16.666667%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-4 { + margin-left: 33.333333%; + } + .col-lg-offset-5 { + margin-left: 41.666667%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-7 { + margin-left: 58.333333%; + } + .col-lg-offset-8 { + margin-left: 66.666667%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-10 { + margin-left: 83.333333%; + } + .col-lg-offset-11 { + margin-left: 91.666667%; + } + .col-lg-offset-12 { + margin-left: 100%; + } +} + +@media (min-width: 75em) { + .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12 { + float: left; + } + .col-xl-1 { + width: 8.333333%; + } + .col-xl-2 { + width: 16.666667%; + } + .col-xl-3 { + width: 25%; + } + .col-xl-4 { + width: 33.333333%; + } + .col-xl-5 { + width: 41.666667%; + } + .col-xl-6 { + width: 50%; + } + .col-xl-7 { + width: 58.333333%; + } + .col-xl-8 { + width: 66.666667%; + } + .col-xl-9 { + width: 75%; + } + .col-xl-10 { + width: 83.333333%; + } + .col-xl-11 { + width: 91.666667%; + } + .col-xl-12 { + width: 100%; + } + .col-xl-pull-0 { + right: auto; + } + .col-xl-pull-1 { + right: 8.333333%; + } + .col-xl-pull-2 { + right: 16.666667%; + } + .col-xl-pull-3 { + right: 25%; + } + .col-xl-pull-4 { + right: 33.333333%; + } + .col-xl-pull-5 { + right: 41.666667%; + } + .col-xl-pull-6 { + right: 50%; + } + .col-xl-pull-7 { + right: 58.333333%; + } + .col-xl-pull-8 { + right: 66.666667%; + } + .col-xl-pull-9 { + right: 75%; + } + .col-xl-pull-10 { + right: 83.333333%; + } + .col-xl-pull-11 { + right: 91.666667%; + } + .col-xl-pull-12 { + right: 100%; + } + .col-xl-push-0 { + left: auto; + } + .col-xl-push-1 { + left: 8.333333%; + } + .col-xl-push-2 { + left: 16.666667%; + } + .col-xl-push-3 { + left: 25%; + } + .col-xl-push-4 { + left: 33.333333%; + } + .col-xl-push-5 { + left: 41.666667%; + } + .col-xl-push-6 { + left: 50%; + } + .col-xl-push-7 { + left: 58.333333%; + } + .col-xl-push-8 { + left: 66.666667%; + } + .col-xl-push-9 { + left: 75%; + } + .col-xl-push-10 { + left: 83.333333%; + } + .col-xl-push-11 { + left: 91.666667%; + } + .col-xl-push-12 { + left: 100%; + } + .col-xl-offset-0 { + margin-left: 0; + } + .col-xl-offset-1 { + margin-left: 8.333333%; + } + .col-xl-offset-2 { + margin-left: 16.666667%; + } + .col-xl-offset-3 { + margin-left: 25%; + } + .col-xl-offset-4 { + margin-left: 33.333333%; + } + .col-xl-offset-5 { + margin-left: 41.666667%; + } + .col-xl-offset-6 { + margin-left: 50%; + } + .col-xl-offset-7 { + margin-left: 58.333333%; + } + .col-xl-offset-8 { + margin-left: 66.666667%; + } + .col-xl-offset-9 { + margin-left: 75%; + } + .col-xl-offset-10 { + margin-left: 83.333333%; + } + .col-xl-offset-11 { + margin-left: 91.666667%; + } + .col-xl-offset-12 { + margin-left: 100%; + } +} + +.table { + width: 100%; + max-width: 100%; + margin-bottom: 1rem; +} + +.table th, +.table td { + padding: .75rem; + line-height: 1.5; + vertical-align: top; + border-top: 1px solid #eceeef; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #eceeef; +} + +.table tbody + tbody { + border-top: 2px solid #eceeef; +} + +.table .table { + background-color: #fff; +} + +.table-sm th, +.table-sm td { + padding: .3rem; +} + +.table-bordered { + border: 1px solid #eceeef; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #eceeef; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover { + background-color: #f5f5f5; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: #f5f5f5; +} + +.table-hover .table-active:hover { + background-color: #e8e8e8; +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: #e8e8e8; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #dff0d8; +} + +.table-hover .table-success:hover { + background-color: #d0e9c6; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #d0e9c6; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #d9edf7; +} + +.table-hover .table-info:hover { + background-color: #c4e3f3; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #c4e3f3; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #fcf8e3; +} + +.table-hover .table-warning:hover { + background-color: #faf2cc; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #faf2cc; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f2dede; +} + +.table-hover .table-danger:hover { + background-color: #ebcccc; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #ebcccc; +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; +} + +.thead-inverse th { + color: #fff; + background-color: #373a3c; +} + +.thead-default th { + color: #55595c; + background-color: #eceeef; +} + +.table-inverse { + color: #eceeef; + background-color: #373a3c; +} + +.table-inverse.table-bordered { + border: 0; +} + +.table-inverse th, +.table-inverse td, +.table-inverse thead th { + border-color: #55595c; +} + +.table-reflow thead { + float: left; +} + +.table-reflow tbody { + display: block; + white-space: nowrap; +} + +.table-reflow th, +.table-reflow td { + border-top: 1px solid #eceeef; + border-left: 1px solid #eceeef; +} + +.table-reflow th:last-child, +.table-reflow td:last-child { + border-right: 1px solid #eceeef; +} + +.table-reflow thead:last-child tr:last-child th, +.table-reflow thead:last-child tr:last-child td, +.table-reflow tbody:last-child tr:last-child th, +.table-reflow tbody:last-child tr:last-child td, +.table-reflow tfoot:last-child tr:last-child th, +.table-reflow tfoot:last-child tr:last-child td { + border-bottom: 1px solid #eceeef; +} + +.table-reflow tr { + float: left; +} + +.table-reflow tr th, +.table-reflow tr td { + display: block !important; + border: 1px solid #eceeef; +} + +.form-control { + display: block; + width: 100%; + padding: .375rem .75rem; + font-size: 1rem; + line-height: 1.5; + color: #55595c; + background-color: #fff; + background-image: none; + border: .0625rem solid #ccc; + border-radius: .25rem; +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:focus { + border-color: #66afe9; + outline: none; +} + +.form-control::-webkit-input-placeholder { + color: #999; + opacity: 1; +} + +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} + +.form-control:-ms-input-placeholder { + color: #999; + opacity: 1; +} + +.form-control::placeholder { + color: #999; + opacity: 1; +} + +.form-control:disabled, +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eceeef; + opacity: 1; +} + +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} + +.form-control-file, +.form-control-range { + display: block; +} + +.form-control-label { + padding: .4375rem .75rem; + margin-bottom: 0; +} + +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"].form-control, + input[type="time"].form-control, + input[type="datetime-local"].form-control, + input[type="month"].form-control { + line-height: 2.375rem; + } + input[type="date"].input-sm, + .input-group-sm input[type="date"].form-control, + input[type="time"].input-sm, + .input-group-sm input[type="time"].form-control, + input[type="datetime-local"].input-sm, + .input-group-sm input[type="datetime-local"].form-control, + input[type="month"].input-sm, + .input-group-sm input[type="month"].form-control { + line-height: 1.95rem; + } + input[type="date"].input-lg, + .input-group-lg input[type="date"].form-control, + input[type="time"].input-lg, + .input-group-lg input[type="time"].form-control, + input[type="datetime-local"].input-lg, + .input-group-lg input[type="datetime-local"].form-control, + input[type="month"].input-lg, + .input-group-lg input[type="month"].form-control { + line-height: 3.291667rem; + } +} + +.form-control-static { + min-height: 2.375rem; + padding-top: .4375rem; + padding-bottom: .4375rem; + margin-bottom: 0; +} + +.form-control-static.form-control-sm, +.input-group-sm > .form-control-static.form-control, +.input-group-sm > .form-control-static.input-group-addon, +.input-group-sm > .input-group-btn > .form-control-static.btn, +.form-control-static.form-control-lg, .input-group-lg > .form-control-static.form-control, +.input-group-lg > .form-control-static.input-group-addon, +.input-group-lg > .input-group-btn > .form-control-static.btn { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm, .input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + padding: .275rem .75rem; + font-size: .85rem; + line-height: 1.5; + border-radius: .2rem; +} + +.form-control-lg, .input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + padding: .75rem 1.25rem; + font-size: 1.25rem; + line-height: 1.333333; + border-radius: .3rem; +} + +.form-group { + margin-bottom: 15px; +} + +.radio, +.checkbox { + position: relative; + display: block; + margin-bottom: .75rem; +} + +.radio label, +.checkbox label { + padding-left: 1.25rem; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} + +.radio label input:only-child, +.checkbox label input:only-child { + position: static; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: .25rem; + margin-left: -1.25rem; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -.25rem; +} + +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 1.25rem; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: .75rem; +} + +input[type="radio"]:disabled, +input[type="radio"].disabled, +fieldset[disabled] input[type="radio"], +input[type="checkbox"]:disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} + +.radio-inline.disabled, +fieldset[disabled] .radio-inline, +.checkbox-inline.disabled, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} + +.radio.disabled label, +fieldset[disabled] .radio label, +.checkbox.disabled label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} + +.form-control-success, +.form-control-warning, +.form-control-error { + padding-right: 2.25rem; + background-repeat: no-repeat; + background-position: center right .59375rem; + -webkit-background-size: 1.54375rem 1.54375rem; + background-size: 1.54375rem 1.54375rem; +} + +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #5cb85c; +} + +.has-success .form-control { + border-color: #5cb85c; +} + +.has-success .input-group-addon { + color: #5cb85c; + background-color: #eaf6ea; + border-color: #5cb85c; +} + +.has-success .form-control-feedback { + color: #5cb85c; +} + +.has-success .form-control-success { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkNoZWNrIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDYxMiA3OTIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYxMiA3OTIiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiM1Q0I4NUMiIGQ9Ik0yMzMuOCw2MTAuMWMtMTMuMywwLTI1LjktNi4yLTM0LTE2LjlMOTAuNSw0NDguOEM3Ni4zLDQzMCw4MCw0MDMuMyw5OC44LDM4OS4xYzE4LjgtMTQuMyw0NS41LTEwLjUsNTkuOCw4LjNsNzEuOSw5NWwyMjAuOS0yNTAuNWMxMi41LTIwLDM4LjgtMjYuMSw1OC44LTEzLjZjMjAsMTIuNCwyNi4xLDM4LjcsMTMuNiw1OC44TDI3MCw1OTBjLTcuNCwxMi0yMC4yLDE5LjQtMzQuMywyMC4xQzIzNS4xLDYxMC4xLDIzNC41LDYxMC4xLDIzMy44LDYxMC4xeiIvPjwvc3ZnPg=="); +} + +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #f0ad4e; +} + +.has-warning .form-control { + border-color: #f0ad4e; +} + +.has-warning .input-group-addon { + color: #f0ad4e; + background-color: white; + border-color: #f0ad4e; +} + +.has-warning .form-control-feedback { + color: #f0ad4e; +} + +.has-warning .form-control-warning { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9Ildhcm5pbmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNjEyIDc5MiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjEyIDc5MiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZmlsbD0iI0YwQUQ0RSIgZD0iTTYwMyw2NDAuMmwtMjc4LjUtNTA5Yy0zLjgtNi42LTEwLjgtMTAuNi0xOC41LTEwLjZzLTE0LjcsNC4xLTE4LjUsMTAuNkw5LDY0MC4yYy0zLjcsNi41LTMuNiwxNC40LDAuMiwyMC44YzMuOCw2LjUsMTAuOCwxMC40LDE4LjMsMTAuNGg1NTcuMWM3LjUsMCwxNC41LTMuOSwxOC4zLTEwLjRDNjA2LjYsNjU0LjYsNjA2LjcsNjQ2LjYsNjAzLDY0MC4yeiBNMzM2LjYsNjEwLjJoLTYxLjJWNTQ5aDYxLjJWNjEwLjJ6IE0zMzYuNiw1MDMuMWgtNjEuMlYzMDQuMmg2MS4yVjUwMy4xeiIvPjwvc3ZnPg=="); +} + +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #d9534f; +} + +.has-error .form-control { + border-color: #d9534f; +} + +.has-error .input-group-addon { + color: #d9534f; + background-color: #fdf7f7; + border-color: #d9534f; +} + +.has-error .form-control-feedback { + color: #d9534f; +} + +.has-error .form-control-error { + background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkNyb3NzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDYxMiA3OTIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYxMiA3OTIiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiNEOTUzNEYiIGQ9Ik00NDcsNTQ0LjRjLTE0LjQsMTQuNC0zNy42LDE0LjQtNTEuOSwwTDMwNiw0NTEuN2wtODkuMSw5Mi43Yy0xNC40LDE0LjQtMzcuNiwxNC40LTUxLjksMGMtMTQuNC0xNC40LTE0LjQtMzcuNiwwLTUxLjlsOTIuNC05Ni40TDE2NSwyOTkuNmMtMTQuNC0xNC40LTE0LjQtMzcuNiwwLTUxLjlzMzcuNi0xNC40LDUxLjksMGw4OS4yLDkyLjdsODkuMS05Mi43YzE0LjQtMTQuNCwzNy42LTE0LjQsNTEuOSwwYzE0LjQsMTQuNCwxNC40LDM3LjYsMCw1MS45TDM1NC43LDM5Nmw5Mi40LDk2LjRDNDYxLjQsNTA2LjgsNDYxLjQsNTMwLDQ0Nyw1NDQuNHoiLz48L3N2Zz4="); +} + +@media (min-width: 34em) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} + +.btn { + display: inline-block; + padding: .375rem 1rem; + font-size: 1rem; + font-weight: normal; + line-height: 1.5; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + border: .0625rem solid transparent; + border-radius: .25rem; +} + +.btn:focus, +.btn.focus, +.btn:active:focus, +.btn:active.focus, +.btn.active:focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:focus, +.btn:hover { + text-decoration: none; +} + +.btn.focus { + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; +} + +.btn.disabled, +.btn:disabled, +fieldset[disabled] .btn { + cursor: not-allowed; + opacity: .65; +} + +a.btn.disaabled, +fieldset[disabled] a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:hover { + color: #fff; + background-color: #025aa5; + border-color: #01549b; +} + +.btn-primary:active, +.btn-primary.active, +.open > .btn-primary.dropdown-toggle { + background-image: none; +} + +.btn-primary.disabled:focus, +.btn-primary.disabled.focus, +.btn-primary:disabled:focus, +.btn-primary:disabled.focus, +fieldset[disabled] .btn-primary:focus, +fieldset[disabled] .btn-primary.focus { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary.disabled:hover, +.btn-primary:disabled:hover, +fieldset[disabled] .btn-primary:hover { + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-secondary { + color: #373a3c; + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary:focus, +.btn-secondary.focus, +.btn-secondary:active, +.btn-secondary.active, +.open > .btn-secondary.dropdown-toggle { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:hover { + color: #373a3c; + background-color: #e6e6e6; + border-color: #adadad; +} + +.btn-secondary:active, +.btn-secondary.active, +.open > .btn-secondary.dropdown-toggle { + background-image: none; +} + +.btn-secondary.disabled:focus, +.btn-secondary.disabled.focus, +.btn-secondary:disabled:focus, +.btn-secondary:disabled.focus, +fieldset[disabled] .btn-secondary:focus, +fieldset[disabled] .btn-secondary.focus { + background-color: #fff; + border-color: #ccc; +} + +.btn-secondary.disabled:hover, +.btn-secondary:disabled:hover, +fieldset[disabled] .btn-secondary:hover { + background-color: #fff; + border-color: #ccc; +} + +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .btn-info.dropdown-toggle { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:hover { + color: #fff; + background-color: #31b0d5; + border-color: #2aabd2; +} + +.btn-info:active, +.btn-info.active, +.open > .btn-info.dropdown-toggle { + background-image: none; +} + +.btn-info.disabled:focus, +.btn-info.disabled.focus, +.btn-info:disabled:focus, +.btn-info:disabled.focus, +fieldset[disabled] .btn-info:focus, +fieldset[disabled] .btn-info.focus { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info.disabled:hover, +.btn-info:disabled:hover, +fieldset[disabled] .btn-info:hover { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .btn-success.dropdown-toggle { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:hover { + color: #fff; + background-color: #449d44; + border-color: #419641; +} + +.btn-success:active, +.btn-success.active, +.open > .btn-success.dropdown-toggle { + background-image: none; +} + +.btn-success.disabled:focus, +.btn-success.disabled.focus, +.btn-success:disabled:focus, +.btn-success:disabled.focus, +fieldset[disabled] .btn-success:focus, +fieldset[disabled] .btn-success.focus { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success.disabled:hover, +.btn-success:disabled:hover, +fieldset[disabled] .btn-success:hover { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:hover { + color: #fff; + background-color: #ec971f; + border-color: #eb9316; +} + +.btn-warning:active, +.btn-warning.active, +.open > .btn-warning.dropdown-toggle { + background-image: none; +} + +.btn-warning.disabled:focus, +.btn-warning.disabled.focus, +.btn-warning:disabled:focus, +.btn-warning:disabled.focus, +fieldset[disabled] .btn-warning:focus, +fieldset[disabled] .btn-warning.focus { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning.disabled:hover, +.btn-warning:disabled:hover, +fieldset[disabled] .btn-warning:hover { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:hover { + color: #fff; + background-color: #c9302c; + border-color: #c12e2a; +} + +.btn-danger:active, +.btn-danger.active, +.open > .btn-danger.dropdown-toggle { + background-image: none; +} + +.btn-danger.disabled:focus, +.btn-danger.disabled.focus, +.btn-danger:disabled:focus, +.btn-danger:disabled.focus, +fieldset[disabled] .btn-danger:focus, +fieldset[disabled] .btn-danger.focus { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger.disabled:hover, +.btn-danger:disabled:hover, +fieldset[disabled] .btn-danger:hover { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-primary-outline { + color: #0275d8; + background-color: transparent; + background-image: none; + border-color: #0275d8; +} + +.btn-primary-outline:focus, +.btn-primary-outline.focus, +.btn-primary-outline:active, +.btn-primary-outline.active, +.open > .btn-primary-outline.dropdown-toggle { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary-outline:hover { + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.btn-primary-outline.disabled:focus, +.btn-primary-outline.disabled.focus, +.btn-primary-outline:disabled:focus, +.btn-primary-outline:disabled.focus, +fieldset[disabled] .btn-primary-outline:focus, +fieldset[disabled] .btn-primary-outline.focus { + border-color: #43a7fd; +} + +.btn-primary-outline.disabled:hover, +.btn-primary-outline:disabled:hover, +fieldset[disabled] .btn-primary-outline:hover { + border-color: #43a7fd; +} + +.btn-secondary-outline { + color: #ccc; + background-color: transparent; + background-image: none; + border-color: #ccc; +} + +.btn-secondary-outline:focus, +.btn-secondary-outline.focus, +.btn-secondary-outline:active, +.btn-secondary-outline.active, +.open > .btn-secondary-outline.dropdown-toggle { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-secondary-outline:hover { + color: #fff; + background-color: #ccc; + border-color: #ccc; +} + +.btn-secondary-outline.disabled:focus, +.btn-secondary-outline.disabled.focus, +.btn-secondary-outline:disabled:focus, +.btn-secondary-outline:disabled.focus, +fieldset[disabled] .btn-secondary-outline:focus, +fieldset[disabled] .btn-secondary-outline.focus { + border-color: white; +} + +.btn-secondary-outline.disabled:hover, +.btn-secondary-outline:disabled:hover, +fieldset[disabled] .btn-secondary-outline:hover { + border-color: white; +} + +.btn-info-outline { + color: #5bc0de; + background-color: transparent; + background-image: none; + border-color: #5bc0de; +} + +.btn-info-outline:focus, +.btn-info-outline.focus, +.btn-info-outline:active, +.btn-info-outline.active, +.open > .btn-info-outline.dropdown-toggle { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info-outline:hover { + color: #fff; + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info-outline.disabled:focus, +.btn-info-outline.disabled.focus, +.btn-info-outline:disabled:focus, +.btn-info-outline:disabled.focus, +fieldset[disabled] .btn-info-outline:focus, +fieldset[disabled] .btn-info-outline.focus { + border-color: #b0e1ef; +} + +.btn-info-outline.disabled:hover, +.btn-info-outline:disabled:hover, +fieldset[disabled] .btn-info-outline:hover { + border-color: #b0e1ef; +} + +.btn-success-outline { + color: #5cb85c; + background-color: transparent; + background-image: none; + border-color: #5cb85c; +} + +.btn-success-outline:focus, +.btn-success-outline.focus, +.btn-success-outline:active, +.btn-success-outline.active, +.open > .btn-success-outline.dropdown-toggle { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success-outline:hover { + color: #fff; + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success-outline.disabled:focus, +.btn-success-outline.disabled.focus, +.btn-success-outline:disabled:focus, +.btn-success-outline:disabled.focus, +fieldset[disabled] .btn-success-outline:focus, +fieldset[disabled] .btn-success-outline.focus { + border-color: #a3d7a3; +} + +.btn-success-outline.disabled:hover, +.btn-success-outline:disabled:hover, +fieldset[disabled] .btn-success-outline:hover { + border-color: #a3d7a3; +} + +.btn-warning-outline { + color: #f0ad4e; + background-color: transparent; + background-image: none; + border-color: #f0ad4e; +} + +.btn-warning-outline:focus, +.btn-warning-outline.focus, +.btn-warning-outline:active, +.btn-warning-outline.active, +.open > .btn-warning-outline.dropdown-toggle { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning-outline:hover { + color: #fff; + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning-outline.disabled:focus, +.btn-warning-outline.disabled.focus, +.btn-warning-outline:disabled:focus, +.btn-warning-outline:disabled.focus, +fieldset[disabled] .btn-warning-outline:focus, +fieldset[disabled] .btn-warning-outline.focus { + border-color: #f8d9ac; +} + +.btn-warning-outline.disabled:hover, +.btn-warning-outline:disabled:hover, +fieldset[disabled] .btn-warning-outline:hover { + border-color: #f8d9ac; +} + +.btn-danger-outline { + color: #d9534f; + background-color: transparent; + background-image: none; + border-color: #d9534f; +} + +.btn-danger-outline:focus, +.btn-danger-outline.focus, +.btn-danger-outline:active, +.btn-danger-outline.active, +.open > .btn-danger-outline.dropdown-toggle { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger-outline:hover { + color: #fff; + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger-outline.disabled:focus, +.btn-danger-outline.disabled.focus, +.btn-danger-outline:disabled:focus, +.btn-danger-outline:disabled.focus, +fieldset[disabled] .btn-danger-outline:focus, +fieldset[disabled] .btn-danger-outline.focus { + border-color: #eba5a3; +} + +.btn-danger-outline.disabled:hover, +.btn-danger-outline:disabled:hover, +fieldset[disabled] .btn-danger-outline:hover { + border-color: #eba5a3; +} + +.btn-link { + font-weight: normal; + color: #0275d8; + border-radius: 0; +} + +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link:disabled, +fieldset[disabled] .btn-link { + background-color: transparent; +} + +.btn-link, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link:hover { + border-color: transparent; +} + +.btn-link:focus, +.btn-link:hover { + color: #014c8c; + text-decoration: underline; + background-color: transparent; +} + +.btn-link:disabled:focus, +.btn-link:disabled:hover, +fieldset[disabled] .btn-link:focus, +fieldset[disabled] .btn-link:hover { + color: #818a91; + text-decoration: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: .75rem 1.25rem; + font-size: 1.25rem; + line-height: 1.333333; + border-radius: .3rem; +} + +.btn-sm, .btn-group-sm > .btn { + padding: .25rem .75rem; + font-size: .85rem; + line-height: 1.5; + border-radius: .2rem; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + display: none; +} + +.collapse.in { + display: block; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height; + -o-transition-property: height; + transition-property: height; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle:after { + display: inline-block; + width: 0; + height: 0; + margin-left: .25rem; + vertical-align: middle; + content: ""; + border-top: .3em solid; + border-right: .3em solid transparent; + border-left: .3em solid transparent; +} + +.dropdown-toggle:focus { + outline: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 1rem; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: .25rem; +} + +.dropdown-divider { + height: 1px; + margin: .5rem 0; + overflow: hidden; + background-color: #e5e5e5; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.5; + color: #373a3c; + text-align: inherit; + white-space: nowrap; + background: none; + border: 0; +} + +.dropdown-item:focus, +.dropdown-item:hover { + color: #2b2d2f; + text-decoration: none; + background-color: #f5f5f5; +} + +.dropdown-item.active, +.dropdown-item.active:focus, +.dropdown-item.active:hover { + color: #fff; + text-decoration: none; + background-color: #0275d8; + outline: 0; +} + +.dropdown-item.disabled, +.dropdown-item.disabled:focus, +.dropdown-item.disabled:hover { + color: #818a91; +} + +.dropdown-item.disabled:focus, +.dropdown-item.disabled:hover { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: "progid:DXImageTransform.Microsoft.gradient(enabled = false)"; +} + +.open > .dropdown-menu { + display: block; +} + +.open > a { + outline: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: .85rem; + line-height: 1.5; + color: #818a91; + white-space: nowrap; +} + +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: .3em solid; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} + +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 2; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 2; +} + +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} + +.btn-toolbar { + margin-left: -5px; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} + +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} + +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; +} + +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group > .btn-group { + float: left; +} + +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-lg + .dropdown-toggle, .btn-group-lg.btn-group > .btn + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn .caret { + margin-left: 0; +} + +.btn-lg .caret, .btn-group-lg > .btn .caret { + border-width: .3em .3em 0; + border-bottom-width: 0; +} + +.dropup .btn-lg .caret, .dropup .btn-group-lg > .btn .caret { + border-width: 0 .3em .3em; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after { + display: table; + content: " "; +} + +.btn-group-vertical > .btn-group:after { + clear: both; +} + +.btn-group-vertical > .btn-group > .btn { + float: none; +} + +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: .25rem; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: .25rem; +} + +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} + +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: table; + border-collapse: separate; +} + +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} + +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} + +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} + +.input-group-addon { + padding: .375rem .75rem; + font-size: 1rem; + font-weight: normal; + line-height: 1; + color: #55595c; + text-align: center; + background-color: #eceeef; + border: 1px solid #ccc; + border-radius: .25rem; +} + +.input-group-addon.form-control-sm, .input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .input-group-addon.btn { + padding: .275rem .75rem; + font-size: .85rem; + border-radius: .2rem; +} + +.input-group-addon.form-control-lg, .input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .input-group-addon.btn { + padding: 1.25rem 1.25rem; + font-size: 1.25rem; + border-radius: .3rem; +} + +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} + +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; +} + +.input-group-btn > .btn + .btn { + margin-left: -1px; +} + +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active, +.input-group-btn > .btn:hover { + z-index: 2; +} + +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} + +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + z-index: 2; + margin-left: -1px; +} + +.c-input { + position: relative; + display: inline; + padding-left: 1.5rem; + color: #555; + cursor: pointer; +} + +.c-input > input { + position: absolute; + z-index: -1; + opacity: 0; +} + +.c-input > input:checked ~ .c-indicator { + color: #fff; + background-color: #0074d9; +} + +.c-input > input:active ~ .c-indicator { + color: #fff; + background-color: #84c6ff; +} + +.c-input + .c-input { + margin-left: 1rem; +} + +.c-indicator { + position: absolute; + top: 0; + left: 0; + display: block; + width: 1rem; + height: 1rem; + font-size: 65%; + line-height: 1rem; + color: #eee; + text-align: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #eee; + background-repeat: no-repeat; + background-position: center center; + -webkit-background-size: 50% 50%; + background-size: 50% 50%; +} + +.c-checkbox .c-indicator { + border-radius: .25rem; +} + +.c-checkbox input:checked ~ .c-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTYuNCwxTDUuNywxLjdMMi45LDQuNUwyLjEsMy43TDEuNCwzTDAsNC40bDAuNywwLjdsMS41LDEuNWwwLjcsMC43bDAuNy0wLjdsMy41LTMuNWwwLjctMC43TDYuNCwxTDYuNCwxeiINCgkvPg0KPC9zdmc+DQo=); +} + +.c-checkbox input:indeterminate ~ .c-indicator { + background-color: #0074d9; + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0wLDN2Mmg4VjNIMHoiLz4NCjwvc3ZnPg0K); +} + +.c-radio .c-indicator { + border-radius: 50%; +} + +.c-radio input:checked ~ .c-indicator { + background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTQsMUMyLjMsMSwxLDIuMywxLDRzMS4zLDMsMywzczMtMS4zLDMtM1M1LjcsMSw0LDF6Ii8+DQo8L3N2Zz4NCg==); +} + +.c-inputs-stacked .c-input { + display: inline; +} + +.c-inputs-stacked .c-input:after { + display: block; + margin-bottom: .25rem; + content: ""; +} + +.c-inputs-stacked .c-input + .c-input { + margin-left: 0; +} + +.c-select { + display: inline-block; + max-width: 100%; + -webkit-appearance: none; + padding: .375rem 1.75rem .375rem .75rem; + padding-right: .75rem \9; + vertical-align: middle; + background: #fff url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC) no-repeat right .75rem center; + background-image: none \9; + -webkit-background-size: 8px 10px; + background-size: 8px 10px; + border: 1px solid #ccc; + + -moz-appearance: none; + appearance: none; +} + +.c-select:focus { + border-color: #51a7e8; + outline: none; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 5px rgba(81, 167, 232, .5); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .075), 0 0 5px rgba(81, 167, 232, .5); +} + +.c-select::-ms-expand { + opacity: 0; +} + +.c-select-sm { + padding-top: 3px; + padding-bottom: 3px; + font-size: 12px; +} + +.c-select-sm:not([multiple]) { + height: 26px; + min-height: 26px; +} + +.file { + position: relative; + display: inline-block; + height: 2.5rem; + cursor: pointer; +} + +.file input { + min-width: 14rem; + margin: 0; + filter: alpha(opacity=0); + opacity: 0; +} + +.file-custom { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 5; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #555; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-color: #fff; + border: .075rem solid #ddd; + border-radius: .25rem; + -webkit-box-shadow: inset 0 .2rem .4rem rgba(0, 0, 0, .05); + box-shadow: inset 0 .2rem .4rem rgba(0, 0, 0, .05); +} + +.file-custom:after { + content: "Choose file..."; +} + +.file-custom:before { + position: absolute; + top: -.075rem; + right: -.075rem; + bottom: -.075rem; + z-index: 6; + display: block; + height: 2.5rem; + padding: .5rem 1rem; + line-height: 1.5; + color: #555; + content: "Browse"; + background-color: #eee; + border: .075rem solid #ddd; + border-radius: 0 .25rem .25rem 0; +} + +.file input:focus ~ .file-custom { + -webkit-box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9; + box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: inline-block; +} + +.nav-link:focus, +.nav-link:hover { + text-decoration: none; +} + +.nav-link.disabled { + color: #818a91; +} + +.nav-link.disabled, +.nav-link.disabled:focus, +.nav-link.disabled:hover { + color: #818a91; + cursor: not-allowed; + background-color: transparent; +} + +.nav-inline .nav-link + .nav-link { + margin-left: 1rem; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs:before, +.nav-tabs:after { + display: table; + content: " "; +} + +.nav-tabs:after { + clear: both; +} + +.nav-tabs .nav-item { + float: left; + margin-bottom: -1px; +} + +.nav-tabs .nav-item + .nav-item { + margin-left: .2rem; +} + +.nav-tabs .nav-link { + display: block; + padding: .5em 1em; + border: 1px solid transparent; + border-radius: .25rem .25rem 0 0; +} + +.nav-tabs .nav-link:focus, +.nav-tabs .nav-link:hover { + border-color: #eceeef #eceeef #ddd; +} + +.nav-tabs .nav-link.disabled, +.nav-tabs .nav-link.disabled:focus, +.nav-tabs .nav-link.disabled:hover { + color: #818a91; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-link.active:focus, +.nav-tabs .nav-link.active:hover, +.nav-tabs .nav-item.open .nav-link, +.nav-tabs .nav-item.open .nav-link:focus, +.nav-tabs .nav-item.open .nav-link:hover { + color: #55595c; + background-color: #fff; + border-color: #ddd #ddd transparent; +} + +.nav-pills .nav-item { + float: left; +} + +.nav-pills .nav-item + .nav-item { + margin-left: .2rem; +} + +.nav-pills .nav-link { + display: block; + padding: .5em 1em; + border-radius: .25rem; +} + +.nav-pills .nav-link.active, +.nav-pills .nav-link.active:focus, +.nav-pills .nav-link.active:hover, +.nav-pills .nav-item.open .nav-link, +.nav-pills .nav-item.open .nav-link:focus, +.nav-pills .nav-item.open .nav-link:hover { + color: #fff; + cursor: default; + background-color: #0275d8; +} + +.nav-stacked .nav-item { + display: block; + float: none; +} + +.nav-stacked .nav-item + .nav-item { + margin-top: .2rem; + margin-left: 0; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.navbar { + position: relative; + padding: .5rem 1rem; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +@media (min-width: 34em) { + .navbar { + border-radius: .25rem; + } +} + +.navbar-static-top { + z-index: 1000; +} + +@media (min-width: 34em) { + .navbar-static-top { + border-radius: 0; + } +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +@media (min-width: 34em) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1030; + width: 100%; +} + +@media (min-width: 34em) { + .navbar-sticky-top { + border-radius: 0; + } +} + +.navbar-brand { + float: left; + padding-top: .25rem; + padding-bottom: .25rem; + margin-right: 1rem; + font-size: 1.25rem; +} + +.navbar-brand:focus, +.navbar-brand:hover { + text-decoration: none; +} + +.navbar-brand > img { + display: block; +} + +.navbar-divider { + float: left; + width: 1px; + padding-top: .425rem; + padding-bottom: .425rem; + margin-right: 1rem; + margin-left: 1rem; + overflow: hidden; +} + +.navbar-divider:before { + content: '\00a0'; +} + +.navbar-toggler { + padding: .5rem .75rem; + font-size: 1.25rem; + line-height: 1; + background: none; + border: .0625rem solid transparent; + border-radius: .25rem; +} + +.navbar-toggler:focus, +.navbar-toggler:hover { + text-decoration: none; +} + +@media (min-width: 34em) { + .navbar-toggleable-xs { + display: block !important; + } +} + +@media (min-width: 48em) { + .navbar-toggleable-sm { + display: block !important; + } +} + +.navbar-nav .nav-item { + float: left; +} + +.navbar-nav .nav-link { + display: block; + padding-top: .425rem; + padding-bottom: .425rem; +} + +.navbar-nav .nav-link + .nav-link { + margin-left: 1rem; +} + +.navbar-nav .nav-item + .nav-item { + margin-left: 1rem; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, .8); +} + +.navbar-light .navbar-brand:focus, +.navbar-light .navbar-brand:hover { + color: rgba(0, 0, 0, .8); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, .3); +} + +.navbar-light .navbar-nav .nav-link:focus, +.navbar-light .navbar-nav .nav-link:hover { + color: rgba(0, 0, 0, .6); +} + +.navbar-light .navbar-nav .open > .nav-link, +.navbar-light .navbar-nav .open > .nav-link:focus, +.navbar-light .navbar-nav .open > .nav-link:hover, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .active > .nav-link:focus, +.navbar-light .navbar-nav .active > .nav-link:hover, +.navbar-light .navbar-nav .nav-link.open, +.navbar-light .navbar-nav .nav-link.open:focus, +.navbar-light .navbar-nav .nav-link.open:hover, +.navbar-light .navbar-nav .nav-link.active, +.navbar-light .navbar-nav .nav-link.active:focus, +.navbar-light .navbar-nav .nav-link.active:hover { + color: rgba(0, 0, 0, .8); +} + +.navbar-light .navbar-divider { + background-color: rgba(0, 0, 0, .075); +} + +.navbar-dark .navbar-brand { + color: white; +} + +.navbar-dark .navbar-brand:focus, +.navbar-dark .navbar-brand:hover { + color: white; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, .5); +} + +.navbar-dark .navbar-nav .nav-link:focus, +.navbar-dark .navbar-nav .nav-link:hover { + color: rgba(255, 255, 255, .75); +} + +.navbar-dark .navbar-nav .open > .nav-link, +.navbar-dark .navbar-nav .open > .nav-link:focus, +.navbar-dark .navbar-nav .open > .nav-link:hover, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link:focus, +.navbar-dark .navbar-nav .active > .nav-link:hover, +.navbar-dark .navbar-nav .nav-link.open, +.navbar-dark .navbar-nav .nav-link.open:focus, +.navbar-dark .navbar-nav .nav-link.open:hover, +.navbar-dark .navbar-nav .nav-link.active, +.navbar-dark .navbar-nav .nav-link.active:focus, +.navbar-dark .navbar-nav .nav-link.active:hover { + color: white; +} + +.navbar-dark .navbar-divider { + background-color: rgba(255, 255, 255, .075); +} + +.card { + position: relative; + margin-bottom: .75rem; + border: .0625rem solid #e5e5e5; + border-radius: .25rem; +} + +.card-block { + padding: 1.25rem; +} + +.card-title { + margin-top: 0; + margin-bottom: .75rem; +} + +.card-subtitle { + margin-top: -.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card > .list-group:first-child .list-group-item:first-child { + border-radius: .25rem .25rem 0 0; +} + +.card > .list-group:last-child .list-group-item:last-child { + border-radius: 0 0 .25rem .25rem; +} + +.card-header { + padding: .75rem 1.25rem; + background-color: #f5f5f5; + border-bottom: .0625rem solid #e5e5e5; +} + +.card-header:first-child { + border-radius: .1875rem .1875rem 0 0; +} + +.card-footer { + padding: .75rem 1.25rem; + background-color: #f5f5f5; + border-top: .0625rem solid #e5e5e5; +} + +.card-footer:last-child { + border-radius: 0 0 .1875rem .1875rem; +} + +.card-primary { + background-color: #0275d8; + border-color: #0275d8; +} + +.card-success { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.card-info { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.card-warning { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.card-danger { + background-color: #d9534f; + border-color: #d9534f; +} + +.card-inverse .card-header, +.card-inverse .card-footer { + border-bottom: .075rem solid rgba(255, 255, 255, .2); +} + +.card-inverse .card-header, +.card-inverse .card-footer, +.card-inverse .card-title, +.card-inverse .card-blockquote { + color: #fff; +} + +.card-inverse .card-link, +.card-inverse .card-text, +.card-inverse .card-blockquote > footer { + color: rgba(255, 255, 255, .65); +} + +.card-inverse .card-link:focus, +.card-inverse .card-link:hover { + color: #fff; +} + +.card-blockquote { + padding: 0; + margin-bottom: 0; + border-left: 0; +} + +.card-img { + border-radius: .25rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img-top { + border-radius: .25rem .25rem 0 0; +} + +.card-img-bottom { + border-radius: 0 0 .25rem .25rem; +} + +.card-deck { + display: table; + table-layout: fixed; + border-spacing: 1.25rem 0; +} + +.card-deck .card { + display: table-cell; + width: 1%; + vertical-align: top; +} + +.card-deck-wrapper { + margin-right: -1.25rem; + margin-left: -1.25rem; +} + +.card-group { + display: table; + width: 100%; + table-layout: fixed; +} + +.card-group .card { + display: table-cell; + vertical-align: top; +} + +.card-group .card + .card { + margin-left: 0; + border-left: 0; +} + +.card-group .card:first-child .card-img-top { + border-top-right-radius: 0; +} + +.card-group .card:first-child .card-img-bottom { + border-bottom-right-radius: 0; +} + +.card-group .card:last-child .card-img-top { + border-top-left-radius: 0; +} + +.card-group .card:last-child .card-img-bottom { + border-bottom-left-radius: 0; +} + +.card-group .card:not(:first-child):not(:last-child) { + border-radius: 0; +} + +.card-group .card:not(:first-child):not(:last-child) .card-img-top, +.card-group .card:not(:first-child):not(:last-child) .card-img-bottom { + border-radius: 0; +} + +.card-columns { + -webkit-column-count: 3; + -moz-column-count: 3; + column-count: 3; + -webkit-column-gap: 1.25rem; + -moz-column-gap: 1.25rem; + column-gap: 1.25rem; +} + +.card-columns .card { + display: inline-block; + width: 100%; +} + +.breadcrumb { + padding: .75rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #eceeef; + border-radius: .25rem; +} + +.breadcrumb > li { + display: inline-block; +} + +.breadcrumb > li + li:before { + padding-right: .5rem; + padding-left: .5rem; + color: #818a91; + content: "/ "; +} + +.breadcrumb > .active { + color: #818a91; +} + +.pagination { + display: inline-block; + padding-left: 0; + margin-top: 1rem; + margin-bottom: 1rem; + border-radius: .25rem; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: .5rem .75rem; + margin-left: -1px; + line-height: 1.5; + color: #0275d8; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem; +} + +.pagination > li > a:focus, +.pagination > li > a:hover, +.pagination > li > span:focus, +.pagination > li > span:hover { + color: #014c8c; + background-color: #eceeef; + border-color: #ddd; +} + +.pagination > .active > a, +.pagination > .active > a:focus, +.pagination > .active > a:hover, +.pagination > .active > span, +.pagination > .active > span:focus, +.pagination > .active > span:hover { + z-index: 2; + color: #fff; + cursor: default; + background-color: #0275d8; + border-color: #0275d8; +} + +.pagination > .disabled > span, +.pagination > .disabled > span:focus, +.pagination > .disabled > span:hover, +.pagination > .disabled > a, +.pagination > .disabled > a:focus, +.pagination > .disabled > a:hover { + color: #818a91; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} + +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: .75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.333333; +} + +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: .3rem; + border-bottom-left-radius: .3rem; +} + +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: .3rem; + border-bottom-right-radius: .3rem; +} + +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: .275rem .75rem; + font-size: .85rem; + line-height: 1.5; +} + +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: .2rem; + border-bottom-left-radius: .2rem; +} + +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: .2rem; + border-bottom-right-radius: .2rem; +} + +.pager { + padding-left: 0; + margin-top: 1rem; + margin-bottom: 1rem; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} + +.pager li > a:focus, +.pager li > a:hover { + text-decoration: none; + background-color: #eceeef; +} + +.pager .disabled > a, +.pager .disabled > a:focus, +.pager .disabled > a:hover { + color: #818a91; + cursor: not-allowed; + background-color: #fff; +} + +.pager .disabled > span { + color: #818a91; + cursor: not-allowed; + background-color: #fff; +} + +.pager-next > a, +.pager-next > span { + float: right; +} + +.pager-prev > a, +.pager-prev > span { + float: left; +} + +.label { + display: inline-block; + padding: .25em .4em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25rem; +} + +.label:empty { + display: none; +} + +.btn .label { + position: relative; + top: -1px; +} + +a.label:focus, +a.label:hover { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.label-pill { + padding-right: .6em; + padding-left: .6em; + border-radius: 1rem; +} + +.label-default { + background-color: #818a91; +} + +.label-default[href]:focus, +.label-default[href]:hover { + background-color: #687077; +} + +.label-primary { + background-color: #0275d8; +} + +.label-primary[href]:focus, +.label-primary[href]:hover { + background-color: #025aa5; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href]:focus, +.label-success[href]:hover { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href]:focus, +.label-info[href]:hover { + background-color: #31b0d5; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href]:focus, +.label-warning[href]:hover { + background-color: #ec971f; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href]:focus, +.label-danger[href]:hover { + background-color: #c9302c; +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #eceeef; + border-radius: .3rem; +} + +.jumbotron-hr { + border-top-color: #d0d5d8; +} + +@media (min-width: 34em) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; + border-radius: 0; +} + +.alert { + padding: 15px; + margin-bottom: 1rem; + border: 1px solid transparent; + border-radius: .25rem; +} + +.alert > p, +.alert > ul { + margin-bottom: 0; +} + +.alert > p + p { + margin-top: 5px; +} + +.alert-heading { + margin-top: 0; + color: inherit; +} + +.alert-link { + font-weight: bold; +} + +.alert-dismissible { + padding-right: 35px; +} + +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} + +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d0e9c6; +} + +.alert-success hr { + border-top-color: #c1e2b3; +} + +.alert-success .alert-link { + color: #2b542c; +} + +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bcdff1; +} + +.alert-info hr { + border-top-color: #a6d5ec; +} + +.alert-info .alert-link { + color: #245269; +} + +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faf2cc; +} + +.alert-warning hr { + border-top-color: #f7ecb5; +} + +.alert-warning .alert-link { + color: #66512c; +} + +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebcccc; +} + +.alert-danger hr { + border-top-color: #e4b9b9; +} + +.alert-danger .alert-link { + color: #843534; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: block; + width: 100%; + height: 1rem; + margin-bottom: 1rem; +} + +.progress[value] { + -webkit-appearance: none; + color: #0074d9; + border: 0; + + -moz-appearance: none; + appearance: none; +} + +.progress[value]::-webkit-progress-bar { + background-color: #eee; + border-radius: .25rem; +} + +.progress[value]::-webkit-progress-value::before { + content: attr(value); +} + +.progress[value]::-webkit-progress-value { + background-color: #0074d9; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem; +} + +.progress[value="100"]::-webkit-progress-value { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem; +} + +@media screen and (min-width: 0 \0) { + .progress { + background-color: #eee; + border-radius: .25rem; + } + .progress-bar { + display: inline-block; + height: 1rem; + text-indent: -999rem; + background-color: #0074d9; + border-top-left-radius: .25rem; + border-bottom-left-radius: .25rem; + } + .progress[width^="0"] { + min-width: 2rem; + color: #818a91; + background-color: transparent; + background-image: none; + } + .progress[width="100%"] { + border-top-right-radius: .25rem; + border-bottom-right-radius: .25rem; + } +} + +.progress-striped[value]::-webkit-progress-value { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; +} + +.progress-striped[value]::-moz-progress-bar { + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +@media screen and (min-width: 0 \0) { + .progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 1rem 1rem; + background-size: 1rem 1rem; + } +} + +.progress-animated[value]::-webkit-progress-value { + -webkit-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-animated[value]::-moz-progress-bar { + animation: progress-bar-stripes 2s linear infinite; +} + +@media screen and (min-width: 0 \0) { + .progress-animated .progress-bar-striped { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + } +} + +.progress-success[value]::-webkit-progress-value { + background-color: #5cb85c; +} + +.progress-success[value]::-moz-progress-bar { + background-color: #5cb85c; +} + +@media screen and (min-width: 0 \0) { + .progress-success .progress-bar { + background-color: #5cb85c; + } +} + +.progress-info[value]::-webkit-progress-value { + background-color: #5bc0de; +} + +.progress-info[value]::-moz-progress-bar { + background-color: #5bc0de; +} + +@media screen and (min-width: 0 \0) { + .progress-info .progress-bar { + background-color: #5bc0de; + } +} + +.progress-warning[value]::-webkit-progress-value { + background-color: #f0ad4e; +} + +.progress-warning[value]::-moz-progress-bar { + background-color: #f0ad4e; +} + +@media screen and (min-width: 0 \0) { + .progress-warning .progress-bar { + background-color: #f0ad4e; + } +} + +.progress-danger[value]::-webkit-progress-value { + background-color: #d9534f; +} + +.progress-danger[value]::-moz-progress-bar { + background-color: #d9534f; +} + +@media screen and (min-width: 0 \0) { + .progress-danger .progress-bar { + background-color: #d9534f; + } +} + +.media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media-body { + width: 10000px; +} + +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} + +.media-middle { + vertical-align: middle; +} + +.media-bottom { + vertical-align: bottom; +} + +.media-object { + display: block; +} + +.media-object.img-thumbnail { + max-width: none; +} + +.media-right { + padding-left: 10px; +} + +.media-left { + padding-right: 10px; +} + +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.media-list { + padding-left: 0; + list-style: none; +} + +.list-group { + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item { + position: relative; + display: block; + padding: .75rem 1.25rem; + margin-bottom: -.0625rem; + background-color: #fff; + border: .0625rem solid #ddd; +} + +.list-group-item:first-child { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem; +} + +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: .25rem; + border-bottom-left-radius: .25rem; +} + +.list-group-flush .list-group-item { + border-width: .0625rem 0; + border-radius: 0; +} + +a.list-group-item, +button.list-group-item { + width: 100%; + color: #555; + text-align: inherit; +} + +a.list-group-item .list-group-item-heading, +button.list-group-item .list-group-item-heading { + color: #333; +} + +a.list-group-item:focus, +a.list-group-item:hover, +button.list-group-item:focus, +button.list-group-item:hover { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} + +.list-group-item.disabled, +.list-group-item.disabled:focus, +.list-group-item.disabled:hover { + color: #818a91; + cursor: not-allowed; + background-color: #eceeef; +} + +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading { + color: inherit; +} + +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text { + color: #818a91; +} + +.list-group-item.active, +.list-group-item.active:focus, +.list-group-item.active:hover { + z-index: 2; + color: #fff; + background-color: #0275d8; + border-color: #0275d8; +} + +.list-group-item.active .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > .small { + color: inherit; +} + +.list-group-item.active .list-group-item-text, +.list-group-item.active:focus .list-group-item-text, +.list-group-item.active:hover .list-group-item-text { + color: #a8d6fe; +} + +.list-group-item-state { + color: #3c763d; + background-color: #dff0d8; +} + +a.list-group-item-state, +button.list-group-item-state { + color: #3c763d; +} + +a.list-group-item-state .list-group-item-heading, +button.list-group-item-state .list-group-item-heading { + color: inherit; +} + +a.list-group-item-state:focus, +a.list-group-item-state:hover, +button.list-group-item-state:focus, +button.list-group-item-state:hover { + color: #3c763d; + background-color: #d0e9c6; +} + +a.list-group-item-state.active, +a.list-group-item-state.active:focus, +a.list-group-item-state.active:hover, +button.list-group-item-state.active, +button.list-group-item-state.active:focus, +button.list-group-item-state.active:hover { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} + +.list-group-item-state { + color: #31708f; + background-color: #d9edf7; +} + +a.list-group-item-state, +button.list-group-item-state { + color: #31708f; +} + +a.list-group-item-state .list-group-item-heading, +button.list-group-item-state .list-group-item-heading { + color: inherit; +} + +a.list-group-item-state:focus, +a.list-group-item-state:hover, +button.list-group-item-state:focus, +button.list-group-item-state:hover { + color: #31708f; + background-color: #c4e3f3; +} + +a.list-group-item-state.active, +a.list-group-item-state.active:focus, +a.list-group-item-state.active:hover, +button.list-group-item-state.active, +button.list-group-item-state.active:focus, +button.list-group-item-state.active:hover { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} + +.list-group-item-state { + color: #8a6d3b; + background-color: #fcf8e3; +} + +a.list-group-item-state, +button.list-group-item-state { + color: #8a6d3b; +} + +a.list-group-item-state .list-group-item-heading, +button.list-group-item-state .list-group-item-heading { + color: inherit; +} + +a.list-group-item-state:focus, +a.list-group-item-state:hover, +button.list-group-item-state:focus, +button.list-group-item-state:hover { + color: #8a6d3b; + background-color: #faf2cc; +} + +a.list-group-item-state.active, +a.list-group-item-state.active:focus, +a.list-group-item-state.active:hover, +button.list-group-item-state.active, +button.list-group-item-state.active:focus, +button.list-group-item-state.active:hover { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} + +.list-group-item-state { + color: #a94442; + background-color: #f2dede; +} + +a.list-group-item-state, +button.list-group-item-state { + color: #a94442; +} + +a.list-group-item-state .list-group-item-heading, +button.list-group-item-state .list-group-item-heading { + color: inherit; +} + +a.list-group-item-state:focus, +a.list-group-item-state:hover, +button.list-group-item-state:focus, +button.list-group-item-state:hover { + color: #a94442; + background-color: #ebcccc; +} + +a.list-group-item-state.active, +a.list-group-item-state.active:focus, +a.list-group-item-state.active:hover, +button.list-group-item-state.active, +button.list-group-item-state.active:focus, +button.list-group-item-state.active:hover { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} + +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9 { + padding-bottom: 42.857143%; +} + +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} + +.embed-responsive-4by3 { + padding-bottom: 75%; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .2; +} + +.close:focus, +.close:hover { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: .5; +} + +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} + +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} + +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} + +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.in { + opacity: .5; +} + +.modal-header { + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header:before, +.modal-header:after { + display: table; + content: " "; +} + +.modal-header:after { + clear: both; +} + +.modal-header .close { + margin-top: -2px; +} + +.modal-title { + margin: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + padding: 15px; +} + +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 34em) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-sm { + width: 300px; + } +} + +@media (min-width: 48em) { + .modal-lg { + width: 900px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: .85rem; + font-style: normal; + font-weight: normal; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + opacity: 0; + + line-break: auto; +} + +.tooltip.in { + opacity: .9; +} + +.tooltip.tooltip-top, +.tooltip.bs-tether-element-attached-bottom { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.tooltip-top .tooltip-arrow, +.tooltip.bs-tether-element-attached-bottom .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} + +.tooltip.tooltip-right, +.tooltip.bs-tether-element-attached-left { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.tooltip-right .tooltip-arrow, +.tooltip.bs-tether-element-attached-left .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} + +.tooltip.tooltip-bottom, +.tooltip.bs-tether-element-attached-top { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.tooltip-bottom .tooltip-arrow, +.tooltip.bs-tether-element-attached-top .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} + +.tooltip.tooltip-left, +.tooltip.bs-tether-element-attached-right { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip.tooltip-left .tooltip-arrow, +.tooltip.bs-tether-element-attached-right .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + background-color: #000; + border-radius: .25rem; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: .85rem; + font-style: normal; + font-weight: normal; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + word-wrap: normal; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: .3rem; + + line-break: auto; +} + +.popover.popover-top, +.popover.bs-tether-element-attached-bottom { + margin-top: -10px; +} + +.popover.popover-top .popover-arrow, +.popover.bs-tether-element-attached-bottom .popover-arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} + +.popover.popover-top .popover-arrow:after, +.popover.bs-tether-element-attached-bottom .popover-arrow:after { + bottom: 1px; + margin-left: -10px; + content: ""; + border-top-color: #fff; + border-bottom-width: 0; +} + +.popover.popover-right, +.popover.bs-tether-element-attached-left { + margin-left: 10px; +} + +.popover.popover-right .popover-arrow, +.popover.bs-tether-element-attached-left .popover-arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} + +.popover.popover-right .popover-arrow:after, +.popover.bs-tether-element-attached-left .popover-arrow:after { + bottom: -10px; + left: 1px; + content: ""; + border-right-color: #fff; + border-left-width: 0; +} + +.popover.popover-bottom, +.popover.bs-tether-element-attached-top { + margin-top: 10px; +} + +.popover.popover-bottom .popover-arrow, +.popover.bs-tether-element-attached-top .popover-arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: rgba(0, 0, 0, .25); +} + +.popover.popover-bottom .popover-arrow:after, +.popover.bs-tether-element-attached-top .popover-arrow:after { + top: 1px; + margin-left: -10px; + content: ""; + border-top-width: 0; + border-bottom-color: #fff; +} + +.popover.popover-left, +.popover.bs-tether-element-attached-right { + margin-left: -10px; +} + +.popover.popover-left .popover-arrow, +.popover.bs-tether-element-attached-right .popover-arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: rgba(0, 0, 0, .25); +} + +.popover.popover-left .popover-arrow:after, +.popover.bs-tether-element-attached-right .popover-arrow:after { + right: 1px; + bottom: -10px; + content: ""; + border-right-width: 0; + border-left-color: #fff; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: -.7rem -.7rem 0 0; +} + +.popover-content { + padding: 9px 14px; +} + +.popover-arrow, +.popover-arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover-arrow { + border-width: 11px; +} + +.popover-arrow:after { + content: ""; + border-width: 10px; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .carousel-item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} + +.carousel-inner > .carousel-item > img, +.carousel-inner > .carousel-item > a > img { + line-height: 1; +} + +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .carousel-item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + .carousel-inner > .carousel-item.next, + .carousel-inner > .carousel-item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .carousel-item.prev, + .carousel-inner > .carousel-item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .carousel-item.next.left, + .carousel-inner > .carousel-item.prev.right, + .carousel-inner > .carousel-item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + opacity: .5; +} + +.carousel-control.left { + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} + +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} + +.carousel-control:focus, +.carousel-control:hover { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; +} + +.carousel-control .icon-prev, +.carousel-control .icon-next { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; + line-height: 1; +} + +.carousel-control .icon-prev { + left: 50%; + margin-left: -10px; +} + +.carousel-control .icon-next { + right: 50%; + margin-right: -10px; +} + +.carousel-control .icon-prev:before { + content: "\2039"; +} + +.carousel-control .icon-next:before { + content: "\203a"; +} + +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: transparent; + border: 1px solid #fff; + border-radius: 10px; +} + +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} + +.carousel-caption .btn { + text-shadow: none; +} + +@media (min-width: 34em) { + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} + +.pull-right { + float: right !important; +} + +.pull-left { + float: left !important; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} + +[hidden] { + display: none !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: "0/0" a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +.text-justify { + text-align: justify; +} + +.text-nowrap { + white-space: nowrap; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-xs-left { + text-align: left; +} + +.text-xs-right { + text-align: right; +} + +.text-xs-center { + text-align: center; +} + +@media (min-width: 34em) { + .text-sm-left { + text-align: left; + } + .text-sm-right { + text-align: right; + } + .text-sm-center { + text-align: center; + } +} + +@media (min-width: 48em) { + .text-md-left { + text-align: left; + } + .text-md-right { + text-align: right; + } + .text-md-center { + text-align: center; + } +} + +@media (min-width: 62em) { + .text-lg-left { + text-align: left; + } + .text-lg-right { + text-align: right; + } + .text-lg-center { + text-align: center; + } +} + +@media (min-width: 75em) { + .text-xl-left { + text-align: left; + } + .text-xl-right { + text-align: right; + } + .text-xl-center { + text-align: center; + } +} + +.text-lowercase { + text-transform: lowercase; +} + +.text-uppercase { + text-transform: uppercase; +} + +.text-capitalize { + text-transform: capitalize; +} + +.text-muted { + color: #818a91; +} + +.text-primary { + color: #0275d8; +} + +a.text-primary:focus, +a.text-primary:hover { + color: #025aa5; +} + +.text-success { + color: #5cb85c; +} + +a.text-success:focus, +a.text-success:hover { + color: #449d44; +} + +.text-info { + color: #5bc0de; +} + +a.text-info:focus, +a.text-info:hover { + color: #31b0d5; +} + +.text-warning { + color: #f0ad4e; +} + +a.text-warning:focus, +a.text-warning:hover { + color: #ec971f; +} + +.text-danger { + color: #d9534f; +} + +a.text-danger:focus, +a.text-danger:hover { + color: #c9302c; +} + +.bg-inverse { + color: #eceeef; + background-color: #373a3c; +} + +.bg-faded { + background-color: #f7f7f9; +} + +.bg-primary { + color: #fff; + background-color: #0275d8; +} + +a.bg-primary:focus, +a.bg-primary:hover { + background-color: #025aa5; +} + +.bg-success { + color: #fff; + background-color: #5cb85c; +} + +a.bg-success:focus, +a.bg-success:hover { + background-color: #449d44; +} + +.bg-info { + color: #fff; + background-color: #5bc0de; +} + +a.bg-info:focus, +a.bg-info:hover { + background-color: #31b0d5; +} + +.bg-warning { + color: #fff; + background-color: #f0ad4e; +} + +a.bg-warning:focus, +a.bg-warning:hover { + background-color: #ec971f; +} + +.bg-danger { + color: #fff; + background-color: #d9534f; +} + +a.bg-danger:focus, +a.bg-danger:hover { + background-color: #c9302c; +} + +.m-a-0 { + margin: 0 !important; +} + +.m-t-0 { + margin-top: 0 !important; +} + +.m-r-0 { + margin-right: 0 !important; +} + +.m-b-0 { + margin-bottom: 0 !important; +} + +.m-l-0 { + margin-left: 0 !important; +} + +.m-x-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.m-y-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.m-a { + margin: 1rem !important; +} + +.m-t { + margin-top: 1rem !important; +} + +.m-r { + margin-right: 1rem !important; +} + +.m-b { + margin-bottom: 1rem !important; +} + +.m-l { + margin-left: 1rem !important; +} + +.m-x { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.m-y { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.m-x-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.m-a-md { + margin: 1.5rem !important; +} + +.m-t-md { + margin-top: 1.5rem !important; +} + +.m-r-md { + margin-right: 1.5rem !important; +} + +.m-b-md { + margin-bottom: 1.5rem !important; +} + +.m-l-md { + margin-left: 1.5rem !important; +} + +.m-x-md { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.m-y-md { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.m-a-lg { + margin: 3rem !important; +} + +.m-t-lg { + margin-top: 3rem !important; +} + +.m-r-lg { + margin-right: 3rem !important; +} + +.m-b-lg { + margin-bottom: 3rem !important; +} + +.m-l-lg { + margin-left: 3rem !important; +} + +.m-x-lg { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.m-y-lg { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.p-a-0 { + padding: 0 !important; +} + +.p-t-0 { + padding-top: 0 !important; +} + +.p-r-0 { + padding-right: 0 !important; +} + +.p-b-0 { + padding-bottom: 0 !important; +} + +.p-l-0 { + padding-left: 0 !important; +} + +.p-x-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.p-y-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.p-a { + padding: 1rem !important; +} + +.p-t { + padding-top: 1rem !important; +} + +.p-r { + padding-right: 1rem !important; +} + +.p-b { + padding-bottom: 1rem !important; +} + +.p-l { + padding-left: 1rem !important; +} + +.p-x { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.p-y { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.p-a-md { + padding: 1.5rem !important; +} + +.p-t-md { + padding-top: 1.5rem !important; +} + +.p-r-md { + padding-right: 1.5rem !important; +} + +.p-b-md { + padding-bottom: 1.5rem !important; +} + +.p-l-md { + padding-left: 1.5rem !important; +} + +.p-x-md { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.p-y-md { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.p-a-lg { + padding: 3rem !important; +} + +.p-t-lg { + padding-top: 3rem !important; +} + +.p-r-lg { + padding-right: 3rem !important; +} + +.p-b-lg { + padding-bottom: 3rem !important; +} + +.p-l-lg { + padding-left: 3rem !important; +} + +.p-x-lg { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.p-y-lg { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pos-f-t { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.hidden-xs-up { + display: none !important; +} + +@media (max-width: 33.9em) { + .hidden-xs-down { + display: none !important; + } +} + +@media (min-width: 34em) { + .hidden-sm-up { + display: none !important; + } +} + +@media (max-width: 47.9em) { + .hidden-sm-down { + display: none !important; + } +} + +@media (min-width: 48em) { + .hidden-md-up { + display: none !important; + } +} + +@media (max-width: 61.9em) { + .hidden-md-down { + display: none !important; + } +} + +@media (min-width: 62em) { + .hidden-lg-up { + display: none !important; + } +} + +@media (max-width: 74.9em) { + .hidden-lg-down { + display: none !important; + } +} + +@media (min-width: 75em) { + .hidden-xl-up { + display: none !important; + } +} + +.hidden-xl-down { + display: none !important; +} + +.visible-print-block { + display: none !important; +} + +@media print { + .visible-print-block { + display: block !important; + } +} + +.visible-print-inline { + display: none !important; +} + +@media print { + .visible-print-inline { + display: inline !important; + } +} + +.visible-print-inline-block { + display: none !important; +} + +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} + +@media print { + .hidden-print .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/non_logged_in_area/static/bootstrap4/css/bootstrap.css.map b/non_logged_in_area/static/bootstrap4/css/bootstrap.css.map new file mode 100644 index 00000000..8cbc2735 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","../../scss/_normalize.scss","../../scss/_print.scss","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_hover.scss","../../scss/mixins/_tab-focus.scss","../../scss/_type.scss","../../scss/mixins/_clearfix.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_mixins.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_grid-framework.scss","../../scss/_tables.scss","../../scss/mixins/_table-row.scss","../../scss/_forms.scss","../../scss/mixins/_forms.scss","../../scss/_buttons.scss","../../scss/mixins/_buttons.scss","../../scss/_animation.scss","../../scss/_dropdown.scss","../../scss/mixins/_nav-divider.scss","../../scss/mixins/_reset-filter.scss","../../scss/_button-group.scss","../../scss/mixins/_border-radius.scss","../../scss/_input-group.scss","../../scss/_custom-forms.scss","../../scss/_nav.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_pager.scss","../../scss/_labels.scss","../../scss/mixins/_label.scss","../../scss/_jumbotron.scss","../../scss/_alert.scss","../../scss/mixins/_alert.scss","../../scss/_progress.scss","../../scss/mixins/_gradients.scss","../../scss/mixins/_progress.scss","../../scss/_media.scss","../../scss/_list-group.scss","../../scss/mixins/_list-group.scss","../../scss/_responsive-embed.scss","../../scss/_close.scss","../../scss/_modal.scss","../../scss/_tooltip.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_carousel.scss","../../scss/_utilities.scss","../../scss/mixins/_center-block.scss","../../scss/mixins/_pulls.scss","../../scss/mixins/_screen-reader.scss","../../scss/mixins/_hide-text.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_background-variant.scss","../../scss/_utilities-spacing.scss","../../scss/_utilities-responsive.scss","../../scss/mixins/_responsive-visibility.scss"],"names":[],"mappings":"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;CEfrB;;AAD6B;EFgBvC,WAA+B;CEfrB;;AAD6B;EFgBvC,kBAA+B;CEfrB;;AAD6B;EFgBvC,kBAA+B;CEfrB;;AAD6B;EFgBvC,YAA+B;CEfrB;;AAD6B;EFYvC,WAAsD;CEX5C;;AAD6B;EFYvC,gBAA8B;CEXpB;;AAD6B;EFYvC,iBAA8B;CEXpB;;AAD6B;EFYvC,UAA8B;CEXpB;;AAD6B;EFYvC,iBAA8B;CEXpB;;AAD6B;EFYvC,iBAA8B;CEXpB;;AAD6B;EFYvC,UAA8B;CEXpB;;AAD6B;EFYvC,iBAA8B;CEXpB;;AAD6B;EFYvC,iBAA8B;CEXpB;;AAD6B;EFYvC,UAA8B;CEXpB;;AAD6B;EFYvC,iBAA8B;CEXpB;;AAD6B;EFYvC,iBAA8B;CEXpB;;AAD6B;EFYvC,WAA8B;CEXpB;;AAD6B;EFQvC,gBAAuB;CEPb;;AAD6B;EFQvC,uBAAuB;CEPb;;AAD6B;EFQvC,wBAAuB;CEPb;;AAD6B;EFQvC,iBAAuB;CEPb;;AAD6B;EFQvC,wBAAuB;CEPb;;AAD6B;EFQvC,wBAAuB;CEPb;;AAD6B;EFQvC,iBAAuB;CEPb;;AAD6B;EFQvC,wBAAuB;CEPb;;AAD6B;EFQvC,wBAAuB;CEPb;;AAD6B;EFQvC,iBAAuB;CEPb;;AAD6B;EFQvC,wBAAuB;CEPb;;AAD6B;EFQvC,wBAAuB;CEPb;;AAD6B;EFQvC,kBAAuB;CEPb;;ADQR;ECxBkE;IAK5D,YAAY;GAJd;EAO+B;IFUnC,iBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,YAAiB;GETX;EAM+B;IFgBvC,YAAuD;GEf7C;EAD6B;IFgBvC,iBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,YAA+B;GEfrB;EAD6B;IFYvC,WAAsD;GEX5C;EAD6B;IFYvC,gBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,WAA8B;GEXpB;EAD6B;IFQvC,gBAAuB;GEPb;EAD6B;IFQvC,uBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,kBAAuB;GEPb;ChB2mCX;;AenmCG;ECxBkE;IAK5D,YAAY;GAJd;EAO+B;IFUnC,iBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,YAAiB;GETX;EAM+B;IFgBvC,YAAuD;GEf7C;EAD6B;IFgBvC,iBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,YAA+B;GEfrB;EAD6B;IFYvC,WAAsD;GEX5C;EAD6B;IFYvC,gBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,WAA8B;GEXpB;EAD6B;IFQvC,gBAAuB;GEPb;EAD6B;IFQvC,uBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,kBAAuB;GEPb;ChB0wCX;;AelwCG;ECxBkE;IAK5D,YAAY;GAJd;EAO+B;IFUnC,iBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,YAAiB;GETX;EAM+B;IFgBvC,YAAuD;GEf7C;EAD6B;IFgBvC,iBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,YAA+B;GEfrB;EAD6B;IFYvC,WAAsD;GEX5C;EAD6B;IFYvC,gBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,WAA8B;GEXpB;EAD6B;IFQvC,gBAAuB;GEPb;EAD6B;IFQvC,uBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,kBAAuB;GEPb;ChBy6CX;;Aej6CG;ECxBkE;IAK5D,YAAY;GAJd;EAO+B;IFUnC,iBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,WAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,kBAAiB;GETX;EAD6B;IFUnC,YAAiB;GETX;EAM+B;IFgBvC,YAAuD;GEf7C;EAD6B;IFgBvC,iBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,WAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,kBAA+B;GEfrB;EAD6B;IFgBvC,YAA+B;GEfrB;EAD6B;IFYvC,WAAsD;GEX5C;EAD6B;IFYvC,gBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,UAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,iBAA8B;GEXpB;EAD6B;IFYvC,WAA8B;GEXpB;EAD6B;IFQvC,gBAAuB;GEPb;EAD6B;IFQvC,uBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,iBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,wBAAuB;GEPb;EAD6B;IFQvC,kBAAuB;GEPb;ChBwkDX;;AiBzmDD;EACE,YAAY;EACZ,gBAAgB;EAChB,oBbmD+B;CatDzB;;AAMN;;EACE,iBb4LkC;Ea3LlC,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lB4C+B;EkB3C/B,iBlBiE8B;EOpJ5B,uBPkL2B;CiBpLzB;;AAiBD;;;;;;EfjBH,qBAAqB;EAErB,2CAA2C;EAC3C,qBAAqB;CecV;;AhBDR;;EgBOD,sBAAsB;ChBPb;;AgBSV;EACC,sBAAsB;CADf;;AAKR;;EACC,uBAAuB;EACvB,WAAW;CAFH;;AAQS;;;EACjB,oBjByPwC;EiBxPxC,aAAa;CAFO;;AASJ;;EAClB,qBAAqB;CADG;;AAS1B;ECtDE,YlBoNmC;EkBnNnC,0BlB2BiC;EkB1BjC,sBlB0BiC;CiB0BrB;;ACzCH;;;;;EACP,YlBsMiC;EkBrMjC,0BATwB;EAUpB,sBATgB;CAMK;;AjBVxB;EiBgBD,YlBiMiC;EkBhMjC,0BAdwB;EAepB,sBAdgB;CjBJX;;AiBsBF;;;EAEP,uBAAuB;CAFE;;AASxB;;;;;;EACC,0BlBP6B;EkBQzB,sBlBRyB;CkBMtB;;AjB/BR;;;EiBoCC,0BlBX6B;EkBYzB,sBlBZyB;CCzBtB;;AgBsDb;ECzDE,elBsBiC;EkBrBjC,uBlBwNmC;EkBvNnC,mBlBwNmC;CiBjKrB;;AC5CL;;;;;EACP,elBQ+B;EkBP/B,0BATwB;EAUpB,sBATgB;CAMK;;AjBVxB;EiBgBD,elBG+B;EkBF/B,0BAdwB;EAepB,sBAdgB;CjBJX;;AiBsBF;;;EAEP,uBAAuB;CAFE;;AASxB;;;;;;EACC,uBlBsL+B;EkBrL3B,mBlBsL2B;CkBxLxB;;AjB/BR;;;EiBoCC,uBlBkL+B;EkBjL3B,mBlBkL2B;CCvNxB;;AgByDb;EC5DE,YlB4NmC;EkB3NnC,0BlB6BiC;EkB5BjC,sBlB4BiC;CiB8BxB;;AC/CA;;;;;EACP,YlB8MiC;EkB7MjC,0BATwB;EAUpB,sBATgB;CAMK;;AjBVxB;EiBgBD,YlByMiC;EkBxMjC,0BAdwB;EAepB,sBAdgB;CjBJX;;AiBsBF;;;EAEP,uBAAuB;CAFE;;AASxB;;;;;;EACC,0BlBL6B;EkBMzB,sBlBNyB;CkBItB;;AjB/BR;;;EiBoCC,0BlBT6B;EkBUzB,sBlBVyB;CC3BtB;;AgB4Db;EC/DE,YlBgOmC;EkB/NnC,0BlB4BiC;EkB3BjC,sBlB2BiC;CiBkCrB;;AClDH;;;;;EACP,YlBkNiC;EkBjNjC,0BATwB;EAUpB,sBATgB;CAMK;;AjBVxB;EiBgBD,YlB6MiC;EkB5MjC,0BAdwB;EAepB,sBAdgB;CjBJX;;AiBsBF;;;EAEP,uBAAuB;CAFE;;AASxB;;;;;;EACC,0BlBN6B;EkBOzB,sBlBPyB;CkBKtB;;AjB/BR;;;EiBoCC,0BlBV6B;EkBWzB,sBlBXyB;CC1BtB;;AgB+Db;EClEE,YlBoOmC;EkBnOnC,0BlB8BiC;EkB7BjC,sBlB6BiC;CiBmCrB;;ACrDH;;;;;EACP,YlBsNiC;EkBrNjC,0BATwB;EAUpB,sBATgB;CAMK;;AjBVxB;EiBgBD,YlBiNiC;EkBhNjC,0BAdwB;EAepB,sBAdgB;CjBJX;;AiBsBF;;;EAEP,uBAAuB;CAFE;;AASxB;;;;;;EACC,0BlBJ6B;EkBKzB,sBlBLyB;CkBGtB;;AjB/BR;;;EiBoCC,0BlBR6B;EkBSzB,sBlBTyB;CC5BtB;;AgBkEb;ECrEE,YlBwOmC;EkBvOnC,0BlB+BiC;EkB9BjC,sBlB8BiC;CiBqCtB;;ACxDF;;;;;EACP,YlB0NiC;EkBzNjC,0BATwB;EAUpB,sBATgB;CAMK;;AjBVxB;EiBgBD,YlBqNiC;EkBpNjC,0BAdwB;EAepB,sBAdgB;CjBJX;;AiBsBF;;;EAEP,uBAAuB;CAFE;;AASxB;;;;;;EACC,0BlBH6B;EkBIzB,sBlBJyB;CkBEtB;;AjB/BR;;;EiBoCC,0BlBP6B;EkBQzB,sBlBRyB;CC7BtB;;AgBuEb;EC5BE,elBlBiC;EkBmBjC,uBAAuB;EACvB,8BAA8B;EAC9B,sBlBrBiC;CiB8Cb;;ACnBX;;;;;EACP,YAAY;EACZ,0BlB7B+B;EkB8B3B,sBlB9B2B;CkB2BN;;AjBpDxB;EiB0DD,YAAY;EACZ,0BlBlC+B;EkBmC3B,sBlBnC2B;CCzBtB;;AiBmER;;;;;;EACC,sBAAqB;CADd;;AjBnER;;;EiBuEC,sBAAqB;CjBvEd;;AgB0Eb;EC/BE,YlB4KmC;EkB3KnC,uBAAuB;EACvB,8BAA8B;EAC9B,mBlByKmC;CiB7Ib;;ACtBb;;;;;EACP,YAAY;EACZ,uBlBiKiC;EkBhK7B,mBlBgK6B;CkBnKR;;AjBpDxB;EiB0DD,YAAY;EACZ,uBlB4JiC;EkB3J7B,mBlB2J6B;CCvNxB;;AiBmER;;;;;;EACC,oBAAqB;CADd;;AjBnER;;;EiBuEC,oBAAqB;CjBvEd;;AgB6Eb;EClCE,elBhBiC;EkBiBjC,uBAAuB;EACvB,8BAA8B;EAC9B,sBlBnBiC;CiBkDhB;;ACzBR;;;;;EACP,YAAY;EACZ,0BlB3B+B;EkB4B3B,sBlB5B2B;CkByBN;;AjBpDxB;EiB0DD,YAAY;EACZ,0BlBhC+B;EkBiC3B,sBlBjC2B;CC3BtB;;AiBmER;;;;;;EACC,sBAAqB;CADd;;AjBnER;;;EiBuEC,sBAAqB;CjBvEd;;AgBgFb;ECrCE,elBjBiC;EkBkBjC,uBAAuB;EACvB,8BAA8B;EAC9B,sBlBpBiC;CiBsDb;;AC5BX;;;;;EACP,YAAY;EACZ,0BlB5B+B;EkB6B3B,sBlB7B2B;CkB0BN;;AjBpDxB;EiB0DD,YAAY;EACZ,0BlBjC+B;EkBkC3B,sBlBlC2B;CC1BtB;;AiBmER;;;;;;EACC,sBAAqB;CADd;;AjBnER;;;EiBuEC,sBAAqB;CjBvEd;;AgBmFb;ECxCE,elBfiC;EkBgBjC,uBAAuB;EACvB,8BAA8B;EAC9B,sBlBlBiC;CiBuDb;;AC/BX;;;;;EACP,YAAY;EACZ,0BlB1B+B;EkB2B3B,sBlB3B2B;CkBwBN;;AjBpDxB;EiB0DD,YAAY;EACZ,0BlB/B+B;EkBgC3B,sBlBhC2B;CC5BtB;;AiBmER;;;;;;EACC,sBAAqB;CADd;;AjBnER;;;EiBuEC,sBAAqB;CjBvEd;;AgBsFb;EC3CE,elBdiC;EkBejC,uBAAuB;EACvB,8BAA8B;EAC9B,sBlBjBiC;CiByDd;;AClCV;;;;;EACP,YAAY;EACZ,0BlBzB+B;EkB0B3B,sBlB1B2B;CkBuBN;;AjBpDxB;EiB0DD,YAAY;EACZ,0BlB9B+B;EkB+B3B,sBlB/B2B;CC7BtB;;AiBmER;;;;;;EACC,sBAAqB;CADd;;AjBnER;;;EiBuEC,sBAAqB;CjBvEd;;AgBgGb;EACE,oBAAoB;EACpB,ejBzEiC;EiB0EjC,iBA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,uBPkL2B;C8BxLlB;;AAOT;EACA,sBAAsB;CADlB;;AAGA;EAEF,qBAAqB;EACrB,oBAAoB;EACpB,e9BgB6B;E8Bf7B,cAAyC;CAL9B;;AASb;EACA,e9BU+B;C8BXtB;;ACnBb;EACE,sBAAsB;EACtB,gBAAgB;EAChB,iB/BuD+B;E+BtD/B,oB/BsD+B;EOpD7B,uBPkL2B;C+BxLlB;;AAOT;EACA,gBAAgB;CADZ;;AAIF;;EACA,mBAAmB;EACnB,YAAY;EACZ,wB/B8WsC;E+B7WtC,kBAAkB;EAClB,iB/B0I0B;E+BzI1B,e/BiB6B;E+BhB7B,sBAAsB;EACtB,uB/BkXqC;E+BjXrC,uB/BkXqC;C+B3X/B;;AAaJ;;EACA,eAAe;EPPrB,mCxBsK6B;EwBrK1B,gCxBqK0B;C+BhKjB;;AAON;;EPvBN,oCxBgL6B;EwB/K1B,iCxB+K0B;C+BzJjB;;A9BXT;;;;E8BoBC,e/BqC6B;E+BpC7B,0B/BV6B;E+BW7B,mB/BgWqC;CCtX9B;;AAiBR;;;;;;E8BYC,WAAW;EACX,Y/B0VqC;E+BzVrC,gBAAgB;EAChB,0B/BlB6B;E+BmB7B,sB/BnB6B;CCGtB;;AAAR;;;;;;E8BwBG,e/B/B2B;E+BgC3B,oB/BsOoC;E+BrOpC,uB/BkVmC;E+BjVnC,mB/BkVmC;CC7W9B;;A+BhCP;;EACA,wBhC0XsC;EgCzXtC,mBhC8H8B;EgC7H9B,sBhC6KqB;CgChLf;;AAOJ;;ERMN,kCxBuK4B;EwBtKzB,+BxBsKyB;CgC7KhB;;AAMN;;ERVN,mCxBiL4B;EwBhLzB,gCxBgLyB;CgCvKhB;;AAbR;;EACA,0BhCwXsC;EgCvXtC,mBhC+H6B;EgC9H7B,iBhC8KsB;CgCjLhB;;AAOJ;;ERMN,kCxBwK4B;EwBvKzB,+BxBuKyB;CgC9KhB;;AAMN;;ERVN,mCxBkL4B;EwBjLzB,gCxBiLyB;CgCxKhB;;AClBd;EACE,gBAAgB;EAChB,iBjCwD+B;EiCvD/B,oBjCuD+B;EiCtD/B,mBAAmB;EACnB,iBAAiB;CALX;;A7BcL;;EACC,aAAa;EACb,eAAe;CAFR;;AAIR;EACC,YAAY;CADL;;A6BVT;EACE,gBAAgB;CADd;;AAIA;;EACA,sBAAsB;EACtB,kBAAiB;EACjB,uBjCsXqC;EiCrXrC,uBjCsXqC;EiCrXrC,oBjCwYqC;CiC7Y/B;;AhCQP;;EgCEG,sBAAsB;EACtB,0BjCQ2B;CCXtB;;AAiBR;;;EgCNG,ejCD2B;EiCE3B,oBjCoQoC;EiCnQpC,uBjCoWmC;CChW9B;;AgCDP;EACA,ejCP6B;EiCQ7B,oBjC8PsC;EiC7PtC,uBjC8VqC;CiCjW/B;;AAUR;;EACA,aAAa;CADP;;AAON;;EACA,YAAY;CADN;;AChDV;EACE,sBAAsB;EACtB,sBAAmB;EACnB,eAAe;EACf,kBAAkB;EAClB,eAAe;EACf,YlCwdgC;EkCvdhC,mBAAmB;EACnB,oBAAoB;EACpB,yBAAyB;E3BRvB,uBPkL2B;CkCnLvB;;AAaL;EACC,cAAc;CADP;;AAKJ;EACH,mBAAmB;EACnB,UAAU;CAFJ;;AjCHL;;EiCYD,YlCoc8B;EkCnc9B,sBAAsB;EACtB,gBAAgB;CjCdP;;AiCsBb;EACE,mBAAmB;EACnB,oBAAoB;EACpB,oBAAoB;CAHT;;AAWb;EClDE,0BnC2BiC;CkCuBnB;;AjCjCX;;EkCbC,0BAAwB;ClCajB;;AiCqCb;ECtDE,0BnC+BiC;CkCuBnB;;AjCrCX;;EkCbC,0BAAwB;ClCajB;;AiCyCb;EC1DE,0BnCgCiC;CkC0BnB;;AjCzCX;;EkCbC,0BAAwB;ClCajB;;AiC6Cb;EC9DE,0BnCiCiC;CkC6BtB;;AjC7CR;;EkCbC,0BAAwB;ClCajB;;AiCiDb;EClEE,0BnCkCiC;CkCgCnB;;AjCjDX;;EkCbC,0BAAwB;ClCajB;;AiCqDb;ECtEE,0BnCmCiC;CkCmCpB;;AjCrDV;;EkCbC,0BAAwB;ClCajB;;AmCpBb;EACE,mBAA+C;EAC/C,oBpCmamC;EoClanC,0BpC4BiC;EOzB/B,sBPmL0B;CoCzLlB;;AAOZ;EACE,0BAAwB;CADX;;AzBsCX;EyBjCF;IACE,mBpCwZiC;GoCzZvB;CxCguIb;;AwC3tID;EACE,iBAAiB;EACjB,gBAAgB;E7Bbd,iB6BcsB;CAHR;;ACblB;EACE,crC2fgC;EqC1fhC,oBrCoD+B;EqCnD/B,8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","file":"bootstrap.css"} \ No newline at end of file diff --git a/non_logged_in_area/static/bootstrap4/css/bootstrap.min.css b/non_logged_in_area/static/bootstrap4/css/bootstrap.min.css new file mode 100644 index 00000000..fbea3ec9 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/css/bootstrap.min.css @@ -0,0 +1,6 @@ +@charset "UTF-8";/*! + * Bootstrap v4.0.0-alpha (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */img,legend{border:0}dl,ol,p,pre,ul{margin-top:0}address,dl,ol,p,ul{margin-bottom:1rem}b,dt,optgroup,strong{font-weight:700}caption,th{text-align:left}fieldset,legend,td,th{padding:0}pre,textarea{overflow:auto}.btn-group>.btn-group,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu,.table-reflow thead,.table-reflow tr{float:left}.btn,.c-indicator{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal:after,.dropdown-item,.modal-footer:after,.modal-header:after,.nav-tabs:after,.navbar:after,.pager:after,.row:after{clear:both}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{height:0;-webkit-box-sizing:content-box;box-sizing:content-box}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}address,legend{line-height:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:none}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{resize:vertical}table{border-spacing:0;border-collapse:collapse}@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-webkit-box-sizing:border-box;box-sizing:border-box;font-size:16px;-webkit-tap-highlight-color:transparent}*,:after,:before{-webkit-box-sizing:inherit;box-sizing:inherit}@-ms-viewport{width:device-width}@viewport{width:device-width}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:1rem;line-height:1.5;color:#373a3c;background-color:#fff}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #818a91}address{font-style:normal}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dd,label{margin-bottom:.5rem}dd{margin-left:0}blockquote,figure{margin:0 0 1rem}a{color:#0275d8;text-decoration:none}a:focus,a:hover{color:#014c8c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}[role=button]{cursor:pointer}table{background-color:transparent}caption{padding-top:.75rem;padding-bottom:.75rem;color:#818a91;caption-side:bottom}label{display:inline-block}button,input,select,textarea{margin:0;line-height:inherit}fieldset{min-width:0;margin:0;border:0}legend{display:block;width:100%;margin-bottom:.5rem;font-size:1.5rem}.list-inline>li,output{display:inline-block}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit;margin-bottom:.5rem}.display-1,.display-2,.display-3,.display-4,.lead{font-weight:300}.blockquote,hr{margin-bottom:1rem}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem}.display-1{font-size:3.5rem}.display-2{font-size:4.5rem}.display-3{font-size:5.5rem}.display-4{font-size:6rem}hr{margin-top:1rem;border:0;border-top:.0625rem solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline{margin-left:-5px}.list-inline>li{padding-right:5px;padding-left:5px}.dl-horizontal{margin-right:-1.875rem;margin-left:-1.875rem}.container,.container-fluid{margin-right:auto;margin-left:auto}.dl-horizontal:after,.dl-horizontal:before{display:table;content:" "}.initialism{font-size:90%;text-transform:uppercase}.blockquote{padding:.5rem 1rem;font-size:1.25rem;border-left:.25rem solid #eceeef}.blockquote ol:last-child,.blockquote p:last-child,.blockquote ul:last-child{margin-bottom:0}.blockquote footer{display:block;font-size:80%;line-height:1.5;color:#818a91}.blockquote footer:before{content:"\2014 \00A0"}.blockquote-reverse{padding-right:1rem;padding-left:0;text-align:right;border-right:.25rem solid #eceeef;border-left:0}.blockquote-reverse footer:before{content:""}.blockquote-reverse footer:after{content:"\00A0 \2014"}.figure{display:inline-block}.figure>img{margin-bottom:.5rem;line-height:1}.table,pre{margin-bottom:1rem}.figure-caption{font-size:90%;color:#818a91}.carousel-inner>.carousel-item>a>img,.carousel-inner>.carousel-item>img,.figure>img,.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:.3rem}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:.25rem;line-height:1.5;background-color:#fff;border:1px solid #ddd;border-radius:.25rem;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}code,kbd{padding:.2rem .4rem;font-size:90%}.img-circle{border-radius:50%}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{color:#bd4147;background-color:#f7f7f9;border-radius:.25rem}kbd{color:#fff;background-color:#333;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:90%;line-height:1.5;color:#373a3c}.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{display:table;content:" "}pre code{padding:0;font-size:inherit;color:inherit;background-color:transparent;border-radius:0}.container,.container-fluid{padding-right:.9375rem;padding-left:.9375rem}.pre-scrollable{max-height:340px;overflow-y:scroll}.row{margin-right:-.9375rem;margin-left:-.9375rem}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:.9375rem;padding-left:.9375rem}.col-xs-1{width:8.333333%}.col-xs-2{width:16.666667%}.col-xs-3{width:25%}.col-xs-4{width:33.333333%}.col-xs-5{width:41.666667%}.col-xs-6{width:50%}.col-xs-7{width:58.333333%}.col-xs-8{width:66.666667%}.col-xs-9{width:75%}.col-xs-10{width:83.333333%}.col-xs-11{width:91.666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.333333%}.col-xs-pull-2{right:16.666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.333333%}.col-xs-pull-5{right:41.666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.333333%}.col-xs-pull-8{right:66.666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.333333%}.col-xs-pull-11{right:91.666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.333333%}.col-xs-push-2{left:16.666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.333333%}.col-xs-push-5{left:41.666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.333333%}.col-xs-push-8{left:66.666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.333333%}.col-xs-push-11{left:91.666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.333333%}.col-xs-offset-2{margin-left:16.666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.333333%}.col-xs-offset-5{margin-left:41.666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.333333%}.col-xs-offset-8{margin-left:66.666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.333333%}.col-xs-offset-11{margin-left:91.666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:34em){.container{max-width:34rem}.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.333333%}.col-sm-2{width:16.666667%}.col-sm-3{width:25%}.col-sm-4{width:33.333333%}.col-sm-5{width:41.666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333%}.col-sm-8{width:66.666667%}.col-sm-9{width:75%}.col-sm-10{width:83.333333%}.col-sm-11{width:91.666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.333333%}.col-sm-pull-2{right:16.666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.333333%}.col-sm-pull-5{right:41.666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.333333%}.col-sm-pull-8{right:66.666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.333333%}.col-sm-pull-11{right:91.666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.333333%}.col-sm-push-2{left:16.666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.333333%}.col-sm-push-5{left:41.666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.333333%}.col-sm-push-8{left:66.666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.333333%}.col-sm-push-11{left:91.666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.333333%}.col-sm-offset-2{margin-left:16.666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.333333%}.col-sm-offset-5{margin-left:41.666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.333333%}.col-sm-offset-8{margin-left:66.666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.333333%}.col-sm-offset-11{margin-left:91.666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:48em){.container{max-width:45rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.333333%}.col-md-2{width:16.666667%}.col-md-3{width:25%}.col-md-4{width:33.333333%}.col-md-5{width:41.666667%}.col-md-6{width:50%}.col-md-7{width:58.333333%}.col-md-8{width:66.666667%}.col-md-9{width:75%}.col-md-10{width:83.333333%}.col-md-11{width:91.666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.333333%}.col-md-pull-2{right:16.666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.333333%}.col-md-pull-5{right:41.666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.333333%}.col-md-pull-8{right:66.666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.333333%}.col-md-pull-11{right:91.666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.333333%}.col-md-push-2{left:16.666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.333333%}.col-md-push-5{left:41.666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.333333%}.col-md-push-8{left:66.666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.333333%}.col-md-push-11{left:91.666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.333333%}.col-md-offset-2{margin-left:16.666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.333333%}.col-md-offset-5{margin-left:41.666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.333333%}.col-md-offset-8{margin-left:66.666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.333333%}.col-md-offset-11{margin-left:91.666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:62em){.container{max-width:60rem}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.333333%}.col-lg-2{width:16.666667%}.col-lg-3{width:25%}.col-lg-4{width:33.333333%}.col-lg-5{width:41.666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333%}.col-lg-8{width:66.666667%}.col-lg-9{width:75%}.col-lg-10{width:83.333333%}.col-lg-11{width:91.666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.333333%}.col-lg-pull-2{right:16.666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.333333%}.col-lg-pull-5{right:41.666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.333333%}.col-lg-pull-8{right:66.666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.333333%}.col-lg-pull-11{right:91.666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.333333%}.col-lg-push-2{left:16.666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.333333%}.col-lg-push-5{left:41.666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.333333%}.col-lg-push-8{left:66.666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.333333%}.col-lg-push-11{left:91.666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.333333%}.col-lg-offset-2{margin-left:16.666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.333333%}.col-lg-offset-5{margin-left:41.666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.333333%}.col-lg-offset-8{margin-left:66.666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.333333%}.col-lg-offset-11{margin-left:91.666667%}.col-lg-offset-12{margin-left:100%}}@media (min-width:75em){.container{max-width:72.25rem}.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-1{width:8.333333%}.col-xl-2{width:16.666667%}.col-xl-3{width:25%}.col-xl-4{width:33.333333%}.col-xl-5{width:41.666667%}.col-xl-6{width:50%}.col-xl-7{width:58.333333%}.col-xl-8{width:66.666667%}.col-xl-9{width:75%}.col-xl-10{width:83.333333%}.col-xl-11{width:91.666667%}.col-xl-12{width:100%}.col-xl-pull-0{right:auto}.col-xl-pull-1{right:8.333333%}.col-xl-pull-2{right:16.666667%}.col-xl-pull-3{right:25%}.col-xl-pull-4{right:33.333333%}.col-xl-pull-5{right:41.666667%}.col-xl-pull-6{right:50%}.col-xl-pull-7{right:58.333333%}.col-xl-pull-8{right:66.666667%}.col-xl-pull-9{right:75%}.col-xl-pull-10{right:83.333333%}.col-xl-pull-11{right:91.666667%}.col-xl-pull-12{right:100%}.col-xl-push-0{left:auto}.col-xl-push-1{left:8.333333%}.col-xl-push-2{left:16.666667%}.col-xl-push-3{left:25%}.col-xl-push-4{left:33.333333%}.col-xl-push-5{left:41.666667%}.col-xl-push-6{left:50%}.col-xl-push-7{left:58.333333%}.col-xl-push-8{left:66.666667%}.col-xl-push-9{left:75%}.col-xl-push-10{left:83.333333%}.col-xl-push-11{left:91.666667%}.col-xl-push-12{left:100%}.col-xl-offset-0{margin-left:0}.col-xl-offset-1{margin-left:8.333333%}.col-xl-offset-2{margin-left:16.666667%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-4{margin-left:33.333333%}.col-xl-offset-5{margin-left:41.666667%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-7{margin-left:58.333333%}.col-xl-offset-8{margin-left:66.666667%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-10{margin-left:83.333333%}.col-xl-offset-11{margin-left:91.666667%}.col-xl-offset-12{margin-left:100%}}.table{width:100%;max-width:100%}.table td,.table th{padding:.75rem;line-height:1.5;vertical-align:top;border-top:1px solid #eceeef}.table thead th{vertical-align:bottom;border-bottom:2px solid #eceeef}.table tbody+tbody{border-top:2px solid #eceeef}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #eceeef}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:#f9f9f9}.table-active,.table-active>td,.table-active>th,.table-hover tbody tr:hover{background-color:#f5f5f5}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#e8e8e8}.table-success,.table-success>td,.table-success>th{background-color:#dff0d8}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#d0e9c6}.table-info,.table-info>td,.table-info>th{background-color:#d9edf7}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#c4e3f3}.table-warning,.table-warning>td,.table-warning>th{background-color:#fcf8e3}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#faf2cc}.table-danger,.table-danger>td,.table-danger>th{background-color:#f2dede}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#ebcccc}.table-responsive{display:block;width:100%;overflow-x:auto}.collapsing,.dropdown-divider,.embed-responsive,.modal,.modal-open,.navbar-divider{overflow:hidden}.thead-inverse th{color:#fff;background-color:#373a3c}.thead-default th{color:#55595c;background-color:#eceeef}.table-inverse{color:#eceeef;background-color:#373a3c}.table-inverse.table-bordered{border:0}.table-inverse td,.table-inverse th,.table-inverse thead th{border-color:#55595c}.table-reflow tbody{display:block;white-space:nowrap}.table-reflow td,.table-reflow th{border-top:1px solid #eceeef;border-left:1px solid #eceeef}.table-reflow td:last-child,.table-reflow th:last-child{border-right:1px solid #eceeef}.table-reflow tbody:last-child tr:last-child td,.table-reflow tbody:last-child tr:last-child th,.table-reflow tfoot:last-child tr:last-child td,.table-reflow tfoot:last-child tr:last-child th,.table-reflow thead:last-child tr:last-child td,.table-reflow thead:last-child tr:last-child th{border-bottom:1px solid #eceeef}.table-reflow tr td,.table-reflow tr th{display:block!important;border:1px solid #eceeef}.form-control,.form-control-file,.form-control-range{display:block}.form-control{width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#55595c;background-color:#fff;background-image:none;border:.0625rem solid #ccc;border-radius:.25rem}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{border-color:#66afe9;outline:0}.form-control::-webkit-input-placeholder{color:#999;opacity:1}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999;opacity:1}.form-control::placeholder{color:#999;opacity:1}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#5cb85c}.form-control:disabled,.form-control[readonly],fieldset[disabled] .form-control{background-color:#eceeef;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}.form-control-label{padding:.4375rem .75rem;margin-bottom:0}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:2.375rem}.input-group-sm input[type=date].form-control,.input-group-sm input[type=time].form-control,.input-group-sm input[type=datetime-local].form-control,.input-group-sm input[type=month].form-control,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:1.95rem}.input-group-lg input[type=date].form-control,.input-group-lg input[type=time].form-control,.input-group-lg input[type=datetime-local].form-control,.input-group-lg input[type=month].form-control,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:3.291667rem}}.form-control-static{min-height:2.375rem;padding-top:.4375rem;padding-bottom:.4375rem;margin-bottom:0}.form-control-static.form-control-lg,.form-control-static.form-control-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{padding:.275rem .75rem;font-size:.85rem;line-height:1.5;border-radius:.2rem}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{padding:.75rem 1.25rem;font-size:1.25rem;line-height:1.333333;border-radius:.3rem}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-bottom:.75rem}.checkbox label,.checkbox-inline,.radio label,.radio-inline{padding-left:1.25rem;margin-bottom:0;cursor:pointer;font-weight:400}.checkbox label input:only-child,.radio label input:only-child{position:static}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:.25rem;margin-left:-1.25rem}.collapsing,.dropdown,.dropup{position:relative}.checkbox+.checkbox,.radio+.radio{margin-top:-.25rem}.checkbox-inline,.radio-inline{position:relative;display:inline-block;vertical-align:middle}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:.75rem}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox]:disabled,input[type=radio].disabled,input[type=radio]:disabled{cursor:not-allowed}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline{cursor:not-allowed}.form-control-error,.form-control-success,.form-control-warning{padding-right:2.25rem;background-repeat:no-repeat;background-position:center right .59375rem;-webkit-background-size:1.54375rem 1.54375rem;background-size:1.54375rem 1.54375rem}.has-success .form-control{border-color:#5cb85c}.has-success .input-group-addon{color:#5cb85c;background-color:#eaf6ea;border-color:#5cb85c}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#f0ad4e}.has-success .form-control-success{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkNoZWNrIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDYxMiA3OTIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYxMiA3OTIiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiM1Q0I4NUMiIGQ9Ik0yMzMuOCw2MTAuMWMtMTMuMywwLTI1LjktNi4yLTM0LTE2LjlMOTAuNSw0NDguOEM3Ni4zLDQzMCw4MCw0MDMuMyw5OC44LDM4OS4xYzE4LjgtMTQuMyw0NS41LTEwLjUsNTkuOCw4LjNsNzEuOSw5NWwyMjAuOS0yNTAuNWMxMi41LTIwLDM4LjgtMjYuMSw1OC44LTEzLjZjMjAsMTIuNCwyNi4xLDM4LjcsMTMuNiw1OC44TDI3MCw1OTBjLTcuNCwxMi0yMC4yLDE5LjQtMzQuMywyMC4xQzIzNS4xLDYxMC4xLDIzNC41LDYxMC4xLDIzMy44LDYxMC4xeiIvPjwvc3ZnPg==)}.has-warning .form-control{border-color:#f0ad4e}.has-warning .input-group-addon{color:#f0ad4e;background-color:#fff;border-color:#f0ad4e}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#d9534f}.has-warning .form-control-warning{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9Ildhcm5pbmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgNjEyIDc5MiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjEyIDc5MiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZmlsbD0iI0YwQUQ0RSIgZD0iTTYwMyw2NDAuMmwtMjc4LjUtNTA5Yy0zLjgtNi42LTEwLjgtMTAuNi0xOC41LTEwLjZzLTE0LjcsNC4xLTE4LjUsMTAuNkw5LDY0MC4yYy0zLjcsNi41LTMuNiwxNC40LDAuMiwyMC44YzMuOCw2LjUsMTAuOCwxMC40LDE4LjMsMTAuNGg1NTcuMWM3LjUsMCwxNC41LTMuOSwxOC4zLTEwLjRDNjA2LjYsNjU0LjYsNjA2LjcsNjQ2LjYsNjAzLDY0MC4yeiBNMzM2LjYsNjEwLjJoLTYxLjJWNTQ5aDYxLjJWNjEwLjJ6IE0zMzYuNiw1MDMuMWgtNjEuMlYzMDQuMmg2MS4yVjUwMy4xeiIvPjwvc3ZnPg==)}.has-error .form-control{border-color:#d9534f}.has-error .input-group-addon{color:#d9534f;background-color:#fdf7f7;border-color:#d9534f}.has-error .form-control-error{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkNyb3NzIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDYxMiA3OTIiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDYxMiA3OTIiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGZpbGw9IiNEOTUzNEYiIGQ9Ik00NDcsNTQ0LjRjLTE0LjQsMTQuNC0zNy42LDE0LjQtNTEuOSwwTDMwNiw0NTEuN2wtODkuMSw5Mi43Yy0xNC40LDE0LjQtMzcuNiwxNC40LTUxLjksMGMtMTQuNC0xNC40LTE0LjQtMzcuNiwwLTUxLjlsOTIuNC05Ni40TDE2NSwyOTkuNmMtMTQuNC0xNC40LTE0LjQtMzcuNiwwLTUxLjlzMzcuNi0xNC40LDUxLjksMGw4OS4yLDkyLjdsODkuMS05Mi43YzE0LjQtMTQuNCwzNy42LTE0LjQsNTEuOSwwYzE0LjQsMTQuNCwxNC40LDM3LjYsMCw1MS45TDM1NC43LDM5Nmw5Mi40LDk2LjRDNDYxLjQsNTA2LjgsNDYxLjQsNTMwLDQ0Nyw1NDQuNHoiLz48L3N2Zz4=)}.btn-danger-outline,.btn-info-outline,.btn-info.active,.btn-info:active,.btn-primary-outline,.btn-primary.active,.btn-primary:active,.btn-secondary-outline,.btn-secondary.active,.btn-secondary:active,.btn-success-outline,.btn-success.active,.btn-success:active,.btn-warning-outline,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.open>.btn-info.dropdown-toggle,.open>.btn-primary.dropdown-toggle,.open>.btn-secondary.dropdown-toggle,.open>.btn-success.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}@media (min-width:34em){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.btn-block,input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn{display:inline-block;padding:.375rem 1rem;font-size:1rem;font-weight:400;line-height:1.5;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;user-select:none;border:.0625rem solid transparent;border-radius:.25rem}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{text-decoration:none}.btn.active,.btn:active{outline:0}.btn.disabled,.btn:disabled,fieldset[disabled] .btn{cursor:not-allowed;opacity:.65}a.btn.disaabled,fieldset[disabled] a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#025aa5;border-color:#01549b}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary:disabled.focus,.btn-primary:disabled:focus,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus{background-color:#0275d8;border-color:#0275d8}.btn-primary.disabled:hover,.btn-primary:disabled:hover,fieldset[disabled] .btn-primary:hover{background-color:#0275d8;border-color:#0275d8}.btn-secondary{color:#373a3c;background-color:#fff;border-color:#ccc}.btn-secondary.active,.btn-secondary.focus,.btn-secondary:active,.btn-secondary:focus,.btn-secondary:hover,.open>.btn-secondary.dropdown-toggle{color:#373a3c;background-color:#e6e6e6;border-color:#adadad}.btn-secondary.disabled.focus,.btn-secondary.disabled:focus,.btn-secondary:disabled.focus,.btn-secondary:disabled:focus,fieldset[disabled] .btn-secondary.focus,fieldset[disabled] .btn-secondary:focus{background-color:#fff;border-color:#ccc}.btn-secondary.disabled:hover,.btn-secondary:disabled:hover,fieldset[disabled] .btn-secondary:hover{background-color:#fff;border-color:#ccc}.btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#2aabd2}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info:disabled.focus,.btn-info:disabled:focus,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus{background-color:#5bc0de;border-color:#5bc0de}.btn-info.disabled:hover,.btn-info:disabled:hover,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#5bc0de}.btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#419641}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success:disabled.focus,.btn-success:disabled:focus,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus{background-color:#5cb85c;border-color:#5cb85c}.btn-success.disabled:hover,.btn-success:disabled:hover,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#5cb85c}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#eb9316}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning:disabled.focus,.btn-warning:disabled:focus,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus{background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning.disabled:hover,.btn-warning:disabled:hover,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#f0ad4e}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#c12e2a}.btn-danger.active,.btn-danger:active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger:disabled.focus,.btn-danger:disabled:focus,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus{background-color:#d9534f;border-color:#d9534f}.btn-danger.disabled:hover,.btn-danger:disabled:hover,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d9534f}.btn-primary-outline{color:#0275d8;background-color:transparent;border-color:#0275d8}.btn-primary-outline.active,.btn-primary-outline.focus,.btn-primary-outline:active,.btn-primary-outline:focus,.btn-primary-outline:hover,.open>.btn-primary-outline.dropdown-toggle{color:#fff;background-color:#0275d8;border-color:#0275d8}.btn-primary-outline.disabled.focus,.btn-primary-outline.disabled:focus,.btn-primary-outline:disabled.focus,.btn-primary-outline:disabled:focus,fieldset[disabled] .btn-primary-outline.focus,fieldset[disabled] .btn-primary-outline:focus{border-color:#43a7fd}.btn-primary-outline.disabled:hover,.btn-primary-outline:disabled:hover,fieldset[disabled] .btn-primary-outline:hover{border-color:#43a7fd}.btn-secondary-outline{color:#ccc;background-color:transparent;border-color:#ccc}.btn-secondary-outline.active,.btn-secondary-outline.focus,.btn-secondary-outline:active,.btn-secondary-outline:focus,.btn-secondary-outline:hover,.open>.btn-secondary-outline.dropdown-toggle{color:#fff;background-color:#ccc;border-color:#ccc}.btn-secondary-outline.disabled.focus,.btn-secondary-outline.disabled:focus,.btn-secondary-outline:disabled.focus,.btn-secondary-outline:disabled:focus,fieldset[disabled] .btn-secondary-outline.focus,fieldset[disabled] .btn-secondary-outline:focus{border-color:#fff}.btn-secondary-outline.disabled:hover,.btn-secondary-outline:disabled:hover,fieldset[disabled] .btn-secondary-outline:hover{border-color:#fff}.btn-info-outline{color:#5bc0de;background-color:transparent;border-color:#5bc0de}.btn-info-outline.active,.btn-info-outline.focus,.btn-info-outline:active,.btn-info-outline:focus,.btn-info-outline:hover,.open>.btn-info-outline.dropdown-toggle{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info-outline.disabled.focus,.btn-info-outline.disabled:focus,.btn-info-outline:disabled.focus,.btn-info-outline:disabled:focus,fieldset[disabled] .btn-info-outline.focus,fieldset[disabled] .btn-info-outline:focus{border-color:#b0e1ef}.btn-info-outline.disabled:hover,.btn-info-outline:disabled:hover,fieldset[disabled] .btn-info-outline:hover{border-color:#b0e1ef}.btn-success-outline{color:#5cb85c;background-color:transparent;border-color:#5cb85c}.btn-success-outline.active,.btn-success-outline.focus,.btn-success-outline:active,.btn-success-outline:focus,.btn-success-outline:hover,.open>.btn-success-outline.dropdown-toggle{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success-outline.disabled.focus,.btn-success-outline.disabled:focus,.btn-success-outline:disabled.focus,.btn-success-outline:disabled:focus,fieldset[disabled] .btn-success-outline.focus,fieldset[disabled] .btn-success-outline:focus{border-color:#a3d7a3}.btn-success-outline.disabled:hover,.btn-success-outline:disabled:hover,fieldset[disabled] .btn-success-outline:hover{border-color:#a3d7a3}.btn-warning-outline{color:#f0ad4e;background-color:transparent;border-color:#f0ad4e}.btn-warning-outline.active,.btn-warning-outline.focus,.btn-warning-outline:active,.btn-warning-outline:focus,.btn-warning-outline:hover,.open>.btn-warning-outline.dropdown-toggle{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning-outline.disabled.focus,.btn-warning-outline.disabled:focus,.btn-warning-outline:disabled.focus,.btn-warning-outline:disabled:focus,fieldset[disabled] .btn-warning-outline.focus,fieldset[disabled] .btn-warning-outline:focus{border-color:#f8d9ac}.btn-warning-outline.disabled:hover,.btn-warning-outline:disabled:hover,fieldset[disabled] .btn-warning-outline:hover{border-color:#f8d9ac}.btn-danger-outline{color:#d9534f;background-color:transparent;border-color:#d9534f}.btn-danger-outline.active,.btn-danger-outline.focus,.btn-danger-outline:active,.btn-danger-outline:focus,.btn-danger-outline:hover,.open>.btn-danger-outline.dropdown-toggle{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger-outline.disabled.focus,.btn-danger-outline.disabled:focus,.btn-danger-outline:disabled.focus,.btn-danger-outline:disabled:focus,fieldset[disabled] .btn-danger-outline.focus,fieldset[disabled] .btn-danger-outline:focus{border-color:#eba5a3}.btn-danger-outline.disabled:hover,.btn-danger-outline:disabled:hover,fieldset[disabled] .btn-danger-outline:hover{border-color:#eba5a3}.btn-link{font-weight:400;color:#0275d8;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link:disabled,fieldset[disabled] .btn-link{background-color:transparent}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#014c8c;text-decoration:underline;background-color:transparent}.btn-link:disabled:focus,.btn-link:disabled:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#818a91;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:.75rem 1.25rem;font-size:1.25rem;line-height:1.333333;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .75rem;font-size:.85rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block}.btn-block+.btn-block{margin-top:5px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}.collapsing{height:0;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height;-o-transition-property:height;transition-property:height}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.25rem;vertical-align:middle;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:1rem;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-header,.dropdown-item{display:block;padding:3px 20px;line-height:1.5;white-space:nowrap}.dropdown-divider{height:1px;margin:.5rem 0;background-color:#e5e5e5}.dropdown-item{width:100%;font-weight:400;color:#373a3c;text-align:inherit;background:0 0;border:0}.c-indicator,.label,.pager{text-align:center}.dropdown-item:focus,.dropdown-item:hover{color:#2b2d2f;text-decoration:none;background-color:#f5f5f5}.dropdown-item.active,.dropdown-item.active:focus,.dropdown-item.active:hover{color:#fff;text-decoration:none;background-color:#0275d8;outline:0}.dropdown-item.disabled,.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{color:#818a91}.dropdown-item.disabled:focus,.dropdown-item.disabled:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:"progid:DXImageTransform.Microsoft.gradient(enabled = false)"}.c-input,.file{cursor:pointer}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{font-size:.85rem;color:#818a91}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover,.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:.3em solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{display:table;content:" "}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:.3em .3em 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 .3em .3em}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{display:table;content:" "}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:.25rem;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:.25rem}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.c-input,.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1;color:#55595c;text-align:center;background-color:#eceeef;border:1px solid #ccc;border-radius:.25rem}.alert-link,.close,.label{font-weight:700}.input-group-addon.form-control-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:.275rem .75rem;font-size:.85rem;border-radius:.2rem}.input-group-addon.form-control-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:1.25rem;font-size:1.25rem;border-radius:.3rem}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.c-input{display:inline;padding-left:1.5rem;color:#555}.c-input>input{position:absolute;z-index:-1;opacity:0}.c-input>input:checked~.c-indicator{color:#fff;background-color:#0074d9}.c-input>input:active~.c-indicator{color:#fff;background-color:#84c6ff}.c-input+.c-input{margin-left:1rem}.c-indicator{position:absolute;top:0;left:0;display:block;width:1rem;height:1rem;font-size:65%;line-height:1rem;color:#eee;user-select:none;background-color:#eee;background-repeat:no-repeat;background-position:center center;-webkit-background-size:50% 50%;background-size:50% 50%}.c-checkbox .c-indicator{border-radius:.25rem}.c-checkbox input:checked~.c-indicator{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTYuNCwxTDUuNywxLjdMMi45LDQuNUwyLjEsMy43TDEuNCwzTDAsNC40bDAuNywwLjdsMS41LDEuNWwwLjcsMC43bDAuNy0wLjdsMy41LTMuNWwwLjctMC43TDYuNCwxTDYuNCwxeiINCgkvPg0KPC9zdmc+DQo=)}.c-checkbox input:indeterminate~.c-indicator{background-color:#0074d9;background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iOHB4IiBoZWlnaHQ9IjhweCIgdmlld0JveD0iMCAwIDggOCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgOCA4IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0wLDN2Mmg4VjNIMHoiLz4NCjwvc3ZnPg0K)}.c-radio .c-indicator{border-radius:50%}.c-radio input:checked~.c-indicator{background-image:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgOCA4IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA4IDgiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTQsMUMyLjMsMSwxLDIuMywxLDRzMS4zLDMsMywzczMtMS4zLDMtM1M1LjcsMSw0LDF6Ii8+DQo8L3N2Zz4NCg==)}.c-inputs-stacked .c-input{display:inline}.c-inputs-stacked .c-input:after{display:block;margin-bottom:.25rem;content:""}.c-select,.file{display:inline-block}.c-inputs-stacked .c-input+.c-input{margin-left:0}.c-select{max-width:100%;-webkit-appearance:none;padding:.375rem 1.75rem .375rem .75rem;padding-right:.75rem\9;vertical-align:middle;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAUCAMAAACzvE1FAAAADFBMVEUzMzMzMzMzMzMzMzMKAG/3AAAAA3RSTlMAf4C/aSLHAAAAPElEQVR42q3NMQ4AIAgEQTn//2cLdRKppSGzBYwzVXvznNWs8C58CiussPJj8h6NwgorrKRdTvuV9v16Afn0AYFOB7aYAAAAAElFTkSuQmCC) right .75rem center no-repeat #fff;background-image:none\9;-webkit-background-size:8px 10px;background-size:8px 10px;border:1px solid #ccc;-moz-appearance:none;appearance:none}.c-select:focus{border-color:#51a7e8;outline:0;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(81,167,232,.5);box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(81,167,232,.5)}.c-select::-ms-expand{opacity:0}.c-select-sm{padding-top:3px;padding-bottom:3px;font-size:12px}.c-select-sm:not([multiple]){height:26px;min-height:26px}.file{position:relative;height:2.5rem}.file-custom,.file-custom:before{position:absolute;height:2.5rem;padding:.5rem 1rem;line-height:1.5;color:#555}.file input{min-width:14rem;margin:0;filter:alpha(opacity=0);opacity:0}.file-custom{top:0;right:0;left:0;z-index:5;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff;border:.075rem solid #ddd;border-radius:.25rem;-webkit-box-shadow:inset 0 .2rem .4rem rgba(0,0,0,.05);box-shadow:inset 0 .2rem .4rem rgba(0,0,0,.05)}.file-custom:after{content:"Choose file..."}.file-custom:before{top:-.075rem;right:-.075rem;bottom:-.075rem;z-index:6;display:block;content:"Browse";background-color:#eee;border:.075rem solid #ddd;border-radius:0 .25rem .25rem 0}.file input:focus~.file-custom{-webkit-box-shadow:0 0 0 .075rem #fff,0 0 0 .2rem #0074d9;box-shadow:0 0 0 .075rem #fff,0 0 0 .2rem #0074d9}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:inline-block}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#818a91}.nav-link.disabled,.nav-link.disabled:focus,.nav-link.disabled:hover{color:#818a91;cursor:not-allowed;background-color:transparent}.nav-inline .nav-link+.nav-link{margin-left:1rem}.nav-pills .nav-item+.nav-item,.nav-tabs .nav-item+.nav-item{margin-left:.2rem}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs:after,.nav-tabs:before{display:table;content:" "}.nav-tabs .nav-item{float:left;margin-bottom:-1px}.nav-tabs .nav-link{display:block;padding:.5em 1em;border:1px solid transparent;border-radius:.25rem .25rem 0 0}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#eceeef #eceeef #ddd}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link.disabled:focus,.nav-tabs .nav-link.disabled:hover{color:#818a91;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.open .nav-link,.nav-tabs .nav-item.open .nav-link:focus,.nav-tabs .nav-item.open .nav-link:hover,.nav-tabs .nav-link.active,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-link.active:hover{color:#55595c;background-color:#fff;border-color:#ddd #ddd transparent}.nav-pills .nav-item{float:left}.nav-pills .nav-link{display:block;padding:.5em 1em;border-radius:.25rem}.nav-pills .nav-item.open .nav-link,.nav-pills .nav-item.open .nav-link:focus,.nav-pills .nav-item.open .nav-link:hover,.nav-pills .nav-link.active,.nav-pills .nav-link.active:focus,.nav-pills .nav-link.active:hover{color:#fff;cursor:default;background-color:#0275d8}.nav-stacked .nav-item{display:block;float:none}.nav-stacked .nav-item+.nav-item{margin-top:.2rem;margin-left:0}.navbar-divider,.navbar-nav .nav-item+.nav-item,.navbar-nav .nav-link+.nav-link{margin-left:1rem}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;padding:.5rem 1rem}.navbar:after,.navbar:before{display:table;content:" "}.navbar-static-top{z-index:1000}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.card,.card-title{margin-bottom:.75rem}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0}.navbar-sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1030;width:100%}@media (min-width:34em){.navbar{border-radius:.25rem}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top,.navbar-sticky-top{border-radius:0}}.navbar-brand{float:left;padding-top:.25rem;padding-bottom:.25rem;margin-right:1rem;font-size:1.25rem}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}.navbar-divider{float:left;width:1px;padding-top:.425rem;padding-bottom:.425rem;margin-right:1rem}.navbar-divider:before{content:'\00a0'}.navbar-toggler{padding:.5rem .75rem;font-size:1.25rem;line-height:1;background:0 0;border:.0625rem solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}@media (min-width:34em){.navbar-toggleable-xs{display:block!important}}@media (min-width:48em){.navbar-toggleable-sm{display:block!important}}.navbar-nav .nav-item{float:left}.navbar-nav .nav-link{display:block;padding-top:.425rem;padding-bottom:.425rem}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.8)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.6)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .active>.nav-link:focus,.navbar-light .navbar-nav .active>.nav-link:hover,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.active:focus,.navbar-light .navbar-nav .nav-link.active:hover,.navbar-light .navbar-nav .nav-link.open,.navbar-light .navbar-nav .nav-link.open:focus,.navbar-light .navbar-nav .nav-link.open:hover,.navbar-light .navbar-nav .open>.nav-link,.navbar-light .navbar-nav .open>.nav-link:focus,.navbar-light .navbar-nav .open>.nav-link:hover{color:rgba(0,0,0,.8)}.navbar-light .navbar-divider{background-color:rgba(0,0,0,.075)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.card-inverse .card-blockquote,.card-inverse .card-footer,.card-inverse .card-header,.card-inverse .card-title,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .active>.nav-link:focus,.navbar-dark .navbar-nav .active>.nav-link:hover,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.active:focus,.navbar-dark .navbar-nav .nav-link.active:hover,.navbar-dark .navbar-nav .nav-link.open,.navbar-dark .navbar-nav .nav-link.open:focus,.navbar-dark .navbar-nav .nav-link.open:hover,.navbar-dark .navbar-nav .open>.nav-link,.navbar-dark .navbar-nav .open>.nav-link:focus,.navbar-dark .navbar-nav .open>.nav-link:hover{color:#fff}.navbar-dark .navbar-divider{background-color:rgba(255,255,255,.075)}.card{position:relative;border:.0625rem solid #e5e5e5;border-radius:.25rem}.card-block{padding:1.25rem}.card-footer,.card-header{padding:.75rem 1.25rem;background-color:#f5f5f5}.card-title{margin-top:0}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card>.list-group:first-child .list-group-item:first-child{border-radius:.25rem .25rem 0 0}.card>.list-group:last-child .list-group-item:last-child{border-radius:0 0 .25rem .25rem}.card-header{border-bottom:.0625rem solid #e5e5e5}.card-header:first-child{border-radius:.1875rem .1875rem 0 0}.card-footer{border-top:.0625rem solid #e5e5e5}.card-footer:last-child{border-radius:0 0 .1875rem .1875rem}.card-primary{background-color:#0275d8;border-color:#0275d8}.card-success{background-color:#5cb85c;border-color:#5cb85c}.card-info{background-color:#5bc0de;border-color:#5bc0de}.card-warning{background-color:#f0ad4e;border-color:#f0ad4e}.card-danger{background-color:#d9534f;border-color:#d9534f}.card-inverse .card-footer,.card-inverse .card-header{border-bottom:.075rem solid rgba(255,255,255,.2)}.card-inverse .card-blockquote>footer,.card-inverse .card-link,.card-inverse .card-text{color:rgba(255,255,255,.65)}.card-inverse .card-link:focus,.card-inverse .card-link:hover{color:#fff}.card-blockquote{padding:0;margin-bottom:0;border-left:0}.card-img{border-radius:.25rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img-top{border-radius:.25rem .25rem 0 0}.card-img-bottom{border-radius:0 0 .25rem .25rem}.card-deck{display:table;table-layout:fixed;border-spacing:1.25rem 0}.card-deck .card{display:table-cell;width:1%;vertical-align:top}.card-columns .card,.progress{width:100%}.card-deck-wrapper{margin-right:-1.25rem;margin-left:-1.25rem}.card-group{display:table;width:100%;table-layout:fixed}.card-group .card{display:table-cell;vertical-align:top}.breadcrumb>li,.card-columns .card,.pagination{display:inline-block}.card-group .card+.card{margin-left:0;border-left:0}.card-group .card:first-child .card-img-top{border-top-right-radius:0}.card-group .card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group .card:last-child .card-img-top{border-top-left-radius:0}.card-group .card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group .card:not(:first-child):not(:last-child){border-radius:0}.card-group .card:not(:first-child):not(:last-child) .card-img-bottom,.card-group .card:not(:first-child):not(:last-child) .card-img-top{border-radius:0}.breadcrumb,.pagination{border-radius:.25rem;margin-bottom:1rem}.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem}.breadcrumb{padding:.75rem 1rem;list-style:none;background-color:#eceeef}.breadcrumb>li+li:before{padding-right:.5rem;padding-left:.5rem;color:#818a91;content:"/ "}.breadcrumb>.active{color:#818a91}.pagination{padding-left:0;margin-top:1rem}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:.5rem .75rem;margin-left:-1px;line-height:1.5;color:#0275d8;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#014c8c;background-color:#eceeef;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;cursor:default;background-color:#0275d8;border-color:#0275d8}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#818a91;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm>li>a,.pagination-sm>li>span{padding:.275rem .75rem;font-size:.85rem;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pager{padding-left:0;margin-top:1rem;margin-bottom:1rem;list-style:none}.pager:after,.pager:before{display:table;content:" "}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eceeef}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#818a91;cursor:not-allowed;background-color:#fff}.pager-next>a,.pager-next>span{float:right}.pager-prev>a,.pager-prev>span{float:left}.label{display:inline-block;padding:.25em .4em;font-size:75%;line-height:1;color:#fff;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-pill{padding-right:.6em;padding-left:.6em;border-radius:1rem}.label-default{background-color:#818a91}.label-default[href]:focus,.label-default[href]:hover{background-color:#687077}.label-primary{background-color:#0275d8}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#025aa5}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#eceeef;border-radius:.3rem}.jumbotron-hr{border-top-color:#d0d5d8}@media (min-width:34em){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{padding:15px;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-heading{margin-top:0;color:inherit}.alert-dismissible{padding-right:35px}.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d0e9c6}.alert-success hr{border-top-color:#c1e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bcdff1}.alert-info hr{border-top-color:#a6d5ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faf2cc}.alert-warning hr{border-top-color:#f7ecb5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebcccc}.alert-danger hr{border-top-color:#e4b9b9}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:block;height:1rem;margin-bottom:1rem}.progress[value]{-webkit-appearance:none;color:#0074d9;border:0;-moz-appearance:none;appearance:none}.progress[value]::-webkit-progress-bar{background-color:#eee;border-radius:.25rem}.progress[value]::-webkit-progress-value::before{content:attr(value)}.progress[value]::-webkit-progress-value{background-color:#0074d9;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.progress[value="100"]::-webkit-progress-value{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}@media screen and (min-width:0 \0){.progress{background-color:#eee;border-radius:.25rem}.progress-bar{display:inline-block;height:1rem;text-indent:-999rem;background-color:#0074d9;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.progress[width^="0"]{min-width:2rem;color:#818a91;background-color:transparent;background-image:none}.progress[width="100%"]{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}}.progress-striped[value]::-webkit-progress-value{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-striped[value]::-moz-progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-animated[value]::-webkit-progress-value{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-animated[value]::-moz-progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-success[value]::-webkit-progress-value{background-color:#5cb85c}.progress-success[value]::-moz-progress-bar{background-color:#5cb85c}@media screen and (min-width:0 \0){.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:1rem 1rem;background-size:1rem 1rem}.progress-animated .progress-bar-striped{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-success .progress-bar{background-color:#5cb85c}}.progress-info[value]::-webkit-progress-value{background-color:#5bc0de}.progress-info[value]::-moz-progress-bar{background-color:#5bc0de}@media screen and (min-width:0 \0){.progress-info .progress-bar{background-color:#5bc0de}}.progress-warning[value]::-webkit-progress-value{background-color:#f0ad4e}.progress-warning[value]::-moz-progress-bar{background-color:#f0ad4e}@media screen and (min-width:0 \0){.progress-warning .progress-bar{background-color:#f0ad4e}}.progress-danger[value]::-webkit-progress-value{background-color:#d9534f}.progress-danger[value]::-moz-progress-bar{background-color:#d9534f}@media screen and (min-width:0 \0){.progress-danger .progress-bar{background-color:#d9534f}}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right{padding-left:10px}.media-left{padding-right:10px}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:0}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-.0625rem;background-color:#fff;border:.0625rem solid #ddd}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-flush .list-group-item{border-width:.0625rem 0;border-radius:0}a.list-group-item,button.list-group-item{width:100%;color:#555;text-align:inherit}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#818a91;cursor:not-allowed;background-color:#eceeef}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#818a91}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#0275d8;border-color:#0275d8}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#a8d6fe}.list-group-item-state{color:#a94442;background-color:#f2dede}a.list-group-item-state,button.list-group-item-state{color:#a94442}a.list-group-item-state .list-group-item-heading,button.list-group-item-state .list-group-item-heading{color:inherit}a.list-group-item-state:focus,a.list-group-item-state:hover,button.list-group-item-state:focus,button.list-group-item-state:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-state.active,a.list-group-item-state.active:focus,a.list-group-item-state.active:hover,button.list-group-item-state.active,button.list-group-item-state.active:focus,button.list-group-item-state.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9{padding-bottom:42.857143%}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.close{float:right;font-size:1.5rem;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-content,.popover{-webkit-background-clip:padding-box}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before{display:table;content:" "}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.in{opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.5}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.popover,.tooltip{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:.85rem;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;line-break:auto;text-decoration:none}.popover,.tooltip{position:absolute;display:block}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:34em){.modal-dialog{width:600px;margin:30px auto}.modal-sm{width:300px}}@media (min-width:48em){.modal-lg{width:900px}}.tooltip{z-index:1070;text-align:start;opacity:0}.tooltip.in{opacity:.9}.tooltip.bs-tether-element-attached-bottom,.tooltip.tooltip-top{padding:5px 0;margin-top:-3px}.tooltip.bs-tether-element-attached-bottom .tooltip-arrow,.tooltip.tooltip-top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.bs-tether-element-attached-left,.tooltip.tooltip-right{padding:0 5px;margin-left:3px}.tooltip.bs-tether-element-attached-left .tooltip-arrow,.tooltip.tooltip-right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.bs-tether-element-attached-top,.tooltip.tooltip-bottom{padding:5px 0;margin-top:3px}.tooltip.bs-tether-element-attached-top .tooltip-arrow,.tooltip.tooltip-bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bs-tether-element-attached-right,.tooltip.tooltip-left{padding:0 5px;margin-left:-3px}.tooltip.bs-tether-element-attached-right .tooltip-arrow,.tooltip.tooltip-left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{top:0;left:0;z-index:1060;max-width:276px;padding:1px;text-align:start;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.text-nowrap,.text-truncate{white-space:nowrap}.popover.bs-tether-element-attached-bottom,.popover.popover-top{margin-top:-10px}.popover.bs-tether-element-attached-bottom .popover-arrow,.popover.popover-top .popover-arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.bs-tether-element-attached-bottom .popover-arrow:after,.popover.popover-top .popover-arrow:after{bottom:1px;margin-left:-10px;content:"";border-top-color:#fff;border-bottom-width:0}.popover.bs-tether-element-attached-left,.popover.popover-right{margin-left:10px}.popover.bs-tether-element-attached-left .popover-arrow,.popover.popover-right .popover-arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.bs-tether-element-attached-left .popover-arrow:after,.popover.popover-right .popover-arrow:after{bottom:-10px;left:1px;content:"";border-right-color:#fff;border-left-width:0}.popover.bs-tether-element-attached-top,.popover.popover-bottom{margin-top:10px}.popover.bs-tether-element-attached-top .popover-arrow,.popover.popover-bottom .popover-arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-top .popover-arrow:after,.popover.popover-bottom .popover-arrow:after{top:1px;margin-left:-10px;content:"";border-top-width:0;border-bottom-color:#fff}.popover.bs-tether-element-attached-right,.popover.popover-left{margin-left:-10px}.popover.bs-tether-element-attached-right .popover-arrow,.popover.popover-left .popover-arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:rgba(0,0,0,.25)}.popover.bs-tether-element-attached-right .popover-arrow:after,.popover.popover-left .popover-arrow:after{right:1px;bottom:-10px;content:"";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:-.7rem -.7rem 0 0}.popover-content{padding:9px 14px}.popover-arrow,.popover-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover-arrow{border-width:11px}.popover-arrow:after{content:"";border-width:10px}.carousel-inner{width:100%;overflow:hidden}.carousel-inner>.carousel-item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.carousel-item>a>img,.carousel-inner>.carousel-item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.carousel-item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.carousel-item.active.right,.carousel-inner>.carousel-item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.carousel-item.active.left,.carousel-inner>.carousel-item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.carousel-item.active,.carousel-inner>.carousel-item.next.left,.carousel-inner>.carousel-item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;opacity:.5}.carousel-control.left{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;width:20px;height:20px;margin-top:-10px;font-family:serif;line-height:1}.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:transparent;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media (min-width:34em){.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .icon-prev{margin-left:-15px}.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{display:table;content:" "}.center-block{display:block;margin-right:auto;margin-left:auto}.hidden-xl-down,.hidden-xs-up,.visible-print-block,[hidden]{display:none!important}.pull-right{float:right!important}.pull-left{float:left!important}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.p-r-0,.p-x-0{padding-right:0!important}.p-l-0,.p-x-0{padding-left:0!important}.p-t-0,.p-y-0{padding-top:0!important}.p-b-0,.p-y-0{padding-bottom:0!important}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.m-r-0,.m-x-0{margin-right:0!important}.m-l-0,.m-x-0{margin-left:0!important}.m-t-0,.m-y-0{margin-top:0!important}.m-b-0,.m-y-0{margin-bottom:0!important}.invisible{visibility:hidden}.text-hide{font:"0/0" a;color:transparent;background-color:transparent;border:0}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-truncate{overflow:hidden;text-overflow:ellipsis}.text-xs-left{text-align:left}.text-xs-right{text-align:right}.text-xs-center{text-align:center}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#818a91}.text-primary{color:#0275d8}a.text-primary:focus,a.text-primary:hover{color:#025aa5}.text-success{color:#5cb85c}a.text-success:focus,a.text-success:hover{color:#449d44}.text-info{color:#5bc0de}a.text-info:focus,a.text-info:hover{color:#31b0d5}.text-warning{color:#f0ad4e}a.text-warning:focus,a.text-warning:hover{color:#ec971f}.text-danger{color:#d9534f}a.text-danger:focus,a.text-danger:hover{color:#c9302c}.bg-inverse{color:#eceeef;background-color:#373a3c}.bg-faded{background-color:#f7f7f9}.bg-primary{color:#fff;background-color:#0275d8}a.bg-primary:focus,a.bg-primary:hover{background-color:#025aa5}.bg-success{color:#fff;background-color:#5cb85c}a.bg-success:focus,a.bg-success:hover{background-color:#449d44}.bg-info{color:#fff;background-color:#5bc0de}a.bg-info:focus,a.bg-info:hover{background-color:#31b0d5}.bg-warning{color:#fff;background-color:#f0ad4e}a.bg-warning:focus,a.bg-warning:hover{background-color:#ec971f}.bg-danger{color:#fff;background-color:#d9534f}a.bg-danger:focus,a.bg-danger:hover{background-color:#c9302c}.m-a-0{margin:0!important}.m-r,.m-x{margin-right:1rem!important}.m-l,.m-x{margin-left:1rem!important}.m-t,.m-y{margin-top:1rem!important}.m-b,.m-y{margin-bottom:1rem!important}.m-a{margin:1rem!important}.m-t-md,.m-y-md{margin-top:1.5rem!important}.m-b-md,.m-y-md{margin-bottom:1.5rem!important}.m-x-auto{margin-right:auto!important;margin-left:auto!important}.m-r-md,.m-x-md{margin-right:1.5rem!important}.m-l-md,.m-x-md{margin-left:1.5rem!important}.m-a-md{margin:1.5rem!important}.m-r-lg,.m-x-lg{margin-right:3rem!important}.m-l-lg,.m-x-lg{margin-left:3rem!important}.m-t-lg,.m-y-lg{margin-top:3rem!important}.m-b-lg,.m-y-lg{margin-bottom:3rem!important}.m-a-lg{margin:3rem!important}.p-a-0{padding:0!important}.p-r,.p-x{padding-right:1rem!important}.p-l,.p-x{padding-left:1rem!important}.p-t,.p-y{padding-top:1rem!important}.p-b,.p-y{padding-bottom:1rem!important}.p-a{padding:1rem!important}.p-r-md,.p-x-md{padding-right:1.5rem!important}.p-l-md,.p-x-md{padding-left:1.5rem!important}.p-t-md,.p-y-md{padding-top:1.5rem!important}.p-b-md,.p-y-md{padding-bottom:1.5rem!important}.p-a-md{padding:1.5rem!important}.p-r-lg,.p-x-lg{padding-right:3rem!important}.p-l-lg,.p-x-lg{padding-left:3rem!important}.p-t-lg,.p-y-lg{padding-top:3rem!important}.p-b-lg,.p-y-lg{padding-bottom:3rem!important}.p-a-lg{padding:3rem!important}.pos-f-t{position:fixed;top:0;right:0;left:0;z-index:1030}@media (max-width:33.9em){.hidden-xs-down{display:none!important}}@media (min-width:34em){.text-sm-left{text-align:left}.text-sm-right{text-align:right}.text-sm-center{text-align:center}.hidden-sm-up{display:none!important}}@media (max-width:47.9em){.hidden-sm-down{display:none!important}}@media (min-width:48em){.text-md-left{text-align:left}.text-md-right{text-align:right}.text-md-center{text-align:center}.hidden-md-up{display:none!important}}@media (max-width:61.9em){.hidden-md-down{display:none!important}}@media (min-width:62em){.text-lg-left{text-align:left}.text-lg-right{text-align:right}.text-lg-center{text-align:center}.hidden-lg-up{display:none!important}}@media (max-width:74.9em){.hidden-lg-down{display:none!important}}@media (min-width:75em){.text-xl-left{text-align:left}.text-xl-right{text-align:right}.text-xl-center{text-align:center}.hidden-xl-up{display:none!important}}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print .hidden-print{display:none!important}} +/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/non_logged_in_area/static/bootstrap4/css/bootstrap.min.css.map b/non_logged_in_area/static/bootstrap4/css/bootstrap.min.css.map new file mode 100644 index 00000000..f7ddcf6b --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/css/bootstrap.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/_normalize.scss","dist/css/bootstrap.css","../../scss/_reboot.scss","../../scss/_print.scss","../../scss/_button-group.scss","../../scss/mixins/_grid-framework.scss","../../scss/_dropdown.scss","../../scss/_tables.scss","../../scss/_buttons.scss","../../scss/_custom-forms.scss","bootstrap.css","../../scss/_modal.scss","../../scss/_variables.scss","../../scss/_nav.scss","../../scss/_utilities.scss","../../scss/mixins/_hover.scss","../../scss/mixins/_tab-focus.scss","../../scss/_type.scss","../../scss/_list-group.scss","../../scss/mixins/_clearfix.scss","../../scss/_images.scss","../../scss/mixins/_image.scss","../../scss/_mixins.scss","../../scss/_code.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_breakpoints.scss","../../scss/mixins/_table-row.scss","../../scss/_animation.scss","../../scss/_forms.scss","../../scss/mixins/_forms.scss","../../scss/mixins/_buttons.scss","../../scss/mixins/_nav-divider.scss","../../scss/_labels.scss","../../scss/_input-group.scss","../../scss/mixins/_border-radius.scss","../../scss/_alert.scss","../../scss/_close.scss","../../scss/_navbar.scss","../../scss/_card.scss","../../scss/_breadcrumb.scss","../../scss/_progress.scss","../../scss/_pagination.scss","../../scss/mixins/_pagination.scss","../../scss/_pager.scss","../../scss/mixins/_label.scss","../../scss/_jumbotron.scss","../../scss/mixins/_alert.scss","../../scss/mixins/_gradients.scss","../../scss/mixins/_progress.scss","../../scss/_media.scss","../../scss/mixins/_list-group.scss","../../scss/_responsive-embed.scss","../../scss/mixins/_reset-text.scss","../../scss/_popover.scss","../../scss/_tooltip.scss","../../scss/_carousel.scss","../../scss/mixins/_center-block.scss","../../scss/mixins/_screen-reader.scss","../../scss/_utilities-responsive.scss","../../scss/mixins/_hide-text.scss","../../scss/_utilities-spacing.scss","../../scss/mixins/_text-truncate.scss","../../scss/mixins/_text-emphasis.scss","../../scss/mixins/_background-variant.scss","../../scss/mixins/_responsive-visibility.scss"],"names":[],"mappings":"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AAY,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAJd,SAAA,SJoxBN,WAAY,II7wByB,cAAA,SoBUnC,aAAiB,SpBVkB,UoBUnC,MAAiB,UpBVkB,UoBUnC,MAAA,WpBVmC,UoBUnC,MAAA,IpBVmC,UoBUnC,MAAiB,WpBVkB,UoBUnC,MAAA,WpBVmC,UoBUnC,MAAA,IpBVmC,UoBUnC,MAAiB,WpBVkB,UoBUnC,MAAA,WpBVmC,UoBUnC,MAAA,IpBVmC,WoBUnC,MAAiB,WpBHoB,WoBgBvC,MAAuD,WpBhBhB,WoBgBvC,MAAA,KpBhBuC,eoBgBvC,MAAA,KpBhBuC,eoBgBvC,MAA+B,UpBhBQ,eoBgBvC,MAAA,WpBhBuC,eoBgBvC,MAAA,IpBhBuC,eoBgBvC,MAA+B,WpBhBQ,eoBgBvC,MAAA,WpBhBuC,eoBgBvC,MAAA,IpBhBuC,eoBgBvC,MAA+B,WpBhBQ,eoBgBvC,MAAA,WpBhBuC,eoBgBvC,MAAA,IpBhBuC,gBoBgBvC,MAA+B,WpBhBQ,gBoBYvC,MAAsD,WpBZf,gBoBYvC,MAAA,KpBZuC,eoBYvC,KAAA,KpBZuC,eoBYvC,KAA8B,UpBZS,eoBYvC,KAAA,WpBZuC,eoBYvC,KAAA,IpBZuC,eoBYvC,KAA8B,WpBZS,eoBYvC,KAAA,WpBZuC,eoBYvC,KAAA,IpBZuC,eoBYvC,KAA8B,WpBZS,eoBYvC,KAAA,WpBZuC,eoBYvC,KAAA,IpBZuC,gBoBYvC,KAA8B,WpBZS,gBoBQvC,KAAA,WpBRuC,gBoBQvC,KAAA,KpBRuC,iBoBQvC,YAAA,EpBRuC,iBoBQvC,YAAuB,UpBRgB,iBoBQvC,YAAA,WpBRuC,iBoBQvC,YAAA,IpBRuC,iBoBQvC,YAAuB,WpBRgB,iBoBQvC,YAAA,WpBRuC,iBoBQvC,YAAA,IpBRuC,iBoBQvC,YAAuB,WpBRgB,iBoBQvC,YAAA,WpBRuC,iBoBQvC,YAAA,IpBRuC,kBoBQvC,YAAuB,WCCrB,kBrBxBkE,YAAA,WAQ/B,kBoBUnC,YAAA,KAAiB,wBDnCT,Wd0uBX,UAAA,MLhtBS,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA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wEhB,anBQ+B,KAAA,sBmBTN,qBhBVxB,sBgBUwB,qB9BgxE7B,qB8BvxE4B,qCAepB,MAAA,QhBlBK,iBAAA,QduxEX,aAAc,Q8BxvEH,8BAAA,8BhB/BR,8BAAA,8BHsNgC,wCGtNhC,wCgBqCK,iBnBkL2B,KGvNxB,aAAA,KHyNwB,8BA9LF,8BAAA,wCJ8BxB,iBAAA,KP2vET,aAAc,KAGhB,UACE,MAAO,KACP,iBAAkB,Q8B9yEhB,anB8MiC,QAAA,iBmB/MR,gBhBVxB,iBgBUwB,gB9B6zE7B,gB8Bp0E4B,gCAepB,MAAA,KhBlBK,iBAAA,Qdo0EX,aAAc,Q8BryEH,yBAAA,yBhB/BR,yBAAA,yBH2B8B,mCG3B9B,mCgBqCK,iBnBVyB,QG3BtB,aAAA,QH6NwB,yBmB/NnC,yBnB4BiC,mCJkCrB,iBAAA,QPqyEZ,aAAc,QAGhB,aACE,MAAO,KACP,iBAAkB,Q8B31EhB,anBkNiC,QAAA,oBmBnNR,mBhBVxB,oBgBUwB,mB9B02E7B,mB8Bj3E4B,mCAepB,MAAA,KhBlBK,iBAAA,Qdi3EX,aAAc,Q8Bl1EH,4BAAA,4BhB/BR,4BAAA,4BH0B8B,sCG1B9B,sCgBqCK,iBnBXyB,QG1BtB,aAAA,QHiOwB,4BmBnOnC,4BnB8BiC,sCJmCrB,iBAAA,QP+0EZ,aAAc,QAGhB,aACE,MAAO,KACP,iBAAkB,Q8Bx4EhB,anBsNiC,QAAA,oBmBvNR,mBhBVxB,oBgBUwB,mB9Bu5E7B,mB8B95E4B,mCAepB,MAAA,KhBlBK,iBAAA,Qd85EX,aAAc,Q8B/3EH,4BAAA,4BhB/BR,4BAAA,4BH4B8B,sCG5B9B,sCgBqCK,iBnBTyB,QG5BtB,aAAA,QHqOwB,4BmBvOnC,4BnB+BiC,sCJqCtB,iBAAA,QPy3EX,aAAc,QAGhB,YACE,MAAO,KACP,iBAAkB,Q8Br7EhB,anB0NiC,QAAA,mBmB3NR,kBhBVxB,mBgBUwB,kB9Bo8E7B,kB8B38E4B,kCAepB,MAAA,KhBlBK,iBAAA,Qd28EX,aAAc,QAUhB,mBADA,mBAEA,kCACE,iBAAkB,K8Bx7EP,2BAAA,2BhB/BR,2BAAA,2BH6B8B,qCG7B9B,qCgBqCK,iBnBRyB,QG7BtB,aAAA,QHyBsB,2BmBmBV,2BACO,qCAC9B,iBnBrBiC,QJ8Cb,aAAA,QPo6EtB,qBACE,MAAO,QACP,iBAAkB,Y8Bx7EhB,aAAY,QAKA,4BANa,2BhBpDxB,4BgBoDwB,2B9Bw8E7B,2BWn+EmC,2CmBmC3B,MAAA,KhB5DK,iBAAA,Qdy/EX,aAAc,Qcz/EX,oCdkgFL,oCclgFK,oCAAA,oCAAQ,8CgBuEc,8C9Bi8EzB,aAAc,Q8B59ES,oCACO,oCnB0KK,8CJ7Ib,aAAA,QPu8ExB,uBACE,MAAO,KACP,iBAAkB,Y8B99EhB,aAAY,KAKA,8BANa,6BhBpDxB,8BgBoDwB,6B9B8+E7B,6BW30EqC,6CmB3J7B,MAAA,KhB5DK,iBAAA,Kd+hFX,aAAc,Kc/hFX,sCdwiFL,sCcxiFK,sCAAA,sCAAQ,gDgBuEc,gD9Bu+EzB,aAAc,K8BlgFS,sCACO,sCnBlBG,gDJkDhB,aAAA,KP0+EnB,kBACE,MAAO,QACP,iBAAkB,Y8BpgFhB,aAAY,QAKA,yBANa,wBhBpDxB,yBgBoDwB,wB9BohF7B,wBW7iFmC,wCmBiC3B,MAAA,KhB5DK,iBAAA,QdqkFX,aAAc,QcrkFX,iCd8kFL,iCc9kFK,iCAAA,iCAAQ,2CgBuEc,2C9B6gFzB,aAAc,Q8BxiFS,iCACvB,iCnBnBiC,2CJsDb,aAAA,QP6gFtB,qBACE,MAAO,QACP,iBAAkB,Y8B1iFhB,aAAY,QAKA,4BANa,2BhBpDxB,4BgBoDwB,2B9B0jF7B,2BWplFmC,2CmBkC3B,MAAA,KhB5DK,iBAAA,Qd2mFX,aAAc,Qc3mFX,oCdonFL,oCcpnFK,oCAAA,oCAAQ,8CgBuEc,8C9BmjFzB,aAAc,Q8B9kFS,oCACO,oCnBjBG,8CJuDb,aAAA,QPgjFtB,qBACE,MAAO,QACP,iBAAkB,Y8BhlFhB,aAAY,QAKA,4BANa,2BhBpDxB,4BgBoDwB,2B9BgmF7B,2BWxnFmC,2CmBgC3B,MAAA,KhB5DK,iBAAA,QdipFX,aAAc,QcjpFX,oCd0pFL,oCc1pFK,oCAAA,oCAAQ,8CgBuEc,8C9BylFzB,aAAc,Q8BpnFS,oCACO,oCnBhBG,8CJyDd,aAAA,QPmlFrB,oBACE,MAA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"} \ No newline at end of file diff --git a/non_logged_in_area/static/bootstrap4/js/bootstrap.js b/non_logged_in_area/static/bootstrap4/js/bootstrap.js new file mode 100644 index 00000000..7d51c641 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/bootstrap.js @@ -0,0 +1,3519 @@ +/*! + * Bootstrap v4.0.0-alpha (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + + ++function ($) { + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): util.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +'use strict'; + +var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +var Util = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Private TransitionEnd Helpers + * ------------------------------------------------------------------------ + */ + + var transition = false; + + var TransitionEndEvent = { + WebkitTransition: 'webkitTransitionEnd', + MozTransition: 'transitionend', + OTransition: 'oTransitionEnd otransitionend', + transition: 'transitionend' + }; + + // shoutout AngusCroll (https://goo.gl/pxwQGp) + function toType(obj) { + return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); + } + + function isElement(obj) { + return (obj[0] || obj).nodeType; + } + + function getSpecialTransitionEndEvent() { + return { + bindType: transition.end, + delegateType: transition.end, + handle: function handle(event) { + if ($(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); + } + } + }; + } + + function transitionEndTest() { + if (window.QUnit) { + return false; + } + + var el = document.createElement('bootstrap'); + + for (var _name in TransitionEndEvent) { + if (el.style[_name] !== undefined) { + return { end: TransitionEndEvent[_name] }; + } + } + + return false; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + + $(this).one(Util.TRANSITION_END, function () { + called = true; + }); + + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + + return this; + } + + function setTransitionEndSupport() { + transition = transitionEndTest(); + + $.fn.emulateTransitionEnd = transitionEndEmulator; + + if (Util.supportsTransitionEnd()) { + $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } + } + + /** + * -------------------------------------------------------------------------- + * Public Util Api + * -------------------------------------------------------------------------- + */ + + var Util = { + + TRANSITION_END: 'bsTransitionEnd', + + getUID: function getUID(prefix) { + do { + prefix += ~ ~(Math.random() * 1000000); + } while (document.getElementById(prefix)); + return prefix; + }, + + getSelectorFromElement: function getSelectorFromElement(element) { + var selector = element.getAttribute('data-target'); + + if (!selector) { + selector = element.getAttribute('href') || ''; + selector = /^#[a-z]/i.test(selector) ? selector : null; + } + + return selector; + }, + + reflow: function reflow(element) { + new Function('bs', 'return bs')(element.offsetHeight); + }, + + triggerTransitionEnd: function triggerTransitionEnd(element) { + $(element).trigger(transition.end); + }, + + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(transition); + }, + + typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { + for (var property in configTypes) { + if (configTypes.hasOwnProperty(property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = undefined; + + if (value && isElement(value)) { + valueType = 'element'; + } else { + valueType = toType(value); + } + + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); + } + } + } + } + }; + + setTransitionEndSupport(); + + return Util; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): alert.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Alert = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'alert'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.alert'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 150; + + var Selector = { + DISMISS: '[data-dismiss="alert"]' + }; + + var Event = { + CLOSE: 'close' + EVENT_KEY, + CLOSED: 'closed' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + ALERT: 'alert', + FADE: 'fade', + IN: 'in' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Alert = (function () { + function Alert(element) { + _classCallCheck(this, Alert); + + this._element = element; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Alert, [{ + key: 'close', + + // public + + value: function close(element) { + element = element || this._element; + + var rootElement = this._getRootElement(element); + var customEvent = this._triggerCloseEvent(rootElement); + + if (customEvent.isDefaultPrevented()) { + return; + } + + this._removeElement(rootElement); + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + this._element = null; + } + + // private + + }, { + key: '_getRootElement', + value: function _getRootElement(element) { + var selector = Util.getSelectorFromElement(element); + var parent = false; + + if (selector) { + parent = $(selector)[0]; + } + + if (!parent) { + parent = $(element).closest('.' + ClassName.ALERT)[0]; + } + + return parent; + } + }, { + key: '_triggerCloseEvent', + value: function _triggerCloseEvent(element) { + var closeEvent = $.Event(Event.CLOSE); + + $(element).trigger(closeEvent); + return closeEvent; + } + }, { + key: '_removeElement', + value: function _removeElement(element) { + $(element).removeClass(ClassName.IN); + + if (!Util.supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) { + this._destroyElement(element); + return; + } + + $(element).one(Util.TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION); + } + }, { + key: '_destroyElement', + value: function _destroyElement(element) { + $(element).detach().trigger(Event.CLOSED).remove(); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $element = $(this); + var data = $element.data(DATA_KEY); + + if (!data) { + data = new Alert(this); + $element.data(DATA_KEY, data); + } + + if (config === 'close') { + data[config](this); + } + }); + } + }, { + key: '_handleDismiss', + value: function _handleDismiss(alertInstance) { + return function (event) { + if (event) { + event.preventDefault(); + } + + alertInstance.close(this); + }; + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Alert; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Alert._jQueryInterface; + $.fn[NAME].Constructor = Alert; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Alert._jQueryInterface; + }; + + return Alert; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): button.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Button = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'button'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.button'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var ClassName = { + ACTIVE: 'active', + BUTTON: 'btn', + FOCUS: 'focus' + }; + + var Selector = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: 'input', + ACTIVE: '.active', + BUTTON: '.btn' + }; + + var Event = { + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, + FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY) + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Button = (function () { + function Button(element) { + _classCallCheck(this, Button); + + this._element = element; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Button, [{ + key: 'toggle', + + // public + + value: function toggle() { + var triggerChangeEvent = true; + var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0]; + + if (rootElement) { + var input = $(this._element).find(Selector.INPUT)[0]; + + if (input) { + if (input.type === 'radio') { + if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) { + triggerChangeEvent = false; + } else { + var activeElement = $(rootElement).find(Selector.ACTIVE)[0]; + + if (activeElement) { + $(activeElement).removeClass(ClassName.ACTIVE); + } + } + } + + if (triggerChangeEvent) { + input.checked = !$(this._element).hasClass(ClassName.ACTIVE); + $(this._element).trigger('change'); + } + } + } else { + this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE)); + } + + if (triggerChangeEvent) { + $(this._element).toggleClass(ClassName.ACTIVE); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + this._element = null; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + + if (!data) { + data = new Button(this); + $(this).data(DATA_KEY, data); + } + + if (config === 'toggle') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Button; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + event.preventDefault(); + + var button = event.target; + + if (!$(button).hasClass(ClassName.BUTTON)) { + button = $(button).closest(Selector.BUTTON); + } + + Button._jQueryInterface.call($(button), 'toggle'); + }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + var button = $(event.target).closest(Selector.BUTTON)[0]; + $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Button._jQueryInterface; + $.fn[NAME].Constructor = Button; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Button._jQueryInterface; + }; + + return Button; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): carousel.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Carousel = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'carousel'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.carousel'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 600; + + var Default = { + interval: 5000, + keyboard: true, + slide: false, + pause: 'hover', + wrap: true + }; + + var DefaultType = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean' + }; + + var Direction = { + NEXT: 'next', + PREVIOUS: 'prev' + }; + + var Event = { + SLIDE: 'slide' + EVENT_KEY, + SLID: 'slid' + EVENT_KEY, + KEYDOWN: 'keydown' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY, + LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + CAROUSEL: 'carousel', + ACTIVE: 'active', + SLIDE: 'slide', + RIGHT: 'right', + LEFT: 'left', + ITEM: 'carousel-item' + }; + + var Selector = { + ACTIVE: '.active', + ACTIVE_ITEM: '.active.carousel-item', + ITEM: '.carousel-item', + NEXT_PREV: '.next, .prev', + INDICATORS: '.carousel-indicators', + DATA_SLIDE: '[data-slide], [data-slide-to]', + DATA_RIDE: '[data-ride="carousel"]' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Carousel = (function () { + function Carousel(element, config) { + _classCallCheck(this, Carousel); + + this._items = null; + this._interval = null; + this._activeElement = null; + + this._isPaused = false; + this._isSliding = false; + + this._config = this._getConfig(config); + this._element = $(element)[0]; + this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]; + + this._addEventListeners(); + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Carousel, [{ + key: 'next', + + // public + + value: function next() { + if (!this._isSliding) { + this._slide(Direction.NEXT); + } + } + }, { + key: 'prev', + value: function prev() { + if (!this._isSliding) { + this._slide(Direction.PREVIOUS); + } + } + }, { + key: 'pause', + value: function pause(event) { + if (!event) { + this._isPaused = true; + } + + if ($(this._element).find(Selector.NEXT_PREV)[0] && Util.supportsTransitionEnd()) { + Util.triggerTransitionEnd(this._element); + this.cycle(true); + } + + clearInterval(this._interval); + this._interval = null; + } + }, { + key: 'cycle', + value: function cycle(event) { + if (!event) { + this._isPaused = false; + } + + if (this._interval) { + clearInterval(this._interval); + this._interval = null; + } + + if (this._config.interval && !this._isPaused) { + this._interval = setInterval($.proxy(this.next, this), this._config.interval); + } + } + }, { + key: 'to', + value: function to(index) { + var _this2 = this; + + this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; + + var activeIndex = this._getItemIndex(this._activeElement); + + if (index > this._items.length - 1 || index < 0) { + return; + } + + if (this._isSliding) { + $(this._element).one(Event.SLID, function () { + return _this2.to(index); + }); + return; + } + + if (activeIndex === index) { + this.pause(); + this.cycle(); + return; + } + + var direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS; + + this._slide(direction, this._items[index]); + } + }, { + key: 'dispose', + value: function dispose() { + $(this._element).off(EVENT_KEY); + $.removeData(this._element, DATA_KEY); + + this._items = null; + this._config = null; + this._element = null; + this._interval = null; + this._isPaused = null; + this._isSliding = null; + this._activeElement = null; + this._indicatorsElement = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_addEventListeners', + value: function _addEventListeners() { + if (this._config.keyboard) { + $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this)); + } + + if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) { + $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this)); + } + } + }, { + key: '_keydown', + value: function _keydown(event) { + event.preventDefault(); + + if (/input|textarea/i.test(event.target.tagName)) { + return; + } + + switch (event.which) { + case 37: + this.prev();break; + case 39: + this.next();break; + default: + return; + } + } + }, { + key: '_getItemIndex', + value: function _getItemIndex(element) { + this._items = $.makeArray($(element).parent().find(Selector.ITEM)); + return this._items.indexOf(element); + } + }, { + key: '_getItemByDirection', + value: function _getItemByDirection(direction, activeElement) { + var isNextDirection = direction === Direction.NEXT; + var isPrevDirection = direction === Direction.PREVIOUS; + var activeIndex = this._getItemIndex(activeElement); + var lastItemIndex = this._items.length - 1; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; + + if (isGoingToWrap && !this._config.wrap) { + return activeElement; + } + + var delta = direction === Direction.PREVIOUS ? -1 : 1; + var itemIndex = (activeIndex + delta) % this._items.length; + + return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; + } + }, { + key: '_triggerSlideEvent', + value: function _triggerSlideEvent(relatedTarget, directionalClassname) { + var slideEvent = $.Event(Event.SLIDE, { + relatedTarget: relatedTarget, + direction: directionalClassname + }); + + $(this._element).trigger(slideEvent); + + return slideEvent; + } + }, { + key: '_setActiveIndicatorElement', + value: function _setActiveIndicatorElement(element) { + if (this._indicatorsElement) { + $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + + var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; + + if (nextIndicator) { + $(nextIndicator).addClass(ClassName.ACTIVE); + } + } + } + }, { + key: '_slide', + value: function _slide(direction, element) { + var _this3 = this; + + var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; + var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); + + var isCycling = Boolean(this._interval); + + var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT; + + if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { + this._isSliding = false; + return; + } + + var slideEvent = this._triggerSlideEvent(nextElement, directionalClassName); + if (slideEvent.isDefaultPrevented()) { + return; + } + + if (!activeElement || !nextElement) { + // some weirdness is happening, so we bail + return; + } + + this._isSliding = true; + + if (isCycling) { + this.pause(); + } + + this._setActiveIndicatorElement(nextElement); + + var slidEvent = $.Event(Event.SLID, { + relatedTarget: nextElement, + direction: directionalClassName + }); + + if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) { + + $(nextElement).addClass(direction); + + Util.reflow(nextElement); + + $(activeElement).addClass(directionalClassName); + $(nextElement).addClass(directionalClassName); + + $(activeElement).one(Util.TRANSITION_END, function () { + $(nextElement).removeClass(directionalClassName).removeClass(direction); + + $(nextElement).addClass(ClassName.ACTIVE); + + $(activeElement).removeClass(ClassName.ACTIVE).removeClass(direction).removeClass(directionalClassName); + + _this3._isSliding = false; + + setTimeout(function () { + return $(_this3._element).trigger(slidEvent); + }, 0); + }).emulateTransitionEnd(TRANSITION_DURATION); + } else { + $(activeElement).removeClass(ClassName.ACTIVE); + $(nextElement).addClass(ClassName.ACTIVE); + + this._isSliding = false; + $(this._element).trigger(slidEvent); + } + + if (isCycling) { + this.cycle(); + } + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = $.extend({}, Default, $(this).data()); + + if (typeof config === 'object') { + $.extend(_config, config); + } + + var action = typeof config === 'string' ? config : _config.slide; + + if (!data) { + data = new Carousel(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'number') { + data.to(config); + } else if (action) { + data[action](); + } else if (_config.interval) { + data.pause(); + data.cycle(); + } + }); + } + }, { + key: '_dataApiClickHandler', + value: function _dataApiClickHandler(event) { + var selector = Util.getSelectorFromElement(this); + + if (!selector) { + return; + } + + var target = $(selector)[0]; + + if (!target || !$(target).hasClass(ClassName.CAROUSEL)) { + return; + } + + var config = $.extend({}, $(target).data(), $(this).data()); + var slideIndex = this.getAttribute('data-slide-to'); + + if (slideIndex) { + config.interval = false; + } + + Carousel._jQueryInterface.call($(target), config); + + if (slideIndex) { + $(target).data(DATA_KEY).to(slideIndex); + } + + event.preventDefault(); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return Carousel; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); + + $(window).on(Event.LOAD_DATA_API, function () { + $(Selector.DATA_RIDE).each(function () { + var $carousel = $(this); + Carousel._jQueryInterface.call($carousel, $carousel.data()); + }); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Carousel._jQueryInterface; + $.fn[NAME].Constructor = Carousel; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Carousel._jQueryInterface; + }; + + return Carousel; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): collapse.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Collapse = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'collapse'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.collapse'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 600; + + var Default = { + toggle: true, + parent: '' + }; + + var DefaultType = { + toggle: 'boolean', + parent: 'string' + }; + + var Event = { + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + IN: 'in', + COLLAPSE: 'collapse', + COLLAPSING: 'collapsing', + COLLAPSED: 'collapsed' + }; + + var Dimension = { + WIDTH: 'width', + HEIGHT: 'height' + }; + + var Selector = { + ACTIVES: '.panel > .in, .panel > .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Collapse = (function () { + function Collapse(element, config) { + _classCallCheck(this, Collapse); + + this._isTransitioning = false; + this._element = element; + this._config = this._getConfig(config); + this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]'))); + + this._parent = this._config.parent ? this._getParent() : null; + + if (!this._config.parent) { + this._addAriaAndCollapsedClass(this._element, this._triggerArray); + } + + if (this._config.toggle) { + this.toggle(); + } + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Collapse, [{ + key: 'toggle', + + // public + + value: function toggle() { + if ($(this._element).hasClass(ClassName.IN)) { + this.hide(); + } else { + this.show(); + } + } + }, { + key: 'show', + value: function show() { + var _this4 = this; + + if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) { + return; + } + + var actives = undefined; + var activesData = undefined; + + if (this._parent) { + actives = $.makeArray($(Selector.ACTIVES)); + if (!actives.length) { + actives = null; + } + } + + if (actives) { + activesData = $(actives).data(DATA_KEY); + if (activesData && activesData._isTransitioning) { + return; + } + } + + var startEvent = $.Event(Event.SHOW); + $(this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + + if (actives) { + Collapse._jQueryInterface.call($(actives), 'hide'); + if (!activesData) { + $(actives).data(DATA_KEY, null); + } + } + + var dimension = this._getDimension(); + + $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); + + this._element.style[dimension] = 0; + this._element.setAttribute('aria-expanded', true); + + if (this._triggerArray.length) { + $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); + } + + this.setTransitioning(true); + + var complete = function complete() { + $(_this4._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN); + + _this4._element.style[dimension] = ''; + + _this4.setTransitioning(false); + + $(_this4._element).trigger(Event.SHOWN); + }; + + if (!Util.supportsTransitionEnd()) { + complete(); + return; + } + + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = 'scroll' + capitalizedDimension; + + $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + + this._element.style[dimension] = this._element[scrollSize] + 'px'; + } + }, { + key: 'hide', + value: function hide() { + var _this5 = this; + + if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) { + return; + } + + var startEvent = $.Event(Event.HIDE); + $(this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + + var dimension = this._getDimension(); + var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight'; + + this._element.style[dimension] = this._element[offsetDimension] + 'px'; + + Util.reflow(this._element); + + $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN); + + this._element.setAttribute('aria-expanded', false); + + if (this._triggerArray.length) { + $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); + } + + this.setTransitioning(true); + + var complete = function complete() { + _this5.setTransitioning(false); + $(_this5._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); + }; + + this._element.style[dimension] = 0; + + if (!Util.supportsTransitionEnd()) { + complete(); + return; + } + + $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + } + }, { + key: 'setTransitioning', + value: function setTransitioning(isTransitioning) { + this._isTransitioning = isTransitioning; + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + + this._config = null; + this._parent = null; + this._element = null; + this._triggerArray = null; + this._isTransitioning = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + config.toggle = Boolean(config.toggle); // coerce string values + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_getDimension', + value: function _getDimension() { + var hasWidth = $(this._element).hasClass(Dimension.WIDTH); + return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; + } + }, { + key: '_getParent', + value: function _getParent() { + var _this6 = this; + + var parent = $(this._config.parent)[0]; + var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]'; + + $(parent).find(selector).each(function (i, element) { + _this6._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); + }); + + return parent; + } + }, { + key: '_addAriaAndCollapsedClass', + value: function _addAriaAndCollapsedClass(element, triggerArray) { + if (element) { + var isOpen = $(element).hasClass(ClassName.IN); + element.setAttribute('aria-expanded', isOpen); + + if (triggerArray.length) { + $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); + } + } + } + + // static + + }], [{ + key: '_getTargetFromElement', + value: function _getTargetFromElement(element) { + var selector = Util.getSelectorFromElement(element); + return selector ? $(selector)[0] : null; + } + }, { + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config); + + if (!data && _config.toggle && /show|hide/.test(config)) { + _config.toggle = false; + } + + if (!data) { + data = new Collapse(this, _config); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return Collapse; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + + var target = Collapse._getTargetFromElement(this); + var data = $(target).data(DATA_KEY); + var config = data ? 'toggle' : $(this).data(); + + Collapse._jQueryInterface.call($(target), config); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Collapse._jQueryInterface; + $.fn[NAME].Constructor = Collapse; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Collapse._jQueryInterface; + }; + + return Collapse; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): dropdown.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Dropdown = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'dropdown'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.dropdown'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + CLICK: 'click' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, + KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + BACKDROP: 'dropdown-backdrop', + DISABLED: 'disabled', + OPEN: 'open' + }; + + var Selector = { + BACKDROP: '.dropdown-backdrop', + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + ROLE_MENU: '[role="menu"]', + ROLE_LISTBOX: '[role="listbox"]', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Dropdown = (function () { + function Dropdown(element) { + _classCallCheck(this, Dropdown); + + this._element = element; + + this._addEventListeners(); + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Dropdown, [{ + key: 'toggle', + + // public + + value: function toggle() { + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return false; + } + + var parent = Dropdown._getParentFromElement(this); + var isActive = $(parent).hasClass(ClassName.OPEN); + + Dropdown._clearMenus(); + + if (isActive) { + return false; + } + + if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) { + + // if mobile we use a backdrop because click events don't delegate + var dropdown = document.createElement('div'); + dropdown.className = ClassName.BACKDROP; + $(dropdown).insertBefore(this); + $(dropdown).on('click', Dropdown._clearMenus); + } + + var relatedTarget = { relatedTarget: this }; + var showEvent = $.Event(Event.SHOW, relatedTarget); + + $(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return false; + } + + this.focus(); + this.setAttribute('aria-expanded', 'true'); + + $(parent).toggleClass(ClassName.OPEN); + $(parent).trigger($.Event(Event.SHOWN, relatedTarget)); + + return false; + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + $(this._element).off(EVENT_KEY); + this._element = null; + } + + // private + + }, { + key: '_addEventListeners', + value: function _addEventListeners() { + $(this._element).on(Event.CLICK, this.toggle); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + + if (!data) { + $(this).data(DATA_KEY, data = new Dropdown(this)); + } + + if (typeof config === 'string') { + data[config].call(this); + } + }); + } + }, { + key: '_clearMenus', + value: function _clearMenus(event) { + if (event && event.which === 3) { + return; + } + + var backdrop = $(Selector.BACKDROP)[0]; + if (backdrop) { + backdrop.parentNode.removeChild(backdrop); + } + + var toggles = $.makeArray($(Selector.DATA_TOGGLE)); + + for (var i = 0; i < toggles.length; i++) { + var _parent = Dropdown._getParentFromElement(toggles[i]); + var relatedTarget = { relatedTarget: toggles[i] }; + + if (!$(_parent).hasClass(ClassName.OPEN)) { + continue; + } + + if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) { + continue; + } + + var hideEvent = $.Event(Event.HIDE, relatedTarget); + $(_parent).trigger(hideEvent); + if (hideEvent.isDefaultPrevented()) { + continue; + } + + toggles[i].setAttribute('aria-expanded', 'false'); + + $(_parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget)); + } + } + }, { + key: '_getParentFromElement', + value: function _getParentFromElement(element) { + var parent = undefined; + var selector = Util.getSelectorFromElement(element); + + if (selector) { + parent = $(selector)[0]; + } + + return parent || element.parentNode; + } + }, { + key: '_dataApiKeydownHandler', + value: function _dataApiKeydownHandler(event) { + if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this); + var isActive = $(parent).hasClass(ClassName.OPEN); + + if (!isActive && event.which !== 27 || isActive && event.which === 27) { + + if (event.which === 27) { + var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; + $(toggle).trigger('focus'); + } + + $(this).trigger('click'); + return; + } + + var items = $.makeArray($(Selector.VISIBLE_ITEMS)); + + items = items.filter(function (item) { + return item.offsetWidth || item.offsetHeight; + }); + + if (!items.length) { + return; + } + + var index = items.indexOf(event.target); + + if (event.which === 38 && index > 0) { + // up + index--; + } + + if (event.which === 40 && index < items.length - 1) { + // down + index++; + } + + if (! ~index) { + index = 0; + } + + items[index].focus(); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Dropdown; + })(); + + $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + e.stopPropagation(); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Dropdown._jQueryInterface; + $.fn[NAME].Constructor = Dropdown; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Dropdown._jQueryInterface; + }; + + return Dropdown; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): modal.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Modal = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'modal'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.modal'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 300; + var BACKDROP_TRANSITION_DURATION = 150; + + var Default = { + backdrop: true, + keyboard: true, + focus: true, + show: true + }; + + var DefaultType = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + show: 'boolean' + }; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + RESIZE: 'resize' + EVENT_KEY, + CLICK_DISMISS: 'click.dismiss' + EVENT_KEY, + KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY, + MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY, + MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + SCROLLBAR_MEASURER: 'modal-scrollbar-measure', + BACKDROP: 'modal-backdrop', + OPEN: 'modal-open', + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + DIALOG: '.modal-dialog', + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Modal = (function () { + function Modal(element, config) { + _classCallCheck(this, Modal); + + this._config = this._getConfig(config); + this._element = element; + this._dialog = $(element).find(Selector.DIALOG)[0]; + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._originalBodyPadding = 0; + this._scrollbarWidth = 0; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Modal, [{ + key: 'toggle', + + // public + + value: function toggle(relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); + } + }, { + key: 'show', + value: function show(relatedTarget) { + var _this7 = this; + + var showEvent = $.Event(Event.SHOW, { + relatedTarget: relatedTarget + }); + + $(this._element).trigger(showEvent); + + if (this._isShown || showEvent.isDefaultPrevented()) { + return; + } + + this._isShown = true; + + this._checkScrollbar(); + this._setScrollbar(); + + $(document.body).addClass(ClassName.OPEN); + + this._setEscapeEvent(); + this._setResizeEvent(); + + $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this)); + + $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { + $(_this7._element).one(Event.MOUSEUP_DISMISS, function (event) { + if ($(event.target).is(_this7._element)) { + that._ignoreBackdropClick = true; + } + }); + }); + + this._showBackdrop($.proxy(this._showElement, this, relatedTarget)); + } + }, { + key: 'hide', + value: function hide(event) { + if (event) { + event.preventDefault(); + } + + var hideEvent = $.Event(Event.HIDE); + + $(this._element).trigger(hideEvent); + + if (!this._isShown || hideEvent.isDefaultPrevented()) { + return; + } + + this._isShown = false; + + this._setEscapeEvent(); + this._setResizeEvent(); + + $(document).off(Event.FOCUSIN); + + $(this._element).removeClass(ClassName.IN); + + $(this._element).off(Event.CLICK_DISMISS); + $(this._dialog).off(Event.MOUSEDOWN_DISMISS); + + if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) { + + $(this._element).one(Util.TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION); + } else { + this._hideModal(); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + + $(window).off(EVENT_KEY); + $(document).off(EVENT_KEY); + $(this._element).off(EVENT_KEY); + $(this._backdrop).off(EVENT_KEY); + + this._config = null; + this._element = null; + this._dialog = null; + this._backdrop = null; + this._isShown = null; + this._isBodyOverflowing = null; + this._ignoreBackdropClick = null; + this._originalBodyPadding = null; + this._scrollbarWidth = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + Util.typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_showElement', + value: function _showElement(relatedTarget) { + var _this8 = this; + + var transition = Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE); + + if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { + // don't move modals dom position + document.body.appendChild(this._element); + } + + this._element.style.display = 'block'; + this._element.scrollTop = 0; + + if (transition) { + Util.reflow(this._element); + } + + $(this._element).addClass(ClassName.IN); + + if (this._config.focus) { + this._enforceFocus(); + } + + var shownEvent = $.Event(Event.SHOWN, { + relatedTarget: relatedTarget + }); + + var transitionComplete = function transitionComplete() { + if (_this8._config.focus) { + _this8._element.focus(); + } + $(_this8._element).trigger(shownEvent); + }; + + if (transition) { + $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); + } else { + transitionComplete(); + } + } + }, { + key: '_enforceFocus', + value: function _enforceFocus() { + var _this9 = this; + + $(document).off(Event.FOCUSIN) // guard against infinite focus loop + .on(Event.FOCUSIN, function (event) { + if (_this9._element !== event.target && !$(_this9._element).has(event.target).length) { + _this9._element.focus(); + } + }); + } + }, { + key: '_setEscapeEvent', + value: function _setEscapeEvent() { + var _this10 = this; + + if (this._isShown && this._config.keyboard) { + $(this._element).on(Event.KEYDOWN_DISMISS, function (event) { + if (event.which === 27) { + _this10.hide(); + } + }); + } else if (!this._isShown) { + $(this._element).off(Event.KEYDOWN_DISMISS); + } + } + }, { + key: '_setResizeEvent', + value: function _setResizeEvent() { + if (this._isShown) { + $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this)); + } else { + $(window).off(Event.RESIZE); + } + } + }, { + key: '_hideModal', + value: function _hideModal() { + var _this11 = this; + + this._element.style.display = 'none'; + this._showBackdrop(function () { + $(document.body).removeClass(ClassName.OPEN); + _this11._resetAdjustments(); + _this11._resetScrollbar(); + $(_this11._element).trigger(Event.HIDDEN); + }); + } + }, { + key: '_removeBackdrop', + value: function _removeBackdrop() { + if (this._backdrop) { + $(this._backdrop).remove(); + this._backdrop = null; + } + } + }, { + key: '_showBackdrop', + value: function _showBackdrop(callback) { + var _this12 = this; + + var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; + + if (this._isShown && this._config.backdrop) { + var doAnimate = Util.supportsTransitionEnd() && animate; + + this._backdrop = document.createElement('div'); + this._backdrop.className = ClassName.BACKDROP; + + if (animate) { + $(this._backdrop).addClass(animate); + } + + $(this._backdrop).appendTo(document.body); + + $(this._element).on(Event.CLICK_DISMISS, function (event) { + if (_this12._ignoreBackdropClick) { + _this12._ignoreBackdropClick = false; + return; + } + if (event.target !== event.currentTarget) { + return; + } + if (_this12._config.backdrop === 'static') { + _this12._element.focus(); + } else { + _this12.hide(); + } + }); + + if (doAnimate) { + Util.reflow(this._backdrop); + } + + $(this._backdrop).addClass(ClassName.IN); + + if (!callback) { + return; + } + + if (!doAnimate) { + callback(); + return; + } + + $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + } else if (!this._isShown && this._backdrop) { + $(this._backdrop).removeClass(ClassName.IN); + + var callbackRemove = function callbackRemove() { + _this12._removeBackdrop(); + if (callback) { + callback(); + } + }; + + if (Util.supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) { + $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + } else { + callbackRemove(); + } + } else if (callback) { + callback(); + } + } + + // ---------------------------------------------------------------------- + // the following methods are used to handle overflowing modals + // todo (fat): these should probably be refactored out of modal.js + // ---------------------------------------------------------------------- + + }, { + key: '_handleUpdate', + value: function _handleUpdate() { + this._adjustDialog(); + } + }, { + key: '_adjustDialog', + value: function _adjustDialog() { + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!this._isBodyOverflowing && isModalOverflowing) { + this._element.style.paddingLeft = this._scrollbarWidth + 'px'; + } + + if (this._isBodyOverflowing && !isModalOverflowing) { + this._element.style.paddingRight = this._scrollbarWidth + 'px~'; + } + } + }, { + key: '_resetAdjustments', + value: function _resetAdjustments() { + this._element.style.paddingLeft = ''; + this._element.style.paddingRight = ''; + } + }, { + key: '_checkScrollbar', + value: function _checkScrollbar() { + var fullWindowWidth = window.innerWidth; + if (!fullWindowWidth) { + // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect(); + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left); + } + this._isBodyOverflowing = document.body.clientWidth < fullWindowWidth; + this._scrollbarWidth = this._getScrollbarWidth(); + } + }, { + key: '_setScrollbar', + value: function _setScrollbar() { + var bodyPadding = parseInt($(Selector.FIXED_CONTENT).css('padding-right') || 0, 10); + + this._originalBodyPadding = document.body.style.paddingRight || ''; + + if (this._isBodyOverflowing) { + document.body.style.paddingRight = bodyPadding + (this._scrollbarWidth + 'px'); + } + } + }, { + key: '_resetScrollbar', + value: function _resetScrollbar() { + document.body.style.paddingRight = this._originalBodyPadding; + } + }, { + key: '_getScrollbarWidth', + value: function _getScrollbarWidth() { + // thx d.walsh + var scrollDiv = document.createElement('div'); + scrollDiv.className = ClassName.SCROLLBAR_MEASURER; + document.body.appendChild(scrollDiv); + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config, relatedTarget) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config); + + if (!data) { + data = new Modal(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](relatedTarget); + } else if (_config.show) { + data.show(relatedTarget); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return Modal; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + var _this13 = this; + + var target = undefined; + var selector = Util.getSelectorFromElement(this); + + if (selector) { + target = $(selector)[0]; + } + + var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data()); + + if (this.tagName === 'A') { + event.preventDefault(); + } + + var $target = $(target).one(Event.SHOW, function (showEvent) { + if (showEvent.isDefaultPrevented()) { + // only register focus restorer if modal will actually get shown + return; + } + + $target.one(Event.HIDDEN, function () { + if ($(_this13).is(':visible')) { + _this13.focus(); + } + }); + }); + + Modal._jQueryInterface.call($(target), config, this); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Modal._jQueryInterface; + $.fn[NAME].Constructor = Modal; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Modal._jQueryInterface; + }; + + return Modal; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): scrollspy.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var ScrollSpy = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'scrollspy'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.scrollspy'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Default = { + offset: 10, + method: 'auto', + target: '' + }; + + var DefaultType = { + offset: 'number', + method: 'string', + target: '(string|element)' + }; + + var Event = { + ACTIVATE: 'activate' + EVENT_KEY, + SCROLL: 'scroll' + EVENT_KEY, + LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + DROPDOWN_ITEM: 'dropdown-item', + DROPDOWN_MENU: 'dropdown-menu', + NAV_LINK: 'nav-link', + NAV: 'nav', + ACTIVE: 'active' + }; + + var Selector = { + DATA_SPY: '[data-spy="scroll"]', + ACTIVE: '.active', + LIST_ITEM: '.list-item', + LI: 'li', + LI_DROPDOWN: 'li.dropdown', + NAV_LINKS: '.nav-link', + DROPDOWN: '.dropdown', + DROPDOWN_ITEMS: '.dropdown-item', + DROPDOWN_TOGGLE: '.dropdown-toggle' + }; + + var OffsetMethod = { + OFFSET: 'offset', + POSITION: 'position' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var ScrollSpy = (function () { + function ScrollSpy(element, config) { + _classCallCheck(this, ScrollSpy); + + this._element = element; + this._scrollElement = element.tagName === 'BODY' ? window : element; + this._config = this._getConfig(config); + this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS); + this._offsets = []; + this._targets = []; + this._activeTarget = null; + this._scrollHeight = 0; + + $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this)); + + this.refresh(); + this._process(); + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(ScrollSpy, [{ + key: 'refresh', + + // public + + value: function refresh() { + var _this14 = this; + + var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET; + + var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; + + var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; + + this._offsets = []; + this._targets = []; + + this._scrollHeight = this._getScrollHeight(); + + var targets = $.makeArray($(this._selector)); + + targets.map(function (element) { + var target = undefined; + var targetSelector = Util.getSelectorFromElement(element); + + if (targetSelector) { + target = $(targetSelector)[0]; + } + + if (target && (target.offsetWidth || target.offsetHeight)) { + // todo (fat): remove sketch reliance on jQuery position/offset + return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; + } + }).filter(function (item) { + return item; + }).sort(function (a, b) { + return a[0] - b[0]; + }).forEach(function (item) { + _this14._offsets.push(item[0]); + _this14._targets.push(item[1]); + }); + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + $(this._scrollElement).off(EVENT_KEY); + + this._element = null; + this._scrollElement = null; + this._config = null; + this._selector = null; + this._offsets = null; + this._targets = null; + this._activeTarget = null; + this._scrollHeight = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + + if (typeof config.target !== 'string') { + var id = $(config.target).attr('id'); + if (!id) { + id = Util.getUID(NAME); + $(config.target).attr('id', id); + } + config.target = '#' + id; + } + + Util.typeCheckConfig(NAME, config, DefaultType); + + return config; + } + }, { + key: '_getScrollTop', + value: function _getScrollTop() { + return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop; + } + }, { + key: '_getScrollHeight', + value: function _getScrollHeight() { + return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); + } + }, { + key: '_process', + value: function _process() { + var scrollTop = this._getScrollTop() + this._config.offset; + var scrollHeight = this._getScrollHeight(); + var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight; + + if (this._scrollHeight !== scrollHeight) { + this.refresh(); + } + + if (scrollTop >= maxScroll) { + var target = this._targets[this._targets.length - 1]; + + if (this._activeTarget !== target) { + this._activate(target); + } + } + + if (this._activeTarget && scrollTop < this._offsets[0]) { + this._activeTarget = null; + this._clear(); + return; + } + + for (var i = this._offsets.length; i--;) { + var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]); + + if (isActiveTarget) { + this._activate(this._targets[i]); + } + } + } + }, { + key: '_activate', + value: function _activate(target) { + this._activeTarget = target; + + this._clear(); + + var queries = this._selector.split(','); + queries = queries.map(function (selector) { + return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]'); + }); + + var $link = $(queries.join(',')); + + if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { + $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); + $link.addClass(ClassName.ACTIVE); + } else { + // todo (fat) this is kinda sus… + // recursively add actives to tested nav-links + $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); + } + + $(this._scrollElement).trigger(Event.ACTIVATE, { + relatedTarget: target + }); + } + }, { + key: '_clear', + value: function _clear() { + $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = typeof config === 'object' && config || null; + + if (!data) { + data = new ScrollSpy(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return ScrollSpy; + })(); + + $(window).on(Event.LOAD_DATA_API, function () { + var scrollSpys = $.makeArray($(Selector.DATA_SPY)); + + for (var i = scrollSpys.length; i--;) { + var $spy = $(scrollSpys[i]); + ScrollSpy._jQueryInterface.call($spy, $spy.data()); + } + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = ScrollSpy._jQueryInterface; + $.fn[NAME].Constructor = ScrollSpy; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return ScrollSpy._jQueryInterface; + }; + + return ScrollSpy; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): tab.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Tab = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'tab'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.tab'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 150; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + DROPDOWN_MENU: 'dropdown-menu', + ACTIVE: 'active', + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + A: 'a', + LI: 'li', + DROPDOWN: '.dropdown', + UL: 'ul:not(.dropdown-menu)', + FADE_CHILD: '> .nav-item .fade, > .fade', + ACTIVE: '.active', + ACTIVE_CHILD: '> .nav-item > .active, > .active', + DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]', + DROPDOWN_TOGGLE: '.dropdown-toggle', + DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Tab = (function () { + function Tab(element) { + _classCallCheck(this, Tab); + + this._element = element; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Tab, [{ + key: 'show', + + // public + + value: function show() { + var _this15 = this; + + if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) { + return; + } + + var target = undefined; + var previous = undefined; + var ulElement = $(this._element).closest(Selector.UL)[0]; + var selector = Util.getSelectorFromElement(this._element); + + if (ulElement) { + previous = $.makeArray($(ulElement).find(Selector.ACTIVE)); + previous = previous[previous.length - 1]; + } + + var hideEvent = $.Event(Event.HIDE, { + relatedTarget: this._element + }); + + var showEvent = $.Event(Event.SHOW, { + relatedTarget: previous + }); + + if (previous) { + $(previous).trigger(hideEvent); + } + + $(this._element).trigger(showEvent); + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { + return; + } + + if (selector) { + target = $(selector)[0]; + } + + this._activate(this._element, ulElement); + + var complete = function complete() { + var hiddenEvent = $.Event(Event.HIDDEN, { + relatedTarget: _this15._element + }); + + var shownEvent = $.Event(Event.SHOWN, { + relatedTarget: previous + }); + + $(previous).trigger(hiddenEvent); + $(_this15._element).trigger(shownEvent); + }; + + if (target) { + this._activate(target, target.parentNode, complete); + } else { + complete(); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeClass(this._element, DATA_KEY); + this._element = null; + } + + // private + + }, { + key: '_activate', + value: function _activate(element, container, callback) { + var active = $(container).find(Selector.ACTIVE_CHILD)[0]; + var isTransitioning = callback && Util.supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0])); + + var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback); + + if (active && isTransitioning) { + $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + } else { + complete(); + } + + if (active) { + $(active).removeClass(ClassName.IN); + } + } + }, { + key: '_transitionComplete', + value: function _transitionComplete(element, active, isTransitioning, callback) { + if (active) { + $(active).removeClass(ClassName.ACTIVE); + + var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; + + if (dropdownChild) { + $(dropdownChild).removeClass(ClassName.ACTIVE); + } + + active.setAttribute('aria-expanded', false); + } + + $(element).addClass(ClassName.ACTIVE); + element.setAttribute('aria-expanded', true); + + if (isTransitioning) { + Util.reflow(element); + $(element).addClass(ClassName.IN); + } else { + $(element).removeClass(ClassName.FADE); + } + + if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { + + var dropdownElement = $(element).closest(Selector.DROPDOWN)[0]; + if (dropdownElement) { + $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); + } + + element.setAttribute('aria-expanded', true); + } + + if (callback) { + callback(); + } + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + + if (!data) { + data = data = new Tab(this); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Tab; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + Tab._jQueryInterface.call($(this), 'show'); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Tab._jQueryInterface; + $.fn[NAME].Constructor = Tab; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Tab._jQueryInterface; + }; + + return Tab; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): tooltip.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Tooltip = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'tooltip'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.tooltip'; + var EVENT_KEY = '.' + DATA_KEY; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 150; + var CLASS_PREFIX = 'bs-tether'; + + var Default = { + animation: true, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + selector: false, + placement: 'top', + offset: '0 0', + constraints: [] + }; + + var DefaultType = { + animation: 'boolean', + template: 'string', + title: '(string|function)', + trigger: 'string', + delay: '(number|object)', + html: 'boolean', + selector: '(string|boolean)', + placement: '(string|function)', + offset: 'string', + constraints: 'array' + }; + + var AttachmentMap = { + TOP: 'bottom center', + RIGHT: 'middle left', + BOTTOM: 'top center', + LEFT: 'middle right' + }; + + var HoverState = { + IN: 'in', + OUT: 'out' + }; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + INSERTED: 'inserted' + EVENT_KEY, + CLICK: 'click' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + FOCUSOUT: 'focusout' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY + }; + + var ClassName = { + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + TOOLTIP: '.tooltip', + TOOLTIP_INNER: '.tooltip-inner' + }; + + var TetherClass = { + element: false, + enabled: false + }; + + var Trigger = { + HOVER: 'hover', + FOCUS: 'focus', + CLICK: 'click', + MANUAL: 'manual' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Tooltip = (function () { + function Tooltip(element, config) { + _classCallCheck(this, Tooltip); + + // private + this._isEnabled = true; + this._timeout = 0; + this._hoverState = ''; + this._activeTrigger = {}; + this._tether = null; + + // protected + this.element = element; + this.config = this._getConfig(config); + this.tip = null; + + this._setListeners(); + } + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Tooltip, [{ + key: 'enable', + + // public + + value: function enable() { + this._isEnabled = true; + } + }, { + key: 'disable', + value: function disable() { + this._isEnabled = false; + } + }, { + key: 'toggleEnabled', + value: function toggleEnabled() { + this._isEnabled = !this._isEnabled; + } + }, { + key: 'toggle', + value: function toggle(event) { + if (event) { + var dataKey = this.constructor.DATA_KEY; + var context = $(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $(event.currentTarget).data(dataKey, context); + } + + context._activeTrigger.click = !context._activeTrigger.click; + + if (context._isWithActiveTrigger()) { + context._enter(null, context); + } else { + context._leave(null, context); + } + } else { + + if ($(this.getTipElement()).hasClass(ClassName.IN)) { + this._leave(null, this); + return; + } + + this._enter(null, this); + } + } + }, { + key: 'dispose', + value: function dispose() { + clearTimeout(this._timeout); + + this.cleanupTether(); + + $.removeData(this.element, this.constructor.DATA_KEY); + + $(this.element).off(this.constructor.EVENT_KEY); + + if (this.tip) { + $(this.tip).remove(); + } + + this._isEnabled = null; + this._timeout = null; + this._hoverState = null; + this._activeTrigger = null; + this._tether = null; + + this.element = null; + this.config = null; + this.tip = null; + } + }, { + key: 'show', + value: function show() { + var _this16 = this; + + var showEvent = $.Event(this.constructor.Event.SHOW); + + if (this.isWithContent() && this._isEnabled) { + $(this.element).trigger(showEvent); + + var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element); + + if (showEvent.isDefaultPrevented() || !isInTheDom) { + return; + } + + var tip = this.getTipElement(); + var tipId = Util.getUID(this.constructor.NAME); + + tip.setAttribute('id', tipId); + this.element.setAttribute('aria-describedby', tipId); + + this.setContent(); + + if (this.config.animation) { + $(tip).addClass(ClassName.FADE); + } + + var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; + + var attachment = this._getAttachment(placement); + + $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body); + + $(this.element).trigger(this.constructor.Event.INSERTED); + + this._tether = new Tether({ + attachment: attachment, + element: tip, + target: this.element, + classes: TetherClass, + classPrefix: CLASS_PREFIX, + offset: this.config.offset, + constraints: this.config.constraints + }); + + Util.reflow(tip); + this._tether.position(); + + $(tip).addClass(ClassName.IN); + + var complete = function complete() { + var prevHoverState = _this16._hoverState; + _this16._hoverState = null; + + $(_this16.element).trigger(_this16.constructor.Event.SHOWN); + + if (prevHoverState === HoverState.OUT) { + _this16._leave(null, _this16); + } + }; + + if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { + $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); + return; + } + + complete(); + } + } + }, { + key: 'hide', + value: function hide(callback) { + var _this17 = this; + + var tip = this.getTipElement(); + var hideEvent = $.Event(this.constructor.Event.HIDE); + var complete = function complete() { + if (_this17._hoverState !== HoverState.IN && tip.parentNode) { + tip.parentNode.removeChild(tip); + } + + _this17.element.removeAttribute('aria-describedby'); + $(_this17.element).trigger(_this17.constructor.Event.HIDDEN); + _this17.cleanupTether(); + + if (callback) { + callback(); + } + }; + + $(this.element).trigger(hideEvent); + + if (hideEvent.isDefaultPrevented()) { + return; + } + + $(tip).removeClass(ClassName.IN); + + if (Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { + + $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + } else { + complete(); + } + + this._hoverState = ''; + } + + // protected + + }, { + key: 'isWithContent', + value: function isWithContent() { + return Boolean(this.getTitle()); + } + }, { + key: 'getTipElement', + value: function getTipElement() { + return this.tip = this.tip || $(this.config.template)[0]; + } + }, { + key: 'setContent', + value: function setContent() { + var tip = this.getTipElement(); + var title = this.getTitle(); + var method = this.config.html ? 'innerHTML' : 'innerText'; + + $(tip).find(Selector.TOOLTIP_INNER)[0][method] = title; + + $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN); + + this.cleanupTether(); + } + }, { + key: 'getTitle', + value: function getTitle() { + var title = this.element.getAttribute('data-original-title'); + + if (!title) { + title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; + } + + return title; + } + }, { + key: 'cleanupTether', + value: function cleanupTether() { + if (this._tether) { + this._tether.destroy(); + + // clean up after tether's junk classes + // remove after they fix issue + // (https://github.com/HubSpot/tether/issues/36) + $(this.element).removeClass(this._removeTetherClasses); + $(this.tip).removeClass(this._removeTetherClasses); + } + } + + // private + + }, { + key: '_getAttachment', + value: function _getAttachment(placement) { + return AttachmentMap[placement.toUpperCase()]; + } + }, { + key: '_setListeners', + value: function _setListeners() { + var _this18 = this; + + var triggers = this.config.trigger.split(' '); + + triggers.forEach(function (trigger) { + if (trigger === 'click') { + $(_this18.element).on(_this18.constructor.Event.CLICK, _this18.config.selector, $.proxy(_this18.toggle, _this18)); + } else if (trigger !== Trigger.MANUAL) { + var eventIn = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSEENTER : _this18.constructor.Event.FOCUSIN; + var eventOut = trigger === Trigger.HOVER ? _this18.constructor.Event.MOUSELEAVE : _this18.constructor.Event.FOCUSOUT; + + $(_this18.element).on(eventIn, _this18.config.selector, $.proxy(_this18._enter, _this18)).on(eventOut, _this18.config.selector, $.proxy(_this18._leave, _this18)); + } + }); + + if (this.config.selector) { + this.config = $.extend({}, this.config, { + trigger: 'manual', + selector: '' + }); + } else { + this._fixTitle(); + } + } + }, { + key: '_removeTetherClasses', + value: function _removeTetherClasses(i, css) { + return ((css.baseVal || css).match(new RegExp('(^|\\s)' + CLASS_PREFIX + '-\\S+', 'g')) || []).join(' '); + } + }, { + key: '_fixTitle', + value: function _fixTitle() { + var titleType = typeof this.element.getAttribute('data-original-title'); + if (this.element.getAttribute('title') || titleType !== 'string') { + this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); + this.element.setAttribute('title', ''); + } + } + }, { + key: '_enter', + value: function _enter(event, context) { + var dataKey = this.constructor.DATA_KEY; + + context = context || $(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $(event.currentTarget).data(dataKey, context); + } + + if (event) { + context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; + } + + if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) { + context._hoverState = HoverState.IN; + return; + } + + clearTimeout(context._timeout); + + context._hoverState = HoverState.IN; + + if (!context.config.delay || !context.config.delay.show) { + context.show(); + return; + } + + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.IN) { + context.show(); + } + }, context.config.delay.show); + } + }, { + key: '_leave', + value: function _leave(event, context) { + var dataKey = this.constructor.DATA_KEY; + + context = context || $(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $(event.currentTarget).data(dataKey, context); + } + + if (event) { + context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; + } + + if (context._isWithActiveTrigger()) { + return; + } + + clearTimeout(context._timeout); + + context._hoverState = HoverState.OUT; + + if (!context.config.delay || !context.config.delay.hide) { + context.hide(); + return; + } + + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.OUT) { + context.hide(); + } + }, context.config.delay.hide); + } + }, { + key: '_isWithActiveTrigger', + value: function _isWithActiveTrigger() { + for (var trigger in this._activeTrigger) { + if (this._activeTrigger[trigger]) { + return true; + } + } + + return false; + } + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, this.constructor.Default, $(this.element).data(), config); + + if (config.delay && typeof config.delay === 'number') { + config.delay = { + show: config.delay, + hide: config.delay + }; + } + + Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); + + return config; + } + }, { + key: '_getDelegateConfig', + value: function _getDelegateConfig() { + var config = {}; + + if (this.config) { + for (var key in this.config) { + if (this.constructor.Default[key] !== this.config[key]) { + config[key] = this.config[key]; + } + } + } + + return config; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = typeof config === 'object' ? config : null; + + if (!data && /destroy|hide/.test(config)) { + return; + } + + if (!data) { + data = new Tooltip(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }, { + key: 'NAME', + get: function get() { + return NAME; + } + }, { + key: 'DATA_KEY', + get: function get() { + return DATA_KEY; + } + }, { + key: 'Event', + get: function get() { + return Event; + } + }, { + key: 'EVENT_KEY', + get: function get() { + return EVENT_KEY; + } + }, { + key: 'DefaultType', + get: function get() { + return DefaultType; + } + }]); + + return Tooltip; + })(); + + $.fn[NAME] = Tooltip._jQueryInterface; + $.fn[NAME].Constructor = Tooltip; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Tooltip._jQueryInterface; + }; + + return Tooltip; +})(jQuery); + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): popover.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Popover = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'popover'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.popover'; + var EVENT_KEY = '.' + DATA_KEY; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Default = $.extend({}, Tooltip.Default, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }); + + var DefaultType = $.extend({}, Tooltip.DefaultType, { + content: '(string|function)' + }); + + var ClassName = { + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + TITLE: '.popover-title', + CONTENT: '.popover-content', + ARROW: '.popover-arrow' + }; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + INSERTED: 'inserted' + EVENT_KEY, + CLICK: 'click' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + FOCUSOUT: 'focusout' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Popover = (function (_Tooltip) { + _inherits(Popover, _Tooltip); + + function Popover() { + _classCallCheck(this, Popover); + + _get(Object.getPrototypeOf(Popover.prototype), 'constructor', this).apply(this, arguments); + } + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + _createClass(Popover, [{ + key: 'isWithContent', + + // overrides + + value: function isWithContent() { + return this.getTitle() || this._getContent(); + } + }, { + key: 'getTipElement', + value: function getTipElement() { + return this.tip = this.tip || $(this.config.template)[0]; + } + }, { + key: 'setContent', + value: function setContent() { + var tip = this.getTipElement(); + var title = this.getTitle(); + var content = this._getContent(); + var titleElement = $(tip).find(Selector.TITLE)[0]; + + if (titleElement) { + titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title; + } + + // we use append for html objects to maintain js events + $(tip).find(Selector.CONTENT).children().detach().end()[this.config.html ? typeof content === 'string' ? 'html' : 'append' : 'text'](content); + + $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN); + + this.cleanupTether(); + } + + // private + + }, { + key: '_getContent', + value: function _getContent() { + return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = typeof config === 'object' ? config : null; + + if (!data && /destroy|hide/.test(config)) { + return; + } + + if (!data) { + data = new Popover(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + + // getters + + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }, { + key: 'NAME', + get: function get() { + return NAME; + } + }, { + key: 'DATA_KEY', + get: function get() { + return DATA_KEY; + } + }, { + key: 'Event', + get: function get() { + return Event; + } + }, { + key: 'EVENT_KEY', + get: function get() { + return EVENT_KEY; + } + }, { + key: 'DefaultType', + get: function get() { + return DefaultType; + } + }]); + + return Popover; + })(Tooltip); + + $.fn[NAME] = Popover._jQueryInterface; + $.fn[NAME].Constructor = Popover; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Popover._jQueryInterface; + }; + + return Popover; +})(jQuery); + +}(jQuery); diff --git a/non_logged_in_area/static/bootstrap4/js/bootstrap.min.js b/non_logged_in_area/static/bootstrap4/js/bootstrap.min.js new file mode 100644 index 00000000..013ed318 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v4.0.0-alpha (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ +if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher")}(jQuery),+function(){"use strict";function a(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function b(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}{var c=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;h=j=i=void 0,d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;return void 0===i?void 0:i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return void 0;a=j,b=f,c=g,d=!0}},d=function(){function a(a,b){for(var c=0;cthis._items.length-1||0>b)){if(this._isSliding)return void a(this._element).one(o.SLID,function(){return c.to(b)});if(d===b)return this.pause(),void this.cycle();var e=b>d?n.NEXT:n.PREVIOUS;this._slide(e,this._items[b])}}},{key:"dispose",value:function(){a(this._element).off(h),a.removeData(this._element,g),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null}},{key:"_getConfig",value:function(b){return b=a.extend({},l,b),e.typeCheckConfig(c,b,m),b}},{key:"_addEventListeners",value:function(){this._config.keyboard&&a(this._element).on(o.KEYDOWN,a.proxy(this._keydown,this)),"hover"!==this._config.pause||"ontouchstart"in document.documentElement||a(this._element).on(o.MOUSEENTER,a.proxy(this.pause,this)).on(o.MOUSELEAVE,a.proxy(this.cycle,this))}},{key:"_keydown",value:function(a){if(a.preventDefault(),!/input|textarea/i.test(a.target.tagName))switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}}},{key:"_getItemIndex",value:function(b){return this._items=a.makeArray(a(b).parent().find(q.ITEM)),this._items.indexOf(b)}},{key:"_getItemByDirection",value:function(a,b){var c=a===n.NEXT,d=a===n.PREVIOUS,e=this._getItemIndex(b),f=this._items.length-1,g=d&&0===e||c&&e===f;if(g&&!this._config.wrap)return b;var h=a===n.PREVIOUS?-1:1,i=(e+h)%this._items.length;return-1===i?this._items[this._items.length-1]:this._items[i]}},{key:"_triggerSlideEvent",value:function(b,c){var d=a.Event(o.SLIDE,{relatedTarget:b,direction:c});return a(this._element).trigger(d),d}},{key:"_setActiveIndicatorElement",value:function(b){if(this._indicatorsElement){a(this._indicatorsElement).find(q.ACTIVE).removeClass(p.ACTIVE);var c=this._indicatorsElement.children[this._getItemIndex(b)];c&&a(c).addClass(p.ACTIVE)}}},{key:"_slide",value:function(b,c){var d=this,f=a(this._element).find(q.ACTIVE_ITEM)[0],g=c||f&&this._getItemByDirection(b,f),h=Boolean(this._interval),i=b===n.NEXT?p.LEFT:p.RIGHT;if(g&&a(g).hasClass(p.ACTIVE))return void(this._isSliding=!1);var j=this._triggerSlideEvent(g,i);if(!j.isDefaultPrevented()&&f&&g){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(g);var l=a.Event(o.SLID,{relatedTarget:g,direction:i});e.supportsTransitionEnd()&&a(this._element).hasClass(p.SLIDE)?(a(g).addClass(b),e.reflow(g),a(f).addClass(i),a(g).addClass(i),a(f).one(e.TRANSITION_END,function(){a(g).removeClass(i).removeClass(b),a(g).addClass(p.ACTIVE),a(f).removeClass(p.ACTIVE).removeClass(b).removeClass(i),d._isSliding=!1,setTimeout(function(){return a(d._element).trigger(l)},0)}).emulateTransitionEnd(k)):(a(f).removeClass(p.ACTIVE),a(g).addClass(p.ACTIVE),this._isSliding=!1,a(this._element).trigger(l)),h&&this.cycle()}}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d=a.extend({},l,a(this).data());"object"==typeof b&&a.extend(d,b);var e="string"==typeof b?b:d.slide;c||(c=new i(this,d),a(this).data(g,c)),"number"==typeof b?c.to(b):e?c[e]():d.interval&&(c.pause(),c.cycle())})}},{key:"_dataApiClickHandler",value:function(b){var c=e.getSelectorFromElement(this);if(c){var d=a(c)[0];if(d&&a(d).hasClass(p.CAROUSEL)){var f=a.extend({},a(d).data(),a(this).data()),h=this.getAttribute("data-slide-to");h&&(f.interval=!1),i._jQueryInterface.call(a(d),f),h&&a(d).data(g).to(h),b.preventDefault()}}}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}}]),i}();return a(document).on(o.CLICK_DATA_API,q.DATA_SLIDE,r._dataApiClickHandler),a(window).on(o.LOAD_DATA_API,function(){a(q.DATA_RIDE).each(function(){var b=a(this);r._jQueryInterface.call(b,b.data())})}),a.fn[c]=r._jQueryInterface,a.fn[c].Constructor=r,a.fn[c].noConflict=function(){return a.fn[c]=j,r._jQueryInterface},r}(jQuery),function(a){var c="collapse",f="4.0.0",g="bs.collapse",h="."+g,i=".data-api",j=a.fn[c],k=600,l={toggle:!0,parent:""},m={toggle:"boolean",parent:"string"},n={SHOW:"show"+h,SHOWN:"shown"+h,HIDE:"hide"+h,HIDDEN:"hidden"+h,CLICK_DATA_API:"click"+h+i},o={IN:"in",COLLAPSE:"collapse",COLLAPSING:"collapsing",COLLAPSED:"collapsed"},p={WIDTH:"width",HEIGHT:"height"},q={ACTIVES:".panel > .in, .panel > .collapsing",DATA_TOGGLE:'[data-toggle="collapse"]'},r=function(){function h(c,d){b(this,h),this._isTransitioning=!1,this._element=c,this._config=this._getConfig(d),this._triggerArray=a.makeArray(a('[data-toggle="collapse"][href="#'+c.id+'"],'+('[data-toggle="collapse"][data-target="#'+c.id+'"]'))),this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}return d(h,[{key:"toggle",value:function(){a(this._element).hasClass(o.IN)?this.hide():this.show()}},{key:"show",value:function(){var b=this;if(!this._isTransitioning&&!a(this._element).hasClass(o.IN)){var c=void 0,d=void 0;if(this._parent&&(c=a.makeArray(a(q.ACTIVES)),c.length||(c=null)),!(c&&(d=a(c).data(g),d&&d._isTransitioning))){var f=a.Event(n.SHOW);if(a(this._element).trigger(f),!f.isDefaultPrevented()){c&&(h._jQueryInterface.call(a(c),"hide"),d||a(c).data(g,null));var i=this._getDimension();a(this._element).removeClass(o.COLLAPSE).addClass(o.COLLAPSING),this._element.style[i]=0,this._element.setAttribute("aria-expanded",!0),this._triggerArray.length&&a(this._triggerArray).removeClass(o.COLLAPSED).attr("aria-expanded",!0),this.setTransitioning(!0);var j=function(){a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).addClass(o.IN),b._element.style[i]="",b.setTransitioning(!1),a(b._element).trigger(n.SHOWN)};if(!e.supportsTransitionEnd())return void j();var l=i[0].toUpperCase()+i.slice(1),m="scroll"+l;a(this._element).one(e.TRANSITION_END,j).emulateTransitionEnd(k),this._element.style[i]=this._element[m]+"px"}}}}},{key:"hide",value:function(){var b=this;if(!this._isTransitioning&&a(this._element).hasClass(o.IN)){var c=a.Event(n.HIDE);if(a(this._element).trigger(c),!c.isDefaultPrevented()){var d=this._getDimension(),f=d===p.WIDTH?"offsetWidth":"offsetHeight";this._element.style[d]=this._element[f]+"px",e.reflow(this._element),a(this._element).addClass(o.COLLAPSING).removeClass(o.COLLAPSE).removeClass(o.IN),this._element.setAttribute("aria-expanded",!1),this._triggerArray.length&&a(this._triggerArray).addClass(o.COLLAPSED).attr("aria-expanded",!1),this.setTransitioning(!0);var g=function(){b.setTransitioning(!1),a(b._element).removeClass(o.COLLAPSING).addClass(o.COLLAPSE).trigger(n.HIDDEN)};return this._element.style[d]=0,e.supportsTransitionEnd()?void a(this._element).one(e.TRANSITION_END,g).emulateTransitionEnd(k):void g()}}}},{key:"setTransitioning",value:function(a){this._isTransitioning=a}},{key:"dispose",value:function(){a.removeData(this._element,g),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null}},{key:"_getConfig",value:function(b){return b=a.extend({},l,b),b.toggle=Boolean(b.toggle),e.typeCheckConfig(c,b,m),b}},{key:"_getDimension",value:function(){var b=a(this._element).hasClass(p.WIDTH);return b?p.WIDTH:p.HEIGHT}},{key:"_getParent",value:function(){var b=this,c=a(this._config.parent)[0],d='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]';return a(c).find(d).each(function(a,c){b._addAriaAndCollapsedClass(h._getTargetFromElement(c),[c])}),c}},{key:"_addAriaAndCollapsedClass",value:function(b,c){if(b){var d=a(b).hasClass(o.IN);b.setAttribute("aria-expanded",d),c.length&&a(c).toggleClass(o.COLLAPSED,!d).attr("aria-expanded",d)}}}],[{key:"_getTargetFromElement",value:function(b){var c=e.getSelectorFromElement(b);return c?a(c)[0]:null}},{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this),d=c.data(g),e=a.extend({},l,c.data(),"object"==typeof b&&b);!d&&e.toggle&&/show|hide/.test(b)&&(e.toggle=!1),d||(d=new h(this,e),c.data(g,d)),"string"==typeof b&&d[b]()})}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}}]),h}();return a(document).on(n.CLICK_DATA_API,q.DATA_TOGGLE,function(b){b.preventDefault();var c=r._getTargetFromElement(this),d=a(c).data(g),e=d?"toggle":a(this).data();r._jQueryInterface.call(a(c),e)}),a.fn[c]=r._jQueryInterface,a.fn[c].Constructor=r,a.fn[c].noConflict=function(){return a.fn[c]=j,r._jQueryInterface},r}(jQuery),function(a){var c="dropdown",f="4.0.0",g="bs.dropdown",h="."+g,i=".data-api",j=a.fn[c],k={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,CLICK:"click"+h,CLICK_DATA_API:"click"+h+i,KEYDOWN_DATA_API:"keydown"+h+i},l={BACKDROP:"dropdown-backdrop",DISABLED:"disabled",OPEN:"open"},m={BACKDROP:".dropdown-backdrop",DATA_TOGGLE:'[data-toggle="dropdown"]',FORM_CHILD:".dropdown form",ROLE_MENU:'[role="menu"]',ROLE_LISTBOX:'[role="listbox"]',NAVBAR_NAV:".navbar-nav",VISIBLE_ITEMS:'[role="menu"] li:not(.disabled) a, [role="listbox"] li:not(.disabled) a'},n=function(){function c(a){b(this,c),this._element=a,this._addEventListeners()}return d(c,[{key:"toggle",value:function(){if(this.disabled||a(this).hasClass(l.DISABLED))return!1;var b=c._getParentFromElement(this),d=a(b).hasClass(l.OPEN);if(c._clearMenus(),d)return!1;if("ontouchstart"in document.documentElement&&!a(b).closest(m.NAVBAR_NAV).length){var e=document.createElement("div");e.className=l.BACKDROP,a(e).insertBefore(this),a(e).on("click",c._clearMenus)}var f={relatedTarget:this},g=a.Event(k.SHOW,f);return a(b).trigger(g),g.isDefaultPrevented()?!1:(this.focus(),this.setAttribute("aria-expanded","true"),a(b).toggleClass(l.OPEN),a(b).trigger(a.Event(k.SHOWN,f)),!1)}},{key:"dispose",value:function(){a.removeData(this._element,g),a(this._element).off(h),this._element=null}},{key:"_addEventListeners",value:function(){a(this._element).on(k.CLICK,this.toggle)}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var d=a(this).data(g);d||a(this).data(g,d=new c(this)),"string"==typeof b&&d[b].call(this)})}},{key:"_clearMenus",value:function(b){if(!b||3!==b.which){var d=a(m.BACKDROP)[0];d&&d.parentNode.removeChild(d);for(var e=a.makeArray(a(m.DATA_TOGGLE)),f=0;f0&&h--,40===b.which&&hdocument.documentElement.clientHeight;!this._isBodyOverflowing&&a&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!a&&(this._element.style.paddingRight=this._scrollbarWidth+"px~")}},{key:"_resetAdjustments",value:function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}},{key:"_checkScrollbar",value:function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this._isBodyOverflowing=document.body.clientWidth=c){var d=this._targets[this._targets.length-1];this._activeTarget!==d&&this._activate(d)}if(this._activeTarget&&a=this._offsets[e]&&(void 0===this._offsets[e+1]||a .nav-item .fade, > .fade",ACTIVE:".active",ACTIVE_CHILD:"> .nav-item > .active, > .active",DATA_TOGGLE:'[data-toggle="tab"], [data-toggle="pill"]',DROPDOWN_TOGGLE:".dropdown-toggle",DROPDOWN_ACTIVE_CHILD:"> .dropdown-menu .active"},o=function(){function c(a){b(this,c),this._element=a}return d(c,[{key:"show",value:function(){var b=this;if(!this._element.parentNode||this._element.parentNode.nodeType!==Node.ELEMENT_NODE||!a(this._element).hasClass(m.ACTIVE)){var c=void 0,d=void 0,f=a(this._element).closest(n.UL)[0],g=e.getSelectorFromElement(this._element);f&&(d=a.makeArray(a(f).find(n.ACTIVE)),d=d[d.length-1]);var h=a.Event(l.HIDE,{ +relatedTarget:this._element}),i=a.Event(l.SHOW,{relatedTarget:d});if(d&&a(d).trigger(h),a(this._element).trigger(i),!i.isDefaultPrevented()&&!h.isDefaultPrevented()){g&&(c=a(g)[0]),this._activate(this._element,f);var j=function(){var c=a.Event(l.HIDDEN,{relatedTarget:b._element}),e=a.Event(l.SHOWN,{relatedTarget:d});a(d).trigger(c),a(b._element).trigger(e)};c?this._activate(c,c.parentNode,j):j()}}}},{key:"dispose",value:function(){a.removeClass(this._element,g),this._element=null}},{key:"_activate",value:function(b,c,d){var f=a(c).find(n.ACTIVE_CHILD)[0],g=d&&e.supportsTransitionEnd()&&(f&&a(f).hasClass(m.FADE)||Boolean(a(c).find(n.FADE_CHILD)[0])),h=a.proxy(this._transitionComplete,this,b,f,g,d);f&&g?a(f).one(e.TRANSITION_END,h).emulateTransitionEnd(k):h(),f&&a(f).removeClass(m.IN)}},{key:"_transitionComplete",value:function(b,c,d,f){if(c){a(c).removeClass(m.ACTIVE);var g=a(c).find(n.DROPDOWN_ACTIVE_CHILD)[0];g&&a(g).removeClass(m.ACTIVE),c.setAttribute("aria-expanded",!1)}if(a(b).addClass(m.ACTIVE),b.setAttribute("aria-expanded",!0),d?(e.reflow(b),a(b).addClass(m.IN)):a(b).removeClass(m.FADE),b.parentNode&&a(b.parentNode).hasClass(m.DROPDOWN_MENU)){var h=a(b).closest(n.DROPDOWN)[0];h&&a(h).find(n.DROPDOWN_TOGGLE).addClass(m.ACTIVE),b.setAttribute("aria-expanded",!0)}f&&f()}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var d=a(this),e=d.data(g);e||(e=e=new c(this),d.data(g,e)),"string"==typeof b&&e[b]()})}},{key:"VERSION",get:function(){return f}}]),c}();return a(document).on(l.CLICK_DATA_API,n.DATA_TOGGLE,function(b){b.preventDefault(),o._jQueryInterface.call(a(this),"show")}),a.fn[c]=o._jQueryInterface,a.fn[c].Constructor=o,a.fn[c].noConflict=function(){return a.fn[c]=j,o._jQueryInterface},o}(jQuery),function(a){var c="tooltip",f="4.0.0",g="bs.tooltip",h="."+g,i=a.fn[c],j=150,k="bs-tether",l={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:"0 0",constraints:[]},m={animation:"boolean",template:"string",title:"(string|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"string",constraints:"array"},n={TOP:"bottom center",RIGHT:"middle left",BOTTOM:"top center",LEFT:"middle right"},o={IN:"in",OUT:"out"},p={HIDE:"hide"+h,HIDDEN:"hidden"+h,SHOW:"show"+h,SHOWN:"shown"+h,INSERTED:"inserted"+h,CLICK:"click"+h,FOCUSIN:"focusin"+h,FOCUSOUT:"focusout"+h,MOUSEENTER:"mouseenter"+h,MOUSELEAVE:"mouseleave"+h},q={FADE:"fade",IN:"in"},r={TOOLTIP:".tooltip",TOOLTIP_INNER:".tooltip-inner"},s={element:!1,enabled:!1},t={HOVER:"hover",FOCUS:"focus",CLICK:"click",MANUAL:"manual"},u=function(){function i(a,c){b(this,i),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._tether=null,this.element=a,this.config=this._getConfig(c),this.tip=null,this._setListeners()}return d(i,[{key:"enable",value:function(){this._isEnabled=!0}},{key:"disable",value:function(){this._isEnabled=!1}},{key:"toggleEnabled",value:function(){this._isEnabled=!this._isEnabled}},{key:"toggle",value:function(b){if(b){var c=this.constructor.DATA_KEY,d=a(b.currentTarget).data(c);d||(d=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(c,d)),d._activeTrigger.click=!d._activeTrigger.click,d._isWithActiveTrigger()?d._enter(null,d):d._leave(null,d)}else{if(a(this.getTipElement()).hasClass(q.IN))return void this._leave(null,this);this._enter(null,this)}}},{key:"dispose",value:function(){clearTimeout(this._timeout),this.cleanupTether(),a.removeData(this.element,this.constructor.DATA_KEY),a(this.element).off(this.constructor.EVENT_KEY),this.tip&&a(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._tether=null,this.element=null,this.config=null,this.tip=null}},{key:"show",value:function(){var b=this,c=a.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){a(this.element).trigger(c);var d=a.contains(this.element.ownerDocument.documentElement,this.element);if(c.isDefaultPrevented()||!d)return;var f=this.getTipElement(),g=e.getUID(this.constructor.NAME);f.setAttribute("id",g),this.element.setAttribute("aria-describedby",g),this.setContent(),this.config.animation&&a(f).addClass(q.FADE);var h="function"==typeof this.config.placement?this.config.placement.call(this,f,this.element):this.config.placement,j=this._getAttachment(h);a(f).data(this.constructor.DATA_KEY,this).appendTo(document.body),a(this.element).trigger(this.constructor.Event.INSERTED),this._tether=new Tether({attachment:j,element:f,target:this.element,classes:s,classPrefix:k,offset:this.config.offset,constraints:this.config.constraints}),e.reflow(f),this._tether.position(),a(f).addClass(q.IN);var l=function(){var c=b._hoverState;b._hoverState=null,a(b.element).trigger(b.constructor.Event.SHOWN),c===o.OUT&&b._leave(null,b)};if(e.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE))return void a(this.tip).one(e.TRANSITION_END,l).emulateTransitionEnd(i._TRANSITION_DURATION);l()}}},{key:"hide",value:function(b){var c=this,d=this.getTipElement(),f=a.Event(this.constructor.Event.HIDE),g=function(){c._hoverState!==o.IN&&d.parentNode&&d.parentNode.removeChild(d),c.element.removeAttribute("aria-describedby"),a(c.element).trigger(c.constructor.Event.HIDDEN),c.cleanupTether(),b&&b()};a(this.element).trigger(f),f.isDefaultPrevented()||(a(d).removeClass(q.IN),e.supportsTransitionEnd()&&a(this.tip).hasClass(q.FADE)?a(d).one(e.TRANSITION_END,g).emulateTransitionEnd(j):g(),this._hoverState="")}},{key:"isWithContent",value:function(){return Boolean(this.getTitle())}},{key:"getTipElement",value:function(){return this.tip=this.tip||a(this.config.template)[0]}},{key:"setContent",value:function(){var b=this.getTipElement(),c=this.getTitle(),d=this.config.html?"innerHTML":"innerText";a(b).find(r.TOOLTIP_INNER)[0][d]=c,a(b).removeClass(q.FADE).removeClass(q.IN),this.cleanupTether()}},{key:"getTitle",value:function(){var a=this.element.getAttribute("data-original-title");return a||(a="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),a}},{key:"cleanupTether",value:function(){this._tether&&(this._tether.destroy(),a(this.element).removeClass(this._removeTetherClasses),a(this.tip).removeClass(this._removeTetherClasses))}},{key:"_getAttachment",value:function(a){return n[a.toUpperCase()]}},{key:"_setListeners",value:function(){var b=this,c=this.config.trigger.split(" ");c.forEach(function(c){if("click"===c)a(b.element).on(b.constructor.Event.CLICK,b.config.selector,a.proxy(b.toggle,b));else if(c!==t.MANUAL){var d=c===t.HOVER?b.constructor.Event.MOUSEENTER:b.constructor.Event.FOCUSIN,e=c===t.HOVER?b.constructor.Event.MOUSELEAVE:b.constructor.Event.FOCUSOUT;a(b.element).on(d,b.config.selector,a.proxy(b._enter,b)).on(e,b.config.selector,a.proxy(b._leave,b))}}),this.config.selector?this.config=a.extend({},this.config,{trigger:"manual",selector:""}):this._fixTitle()}},{key:"_removeTetherClasses",value:function(a,b){return((b.baseVal||b).match(new RegExp("(^|\\s)"+k+"-\\S+","g"))||[]).join(" ")}},{key:"_fixTitle",value:function(){var a=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==a)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))}},{key:"_enter",value:function(b,c){var d=this.constructor.DATA_KEY;return c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusin"===b.type?t.FOCUS:t.HOVER]=!0),a(c.getTipElement()).hasClass(q.IN)||c._hoverState===o.IN?void(c._hoverState=o.IN):(clearTimeout(c._timeout),c._hoverState=o.IN,c.config.delay&&c.config.delay.show?void(c._timeout=setTimeout(function(){c._hoverState===o.IN&&c.show()},c.config.delay.show)):void c.show())}},{key:"_leave",value:function(b,c){var d=this.constructor.DATA_KEY;return c=c||a(b.currentTarget).data(d),c||(c=new this.constructor(b.currentTarget,this._getDelegateConfig()),a(b.currentTarget).data(d,c)),b&&(c._activeTrigger["focusout"===b.type?t.FOCUS:t.HOVER]=!1),c._isWithActiveTrigger()?void 0:(clearTimeout(c._timeout),c._hoverState=o.OUT,c.config.delay&&c.config.delay.hide?void(c._timeout=setTimeout(function(){c._hoverState===o.OUT&&c.hide()},c.config.delay.hide)):void c.hide())}},{key:"_isWithActiveTrigger",value:function(){for(var a in this._activeTrigger)if(this._activeTrigger[a])return!0;return!1}},{key:"_getConfig",value:function(b){return b=a.extend({},this.constructor.Default,a(this.element).data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),e.typeCheckConfig(c,b,this.constructor.DefaultType),b}},{key:"_getDelegateConfig",value:function(){var a={};if(this.config)for(var b in this.config)this.constructor.Default[b]!==this.config[b]&&(a[b]=this.config[b]);return a}}],[{key:"_jQueryInterface",value:function(b){return this.each(function(){var c=a(this).data(g),d="object"==typeof b?b:null;(c||!/destroy|hide/.test(b))&&(c||(c=new i(this,d),a(this).data(g,c)),"string"==typeof b&&c[b]())})}},{key:"VERSION",get:function(){return f}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return c}},{key:"DATA_KEY",get:function(){return g}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return h}},{key:"DefaultType",get:function(){return m}}]),i}();return a.fn[c]=u._jQueryInterface,a.fn[c].Constructor=u,a.fn[c].noConflict=function(){return a.fn[c]=i,u._jQueryInterface},u}(jQuery));!function(e){var g="popover",h="4.0.0",i="bs.popover",j="."+i,k=e.fn[g],l=e.extend({},f.Default,{placement:"right",trigger:"click",content:"",template:''}),m=e.extend({},f.DefaultType,{content:"(string|function)"}),n={FADE:"fade",IN:"in"},o={TITLE:".popover-title",CONTENT:".popover-content",ARROW:".popover-arrow"},p={HIDE:"hide"+j,HIDDEN:"hidden"+j,SHOW:"show"+j,SHOWN:"shown"+j,INSERTED:"inserted"+j,CLICK:"click"+j,FOCUSIN:"focusin"+j,FOCUSOUT:"focusout"+j,MOUSEENTER:"mouseenter"+j,MOUSELEAVE:"mouseleave"+j},q=function(f){function k(){b(this,k),c(Object.getPrototypeOf(k.prototype),"constructor",this).apply(this,arguments)}return a(k,f),d(k,[{key:"isWithContent",value:function(){return this.getTitle()||this._getContent()}},{key:"getTipElement",value:function(){return this.tip=this.tip||e(this.config.template)[0]}},{key:"setContent",value:function(){var a=this.getTipElement(),b=this.getTitle(),c=this._getContent(),d=e(a).find(o.TITLE)[0];d&&(d[this.config.html?"innerHTML":"innerText"]=b),e(a).find(o.CONTENT).children().detach().end()[this.config.html?"string"==typeof c?"html":"append":"text"](c),e(a).removeClass(n.FADE).removeClass(n.IN),this.cleanupTether()}},{key:"_getContent",value:function(){return this.element.getAttribute("data-content")||("function"==typeof this.config.content?this.config.content.call(this.element):this.config.content)}}],[{key:"_jQueryInterface",value:function(a){return this.each(function(){var b=e(this).data(i),c="object"==typeof a?a:null;(b||!/destroy|hide/.test(a))&&(b||(b=new k(this,c),e(this).data(i,b)),"string"==typeof a&&b[a]())})}},{key:"VERSION",get:function(){return h}},{key:"Default",get:function(){return l}},{key:"NAME",get:function(){return g}},{key:"DATA_KEY",get:function(){return i}},{key:"Event",get:function(){return p}},{key:"EVENT_KEY",get:function(){return j}},{key:"DefaultType",get:function(){return m}}]),k}(f);return e.fn[g]=q._jQueryInterface,e.fn[g].Constructor=q,e.fn[g].noConflict=function(){return e.fn[g]=k,q._jQueryInterface},q}(jQuery)}}(jQuery); \ No newline at end of file diff --git a/non_logged_in_area/static/bootstrap4/js/npm.js b/non_logged_in_area/static/bootstrap4/js/npm.js new file mode 100644 index 00000000..d0564681 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/npm.js @@ -0,0 +1,12 @@ +// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. +require('./umd/util.js') +require('./umd/alert.js') +require('./umd/button.js') +require('./umd/carousel.js') +require('./umd/collapse.js') +require('./umd/dropdown.js') +require('./umd/modal.js') +require('./umd/scrollspy.js') +require('./umd/tab.js') +require('./umd/tooltip.js') +require('./umd/popover.js') \ No newline at end of file diff --git a/non_logged_in_area/static/bootstrap4/js/umd/alert.js b/non_logged_in_area/static/bootstrap4/js/umd/alert.js new file mode 100644 index 00000000..62782ca6 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/alert.js @@ -0,0 +1,211 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.alert = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): alert.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Alert = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'alert'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.alert'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 150; + + var Selector = { + DISMISS: '[data-dismiss="alert"]' + }; + + var Event = { + CLOSE: 'close' + EVENT_KEY, + CLOSED: 'closed' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + ALERT: 'alert', + FADE: 'fade', + IN: 'in' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Alert = (function () { + function Alert(element) { + _classCallCheck(this, Alert); + + this._element = element; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Alert, [{ + key: 'close', + + // public + + value: function close(element) { + element = element || this._element; + + var rootElement = this._getRootElement(element); + var customEvent = this._triggerCloseEvent(rootElement); + + if (customEvent.isDefaultPrevented()) { + return; + } + + this._removeElement(rootElement); + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + this._element = null; + } + + // private + + }, { + key: '_getRootElement', + value: function _getRootElement(element) { + var selector = _Util['default'].getSelectorFromElement(element); + var parent = false; + + if (selector) { + parent = $(selector)[0]; + } + + if (!parent) { + parent = $(element).closest('.' + ClassName.ALERT)[0]; + } + + return parent; + } + }, { + key: '_triggerCloseEvent', + value: function _triggerCloseEvent(element) { + var closeEvent = $.Event(Event.CLOSE); + + $(element).trigger(closeEvent); + return closeEvent; + } + }, { + key: '_removeElement', + value: function _removeElement(element) { + $(element).removeClass(ClassName.IN); + + if (!_Util['default'].supportsTransitionEnd() || !$(element).hasClass(ClassName.FADE)) { + this._destroyElement(element); + return; + } + + $(element).one(_Util['default'].TRANSITION_END, $.proxy(this._destroyElement, this, element)).emulateTransitionEnd(TRANSITION_DURATION); + } + }, { + key: '_destroyElement', + value: function _destroyElement(element) { + $(element).detach().trigger(Event.CLOSED).remove(); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $element = $(this); + var data = $element.data(DATA_KEY); + + if (!data) { + data = new Alert(this); + $element.data(DATA_KEY, data); + } + + if (config === 'close') { + data[config](this); + } + }); + } + }, { + key: '_handleDismiss', + value: function _handleDismiss(alertInstance) { + return function (event) { + if (event) { + event.preventDefault(); + } + + alertInstance.close(this); + }; + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Alert; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Alert._jQueryInterface; + $.fn[NAME].Constructor = Alert; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Alert._jQueryInterface; + }; + + return Alert; + })(jQuery); + + module.exports = Alert; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/button.js b/non_logged_in_area/static/bootstrap4/js/umd/button.js new file mode 100644 index 00000000..a3575ba2 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/button.js @@ -0,0 +1,187 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod); + global.button = mod.exports; + } +})(this, function (exports, module) { + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): button.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var Button = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'button'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.button'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var ClassName = { + ACTIVE: 'active', + BUTTON: 'btn', + FOCUS: 'focus' + }; + + var Selector = { + DATA_TOGGLE_CARROT: '[data-toggle^="button"]', + DATA_TOGGLE: '[data-toggle="buttons"]', + INPUT: 'input', + ACTIVE: '.active', + BUTTON: '.btn' + }; + + var Event = { + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, + FOCUS_BLUR_DATA_API: 'focus' + EVENT_KEY + DATA_API_KEY + ' ' + ('blur' + EVENT_KEY + DATA_API_KEY) + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Button = (function () { + function Button(element) { + _classCallCheck(this, Button); + + this._element = element; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Button, [{ + key: 'toggle', + + // public + + value: function toggle() { + var triggerChangeEvent = true; + var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0]; + + if (rootElement) { + var input = $(this._element).find(Selector.INPUT)[0]; + + if (input) { + if (input.type === 'radio') { + if (input.checked && $(this._element).hasClass(ClassName.ACTIVE)) { + triggerChangeEvent = false; + } else { + var activeElement = $(rootElement).find(Selector.ACTIVE)[0]; + + if (activeElement) { + $(activeElement).removeClass(ClassName.ACTIVE); + } + } + } + + if (triggerChangeEvent) { + input.checked = !$(this._element).hasClass(ClassName.ACTIVE); + $(this._element).trigger('change'); + } + } + } else { + this._element.setAttribute('aria-pressed', !$(this._element).hasClass(ClassName.ACTIVE)); + } + + if (triggerChangeEvent) { + $(this._element).toggleClass(ClassName.ACTIVE); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + this._element = null; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + + if (!data) { + data = new Button(this); + $(this).data(DATA_KEY, data); + } + + if (config === 'toggle') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Button; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + event.preventDefault(); + + var button = event.target; + + if (!$(button).hasClass(ClassName.BUTTON)) { + button = $(button).closest(Selector.BUTTON); + } + + Button._jQueryInterface.call($(button), 'toggle'); + }).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { + var button = $(event.target).closest(Selector.BUTTON)[0]; + $(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Button._jQueryInterface; + $.fn[NAME].Constructor = Button; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Button._jQueryInterface; + }; + + return Button; + })(jQuery); + + module.exports = Button; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/carousel.js b/non_logged_in_area/static/bootstrap4/js/umd/carousel.js new file mode 100644 index 00000000..9a03d377 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/carousel.js @@ -0,0 +1,486 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.carousel = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): carousel.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Carousel = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'carousel'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.carousel'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 600; + + var Default = { + interval: 5000, + keyboard: true, + slide: false, + pause: 'hover', + wrap: true + }; + + var DefaultType = { + interval: '(number|boolean)', + keyboard: 'boolean', + slide: '(boolean|string)', + pause: '(string|boolean)', + wrap: 'boolean' + }; + + var Direction = { + NEXT: 'next', + PREVIOUS: 'prev' + }; + + var Event = { + SLIDE: 'slide' + EVENT_KEY, + SLID: 'slid' + EVENT_KEY, + KEYDOWN: 'keydown' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY, + LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + CAROUSEL: 'carousel', + ACTIVE: 'active', + SLIDE: 'slide', + RIGHT: 'right', + LEFT: 'left', + ITEM: 'carousel-item' + }; + + var Selector = { + ACTIVE: '.active', + ACTIVE_ITEM: '.active.carousel-item', + ITEM: '.carousel-item', + NEXT_PREV: '.next, .prev', + INDICATORS: '.carousel-indicators', + DATA_SLIDE: '[data-slide], [data-slide-to]', + DATA_RIDE: '[data-ride="carousel"]' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Carousel = (function () { + function Carousel(element, config) { + _classCallCheck(this, Carousel); + + this._items = null; + this._interval = null; + this._activeElement = null; + + this._isPaused = false; + this._isSliding = false; + + this._config = this._getConfig(config); + this._element = $(element)[0]; + this._indicatorsElement = $(this._element).find(Selector.INDICATORS)[0]; + + this._addEventListeners(); + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Carousel, [{ + key: 'next', + + // public + + value: function next() { + if (!this._isSliding) { + this._slide(Direction.NEXT); + } + } + }, { + key: 'prev', + value: function prev() { + if (!this._isSliding) { + this._slide(Direction.PREVIOUS); + } + } + }, { + key: 'pause', + value: function pause(event) { + if (!event) { + this._isPaused = true; + } + + if ($(this._element).find(Selector.NEXT_PREV)[0] && _Util['default'].supportsTransitionEnd()) { + _Util['default'].triggerTransitionEnd(this._element); + this.cycle(true); + } + + clearInterval(this._interval); + this._interval = null; + } + }, { + key: 'cycle', + value: function cycle(event) { + if (!event) { + this._isPaused = false; + } + + if (this._interval) { + clearInterval(this._interval); + this._interval = null; + } + + if (this._config.interval && !this._isPaused) { + this._interval = setInterval($.proxy(this.next, this), this._config.interval); + } + } + }, { + key: 'to', + value: function to(index) { + var _this = this; + + this._activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; + + var activeIndex = this._getItemIndex(this._activeElement); + + if (index > this._items.length - 1 || index < 0) { + return; + } + + if (this._isSliding) { + $(this._element).one(Event.SLID, function () { + return _this.to(index); + }); + return; + } + + if (activeIndex === index) { + this.pause(); + this.cycle(); + return; + } + + var direction = index > activeIndex ? Direction.NEXT : Direction.PREVIOUS; + + this._slide(direction, this._items[index]); + } + }, { + key: 'dispose', + value: function dispose() { + $(this._element).off(EVENT_KEY); + $.removeData(this._element, DATA_KEY); + + this._items = null; + this._config = null; + this._element = null; + this._interval = null; + this._isPaused = null; + this._isSliding = null; + this._activeElement = null; + this._indicatorsElement = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + _Util['default'].typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_addEventListeners', + value: function _addEventListeners() { + if (this._config.keyboard) { + $(this._element).on(Event.KEYDOWN, $.proxy(this._keydown, this)); + } + + if (this._config.pause === 'hover' && !('ontouchstart' in document.documentElement)) { + $(this._element).on(Event.MOUSEENTER, $.proxy(this.pause, this)).on(Event.MOUSELEAVE, $.proxy(this.cycle, this)); + } + } + }, { + key: '_keydown', + value: function _keydown(event) { + event.preventDefault(); + + if (/input|textarea/i.test(event.target.tagName)) { + return; + } + + switch (event.which) { + case 37: + this.prev();break; + case 39: + this.next();break; + default: + return; + } + } + }, { + key: '_getItemIndex', + value: function _getItemIndex(element) { + this._items = $.makeArray($(element).parent().find(Selector.ITEM)); + return this._items.indexOf(element); + } + }, { + key: '_getItemByDirection', + value: function _getItemByDirection(direction, activeElement) { + var isNextDirection = direction === Direction.NEXT; + var isPrevDirection = direction === Direction.PREVIOUS; + var activeIndex = this._getItemIndex(activeElement); + var lastItemIndex = this._items.length - 1; + var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; + + if (isGoingToWrap && !this._config.wrap) { + return activeElement; + } + + var delta = direction === Direction.PREVIOUS ? -1 : 1; + var itemIndex = (activeIndex + delta) % this._items.length; + + return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; + } + }, { + key: '_triggerSlideEvent', + value: function _triggerSlideEvent(relatedTarget, directionalClassname) { + var slideEvent = $.Event(Event.SLIDE, { + relatedTarget: relatedTarget, + direction: directionalClassname + }); + + $(this._element).trigger(slideEvent); + + return slideEvent; + } + }, { + key: '_setActiveIndicatorElement', + value: function _setActiveIndicatorElement(element) { + if (this._indicatorsElement) { + $(this._indicatorsElement).find(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + + var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; + + if (nextIndicator) { + $(nextIndicator).addClass(ClassName.ACTIVE); + } + } + } + }, { + key: '_slide', + value: function _slide(direction, element) { + var _this2 = this; + + var activeElement = $(this._element).find(Selector.ACTIVE_ITEM)[0]; + var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); + + var isCycling = Boolean(this._interval); + + var directionalClassName = direction === Direction.NEXT ? ClassName.LEFT : ClassName.RIGHT; + + if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { + this._isSliding = false; + return; + } + + var slideEvent = this._triggerSlideEvent(nextElement, directionalClassName); + if (slideEvent.isDefaultPrevented()) { + return; + } + + if (!activeElement || !nextElement) { + // some weirdness is happening, so we bail + return; + } + + this._isSliding = true; + + if (isCycling) { + this.pause(); + } + + this._setActiveIndicatorElement(nextElement); + + var slidEvent = $.Event(Event.SLID, { + relatedTarget: nextElement, + direction: directionalClassName + }); + + if (_Util['default'].supportsTransitionEnd() && $(this._element).hasClass(ClassName.SLIDE)) { + + $(nextElement).addClass(direction); + + _Util['default'].reflow(nextElement); + + $(activeElement).addClass(directionalClassName); + $(nextElement).addClass(directionalClassName); + + $(activeElement).one(_Util['default'].TRANSITION_END, function () { + $(nextElement).removeClass(directionalClassName).removeClass(direction); + + $(nextElement).addClass(ClassName.ACTIVE); + + $(activeElement).removeClass(ClassName.ACTIVE).removeClass(direction).removeClass(directionalClassName); + + _this2._isSliding = false; + + setTimeout(function () { + return $(_this2._element).trigger(slidEvent); + }, 0); + }).emulateTransitionEnd(TRANSITION_DURATION); + } else { + $(activeElement).removeClass(ClassName.ACTIVE); + $(nextElement).addClass(ClassName.ACTIVE); + + this._isSliding = false; + $(this._element).trigger(slidEvent); + } + + if (isCycling) { + this.cycle(); + } + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = $.extend({}, Default, $(this).data()); + + if (typeof config === 'object') { + $.extend(_config, config); + } + + var action = typeof config === 'string' ? config : _config.slide; + + if (!data) { + data = new Carousel(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'number') { + data.to(config); + } else if (action) { + data[action](); + } else if (_config.interval) { + data.pause(); + data.cycle(); + } + }); + } + }, { + key: '_dataApiClickHandler', + value: function _dataApiClickHandler(event) { + var selector = _Util['default'].getSelectorFromElement(this); + + if (!selector) { + return; + } + + var target = $(selector)[0]; + + if (!target || !$(target).hasClass(ClassName.CAROUSEL)) { + return; + } + + var config = $.extend({}, $(target).data(), $(this).data()); + var slideIndex = this.getAttribute('data-slide-to'); + + if (slideIndex) { + config.interval = false; + } + + Carousel._jQueryInterface.call($(target), config); + + if (slideIndex) { + $(target).data(DATA_KEY).to(slideIndex); + } + + event.preventDefault(); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return Carousel; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); + + $(window).on(Event.LOAD_DATA_API, function () { + $(Selector.DATA_RIDE).each(function () { + var $carousel = $(this); + Carousel._jQueryInterface.call($carousel, $carousel.data()); + }); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Carousel._jQueryInterface; + $.fn[NAME].Constructor = Carousel; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Carousel._jQueryInterface; + }; + + return Carousel; + })(jQuery); + + module.exports = Carousel; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/collapse.js b/non_logged_in_area/static/bootstrap4/js/umd/collapse.js new file mode 100644 index 00000000..055541ca --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/collapse.js @@ -0,0 +1,380 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.collapse = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): collapse.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Collapse = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'collapse'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.collapse'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 600; + + var Default = { + toggle: true, + parent: '' + }; + + var DefaultType = { + toggle: 'boolean', + parent: 'string' + }; + + var Event = { + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + IN: 'in', + COLLAPSE: 'collapse', + COLLAPSING: 'collapsing', + COLLAPSED: 'collapsed' + }; + + var Dimension = { + WIDTH: 'width', + HEIGHT: 'height' + }; + + var Selector = { + ACTIVES: '.panel > .in, .panel > .collapsing', + DATA_TOGGLE: '[data-toggle="collapse"]' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Collapse = (function () { + function Collapse(element, config) { + _classCallCheck(this, Collapse); + + this._isTransitioning = false; + this._element = element; + this._config = this._getConfig(config); + this._triggerArray = $.makeArray($('[data-toggle="collapse"][href="#' + element.id + '"],' + ('[data-toggle="collapse"][data-target="#' + element.id + '"]'))); + + this._parent = this._config.parent ? this._getParent() : null; + + if (!this._config.parent) { + this._addAriaAndCollapsedClass(this._element, this._triggerArray); + } + + if (this._config.toggle) { + this.toggle(); + } + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Collapse, [{ + key: 'toggle', + + // public + + value: function toggle() { + if ($(this._element).hasClass(ClassName.IN)) { + this.hide(); + } else { + this.show(); + } + } + }, { + key: 'show', + value: function show() { + var _this = this; + + if (this._isTransitioning || $(this._element).hasClass(ClassName.IN)) { + return; + } + + var actives = undefined; + var activesData = undefined; + + if (this._parent) { + actives = $.makeArray($(Selector.ACTIVES)); + if (!actives.length) { + actives = null; + } + } + + if (actives) { + activesData = $(actives).data(DATA_KEY); + if (activesData && activesData._isTransitioning) { + return; + } + } + + var startEvent = $.Event(Event.SHOW); + $(this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + + if (actives) { + Collapse._jQueryInterface.call($(actives), 'hide'); + if (!activesData) { + $(actives).data(DATA_KEY, null); + } + } + + var dimension = this._getDimension(); + + $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); + + this._element.style[dimension] = 0; + this._element.setAttribute('aria-expanded', true); + + if (this._triggerArray.length) { + $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); + } + + this.setTransitioning(true); + + var complete = function complete() { + $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.IN); + + _this._element.style[dimension] = ''; + + _this.setTransitioning(false); + + $(_this._element).trigger(Event.SHOWN); + }; + + if (!_Util['default'].supportsTransitionEnd()) { + complete(); + return; + } + + var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); + var scrollSize = 'scroll' + capitalizedDimension; + + $(this._element).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + + this._element.style[dimension] = this._element[scrollSize] + 'px'; + } + }, { + key: 'hide', + value: function hide() { + var _this2 = this; + + if (this._isTransitioning || !$(this._element).hasClass(ClassName.IN)) { + return; + } + + var startEvent = $.Event(Event.HIDE); + $(this._element).trigger(startEvent); + if (startEvent.isDefaultPrevented()) { + return; + } + + var dimension = this._getDimension(); + var offsetDimension = dimension === Dimension.WIDTH ? 'offsetWidth' : 'offsetHeight'; + + this._element.style[dimension] = this._element[offsetDimension] + 'px'; + + _Util['default'].reflow(this._element); + + $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.IN); + + this._element.setAttribute('aria-expanded', false); + + if (this._triggerArray.length) { + $(this._triggerArray).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); + } + + this.setTransitioning(true); + + var complete = function complete() { + _this2.setTransitioning(false); + $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); + }; + + this._element.style[dimension] = 0; + + if (!_Util['default'].supportsTransitionEnd()) { + complete(); + return; + } + + $(this._element).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + } + }, { + key: 'setTransitioning', + value: function setTransitioning(isTransitioning) { + this._isTransitioning = isTransitioning; + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + + this._config = null; + this._parent = null; + this._element = null; + this._triggerArray = null; + this._isTransitioning = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + config.toggle = Boolean(config.toggle); // coerce string values + _Util['default'].typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_getDimension', + value: function _getDimension() { + var hasWidth = $(this._element).hasClass(Dimension.WIDTH); + return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; + } + }, { + key: '_getParent', + value: function _getParent() { + var _this3 = this; + + var parent = $(this._config.parent)[0]; + var selector = '[data-toggle="collapse"][data-parent="' + this._config.parent + '"]'; + + $(parent).find(selector).each(function (i, element) { + _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); + }); + + return parent; + } + }, { + key: '_addAriaAndCollapsedClass', + value: function _addAriaAndCollapsedClass(element, triggerArray) { + if (element) { + var isOpen = $(element).hasClass(ClassName.IN); + element.setAttribute('aria-expanded', isOpen); + + if (triggerArray.length) { + $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); + } + } + } + + // static + + }], [{ + key: '_getTargetFromElement', + value: function _getTargetFromElement(element) { + var selector = _Util['default'].getSelectorFromElement(element); + return selector ? $(selector)[0] : null; + } + }, { + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + var _config = $.extend({}, Default, $this.data(), typeof config === 'object' && config); + + if (!data && _config.toggle && /show|hide/.test(config)) { + _config.toggle = false; + } + + if (!data) { + data = new Collapse(this, _config); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return Collapse; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + + var target = Collapse._getTargetFromElement(this); + var data = $(target).data(DATA_KEY); + var config = data ? 'toggle' : $(this).data(); + + Collapse._jQueryInterface.call($(target), config); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Collapse._jQueryInterface; + $.fn[NAME].Constructor = Collapse; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Collapse._jQueryInterface; + }; + + return Collapse; + })(jQuery); + + module.exports = Collapse; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/dropdown.js b/non_logged_in_area/static/bootstrap4/js/umd/dropdown.js new file mode 100644 index 00000000..21abecf9 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/dropdown.js @@ -0,0 +1,309 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.dropdown = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): dropdown.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Dropdown = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'dropdown'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.dropdown'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + CLICK: 'click' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY, + KEYDOWN_DATA_API: 'keydown' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + BACKDROP: 'dropdown-backdrop', + DISABLED: 'disabled', + OPEN: 'open' + }; + + var Selector = { + BACKDROP: '.dropdown-backdrop', + DATA_TOGGLE: '[data-toggle="dropdown"]', + FORM_CHILD: '.dropdown form', + ROLE_MENU: '[role="menu"]', + ROLE_LISTBOX: '[role="listbox"]', + NAVBAR_NAV: '.navbar-nav', + VISIBLE_ITEMS: '[role="menu"] li:not(.disabled) a, ' + '[role="listbox"] li:not(.disabled) a' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Dropdown = (function () { + function Dropdown(element) { + _classCallCheck(this, Dropdown); + + this._element = element; + + this._addEventListeners(); + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Dropdown, [{ + key: 'toggle', + + // public + + value: function toggle() { + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return false; + } + + var parent = Dropdown._getParentFromElement(this); + var isActive = $(parent).hasClass(ClassName.OPEN); + + Dropdown._clearMenus(); + + if (isActive) { + return false; + } + + if ('ontouchstart' in document.documentElement && !$(parent).closest(Selector.NAVBAR_NAV).length) { + + // if mobile we use a backdrop because click events don't delegate + var dropdown = document.createElement('div'); + dropdown.className = ClassName.BACKDROP; + $(dropdown).insertBefore(this); + $(dropdown).on('click', Dropdown._clearMenus); + } + + var relatedTarget = { relatedTarget: this }; + var showEvent = $.Event(Event.SHOW, relatedTarget); + + $(parent).trigger(showEvent); + + if (showEvent.isDefaultPrevented()) { + return false; + } + + this.focus(); + this.setAttribute('aria-expanded', 'true'); + + $(parent).toggleClass(ClassName.OPEN); + $(parent).trigger($.Event(Event.SHOWN, relatedTarget)); + + return false; + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + $(this._element).off(EVENT_KEY); + this._element = null; + } + + // private + + }, { + key: '_addEventListeners', + value: function _addEventListeners() { + $(this._element).on(Event.CLICK, this.toggle); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + + if (!data) { + $(this).data(DATA_KEY, data = new Dropdown(this)); + } + + if (typeof config === 'string') { + data[config].call(this); + } + }); + } + }, { + key: '_clearMenus', + value: function _clearMenus(event) { + if (event && event.which === 3) { + return; + } + + var backdrop = $(Selector.BACKDROP)[0]; + if (backdrop) { + backdrop.parentNode.removeChild(backdrop); + } + + var toggles = $.makeArray($(Selector.DATA_TOGGLE)); + + for (var i = 0; i < toggles.length; i++) { + var _parent = Dropdown._getParentFromElement(toggles[i]); + var relatedTarget = { relatedTarget: toggles[i] }; + + if (!$(_parent).hasClass(ClassName.OPEN)) { + continue; + } + + if (event && event.type === 'click' && /input|textarea/i.test(event.target.tagName) && $.contains(_parent, event.target)) { + continue; + } + + var hideEvent = $.Event(Event.HIDE, relatedTarget); + $(_parent).trigger(hideEvent); + if (hideEvent.isDefaultPrevented()) { + continue; + } + + toggles[i].setAttribute('aria-expanded', 'false'); + + $(_parent).removeClass(ClassName.OPEN).trigger($.Event(Event.HIDDEN, relatedTarget)); + } + } + }, { + key: '_getParentFromElement', + value: function _getParentFromElement(element) { + var parent = undefined; + var selector = _Util['default'].getSelectorFromElement(element); + + if (selector) { + parent = $(selector)[0]; + } + + return parent || element.parentNode; + } + }, { + key: '_dataApiKeydownHandler', + value: function _dataApiKeydownHandler(event) { + if (!/(38|40|27|32)/.test(event.which) || /input|textarea/i.test(event.target.tagName)) { + return; + } + + event.preventDefault(); + event.stopPropagation(); + + if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { + return; + } + + var parent = Dropdown._getParentFromElement(this); + var isActive = $(parent).hasClass(ClassName.OPEN); + + if (!isActive && event.which !== 27 || isActive && event.which === 27) { + + if (event.which === 27) { + var toggle = $(parent).find(Selector.DATA_TOGGLE)[0]; + $(toggle).trigger('focus'); + } + + $(this).trigger('click'); + return; + } + + var items = $.makeArray($(Selector.VISIBLE_ITEMS)); + + items = items.filter(function (item) { + return item.offsetWidth || item.offsetHeight; + }); + + if (!items.length) { + return; + } + + var index = items.indexOf(event.target); + + if (event.which === 38 && index > 0) { + // up + index--; + } + + if (event.which === 40 && index < items.length - 1) { + // down + index++; + } + + if (! ~index) { + index = 0; + } + + items[index].focus(); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Dropdown; + })(); + + $(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_MENU, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.ROLE_LISTBOX, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, Dropdown.prototype.toggle).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { + e.stopPropagation(); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Dropdown._jQueryInterface; + $.fn[NAME].Constructor = Dropdown; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Dropdown._jQueryInterface; + }; + + return Dropdown; + })(jQuery); + + module.exports = Dropdown; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/modal.js b/non_logged_in_area/static/bootstrap4/js/umd/modal.js new file mode 100644 index 00000000..bef186f8 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/modal.js @@ -0,0 +1,552 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.modal = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): modal.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Modal = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'modal'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.modal'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 300; + var BACKDROP_TRANSITION_DURATION = 150; + + var Default = { + backdrop: true, + keyboard: true, + focus: true, + show: true + }; + + var DefaultType = { + backdrop: '(boolean|string)', + keyboard: 'boolean', + focus: 'boolean', + show: 'boolean' + }; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + RESIZE: 'resize' + EVENT_KEY, + CLICK_DISMISS: 'click.dismiss' + EVENT_KEY, + KEYDOWN_DISMISS: 'keydown.dismiss' + EVENT_KEY, + MOUSEUP_DISMISS: 'mouseup.dismiss' + EVENT_KEY, + MOUSEDOWN_DISMISS: 'mousedown.dismiss' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + SCROLLBAR_MEASURER: 'modal-scrollbar-measure', + BACKDROP: 'modal-backdrop', + OPEN: 'modal-open', + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + DIALOG: '.modal-dialog', + DATA_TOGGLE: '[data-toggle="modal"]', + DATA_DISMISS: '[data-dismiss="modal"]', + FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Modal = (function () { + function Modal(element, config) { + _classCallCheck(this, Modal); + + this._config = this._getConfig(config); + this._element = element; + this._dialog = $(element).find(Selector.DIALOG)[0]; + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._originalBodyPadding = 0; + this._scrollbarWidth = 0; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Modal, [{ + key: 'toggle', + + // public + + value: function toggle(relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); + } + }, { + key: 'show', + value: function show(relatedTarget) { + var _this = this; + + var showEvent = $.Event(Event.SHOW, { + relatedTarget: relatedTarget + }); + + $(this._element).trigger(showEvent); + + if (this._isShown || showEvent.isDefaultPrevented()) { + return; + } + + this._isShown = true; + + this._checkScrollbar(); + this._setScrollbar(); + + $(document.body).addClass(ClassName.OPEN); + + this._setEscapeEvent(); + this._setResizeEvent(); + + $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, $.proxy(this.hide, this)); + + $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { + $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { + if ($(event.target).is(_this._element)) { + that._ignoreBackdropClick = true; + } + }); + }); + + this._showBackdrop($.proxy(this._showElement, this, relatedTarget)); + } + }, { + key: 'hide', + value: function hide(event) { + if (event) { + event.preventDefault(); + } + + var hideEvent = $.Event(Event.HIDE); + + $(this._element).trigger(hideEvent); + + if (!this._isShown || hideEvent.isDefaultPrevented()) { + return; + } + + this._isShown = false; + + this._setEscapeEvent(); + this._setResizeEvent(); + + $(document).off(Event.FOCUSIN); + + $(this._element).removeClass(ClassName.IN); + + $(this._element).off(Event.CLICK_DISMISS); + $(this._dialog).off(Event.MOUSEDOWN_DISMISS); + + if (_Util['default'].supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) { + + $(this._element).one(_Util['default'].TRANSITION_END, $.proxy(this._hideModal, this)).emulateTransitionEnd(TRANSITION_DURATION); + } else { + this._hideModal(); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + + $(window).off(EVENT_KEY); + $(document).off(EVENT_KEY); + $(this._element).off(EVENT_KEY); + $(this._backdrop).off(EVENT_KEY); + + this._config = null; + this._element = null; + this._dialog = null; + this._backdrop = null; + this._isShown = null; + this._isBodyOverflowing = null; + this._ignoreBackdropClick = null; + this._originalBodyPadding = null; + this._scrollbarWidth = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + _Util['default'].typeCheckConfig(NAME, config, DefaultType); + return config; + } + }, { + key: '_showElement', + value: function _showElement(relatedTarget) { + var _this2 = this; + + var transition = _Util['default'].supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE); + + if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { + // don't move modals dom position + document.body.appendChild(this._element); + } + + this._element.style.display = 'block'; + this._element.scrollTop = 0; + + if (transition) { + _Util['default'].reflow(this._element); + } + + $(this._element).addClass(ClassName.IN); + + if (this._config.focus) { + this._enforceFocus(); + } + + var shownEvent = $.Event(Event.SHOWN, { + relatedTarget: relatedTarget + }); + + var transitionComplete = function transitionComplete() { + if (_this2._config.focus) { + _this2._element.focus(); + } + $(_this2._element).trigger(shownEvent); + }; + + if (transition) { + $(this._dialog).one(_Util['default'].TRANSITION_END, transitionComplete).emulateTransitionEnd(TRANSITION_DURATION); + } else { + transitionComplete(); + } + } + }, { + key: '_enforceFocus', + value: function _enforceFocus() { + var _this3 = this; + + $(document).off(Event.FOCUSIN) // guard against infinite focus loop + .on(Event.FOCUSIN, function (event) { + if (_this3._element !== event.target && !$(_this3._element).has(event.target).length) { + _this3._element.focus(); + } + }); + } + }, { + key: '_setEscapeEvent', + value: function _setEscapeEvent() { + var _this4 = this; + + if (this._isShown && this._config.keyboard) { + $(this._element).on(Event.KEYDOWN_DISMISS, function (event) { + if (event.which === 27) { + _this4.hide(); + } + }); + } else if (!this._isShown) { + $(this._element).off(Event.KEYDOWN_DISMISS); + } + } + }, { + key: '_setResizeEvent', + value: function _setResizeEvent() { + if (this._isShown) { + $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this)); + } else { + $(window).off(Event.RESIZE); + } + } + }, { + key: '_hideModal', + value: function _hideModal() { + var _this5 = this; + + this._element.style.display = 'none'; + this._showBackdrop(function () { + $(document.body).removeClass(ClassName.OPEN); + _this5._resetAdjustments(); + _this5._resetScrollbar(); + $(_this5._element).trigger(Event.HIDDEN); + }); + } + }, { + key: '_removeBackdrop', + value: function _removeBackdrop() { + if (this._backdrop) { + $(this._backdrop).remove(); + this._backdrop = null; + } + } + }, { + key: '_showBackdrop', + value: function _showBackdrop(callback) { + var _this6 = this; + + var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; + + if (this._isShown && this._config.backdrop) { + var doAnimate = _Util['default'].supportsTransitionEnd() && animate; + + this._backdrop = document.createElement('div'); + this._backdrop.className = ClassName.BACKDROP; + + if (animate) { + $(this._backdrop).addClass(animate); + } + + $(this._backdrop).appendTo(document.body); + + $(this._element).on(Event.CLICK_DISMISS, function (event) { + if (_this6._ignoreBackdropClick) { + _this6._ignoreBackdropClick = false; + return; + } + if (event.target !== event.currentTarget) { + return; + } + if (_this6._config.backdrop === 'static') { + _this6._element.focus(); + } else { + _this6.hide(); + } + }); + + if (doAnimate) { + _Util['default'].reflow(this._backdrop); + } + + $(this._backdrop).addClass(ClassName.IN); + + if (!callback) { + return; + } + + if (!doAnimate) { + callback(); + return; + } + + $(this._backdrop).one(_Util['default'].TRANSITION_END, callback).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + } else if (!this._isShown && this._backdrop) { + $(this._backdrop).removeClass(ClassName.IN); + + var callbackRemove = function callbackRemove() { + _this6._removeBackdrop(); + if (callback) { + callback(); + } + }; + + if (_Util['default'].supportsTransitionEnd() && $(this._element).hasClass(ClassName.FADE)) { + $(this._backdrop).one(_Util['default'].TRANSITION_END, callbackRemove).emulateTransitionEnd(BACKDROP_TRANSITION_DURATION); + } else { + callbackRemove(); + } + } else if (callback) { + callback(); + } + } + + // ---------------------------------------------------------------------- + // the following methods are used to handle overflowing modals + // todo (fat): these should probably be refactored out of modal.js + // ---------------------------------------------------------------------- + + }, { + key: '_handleUpdate', + value: function _handleUpdate() { + this._adjustDialog(); + } + }, { + key: '_adjustDialog', + value: function _adjustDialog() { + var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!this._isBodyOverflowing && isModalOverflowing) { + this._element.style.paddingLeft = this._scrollbarWidth + 'px'; + } + + if (this._isBodyOverflowing && !isModalOverflowing) { + this._element.style.paddingRight = this._scrollbarWidth + 'px~'; + } + } + }, { + key: '_resetAdjustments', + value: function _resetAdjustments() { + this._element.style.paddingLeft = ''; + this._element.style.paddingRight = ''; + } + }, { + key: '_checkScrollbar', + value: function _checkScrollbar() { + var fullWindowWidth = window.innerWidth; + if (!fullWindowWidth) { + // workaround for missing window.innerWidth in IE8 + var documentElementRect = document.documentElement.getBoundingClientRect(); + fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left); + } + this._isBodyOverflowing = document.body.clientWidth < fullWindowWidth; + this._scrollbarWidth = this._getScrollbarWidth(); + } + }, { + key: '_setScrollbar', + value: function _setScrollbar() { + var bodyPadding = parseInt($(Selector.FIXED_CONTENT).css('padding-right') || 0, 10); + + this._originalBodyPadding = document.body.style.paddingRight || ''; + + if (this._isBodyOverflowing) { + document.body.style.paddingRight = bodyPadding + (this._scrollbarWidth + 'px'); + } + } + }, { + key: '_resetScrollbar', + value: function _resetScrollbar() { + document.body.style.paddingRight = this._originalBodyPadding; + } + }, { + key: '_getScrollbarWidth', + value: function _getScrollbarWidth() { + // thx d.walsh + var scrollDiv = document.createElement('div'); + scrollDiv.className = ClassName.SCROLLBAR_MEASURER; + document.body.appendChild(scrollDiv); + var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; + document.body.removeChild(scrollDiv); + return scrollbarWidth; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config, relatedTarget) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = $.extend({}, Modal.Default, $(this).data(), typeof config === 'object' && config); + + if (!data) { + data = new Modal(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](relatedTarget); + } else if (_config.show) { + data.show(relatedTarget); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return Modal; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + var _this7 = this; + + var target = undefined; + var selector = _Util['default'].getSelectorFromElement(this); + + if (selector) { + target = $(selector)[0]; + } + + var config = $(target).data(DATA_KEY) ? 'toggle' : $.extend({}, $(target).data(), $(this).data()); + + if (this.tagName === 'A') { + event.preventDefault(); + } + + var $target = $(target).one(Event.SHOW, function (showEvent) { + if (showEvent.isDefaultPrevented()) { + // only register focus restorer if modal will actually get shown + return; + } + + $target.one(Event.HIDDEN, function () { + if ($(_this7).is(':visible')) { + _this7.focus(); + } + }); + }); + + Modal._jQueryInterface.call($(target), config, this); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Modal._jQueryInterface; + $.fn[NAME].Constructor = Modal; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Modal._jQueryInterface; + }; + + return Modal; + })(jQuery); + + module.exports = Modal; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/popover.js b/non_logged_in_area/static/bootstrap4/js/umd/popover.js new file mode 100644 index 00000000..e1b56fcf --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/popover.js @@ -0,0 +1,223 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './tooltip'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./tooltip')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Tooltip); + global.popover = mod.exports; + } +})(this, function (exports, module, _tooltip) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + var _Tooltip2 = _interopRequireDefault(_tooltip); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): popover.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Popover = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'popover'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.popover'; + var EVENT_KEY = '.' + DATA_KEY; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Default = $.extend({}, _Tooltip2['default'].Default, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }); + + var DefaultType = $.extend({}, _Tooltip2['default'].DefaultType, { + content: '(string|function)' + }); + + var ClassName = { + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + TITLE: '.popover-title', + CONTENT: '.popover-content', + ARROW: '.popover-arrow' + }; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + INSERTED: 'inserted' + EVENT_KEY, + CLICK: 'click' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + FOCUSOUT: 'focusout' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Popover = (function (_Tooltip) { + _inherits(Popover, _Tooltip); + + function Popover() { + _classCallCheck(this, Popover); + + _get(Object.getPrototypeOf(Popover.prototype), 'constructor', this).apply(this, arguments); + } + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + _createClass(Popover, [{ + key: 'isWithContent', + + // overrides + + value: function isWithContent() { + return this.getTitle() || this._getContent(); + } + }, { + key: 'getTipElement', + value: function getTipElement() { + return this.tip = this.tip || $(this.config.template)[0]; + } + }, { + key: 'setContent', + value: function setContent() { + var tip = this.getTipElement(); + var title = this.getTitle(); + var content = this._getContent(); + var titleElement = $(tip).find(Selector.TITLE)[0]; + + if (titleElement) { + titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title; + } + + // we use append for html objects to maintain js events + $(tip).find(Selector.CONTENT).children().detach().end()[this.config.html ? typeof content === 'string' ? 'html' : 'append' : 'text'](content); + + $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN); + + this.cleanupTether(); + } + + // private + + }, { + key: '_getContent', + value: function _getContent() { + return this.element.getAttribute('data-content') || (typeof this.config.content === 'function' ? this.config.content.call(this.element) : this.config.content); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = typeof config === 'object' ? config : null; + + if (!data && /destroy|hide/.test(config)) { + return; + } + + if (!data) { + data = new Popover(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + + // getters + + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }, { + key: 'NAME', + get: function get() { + return NAME; + } + }, { + key: 'DATA_KEY', + get: function get() { + return DATA_KEY; + } + }, { + key: 'Event', + get: function get() { + return Event; + } + }, { + key: 'EVENT_KEY', + get: function get() { + return EVENT_KEY; + } + }, { + key: 'DefaultType', + get: function get() { + return DefaultType; + } + }]); + + return Popover; + })(_Tooltip2['default']); + + $.fn[NAME] = Popover._jQueryInterface; + $.fn[NAME].Constructor = Popover; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Popover._jQueryInterface; + }; + + return Popover; + })(jQuery); + + module.exports = Popover; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/scrollspy.js b/non_logged_in_area/static/bootstrap4/js/umd/scrollspy.js new file mode 100644 index 00000000..7f38bfca --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/scrollspy.js @@ -0,0 +1,336 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.scrollspy = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): scrollspy.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var ScrollSpy = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'scrollspy'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.scrollspy'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Default = { + offset: 10, + method: 'auto', + target: '' + }; + + var DefaultType = { + offset: 'number', + method: 'string', + target: '(string|element)' + }; + + var Event = { + ACTIVATE: 'activate' + EVENT_KEY, + SCROLL: 'scroll' + EVENT_KEY, + LOAD_DATA_API: 'load' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + DROPDOWN_ITEM: 'dropdown-item', + DROPDOWN_MENU: 'dropdown-menu', + NAV_LINK: 'nav-link', + NAV: 'nav', + ACTIVE: 'active' + }; + + var Selector = { + DATA_SPY: '[data-spy="scroll"]', + ACTIVE: '.active', + LIST_ITEM: '.list-item', + LI: 'li', + LI_DROPDOWN: 'li.dropdown', + NAV_LINKS: '.nav-link', + DROPDOWN: '.dropdown', + DROPDOWN_ITEMS: '.dropdown-item', + DROPDOWN_TOGGLE: '.dropdown-toggle' + }; + + var OffsetMethod = { + OFFSET: 'offset', + POSITION: 'position' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var ScrollSpy = (function () { + function ScrollSpy(element, config) { + _classCallCheck(this, ScrollSpy); + + this._element = element; + this._scrollElement = element.tagName === 'BODY' ? window : element; + this._config = this._getConfig(config); + this._selector = this._config.target + ' ' + Selector.NAV_LINKS + ',' + (this._config.target + ' ' + Selector.DROPDOWN_ITEMS); + this._offsets = []; + this._targets = []; + this._activeTarget = null; + this._scrollHeight = 0; + + $(this._scrollElement).on(Event.SCROLL, $.proxy(this._process, this)); + + this.refresh(); + this._process(); + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(ScrollSpy, [{ + key: 'refresh', + + // public + + value: function refresh() { + var _this = this; + + var autoMethod = this._scrollElement !== this._scrollElement.window ? OffsetMethod.POSITION : OffsetMethod.OFFSET; + + var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; + + var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; + + this._offsets = []; + this._targets = []; + + this._scrollHeight = this._getScrollHeight(); + + var targets = $.makeArray($(this._selector)); + + targets.map(function (element) { + var target = undefined; + var targetSelector = _Util['default'].getSelectorFromElement(element); + + if (targetSelector) { + target = $(targetSelector)[0]; + } + + if (target && (target.offsetWidth || target.offsetHeight)) { + // todo (fat): remove sketch reliance on jQuery position/offset + return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; + } + }).filter(function (item) { + return item; + }).sort(function (a, b) { + return a[0] - b[0]; + }).forEach(function (item) { + _this._offsets.push(item[0]); + _this._targets.push(item[1]); + }); + } + }, { + key: 'dispose', + value: function dispose() { + $.removeData(this._element, DATA_KEY); + $(this._scrollElement).off(EVENT_KEY); + + this._element = null; + this._scrollElement = null; + this._config = null; + this._selector = null; + this._offsets = null; + this._targets = null; + this._activeTarget = null; + this._scrollHeight = null; + } + + // private + + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, Default, config); + + if (typeof config.target !== 'string') { + var id = $(config.target).attr('id'); + if (!id) { + id = _Util['default'].getUID(NAME); + $(config.target).attr('id', id); + } + config.target = '#' + id; + } + + _Util['default'].typeCheckConfig(NAME, config, DefaultType); + + return config; + } + }, { + key: '_getScrollTop', + value: function _getScrollTop() { + return this._scrollElement === window ? this._scrollElement.scrollY : this._scrollElement.scrollTop; + } + }, { + key: '_getScrollHeight', + value: function _getScrollHeight() { + return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); + } + }, { + key: '_process', + value: function _process() { + var scrollTop = this._getScrollTop() + this._config.offset; + var scrollHeight = this._getScrollHeight(); + var maxScroll = this._config.offset + scrollHeight - this._scrollElement.offsetHeight; + + if (this._scrollHeight !== scrollHeight) { + this.refresh(); + } + + if (scrollTop >= maxScroll) { + var target = this._targets[this._targets.length - 1]; + + if (this._activeTarget !== target) { + this._activate(target); + } + } + + if (this._activeTarget && scrollTop < this._offsets[0]) { + this._activeTarget = null; + this._clear(); + return; + } + + for (var i = this._offsets.length; i--;) { + var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (this._offsets[i + 1] === undefined || scrollTop < this._offsets[i + 1]); + + if (isActiveTarget) { + this._activate(this._targets[i]); + } + } + } + }, { + key: '_activate', + value: function _activate(target) { + this._activeTarget = target; + + this._clear(); + + var queries = this._selector.split(','); + queries = queries.map(function (selector) { + return selector + '[data-target="' + target + '"],' + (selector + '[href="' + target + '"]'); + }); + + var $link = $(queries.join(',')); + + if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { + $link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); + $link.addClass(ClassName.ACTIVE); + } else { + // todo (fat) this is kinda sus… + // recursively add actives to tested nav-links + $link.parents(Selector.LI).find(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); + } + + $(this._scrollElement).trigger(Event.ACTIVATE, { + relatedTarget: target + }); + } + }, { + key: '_clear', + value: function _clear() { + $(this._selector).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = typeof config === 'object' && config || null; + + if (!data) { + data = new ScrollSpy(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }]); + + return ScrollSpy; + })(); + + $(window).on(Event.LOAD_DATA_API, function () { + var scrollSpys = $.makeArray($(Selector.DATA_SPY)); + + for (var i = scrollSpys.length; i--;) { + var $spy = $(scrollSpys[i]); + ScrollSpy._jQueryInterface.call($spy, $spy.data()); + } + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = ScrollSpy._jQueryInterface; + $.fn[NAME].Constructor = ScrollSpy; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return ScrollSpy._jQueryInterface; + }; + + return ScrollSpy; + })(jQuery); + + module.exports = ScrollSpy; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/tab.js b/non_logged_in_area/static/bootstrap4/js/umd/tab.js new file mode 100644 index 00000000..a80a96e6 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/tab.js @@ -0,0 +1,279 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.tab = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): tab.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Tab = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'tab'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.tab'; + var EVENT_KEY = '.' + DATA_KEY; + var DATA_API_KEY = '.data-api'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 150; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + CLICK_DATA_API: 'click' + EVENT_KEY + DATA_API_KEY + }; + + var ClassName = { + DROPDOWN_MENU: 'dropdown-menu', + ACTIVE: 'active', + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + A: 'a', + LI: 'li', + DROPDOWN: '.dropdown', + UL: 'ul:not(.dropdown-menu)', + FADE_CHILD: '> .nav-item .fade, > .fade', + ACTIVE: '.active', + ACTIVE_CHILD: '> .nav-item > .active, > .active', + DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]', + DROPDOWN_TOGGLE: '.dropdown-toggle', + DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Tab = (function () { + function Tab(element) { + _classCallCheck(this, Tab); + + this._element = element; + } + + /** + * ------------------------------------------------------------------------ + * Data Api implementation + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Tab, [{ + key: 'show', + + // public + + value: function show() { + var _this = this; + + if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) { + return; + } + + var target = undefined; + var previous = undefined; + var ulElement = $(this._element).closest(Selector.UL)[0]; + var selector = _Util['default'].getSelectorFromElement(this._element); + + if (ulElement) { + previous = $.makeArray($(ulElement).find(Selector.ACTIVE)); + previous = previous[previous.length - 1]; + } + + var hideEvent = $.Event(Event.HIDE, { + relatedTarget: this._element + }); + + var showEvent = $.Event(Event.SHOW, { + relatedTarget: previous + }); + + if (previous) { + $(previous).trigger(hideEvent); + } + + $(this._element).trigger(showEvent); + + if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { + return; + } + + if (selector) { + target = $(selector)[0]; + } + + this._activate(this._element, ulElement); + + var complete = function complete() { + var hiddenEvent = $.Event(Event.HIDDEN, { + relatedTarget: _this._element + }); + + var shownEvent = $.Event(Event.SHOWN, { + relatedTarget: previous + }); + + $(previous).trigger(hiddenEvent); + $(_this._element).trigger(shownEvent); + }; + + if (target) { + this._activate(target, target.parentNode, complete); + } else { + complete(); + } + } + }, { + key: 'dispose', + value: function dispose() { + $.removeClass(this._element, DATA_KEY); + this._element = null; + } + + // private + + }, { + key: '_activate', + value: function _activate(element, container, callback) { + var active = $(container).find(Selector.ACTIVE_CHILD)[0]; + var isTransitioning = callback && _Util['default'].supportsTransitionEnd() && (active && $(active).hasClass(ClassName.FADE) || Boolean($(container).find(Selector.FADE_CHILD)[0])); + + var complete = $.proxy(this._transitionComplete, this, element, active, isTransitioning, callback); + + if (active && isTransitioning) { + $(active).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + } else { + complete(); + } + + if (active) { + $(active).removeClass(ClassName.IN); + } + } + }, { + key: '_transitionComplete', + value: function _transitionComplete(element, active, isTransitioning, callback) { + if (active) { + $(active).removeClass(ClassName.ACTIVE); + + var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; + + if (dropdownChild) { + $(dropdownChild).removeClass(ClassName.ACTIVE); + } + + active.setAttribute('aria-expanded', false); + } + + $(element).addClass(ClassName.ACTIVE); + element.setAttribute('aria-expanded', true); + + if (isTransitioning) { + _Util['default'].reflow(element); + $(element).addClass(ClassName.IN); + } else { + $(element).removeClass(ClassName.FADE); + } + + if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { + + var dropdownElement = $(element).closest(Selector.DROPDOWN)[0]; + if (dropdownElement) { + $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); + } + + element.setAttribute('aria-expanded', true); + } + + if (callback) { + callback(); + } + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var $this = $(this); + var data = $this.data(DATA_KEY); + + if (!data) { + data = data = new Tab(this); + $this.data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }]); + + return Tab; + })(); + + $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { + event.preventDefault(); + Tab._jQueryInterface.call($(this), 'show'); + }); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Tab._jQueryInterface; + $.fn[NAME].Constructor = Tab; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Tab._jQueryInterface; + }; + + return Tab; + })(jQuery); + + module.exports = Tab; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/tooltip.js b/non_logged_in_area/static/bootstrap4/js/umd/tooltip.js new file mode 100644 index 00000000..307474d4 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/tooltip.js @@ -0,0 +1,620 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module', './util'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module, require('./util')); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod, global.Util); + global.tooltip = mod.exports; + } +})(this, function (exports, module, _util) { + 'use strict'; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + + var _Util = _interopRequireDefault(_util); + + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): tooltip.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + var Tooltip = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'tooltip'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.tooltip'; + var EVENT_KEY = '.' + DATA_KEY; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + var TRANSITION_DURATION = 150; + var CLASS_PREFIX = 'bs-tether'; + + var Default = { + animation: true, + template: '', + trigger: 'hover focus', + title: '', + delay: 0, + html: false, + selector: false, + placement: 'top', + offset: '0 0', + constraints: [] + }; + + var DefaultType = { + animation: 'boolean', + template: 'string', + title: '(string|function)', + trigger: 'string', + delay: '(number|object)', + html: 'boolean', + selector: '(string|boolean)', + placement: '(string|function)', + offset: 'string', + constraints: 'array' + }; + + var AttachmentMap = { + TOP: 'bottom center', + RIGHT: 'middle left', + BOTTOM: 'top center', + LEFT: 'middle right' + }; + + var HoverState = { + IN: 'in', + OUT: 'out' + }; + + var Event = { + HIDE: 'hide' + EVENT_KEY, + HIDDEN: 'hidden' + EVENT_KEY, + SHOW: 'show' + EVENT_KEY, + SHOWN: 'shown' + EVENT_KEY, + INSERTED: 'inserted' + EVENT_KEY, + CLICK: 'click' + EVENT_KEY, + FOCUSIN: 'focusin' + EVENT_KEY, + FOCUSOUT: 'focusout' + EVENT_KEY, + MOUSEENTER: 'mouseenter' + EVENT_KEY, + MOUSELEAVE: 'mouseleave' + EVENT_KEY + }; + + var ClassName = { + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + TOOLTIP: '.tooltip', + TOOLTIP_INNER: '.tooltip-inner' + }; + + var TetherClass = { + element: false, + enabled: false + }; + + var Trigger = { + HOVER: 'hover', + FOCUS: 'focus', + CLICK: 'click', + MANUAL: 'manual' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Tooltip = (function () { + function Tooltip(element, config) { + _classCallCheck(this, Tooltip); + + // private + this._isEnabled = true; + this._timeout = 0; + this._hoverState = ''; + this._activeTrigger = {}; + this._tether = null; + + // protected + this.element = element; + this.config = this._getConfig(config); + this.tip = null; + + this._setListeners(); + } + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + // getters + + _createClass(Tooltip, [{ + key: 'enable', + + // public + + value: function enable() { + this._isEnabled = true; + } + }, { + key: 'disable', + value: function disable() { + this._isEnabled = false; + } + }, { + key: 'toggleEnabled', + value: function toggleEnabled() { + this._isEnabled = !this._isEnabled; + } + }, { + key: 'toggle', + value: function toggle(event) { + if (event) { + var dataKey = this.constructor.DATA_KEY; + var context = $(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $(event.currentTarget).data(dataKey, context); + } + + context._activeTrigger.click = !context._activeTrigger.click; + + if (context._isWithActiveTrigger()) { + context._enter(null, context); + } else { + context._leave(null, context); + } + } else { + + if ($(this.getTipElement()).hasClass(ClassName.IN)) { + this._leave(null, this); + return; + } + + this._enter(null, this); + } + } + }, { + key: 'dispose', + value: function dispose() { + clearTimeout(this._timeout); + + this.cleanupTether(); + + $.removeData(this.element, this.constructor.DATA_KEY); + + $(this.element).off(this.constructor.EVENT_KEY); + + if (this.tip) { + $(this.tip).remove(); + } + + this._isEnabled = null; + this._timeout = null; + this._hoverState = null; + this._activeTrigger = null; + this._tether = null; + + this.element = null; + this.config = null; + this.tip = null; + } + }, { + key: 'show', + value: function show() { + var _this = this; + + var showEvent = $.Event(this.constructor.Event.SHOW); + + if (this.isWithContent() && this._isEnabled) { + $(this.element).trigger(showEvent); + + var isInTheDom = $.contains(this.element.ownerDocument.documentElement, this.element); + + if (showEvent.isDefaultPrevented() || !isInTheDom) { + return; + } + + var tip = this.getTipElement(); + var tipId = _Util['default'].getUID(this.constructor.NAME); + + tip.setAttribute('id', tipId); + this.element.setAttribute('aria-describedby', tipId); + + this.setContent(); + + if (this.config.animation) { + $(tip).addClass(ClassName.FADE); + } + + var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; + + var attachment = this._getAttachment(placement); + + $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body); + + $(this.element).trigger(this.constructor.Event.INSERTED); + + this._tether = new Tether({ + attachment: attachment, + element: tip, + target: this.element, + classes: TetherClass, + classPrefix: CLASS_PREFIX, + offset: this.config.offset, + constraints: this.config.constraints + }); + + _Util['default'].reflow(tip); + this._tether.position(); + + $(tip).addClass(ClassName.IN); + + var complete = function complete() { + var prevHoverState = _this._hoverState; + _this._hoverState = null; + + $(_this.element).trigger(_this.constructor.Event.SHOWN); + + if (prevHoverState === HoverState.OUT) { + _this._leave(null, _this); + } + }; + + if (_Util['default'].supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { + $(this.tip).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(Tooltip._TRANSITION_DURATION); + return; + } + + complete(); + } + } + }, { + key: 'hide', + value: function hide(callback) { + var _this2 = this; + + var tip = this.getTipElement(); + var hideEvent = $.Event(this.constructor.Event.HIDE); + var complete = function complete() { + if (_this2._hoverState !== HoverState.IN && tip.parentNode) { + tip.parentNode.removeChild(tip); + } + + _this2.element.removeAttribute('aria-describedby'); + $(_this2.element).trigger(_this2.constructor.Event.HIDDEN); + _this2.cleanupTether(); + + if (callback) { + callback(); + } + }; + + $(this.element).trigger(hideEvent); + + if (hideEvent.isDefaultPrevented()) { + return; + } + + $(tip).removeClass(ClassName.IN); + + if (_Util['default'].supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE)) { + + $(tip).one(_Util['default'].TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION); + } else { + complete(); + } + + this._hoverState = ''; + } + + // protected + + }, { + key: 'isWithContent', + value: function isWithContent() { + return Boolean(this.getTitle()); + } + }, { + key: 'getTipElement', + value: function getTipElement() { + return this.tip = this.tip || $(this.config.template)[0]; + } + }, { + key: 'setContent', + value: function setContent() { + var tip = this.getTipElement(); + var title = this.getTitle(); + var method = this.config.html ? 'innerHTML' : 'innerText'; + + $(tip).find(Selector.TOOLTIP_INNER)[0][method] = title; + + $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN); + + this.cleanupTether(); + } + }, { + key: 'getTitle', + value: function getTitle() { + var title = this.element.getAttribute('data-original-title'); + + if (!title) { + title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; + } + + return title; + } + }, { + key: 'cleanupTether', + value: function cleanupTether() { + if (this._tether) { + this._tether.destroy(); + + // clean up after tether's junk classes + // remove after they fix issue + // (https://github.com/HubSpot/tether/issues/36) + $(this.element).removeClass(this._removeTetherClasses); + $(this.tip).removeClass(this._removeTetherClasses); + } + } + + // private + + }, { + key: '_getAttachment', + value: function _getAttachment(placement) { + return AttachmentMap[placement.toUpperCase()]; + } + }, { + key: '_setListeners', + value: function _setListeners() { + var _this3 = this; + + var triggers = this.config.trigger.split(' '); + + triggers.forEach(function (trigger) { + if (trigger === 'click') { + $(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, $.proxy(_this3.toggle, _this3)); + } else if (trigger !== Trigger.MANUAL) { + var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; + var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; + + $(_this3.element).on(eventIn, _this3.config.selector, $.proxy(_this3._enter, _this3)).on(eventOut, _this3.config.selector, $.proxy(_this3._leave, _this3)); + } + }); + + if (this.config.selector) { + this.config = $.extend({}, this.config, { + trigger: 'manual', + selector: '' + }); + } else { + this._fixTitle(); + } + } + }, { + key: '_removeTetherClasses', + value: function _removeTetherClasses(i, css) { + return ((css.baseVal || css).match(new RegExp('(^|\\s)' + CLASS_PREFIX + '-\\S+', 'g')) || []).join(' '); + } + }, { + key: '_fixTitle', + value: function _fixTitle() { + var titleType = typeof this.element.getAttribute('data-original-title'); + if (this.element.getAttribute('title') || titleType !== 'string') { + this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); + this.element.setAttribute('title', ''); + } + } + }, { + key: '_enter', + value: function _enter(event, context) { + var dataKey = this.constructor.DATA_KEY; + + context = context || $(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $(event.currentTarget).data(dataKey, context); + } + + if (event) { + context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; + } + + if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) { + context._hoverState = HoverState.IN; + return; + } + + clearTimeout(context._timeout); + + context._hoverState = HoverState.IN; + + if (!context.config.delay || !context.config.delay.show) { + context.show(); + return; + } + + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.IN) { + context.show(); + } + }, context.config.delay.show); + } + }, { + key: '_leave', + value: function _leave(event, context) { + var dataKey = this.constructor.DATA_KEY; + + context = context || $(event.currentTarget).data(dataKey); + + if (!context) { + context = new this.constructor(event.currentTarget, this._getDelegateConfig()); + $(event.currentTarget).data(dataKey, context); + } + + if (event) { + context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; + } + + if (context._isWithActiveTrigger()) { + return; + } + + clearTimeout(context._timeout); + + context._hoverState = HoverState.OUT; + + if (!context.config.delay || !context.config.delay.hide) { + context.hide(); + return; + } + + context._timeout = setTimeout(function () { + if (context._hoverState === HoverState.OUT) { + context.hide(); + } + }, context.config.delay.hide); + } + }, { + key: '_isWithActiveTrigger', + value: function _isWithActiveTrigger() { + for (var trigger in this._activeTrigger) { + if (this._activeTrigger[trigger]) { + return true; + } + } + + return false; + } + }, { + key: '_getConfig', + value: function _getConfig(config) { + config = $.extend({}, this.constructor.Default, $(this.element).data(), config); + + if (config.delay && typeof config.delay === 'number') { + config.delay = { + show: config.delay, + hide: config.delay + }; + } + + _Util['default'].typeCheckConfig(NAME, config, this.constructor.DefaultType); + + return config; + } + }, { + key: '_getDelegateConfig', + value: function _getDelegateConfig() { + var config = {}; + + if (this.config) { + for (var key in this.config) { + if (this.constructor.Default[key] !== this.config[key]) { + config[key] = this.config[key]; + } + } + } + + return config; + } + + // static + + }], [{ + key: '_jQueryInterface', + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = typeof config === 'object' ? config : null; + + if (!data && /destroy|hide/.test(config)) { + return; + } + + if (!data) { + data = new Tooltip(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }, { + key: 'VERSION', + get: function get() { + return VERSION; + } + }, { + key: 'Default', + get: function get() { + return Default; + } + }, { + key: 'NAME', + get: function get() { + return NAME; + } + }, { + key: 'DATA_KEY', + get: function get() { + return DATA_KEY; + } + }, { + key: 'Event', + get: function get() { + return Event; + } + }, { + key: 'EVENT_KEY', + get: function get() { + return EVENT_KEY; + } + }, { + key: 'DefaultType', + get: function get() { + return DefaultType; + } + }]); + + return Tooltip; + })(); + + $.fn[NAME] = Tooltip._jQueryInterface; + $.fn[NAME].Constructor = Tooltip; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Tooltip._jQueryInterface; + }; + + return Tooltip; + })(jQuery); + + module.exports = Tooltip; +}); diff --git a/non_logged_in_area/static/bootstrap4/js/umd/util.js b/non_logged_in_area/static/bootstrap4/js/umd/util.js new file mode 100644 index 00000000..003b9397 --- /dev/null +++ b/non_logged_in_area/static/bootstrap4/js/umd/util.js @@ -0,0 +1,172 @@ +(function (global, factory) { + if (typeof define === 'function' && define.amd) { + define(['exports', 'module'], factory); + } else if (typeof exports !== 'undefined' && typeof module !== 'undefined') { + factory(exports, module); + } else { + var mod = { + exports: {} + }; + factory(mod.exports, mod); + global.util = mod.exports; + } +})(this, function (exports, module) { + /** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): util.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + + 'use strict'; + + var Util = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Private TransitionEnd Helpers + * ------------------------------------------------------------------------ + */ + + var transition = false; + + var TransitionEndEvent = { + WebkitTransition: 'webkitTransitionEnd', + MozTransition: 'transitionend', + OTransition: 'oTransitionEnd otransitionend', + transition: 'transitionend' + }; + + // shoutout AngusCroll (https://goo.gl/pxwQGp) + function toType(obj) { + return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase(); + } + + function isElement(obj) { + return (obj[0] || obj).nodeType; + } + + function getSpecialTransitionEndEvent() { + return { + bindType: transition.end, + delegateType: transition.end, + handle: function handle(event) { + if ($(event.target).is(this)) { + return event.handleObj.handler.apply(this, arguments); + } + } + }; + } + + function transitionEndTest() { + if (window.QUnit) { + return false; + } + + var el = document.createElement('bootstrap'); + + for (var _name in TransitionEndEvent) { + if (el.style[_name] !== undefined) { + return { end: TransitionEndEvent[_name] }; + } + } + + return false; + } + + function transitionEndEmulator(duration) { + var _this = this; + + var called = false; + + $(this).one(Util.TRANSITION_END, function () { + called = true; + }); + + setTimeout(function () { + if (!called) { + Util.triggerTransitionEnd(_this); + } + }, duration); + + return this; + } + + function setTransitionEndSupport() { + transition = transitionEndTest(); + + $.fn.emulateTransitionEnd = transitionEndEmulator; + + if (Util.supportsTransitionEnd()) { + $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); + } + } + + /** + * -------------------------------------------------------------------------- + * Public Util Api + * -------------------------------------------------------------------------- + */ + + var Util = { + + TRANSITION_END: 'bsTransitionEnd', + + getUID: function getUID(prefix) { + do { + prefix += ~ ~(Math.random() * 1000000); + } while (document.getElementById(prefix)); + return prefix; + }, + + getSelectorFromElement: function getSelectorFromElement(element) { + var selector = element.getAttribute('data-target'); + + if (!selector) { + selector = element.getAttribute('href') || ''; + selector = /^#[a-z]/i.test(selector) ? selector : null; + } + + return selector; + }, + + reflow: function reflow(element) { + new Function('bs', 'return bs')(element.offsetHeight); + }, + + triggerTransitionEnd: function triggerTransitionEnd(element) { + $(element).trigger(transition.end); + }, + + supportsTransitionEnd: function supportsTransitionEnd() { + return Boolean(transition); + }, + + typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { + for (var property in configTypes) { + if (configTypes.hasOwnProperty(property)) { + var expectedTypes = configTypes[property]; + var value = config[property]; + var valueType = undefined; + + if (value && isElement(value)) { + valueType = 'element'; + } else { + valueType = toType(value); + } + + if (!new RegExp(expectedTypes).test(valueType)) { + throw new Error(componentName.toUpperCase() + ': ' + ('Option "' + property + '" provided type "' + valueType + '" ') + ('but expected type "' + expectedTypes + '".')); + } + } + } + } + }; + + setTransitionEndSupport(); + + return Util; + })(jQuery); + + module.exports = Util; +}); diff --git a/non_logged_in_area/static/css/custom.css b/non_logged_in_area/static/css/custom.css new file mode 100644 index 00000000..a72528bf --- /dev/null +++ b/non_logged_in_area/static/css/custom.css @@ -0,0 +1,368 @@ +body, html{ + height:100% +} +body, p, ul { + font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial; +} + +.bg-faded { + background: rgba(255, 255, 255, 0.9); +} + +.btn-secondary { + color: #0275d8; + background: rgba(255, 255, 255, 0); + border-radius: 3px; + border: 2px solid #0275d8; +} + +*, *:after, *:before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: relative; +} + +*::selection { + background: #F2EC7A; + /* Safari */ +} + +*::-moz-selection { + background: #F2EC7A; + /* Firefox */ +} + +a { + color: #338EFF; +} + +.spacer { + width: 100%; + height: 30px; +} +.spacer-stage{ + margin-top:200px; + +} +.main-content{ + min-height:50%; +} + +.header-image { + display: block; + width: 100%; + /*text-align: center;*/ + background: url("../images/helpers.jpg") no-repeat center center scroll; + background-position: center; + background-size: cover; +} + +.headline { + padding: 120px 0; +} + +hr { + border: 0px none; + height: 1px; + clear: both; + background: #b9b9b9; + margin: 30px 0; +} + +/* ######################################################################################################### */ +#loader { + position: fixed; + top: 0; + left: 0; + z-index: 1000; + width: 100%; + height: 100%; + text-align: center; + padding-top: 30%; + background-color: #fff; +} + +.loader-img { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: url(../images/ajax-loader.gif); + background-repeat: no-repeat; + background-position: center center; + text-indent: -9999px; + overflow: hidden; +} + +.js #no-js-info { + display: none; +} + +.no-js #no-js-info { + display: block; + position: fixed; + top: 0; + left: 0; + width: 100%; + background: #fff99b; + z-index: 900; + padding: 10px; +} + +/* ######################################################################################################### */ +#stage { + background-repeat: no-repeat; + background-position: center center; + background-size: cover; + min-height: 400px; + padding: 130px 30px 30px 30px; + color: #fff; +} + +#stage h1 { + font-weight: 400; + font-size: 3.5em; + margin: 30px 0; + text-shadow: 0px 0px 7px rgba(150, 150, 150, 1); +} + +.facts { + width: 100%; + + border: 2px solid #338EFF; + color: #338EFF; + float: right; + text-align: center; + padding: 31px; + min-height:439px; +} +.facts-less-padding { + padding: 20px 20px; +} + +#facts hr { + background-color: #add2ff; +} + +.fact-amount { + font-weight: 200; + font-size: 2em; +} + +#facts *:first-child { + margin-top: 0; +} + +#facts *:last-child { + margin-bottom: 0; +} + +#help-cta, #need-cta { + display: block; + width: 100%; + text-align: center; + cursor: pointer; + background-color: #eaf3ff; + color: #338EFF; + padding: 230px 30px 30px 30px; + background-position: center 30px; + background-repeat: no-repeat; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + min-height:439px; +} + +#help-cta:hover, #need-cta:hover { + background-color: #338EFF; + color: #fff; +} + +#help-cta hr, #need-cta hr { + background-color: #add2ff; +} + +#help-cta:hover hr, #need-cta:hover hr { + background-color: #85bbff; +} + +#help-cta *:first-child, #need-cta *:first-child { + margin-top: 0; +} + +#help-cta *:last-child, #need-cta *:last-child { + margin-bottom: 0; +} + +#help-cta { + /*float: left;*/ + background-image: url(../images/help-visual.png); +} + +#help-cta h2{ + margin:20px 0 45px !important; +} + +#need-cta { + /*float: right;*/ + background-image: url(../images/need-visual.png); +} + +#need-cta:hover { + text-decoration: none; + background-image: url(../images/need-visual-2.png); +} + +#help-cta:hover { + text-decoration: none; + background-image: url(../images/help-visual-2.png); +} +.boxed-cta{ + height:439px; +} + +ul.advantages{ + list-style:none; + margin:0; + padding:0; +} + +.advantages li{ +margin:10px; +} + +li.check-icon:before { + font-family: 'FontAwesome'; + content: '\f00c'; + margin:0 5px 0 -15px; + + +} +/* ######################################################################################################### */ +.preload-image { + display: none; + width: 0; + height: 0; +} + +#preload-1 { + background-image: url(../images/need-visual-2.png); +} + +#preload-2 { + background-image: url(../images/help-visual-2.png); +} + +/* ######################################################################################################### */ +#footer { + background-color: #338EFF; + color: #fff; + padding: 30px; +} + +#footer .inset { + min-height: 300px; +} + +#footer hr { + background-color: #85bbff; +} + +#footer a { + color: #fff; +} + +#footer-nav ul { + list-style: none; + margin: 0; + padding: 0; +} + +#footer-nav ul li { + list-style: none; + margin: 0; + padding: 0; + float: left; +} + +#footer-nav ul li a { + background-color: rgba(255, 255, 255, 0.2); + display: inline-block; + padding: 0 5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + margin: 0 5px 5px 0; + text-decoration: none; +} + +.form-container{ +} + +/* ######################################################################################################### */ +/* ##################################### HIGH RESOLUTION DISPLAYS: ######################################### */ +/* ######################################################################################################### */ +@media only screen and (-moz-min-device-pixel-ratio: 1.5), only screen and (-o-min-device-pixel-ratio: 3/2), only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) { + #primary-logo { + background-image: url(../images/volunteer-planner-logo@2x.png); + background-size: 238px 30px; + } + #help-cta { + background-image: url(../images/help-visual@2x.png); + background-size: 200px 200px; + } + #need-cta { + background-image: url(../images/need-visual@2x.png); + background-size: 200px 200px; + } + #need-cta:hover { + background-image: url(../images/need-visual-2@2x.png); + background-size: 200px 200px; + } + #help-cta:hover { + background-image: url(../images/help-visual-2@2x.png); + background-size: 200px 200px; + } + /**/ + #preload-1 { + background-image: url(../images/need-visual-2@2x.png); + background-size: 200px 200px; + } + #preload-2 { + background-image: url(../images/help-visual-2@2x.png); + background-size: 200px 200px; + } +} + +/* ######################################################################################################### */ +/* ############################################### VIEWPORTS: ############################################## */ +/* ######################################################################################################### */ +@media only screen and (max-width: 700px) { + #about, #facts, #help-cta, #need-cta { + width: 100%; + float: none; + margin-bottom: 30px; + } + #primary-logo { + position: relative; + width: 100%; + background-position: center center; + height: 60px; + } + #primary-cta { + position: relative; + top: 0; + right: auto; + left: 0; + text-align: center; + width: 100%; + padding: 0; + } + #primary-cta a { + font-weight: 600; + line-height: 24px; + border: 2px solid #338EFF; + } +} diff --git a/non_logged_in_area/static/css/logo-nav.css b/non_logged_in_area/static/css/logo-nav.css new file mode 100644 index 00000000..5fe7e7ae --- /dev/null +++ b/non_logged_in_area/static/css/logo-nav.css @@ -0,0 +1,27 @@ +/*! + * Start Bootstrap - Logo Nav HTML Template (http://startbootstrap.com) + * Code licensed under the Apache License v2.0. + * For details, see http://www.apache.org/licenses/LICENSE-2.0. + */ + +body { + padding-top: 70px; /* Required padding for .navbar-fixed-top. Change if height of navigation changes. */ +} + +.navbar-fixed-top .nav { + padding: 15px 0; +} + +.navbar-fixed-top .navbar-brand { + padding: 0 15px; +} + +@media(min-width:768px) { + body { + padding-top: 100px; /* Required padding for .navbar-fixed-top. Change if height of navigation changes. */ + } + + .navbar-fixed-top .navbar-brand { + padding: 15px 0; + } +} \ No newline at end of file diff --git a/non_logged_in_area/static/images/ajax-loader.gif b/non_logged_in_area/static/images/ajax-loader.gif new file mode 100644 index 00000000..505448d3 Binary files /dev/null and b/non_logged_in_area/static/images/ajax-loader.gif differ diff --git a/non_logged_in_area/static/images/help-visual-2.png b/non_logged_in_area/static/images/help-visual-2.png new file mode 100644 index 00000000..398dc96e Binary files /dev/null and b/non_logged_in_area/static/images/help-visual-2.png differ diff --git a/non_logged_in_area/static/images/help-visual-2@2x.png b/non_logged_in_area/static/images/help-visual-2@2x.png new file mode 100644 index 00000000..5e0e59de Binary files /dev/null and b/non_logged_in_area/static/images/help-visual-2@2x.png differ diff --git a/non_logged_in_area/static/images/help-visual.png b/non_logged_in_area/static/images/help-visual.png new file mode 100644 index 00000000..2f402250 Binary files /dev/null and b/non_logged_in_area/static/images/help-visual.png differ diff --git a/non_logged_in_area/static/images/help-visual@2x.png b/non_logged_in_area/static/images/help-visual@2x.png new file mode 100644 index 00000000..594ef330 Binary files /dev/null and b/non_logged_in_area/static/images/help-visual@2x.png differ diff --git a/non_logged_in_area/static/images/helpers.jpg b/non_logged_in_area/static/images/helpers.jpg new file mode 100644 index 00000000..e1718767 Binary files /dev/null and b/non_logged_in_area/static/images/helpers.jpg differ diff --git a/non_logged_in_area/static/images/need-visual-2.png b/non_logged_in_area/static/images/need-visual-2.png new file mode 100644 index 00000000..796bd9b6 Binary files /dev/null and b/non_logged_in_area/static/images/need-visual-2.png differ diff --git a/non_logged_in_area/static/images/need-visual-2@2x.png b/non_logged_in_area/static/images/need-visual-2@2x.png new file mode 100644 index 00000000..817dfa59 Binary files /dev/null and b/non_logged_in_area/static/images/need-visual-2@2x.png differ diff --git a/non_logged_in_area/static/images/need-visual.png b/non_logged_in_area/static/images/need-visual.png new file mode 100644 index 00000000..fc7a8ed4 Binary files /dev/null and b/non_logged_in_area/static/images/need-visual.png differ diff --git a/non_logged_in_area/static/images/need-visual@2x.png b/non_logged_in_area/static/images/need-visual@2x.png new file mode 100644 index 00000000..69ef9153 Binary files /dev/null and b/non_logged_in_area/static/images/need-visual@2x.png differ diff --git a/non_logged_in_area/static/images/placeholder-stage.jpg b/non_logged_in_area/static/images/placeholder-stage.jpg new file mode 100644 index 00000000..dd30439f Binary files /dev/null and b/non_logged_in_area/static/images/placeholder-stage.jpg differ diff --git a/non_logged_in_area/static/images/volunteer-planner-logo.png b/non_logged_in_area/static/images/volunteer-planner-logo.png new file mode 100644 index 00000000..93e4d9e3 Binary files /dev/null and b/non_logged_in_area/static/images/volunteer-planner-logo.png differ diff --git a/non_logged_in_area/static/images/volunteer-planner-logo@2x.png b/non_logged_in_area/static/images/volunteer-planner-logo@2x.png new file mode 100644 index 00000000..56319b61 Binary files /dev/null and b/non_logged_in_area/static/images/volunteer-planner-logo@2x.png differ diff --git a/non_logged_in_area/templates/base_non_logged_in.html b/non_logged_in_area/templates/base_non_logged_in.html new file mode 100644 index 00000000..85c4eee3 --- /dev/null +++ b/non_logged_in_area/templates/base_non_logged_in.html @@ -0,0 +1,106 @@ +{% load humanize i18n staticfiles %} + + + + + + + + + + + Volunteer Planner + + + + + + + + + + + + + + + + + + + + + + + +{% block stage %} +
+ +{% endblock %} +
+ {% block content %} + {% endblock %} +
+ +
+ + + + + + + + + diff --git a/non_logged_in_area/templates/faqs.html b/non_logged_in_area/templates/faqs.html new file mode 100644 index 00000000..e4f46169 --- /dev/null +++ b/non_logged_in_area/templates/faqs.html @@ -0,0 +1,162 @@ +{% extends "base_non_logged_in.html" %} +{% load i18n %} + +{% block content %} +

{% trans "Frequently Asked Questions" %}

+ +
+ +

+ {% blocktrans trimmed context "FAQ Q1" %} + How does volunteer-planner work? + {% endblocktrans %} +

+ +

+

    +
  1. + + {% blocktrans trimmed context "FAQ A1.1" %} + Create an account. + {% endblocktrans %} + +
  2. +
  3. + {% blocktrans trimmed context "FAQ A1.2" %} + Confirm your email address by clicking the activation link + you've been sent. + {% endblocktrans %} + +
  4. +
  5. + {% blocktrans trimmed context "FAQ A1.3" %} + Log in. + {% endblocktrans %} +
  6. +
  7. + {% blocktrans trimmed context "FAQ A1.4" %} + Choose a place to help and a shift and sign up to help. + {% endblocktrans %} +
  8. +
  9. + {% blocktrans trimmed context "FAQ A1.5" %} + Get there on time and start helping out. + {% endblocktrans %} +
  10. +
+
+ +
+

+ {% blocktrans trimmed context "FAQ Q2" %} + How can I unsubscribe from a shift? + {% endblocktrans %} +

+ +

+ {% blocktrans trimmed context "FAQ A2" %} + No problem. Log-in again look for the shift you planned to do + and unsubscribe. Then other volunteers can again subscribe. + {% endblocktrans %} +

+
+ +
+

+ {% blocktrans trimmed context "FAQ Q3" %} + Are there more shelters coming into volunteer-planner? + {% endblocktrans %} +

+ {% trans "email" as email %} +

+ {% blocktrans trimmed context "FAQ A3" with email_url=""|add:email|add:"" %} + Yes! If you are a volunteer worker in a refugee shelter and they + also want to use volunteer-planner please contact us via + {{ email_url }}. + {% endblocktrans %} +

+
+ +
+

+ {% blocktrans trimmed context "FAQ Q4" %} + I registered but I didn't get any activation link. What can I + do? + {% endblocktrans %} +

+ +

+ {% blocktrans trimmed context "FAQ A4" %} + Please look into your email-spam folder. If you can't find + something please wait another 30 minutes. Email delivery can + sometimes take longer. + {% endblocktrans %} +

+
+ +
+

+ {% blocktrans trimmed context "FAQ Q5" %} + Do I have to be vaccinated to help at the camps/shelters? + {% endblocktrans %} +

+ +

+ {% blocktrans trimmed context "FAQ A5" %} + You are not supposed to be vaccinated. BUT: Where there are a + lot of people deseases can flourish better. + {% endblocktrans %} +

+
+ +
+

+ {% blocktrans trimmed context "FAQ Q6" %} + Who is volunteer-planner.org? + {% endblocktrans %} +

+ +

+ {% blocktrans trimmed context "FAQ A6" %} + We are Coders4Help, a group of international volunteering + programmers, designers and projectmanagers. + {% endblocktrans %} +

+
+ +
+

+ + {% blocktrans trimmed context "FAQ Q7" %} + How can I help you? + {% endblocktrans %} + +

+ +

+ {% trans "Facebook site" as facebook_link_text %} + {% trans "email" as email %} + {% blocktrans trimmed context "FAQ A7" with facebook_link=""|add:facebook_link_text|add:"" email_url=""|add:email|add:"" %} + Currently we need help to translate, write texts and create + awesome designs. Want to help? Write a message on our + {{ facebook_link }} or send an {{ email_url }}. + {% endblocktrans %} +

+
+ + {% comment %} +
+

+ {% blocktrans trimmed context "FAQ Q#" %} + + {% endblocktrans %} +

+ +

+ {% blocktrans trimmed context "FAQ Q#" %} + + {% endblocktrans %} +

+
+ {% endcomment %} +{% endblock %} diff --git a/non_logged_in_area/templates/home.html b/non_logged_in_area/templates/home.html new file mode 100644 index 00000000..2320f4b5 --- /dev/null +++ b/non_logged_in_area/templates/home.html @@ -0,0 +1,119 @@ +{% extends "base_non_logged_in.html" %} + +{% load volunteer_stats humanize i18n cache %} + +{% block stage %} + +
+
+
+
+
+
+ +{% endblock %} + +{% block content %} + +
+
+
+
+ + + +
+
+ {% get_current_language as LANGUAGE_CODE %} + + {% cache 900 volunteer_stats LANGUAGE_CODE %} + {% get_volunteer_stats as volunteer_stats %} + + + {{ volunteer_stats.facility_count|intcomma }} + +
+ {% trans "Places to help" %} + +
+ + {{ volunteer_stats.volunteer_count|intcomma }} + +
+ {% trans "Registered Volunteers" %} +
+ + + {{ volunteer_stats.volunteer_hours|intcomma }} + +
+ {% trans "Worked Hours" %} + + {% endcache %} +
+
+
+
+
+
+
+ +
+

{% trans "What is it all about?" %}

+ +

+ {% blocktrans trimmed %} + You are a volunteer and want to help refugees? + Volunteer-Planner.org shows you where, when and how + to help directly in the field. + {% endblocktrans %} +

+ + + {% blocktrans trimmed %} +

This platform is non-commercial and ads-free. An + international team of field workers, programmers, project + managers and designers are volunteering for this project and + bring in their professional experience to make a difference.

+ {% endblocktrans %} + +
+ + {% regroup locations by place.area as locations_by_area %} + +
+
+

{% trans "You can help at this locations:" %}

+ + {% for location_in_area in locations_by_area %} + {% comment %} + If we get many locations, we can always make this a collapsed-by-default + list. At the moment, there's not enough and it's more usable and SEO + friendly to show all. + {% endcomment %} + {{ location_in_area.grouper }} +

+ {% for location in location_in_area.list %} + {{ location.name }} + {% if not forloop.last %}•{% endif %} + {% endfor %} +

+ {% endfor %} +
+
+
+ + +{% endblock %} diff --git a/non_logged_in_area/templates/shelters_need_help.html b/non_logged_in_area/templates/shelters_need_help.html new file mode 100644 index 00000000..f28bda13 --- /dev/null +++ b/non_logged_in_area/templates/shelters_need_help.html @@ -0,0 +1,80 @@ +{% extends "base_non_logged_in.html" %} + +{% load humanize i18n cache %} + +{% block stage %} + +
+
+
+
+
+
+{% endblock %} + +{% block content %} +
+
+
+
+

{% trans "Vorteile" %}

+
    +
  • {% trans "Zeitersparnis" %}
  • +
  • {% trans "Helfer_innen wird schnell und einfach gezeigt wie sie helfen können." %} +
  • +
  • + {% blocktrans %} + volunteers split themselves up more effectively into shifts, + temporary shortcuts can be anticipated by helpers themselves more easily + {% endblocktrans %} +
  • +
  • + {% blocktrans %} + shift plans can be given to the security personnel + or coordinating persons by an auto-mailer + every morning + {% endblocktrans %} +
  • +
  • + {% blocktrans %} + the more shelters and camps are organized with us, the more volunteers are joining + and all facilities will benefit from a common pool of motivated volunteers + {% endblocktrans %} +
  • +
  • + {% trans "for free without costs" %} +
  • +
+ +
+
+

{% trans "The right help at the right time at the right location" %}

+ {% blocktrans %} +

Many people want to help! But often it's not so easy to figure out where, when and how one can help. + volunteer-planner tries to solve this problem!
+

+ {% endblocktrans %} +
+ +
+

{% trans "Kostenlos. Werbefrei." %}

+ {% blocktrans %} +

The platform was build by a group of volunteering professionals in the area of software development, project management, design, + and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

+ {% endblocktrans %} +
+
+
+
+

{% trans "contact us!" %}

+ +

+ {% blocktrans %} + ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write toonboarding@volunteer-planner.org + {% endblocktrans %} +

+
+
+
+{% endblock %} diff --git a/registration/tests.py b/non_logged_in_area/tests.py similarity index 100% rename from registration/tests.py rename to non_logged_in_area/tests.py diff --git a/non_logged_in_area/urls.py b/non_logged_in_area/urls.py new file mode 100644 index 00000000..ba0f281d --- /dev/null +++ b/non_logged_in_area/urls.py @@ -0,0 +1,9 @@ +from django.conf.urls import url + +from .views import HomeView + +urlpatterns = [ + url(r'^$', HomeView.as_view(template_name="home.html"), name="home"), + url(r'^shelters-need-help/$', HomeView.as_view(template_name="shelters_need_help.html"), name="shelter_info"), + url(r'^faqs/$', HomeView.as_view(template_name="faqs.html"), name="faqs"), +] diff --git a/non_logged_in_area/views.py b/non_logged_in_area/views.py new file mode 100644 index 00000000..895a9f84 --- /dev/null +++ b/non_logged_in_area/views.py @@ -0,0 +1,34 @@ +import logging + +from django.db.models.aggregates import Count +from django.http.response import HttpResponseRedirect +from django.views.generic.base import TemplateView +from django.core.urlresolvers import reverse + +from notifications.models import Notification +from scheduler.models import Location +from places.models import Region + +logger = logging.getLogger(__name__) + + +class HomeView(TemplateView): + template_name = "base_non_logged_in.html" + + def get(self, request, *args, **kwargs): + if self.request.user.is_authenticated(): + return HttpResponseRedirect(reverse('helpdesk')) + context = self.get_context_data(**kwargs) + return self.render_to_response(context) + + def get_context_data(self, **kwargs): + context = super(HomeView, self).get_context_data(**kwargs) + + context['regions'] = Region.objects.annotate( + locations_count=Count('areas__places__locations')).exclude( + locations_count=0).prefetch_related('areas', 'areas__region').all() + context['locations'] = Location.objects.select_related('place', + 'place__area', + 'place__area__region').all() + context['notifications'] = Notification.objects.all() + return context diff --git a/notifications/migrations/0003_auto_20150912_2049.py b/notifications/migrations/0003_auto_20150912_2049.py index e19ce4ca..ce81d4b7 100644 --- a/notifications/migrations/0003_auto_20150912_2049.py +++ b/notifications/migrations/0003_auto_20150912_2049.py @@ -19,7 +19,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='notification', name='text', - field=models.TextField(max_length=20055, verbose_name='articletext'), + field=models.TextField(max_length=20055, verbose_name='text'), ), migrations.AlterField( model_name='notification', diff --git a/notifications/models.py b/notifications/models.py index b95fc74e..449d4935 100644 --- a/notifications/models.py +++ b/notifications/models.py @@ -12,7 +12,7 @@ class Notification(models.Model): creation_date = models.DateField(auto_now=True) title = models.CharField(max_length=255, verbose_name=_("title")) subtitle = models.CharField(max_length=255, verbose_name=_("subtitle"), null=True, blank=True) - text = models.TextField(max_length=20055, verbose_name=_("articletext")) + text = models.TextField(max_length=20055, verbose_name=_("text")) slug = models.SlugField(auto_created=True, max_length=255) location = models.ForeignKey('scheduler.Location') diff --git a/scheduler/templatetags/__init__.py b/places/__init__.py similarity index 100% rename from scheduler/templatetags/__init__.py rename to places/__init__.py diff --git a/places/admin.py b/places/admin.py new file mode 100644 index 00000000..431e8a95 --- /dev/null +++ b/places/admin.py @@ -0,0 +1,43 @@ +from django.contrib import admin + +from .models import Country, Region, Area, Place + + +@admin.register(Country) +class CountryAdmin(admin.ModelAdmin): + list_display = (u'id', 'name', 'slug') + search_fields = ('name', 'slug') + prepopulated_fields = {'slug': ['name']} + + +@admin.register(Region) +class RegionAdmin(admin.ModelAdmin): + list_display = (u'id', 'name', 'country', 'slug') + list_filter = ('country',) + search_fields = ('name', 'slug') + prepopulated_fields = {'slug': ['name']} + + +@admin.register(Area) +class AreaAdmin(admin.ModelAdmin): + list_display = (u'id', 'region', 'name', 'slug') + list_filter = ('region',) + search_fields = ('name', 'slug') + prepopulated_fields = {'slug': ['name']} + + +@admin.register(Place) +class PlaceAdmin(admin.ModelAdmin): + + def get_region(self, obj): + return obj.area.region + get_region.short_description = Region._meta.verbose_name + + def get_country(self, obj): + return self.get_region(obj).country + get_country.short_description = Country._meta.verbose_name + + list_display = (u'id', 'area', 'get_region', 'get_country', 'name', 'slug') + list_filter = ('area', 'area__region', 'area__region__country') + search_fields = ('name', 'slug') + prepopulated_fields = {'slug': ['name']} diff --git a/places/migrations/0001_initial.py b/places/migrations/0001_initial.py new file mode 100644 index 00000000..07ad4e73 --- /dev/null +++ b/places/migrations/0001_initial.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations + + +class Migration(migrations.Migration): + + dependencies = [] + + operations = [ + migrations.CreateModel( + name='Area', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), + ('slug', models.SlugField(verbose_name='slug')), + ], + options={ + 'ordering': ('region', 'name'), + 'verbose_name': 'area', + 'verbose_name_plural': 'areas', + }, + ), + migrations.CreateModel( + name='Country', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), + ('slug', models.SlugField(verbose_name='slug')), + ], + options={ + 'ordering': ('name',), + 'verbose_name': 'country', + 'verbose_name_plural': 'countries', + }, + ), + migrations.CreateModel( + name='Place', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), + ('slug', models.SlugField(verbose_name='slug')), + ('area', models.ForeignKey(related_name='places', verbose_name='place', to='places.Area')), + ], + options={ + 'ordering': ('area', 'name'), + 'verbose_name': 'place', + 'verbose_name_plural': 'places', + }, + ), + migrations.CreateModel( + name='Region', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), + ('slug', models.SlugField(verbose_name='slug')), + ('country', models.ForeignKey(related_name='regions', verbose_name='country', to='places.Country')), + ], + options={ + 'ordering': ('country', 'name'), + 'verbose_name': 'region', + 'verbose_name_plural': 'regions', + }, + ), + migrations.AddField( + model_name='area', + name='region', + field=models.ForeignKey(related_name='areas', verbose_name='region', to='places.Region'), + ), + ] diff --git a/registration/migrations/0004_auto_20150822_1800.py b/places/migrations/0002_auto_20150926_2313.py similarity index 51% rename from registration/migrations/0004_auto_20150822_1800.py rename to places/migrations/0002_auto_20150926_2313.py index a72ea3a0..bf16475f 100644 --- a/registration/migrations/0004_auto_20150822_1800.py +++ b/places/migrations/0002_auto_20150926_2313.py @@ -7,13 +7,13 @@ class Migration(migrations.Migration): dependencies = [ - ('registration', '0003_auto_20150819_0140'), + ('places', '0001_initial'), ] operations = [ migrations.AlterField( - model_name='registrationprofile', - name='needs', - field=models.ManyToManyField(to='scheduler.Need', verbose_name=b'registrierte Schichten'), + model_name='place', + name='area', + field=models.ForeignKey(related_name='places', verbose_name='area', to='places.Area'), ), ] diff --git a/registration/templates/activation_email.html b/places/migrations/__init__.py similarity index 100% rename from registration/templates/activation_email.html rename to places/migrations/__init__.py diff --git a/places/models.py b/places/models.py new file mode 100644 index 00000000..0db5a717 --- /dev/null +++ b/places/models.py @@ -0,0 +1,138 @@ +# coding: utf-8 + +from django.db import models +from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse + + +class BreadcrumpablePlaceManager(models.Manager): + + def get_queryset(self): + return super(BreadcrumpablePlaceManager, + self).get_queryset().select_related( + *self.model.get_select_related_list()) + + +class BreadcrumpablePlaceModel(models.Model): + PARENT_MODEL = None + PARENT_FIELD = None + + name = models.CharField(max_length=50, unique=True, verbose_name=_('name')) + slug = models.SlugField(verbose_name=_(u'slug')) + + objects = BreadcrumpablePlaceManager() + + class Meta: + abstract = True + + @property + def parent(self): + return None + + @property + def breadcrumps(self): + return self.parent and self.parent.breadcrumps + [self, ] or [self, ] + + @classmethod + def get_select_related_list(cls, chain=None): + select_related = [] + if cls.PARENT_FIELD: + if chain: + related = '{}__{}'.format(chain, cls.PARENT_FIELD) + else: + related = cls.PARENT_FIELD + select_related.append(related) + select_related += cls.PARENT_MODEL.get_select_related_list(related) + return select_related + + def get_detail_view_name(self): + DETAIL_VIEW_NAME = getattr(self, 'DETAIL_VIEW_NAME', None) + return DETAIL_VIEW_NAME or u'{}-details'.format( + self._meta.model_name.lower()) + + def get_absolute_url(self): + return reverse(self.get_detail_view_name(), + args=[o.slug for o in self.breadcrumps]) + + def __unicode__(self): + return u'{}'.format(self.name) + + +class Country(BreadcrumpablePlaceModel): + ''' + A country + ''' + + DETAIL_VIEW_NAME = 'country-details' + + class Meta: + verbose_name = _('country') + verbose_name_plural = _('countries') + ordering = ('name',) + + +class Region(BreadcrumpablePlaceModel): + ''' + A region is a geographical region for grouping areas (and facilities within areas). + ''' + + PARENT_FIELD = 'country' + PARENT_MODEL = Country + + country = models.ForeignKey(Country, + related_name='regions', + verbose_name=_('country')) + + class Meta: + verbose_name = _('region') + verbose_name_plural = _('regions') + ordering = ('country', 'name',) + + @property + def parent(self): + return self.country + + +class Area(BreadcrumpablePlaceModel): + ''' + An area is a subdevision of a region, such as cities, neighbourhoods, etc. + Each area belongs to a region. + ''' + + PARENT_FIELD = 'region' + PARENT_MODEL = Region + + region = models.ForeignKey(Region, related_name='areas', + verbose_name=_('region')) + + class Meta: + verbose_name = _('area') + verbose_name_plural = _('areas') + ordering = ('region', 'name',) + + @property + def parent(self): + return self.region + + +class Place(BreadcrumpablePlaceModel): + ''' + A place (german: Ort) can be a city like Jena in Thüringen - Jena + or a 'district' like Wilmersdorf in Berlin - Berlin. + ''' + + PARENT_FIELD = 'area' + PARENT_MODEL = Area + + area = models.ForeignKey(Area, + related_name='places', + verbose_name=_('area')) + + class Meta: + verbose_name = _('place') + verbose_name_plural = _('places') + ordering = ('area', 'name',) + + @property + def parent(self): + return self.area diff --git a/places/templatetags/__init__.py b/places/templatetags/__init__.py new file mode 100644 index 00000000..3117685a --- /dev/null +++ b/places/templatetags/__init__.py @@ -0,0 +1,2 @@ +# coding: utf-8 + diff --git a/places/templatetags/placestemplatetags.py b/places/templatetags/placestemplatetags.py new file mode 100644 index 00000000..a7b682ee --- /dev/null +++ b/places/templatetags/placestemplatetags.py @@ -0,0 +1,17 @@ +# coding: utf-8 + +from django import template +from django.db.models import Count + +from places.models import Place + +register = template.Library() + + +@register.assignment_tag +def get_places_having_facilities(): + places = Place.objects.annotate( + locations_count=Count('locations')).exclude(locations_count=0) + + return places + diff --git a/stats/tests.py b/places/tests.py similarity index 100% rename from stats/tests.py rename to places/tests.py diff --git a/places/urls.py b/places/urls.py new file mode 100644 index 00000000..57d631c3 --- /dev/null +++ b/places/urls.py @@ -0,0 +1 @@ +# coding: utf-8 diff --git a/places/views.py b/places/views.py new file mode 100644 index 00000000..e3875d09 --- /dev/null +++ b/places/views.py @@ -0,0 +1,3 @@ +# Create your views here. + + diff --git a/registration/admin.py b/registration/admin.py deleted file mode 100644 index 8e4687ae..00000000 --- a/registration/admin.py +++ /dev/null @@ -1,59 +0,0 @@ -from django.contrib import admin -from django.contrib.sites.models import RequestSite -from django.contrib.sites.models import Site -from django.utils.translation import ugettext_lazy as _ - -from models import RegistrationProfile -from scheduler.models import Need - - -class RegistrationAdmin(admin.ModelAdmin): - actions = ['activate_users', 'resend_activation_email'] - list_display = ('user', 'activation_key_expired', 'get_user_email') - raw_id_fields = ['user'] - search_fields = ('user__username', 'user__first_name', 'user__last_name') - - def get_field_queryset(self, db, db_field, request): # - if db_field.name == 'needs' \ - and db_field.model._meta.object_name == 'RegistrationProfile': - return Need.objects.select_related('topic', - 'location') - - return super(RegistrationAdmin, self).get_field_queryset(db, - db_field, - request) - - def activate_users(self, request, queryset): - """ - Activates the selected users, if they are not alrady - activated. - - """ - for profile in queryset: - RegistrationProfile.objects.activate_user(profile.activation_key) - - activate_users.short_description = _("Activate users") - - def resend_activation_email(self, request, queryset): - """ - Re-sends activation emails for the selected users. - - Note that this will *only* send activation emails for users - who are eligible to activate; emails will not be sent to users - whose activation keys have expired or who have already - activated. - - """ - if Site._meta.installed: - site = Site.objects.get_current() - else: - site = RequestSite(request) - - for profile in queryset: - if not profile.activation_key_expired(): - profile.send_activation_email(site) - - resend_activation_email.short_description = _("Re-send activation emails") - - -admin.site.register(RegistrationProfile, RegistrationAdmin) diff --git a/registration/forms.py b/registration/forms.py deleted file mode 100644 index 4dc6c3ee..00000000 --- a/registration/forms.py +++ /dev/null @@ -1,126 +0,0 @@ -""" -Forms and validation code for user registration. - -Note that all of these forms assume Django's bundle default ``User`` -model; since it's not possible for a form to anticipate in advance the -needs of custom user models, you will need to write your own forms if -you're using a custom model. - -""" - - -from django.contrib.auth.models import User -from django import forms -from django.utils.translation import ugettext_lazy as _ - - -class RegistrationForm(forms.Form): - """ - Form for registering a new user account. - - Validates that the requested username is not already in use, and - requires the password to be entered twice to catch typos. - - Subclasses should feel free to add any additional validation they - need, but should avoid defining a ``save()`` method -- the actual - saving of collected user data is delegated to the active - registration backend. - - """ - required_css_class = 'required' - - username = forms.RegexField(regex=r'^[\w.@+-]+$', - max_length=30, - label=_("Username"), - error_messages={'invalid': _("This value may contain only letters, numbers and " - "@/./+/-/_ characters.")}) - email = forms.EmailField(label=_("Email")) - password1 = forms.CharField(widget=forms.PasswordInput, - label=_("Password")) - password2 = forms.CharField(widget=forms.PasswordInput, - label=_("Password (again)")) - - def clean_username(self): - """ - Validate that the username is alphanumeric and is not already - in use. - - """ - existing = User.objects.filter(username__iexact=self.cleaned_data['username']) - if existing.exists(): - raise forms.ValidationError(_("A user with that username already exists.")) - else: - return self.cleaned_data['username'] - - def clean_email(self): - existing = User.objects.filter(email__iexact=self.cleaned_data['email']) - if existing.exists(): - raise forms.ValidationError(_("A user with that email already exists. Please login instead.")) - return self.cleaned_data['email'] - - def clean(self): - """ - Verifiy that the values entered into the two password fields - match. Note that an error here will end up in - ``non_field_errors()`` because it doesn't apply to a single - field. - - """ - if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data: - if self.cleaned_data['password1'] != self.cleaned_data['password2']: - raise forms.ValidationError(u"Die zwei Passwoerter sind nicht gleich!") - return self.cleaned_data - - -class RegistrationFormTermsOfService(RegistrationForm): - """ - Subclass of ``RegistrationForm`` which adds a required checkbox - for agreeing to a site's Terms of Service. - - """ - tos = forms.BooleanField(widget=forms.CheckboxInput, - label=_(u'I have read and agree to the Terms of Service'), - error_messages={'required': _("You must agree to the terms to register")}) - - -class RegistrationFormUniqueEmail(RegistrationForm): - """ - Subclass of ``RegistrationForm`` which enforces uniqueness of - email addresses. - - """ - def clean_email(self): - """ - Validate that the supplied email address is unique for the - site. - - """ - if User.objects.filter(email__iexact=self.cleaned_data['email']): - raise forms.ValidationError(_("This email address is already in use. " - "Please supply a different email address.")) - return self.cleaned_data['email'] - - -class RegistrationFormNoFreeEmail(RegistrationForm): - """ - Subclass of ``RegistrationForm`` which disallows registration with - email addresses from popular free webmail services; moderately - useful for preventing automated spam registrations. - - To change the list of banned domains, subclass this form and - override the attribute ``bad_domains``. - - """ - bad_domains = ['hotmail.com', 'mail.ru'] - - def clean_email(self): - """ - Check the supplied email address against a list of known free - webmail domains. - - """ - email_domain = self.cleaned_data['email'].split('@')[1] - if email_domain in self.bad_domains: - raise forms.ValidationError(_("Registration using free email addresses is prohibited. " - "Please supply a different email address.")) - return self.cleaned_data['email'] diff --git a/registration/migrations/0002_auto_20150819_0134.py b/registration/migrations/0002_auto_20150819_0134.py deleted file mode 100644 index c811ceed..00000000 --- a/registration/migrations/0002_auto_20150819_0134.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('scheduler', '0006_auto_20150819_0134'), - ('registration', '0001_initial'), - ] - - operations = [ - migrations.AlterModelOptions( - name='registrationprofile', - options={'verbose_name': 'Freiwillige', 'verbose_name_plural': 'Freiwillige'}, - ), - migrations.AddField( - model_name='registrationprofile', - name='interests', - field=models.ForeignKey(default=1, to='scheduler.Topics'), - preserve_default=False, - ), - migrations.AddField( - model_name='registrationprofile', - name='needs', - field=models.ManyToManyField(to='scheduler.Need'), - ), - ] diff --git a/registration/migrations/0003_auto_20150819_0140.py b/registration/migrations/0003_auto_20150819_0140.py deleted file mode 100644 index faed3b05..00000000 --- a/registration/migrations/0003_auto_20150819_0140.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('scheduler', '0007_auto_20150819_0138'), - ('registration', '0002_auto_20150819_0134'), - ] - - operations = [ - migrations.RemoveField( - model_name='registrationprofile', - name='interests', - ), - migrations.AddField( - model_name='registrationprofile', - name='interests', - field=models.ManyToManyField(to='scheduler.Topics'), - ), - ] diff --git a/registration/migrations/0004_auto_20150830_1945.py b/registration/migrations/0004_auto_20150830_1945.py deleted file mode 100644 index d7ca3e5a..00000000 --- a/registration/migrations/0004_auto_20150830_1945.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations -from django.conf import settings - - -class Migration(migrations.Migration): - - dependencies = [ - ('registration', '0003_auto_20150819_0140'), - ] - - operations = [ - migrations.AlterField( - model_name='registrationprofile', - name='needs', - field=models.ManyToManyField(to='scheduler.Need', verbose_name=b'registrierte Schichten'), - ), - migrations.AlterField( - model_name='registrationprofile', - name='user', - field=models.OneToOneField(verbose_name='user', to=settings.AUTH_USER_MODEL), - ), - ] diff --git a/registration/migrations/0004_auto_20150903_2258.py b/registration/migrations/0004_auto_20150903_2258.py deleted file mode 100644 index a72ea3a0..00000000 --- a/registration/migrations/0004_auto_20150903_2258.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models, migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('registration', '0003_auto_20150819_0140'), - ] - - operations = [ - migrations.AlterField( - model_name='registrationprofile', - name='needs', - field=models.ManyToManyField(to='scheduler.Need', verbose_name=b'registrierte Schichten'), - ), - ] diff --git a/registration/models.py b/registration/models.py deleted file mode 100644 index 744025a8..00000000 --- a/registration/models.py +++ /dev/null @@ -1,309 +0,0 @@ -# coding: utf-8 - -import datetime -from exceptions import Exception -import hashlib -import random -import re -import traceback - -from django.conf import settings -from django.contrib.auth.models import User -from django.db import models -from django.db import transaction -from django.template.loader import render_to_string -from django.utils.translation import ugettext_lazy as _ -from django.utils.safestring import SafeString - -try: - from django.contrib.auth import get_user_model - - User = get_user_model() -except Exception as e: - traceback.format_exc() - print e - # from django.contrib.auth.models import User - -try: - from django.utils.timezone import now as datetime_now -except Exception as e: - traceback.format_exc() - print e - -SHA1_RE = re.compile('^[a-f0-9]{40}$') - - -class RegistrationManager(models.Manager): - """ - Custom manager for the ``RegistrationProfile`` model. - - The methods defined here provide shortcuts for account creation - and activation (including generation and emailing of activation - keys), and for cleaning out expired inactive accounts. - - """ - - def activate_user(self, activation_key): - """ - Validate an activation key and activate the corresponding - ``User`` if valid. - - If the key is valid and has not expired, return the ``User`` - after activating. - - If the key is not valid or has expired, return ``False``. - - If the key is valid but the ``User`` is already active, - return ``False``. - - To prevent reactivation of an account which has been - deactivated by site administrators, the activation key is - reset to the string constant ``RegistrationProfile.ACTIVATED`` - after successful activation. - - """ - # Make sure the key we're trying conforms to the pattern of a - # SHA1 hash; if it doesn't, no point trying to look it up in - # the database. - if SHA1_RE.search(activation_key): - try: - profile = self.get(activation_key=activation_key) - except self.model.DoesNotExist: - return False - if not profile.activation_key_expired(): - user = profile.user - user.is_active = True - user.save() - profile.activation_key = self.model.ACTIVATED - profile.save() - return user - return False - - def create_inactive_user(self, username, email, password, - site, send_email=True): - """ - Create a new, inactive ``User``, generate a - ``RegistrationProfile`` and email its activation key to the - ``User``, returning the new ``User``. - - By default, an activation email will be sent to the new - user. To disable this, pass ``send_email=False``. - - """ - new_user = User.objects.create_user(username, email, password) - new_user.is_active = False - new_user.save() - - registration_profile = self.create_profile(new_user) - - if send_email: - registration_profile.send_activation_email(site) - - return new_user - - # create_inactive_user = transaction.commit(create_inactive_user) - - def create_profile(self, user): - """ - Create a ``RegistrationProfile`` for a given - ``User``, and return the ``RegistrationProfile``. - - The activation key for the ``RegistrationProfile`` will be a - SHA1 hash, generated from a combination of the ``User``'s - username and a random salt. - - """ - salt = hashlib.sha1(str(random.random())).hexdigest()[:5] - username = user.username - if isinstance(username, unicode): - username = username.encode('utf-8') - activation_key = hashlib.sha1(salt + username).hexdigest() - return self.create(user=user, - activation_key=activation_key) - - def delete_expired_users(self, dry_run=False): - """ - Remove expired instances of ``RegistrationProfile`` and their - associated ``User``s. - - Accounts to be deleted are identified by searching for - instances of ``RegistrationProfile`` with expired activation - keys, and then checking to see if their associated ``User`` - instances have the field ``is_active`` set to ``False``; any - ``User`` who is both inactive and has an expired activation - key will be deleted. - - It is recommended that this method be executed regularly as - part of your routine site maintenance; this application - provides a custom management command which will call this - method, accessible as ``manage.py cleanupregistration``. - - Regularly clearing out accounts which have never been - activated serves two useful purposes: - - 1. It alleviates the ocasional need to reset a - ``RegistrationProfile`` and/or re-send an activation email - when a user does not receive or does not act upon the - initial activation email; since the account will be - deleted, the user will be able to simply re-register and - receive a new activation key. - - 2. It prevents the possibility of a malicious user registering - one or more accounts and never activating them (thus - denying the use of those usernames to anyone else); since - those accounts will be deleted, the usernames will become - available for use again. - - If you have a troublesome ``User`` and wish to disable their - account while keeping it in the database, simply delete the - associated ``RegistrationProfile``; an inactive ``User`` which - does not have an associated ``RegistrationProfile`` will not - be deleted. - - """ - count = 0 - users = 0 - profiles = 0 - errors = 0 - for profile in self.all(): - count += 1 - try: - with transaction.atomic(): - if profile.activation_key_expired(): - user = profile.user - if not user.is_active: - if not dry_run: - user.delete() - profile.delete() - else: - # FIXME: remove - print('Would delete ' + profile.user.username + - ', activation key ' + profile.activation_key) - users += 1 - profiles += 1 - except User.DoesNotExist: - if not dry_run: - profile.delete() - profiles += 1 - errors += 1 - - # FIXME make this logging, instead of plain 'print' - print('Deleted {} users and {} profiles with {} errors from a total of {} entries' - .format(users, profiles, errors, count)) - - -class RegistrationProfile(models.Model): - - # FIXME: i18n - class Meta: - verbose_name = "Freiwillige" - verbose_name_plural = "Freiwillige" - - """ - A simple profile which stores an activation key for use during - user account registration. - - Generally, you will not want to interact directly with instances - of this model; the provided manager includes methods - for creating and activating new accounts, as well as for cleaning - out accounts which have never been activated. - - While it is possible to use this model as the value of the - ``AUTH_PROFILE_MODULE`` setting, it's not recommended that you do - so. This model's sole purpose is to store data temporarily during - account registration and activation. - - """ - ACTIVATED = u"ALREADY_ACTIVATED" - - user = models.OneToOneField(User, verbose_name=_('user')) - activation_key = models.CharField(_('activation key'), max_length=40) - - needs = models.ManyToManyField('scheduler.Need', verbose_name="registrierte Schichten") - - objects = RegistrationManager() - - def __unicode__(self): - return u"Username: {} Email: {}".format(self.user, self.user.email) - - def get_user_email(self): - return self.user.email - - def activation_key_expired(self): - """ - Determine whether this ``RegistrationProfile``'s activation - key has expired, returning a boolean -- ``True`` if the key - has expired. - - Key expiration is determined by a two-step process: - - 1. If the user has already activated, the key will have been - reset to the string constant ``ACTIVATED``. Re-activating - is not permitted, and so this method returns ``True`` in - this case. - - 2. Otherwise, the date the user signed up is incremented by - the number of days specified in the setting - ``ACCOUNT_ACTIVATION_DAYS`` (which should be the number of - days after signup during which a user is allowed to - activate their account); if the result is less than or - equal to the current date, the key has expired and this - method returns ``True``. - - """ - expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS) - return self.activation_key == self.ACTIVATED or \ - (self.user.date_joined + expiration_date <= datetime_now()) - - activation_key_expired.boolean = True - - def send_activation_email(self, site): - """ - Send an activation email to the user associated with this - ``RegistrationProfile``. - - The activation email will make use of two templates: - - ``registration/activation_email_subject.txt`` - This template will be used for the subject line of the - email. Because it is used as the subject line of an email, - this template's output **must** be only a single line of - text; output longer than one line will be forcibly joined - into only a single line. - - ``registration/activation_email.txt`` - This template will be used for the body of the email. - - These templates will each receive the following context - variables: - - ``activation_key`` - The activation key for the new account. - - ``expiration_days`` - The number of days remaining during which the account may - be activated. - - ``site`` - An object representing the site on which the user - registered; depending on whether ``django.contrib.sites`` - is installed, this may be an instance of either - ``django.contrib.sites.models.Site`` (if the sites - application is installed) or - ``django.contrib.sites.models.RequestSite`` (if - not). Consult the documentation for the Django sites - framework for etails regarding these objects' interfaces. - - """ - - ctx_dict = {'activation_key': self.activation_key, - 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, - 'site': site, - 'user': self.user.get_username()} - subject = render_to_string(SafeString('activation_email_subject.txt'), - ctx_dict) - # Email subject *must not* contain newlines - subject = ''.join(subject.splitlines()) - message = render_to_string(SafeString('activation_email.txt'), - ctx_dict) - self.user.email_user(subject, message, settings.DEFAULT_FROM_EMAIL) diff --git a/registration/registration.py b/registration/registration.py deleted file mode 100644 index e3e2b1b7..00000000 --- a/registration/registration.py +++ /dev/null @@ -1,145 +0,0 @@ -""" -Views which allow users to create and activate accounts. - -""" - -from django.shortcuts import redirect -from django.views.generic.base import TemplateView -from django.views.generic.edit import FormView - -import signals as signals -from forms import RegistrationForm - - -class _RequestPassingFormView(FormView): - """ - A version of FormView which passes extra arguments to certain - methods, notably passing the HTTP request nearly everywhere, to - enable finer-grained processing. - - """ - def get(self, request, *args, **kwargs): - # Pass request to get_form_class and get_form for per-request - # form control. - form_class = self.get_form_class(request) - form = self.get_form(form_class) - return self.render_to_response(self.get_context_data(form=form)) - - def post(self, request, *args, **kwargs): - # Pass request to get_form_class and get_form for per-request - # form control. - form_class = self.get_form_class(request) - form = self.get_form(form_class) - if form.is_valid(): - # Pass request to form_valid. - return self.form_valid(request, form) - else: - return self.form_invalid(form) - - def get_form_class(self, request=None): - return super(_RequestPassingFormView, self).get_form_class() - - def get_form_kwargs(self, request=None, form_class=None): - return super(_RequestPassingFormView, self).get_form_kwargs() - - def get_initial(self, request=None): - return super(_RequestPassingFormView, self).get_initial() - - def get_success_url(self, request=None, user=None): - # We need to be able to use the request and the new user when - # constructing success_url. - return super(_RequestPassingFormView, self).get_success_url() - - def form_valid(self, form, request=None): - return super(_RequestPassingFormView, self).form_valid(form) - - def form_invalid(self, form, request=None): - return super(_RequestPassingFormView, self).form_invalid(form) - - -class RegistrationView(_RequestPassingFormView): - """ - Base class for user registration views. - - """ - disallowed_url = 'registration_disallowed' - form_class = RegistrationForm - http_method_names = ['get', 'post', 'head', 'options', 'trace'] - success_url = None - template_name = 'registration_form.html' - - def dispatch(self, request, *args, **kwargs): - """ - Check that user signup is allowed before even bothering to - dispatch or do other processing. - - """ - if not self.registration_allowed(request): - return redirect(self.disallowed_url) - return super(RegistrationView, self).dispatch(request, *args, **kwargs) - - def form_valid(self, request, form): - new_user = self.register(request, **form.cleaned_data) - success_url = self.get_success_url(request, new_user) - - # success_url may be a simple string, or a tuple providing the - # full argument set for redirect(). Attempting to unpack it - # tells us which one it is. - try: - to, args, kwargs = success_url - return redirect(to, *args, **kwargs) - except ValueError: - return redirect(success_url) - - def registration_allowed(self, request): - print "registration is allowed ..............." - """ - Override this to enable/disable user registration, either - globally or on a per-request basis. - - """ - return True - - def register(self, request, **cleaned_data): - print "trying to get register things ..............." - """ - Implement user-registration logic here. Access to both the - request and the full cleaned_data of the registration form is - available here. - - """ - raise NotImplementedError - - -class ActivationView(TemplateView): - """ - Base class for user activation views. - - """ - http_method_names = ['get'] - template_name = 'activate.html' - - def get(self, request, *args, **kwargs): - activated_user = self.activate(request) - if activated_user: - signals.user_activated.send(sender=self.__class__, - user=activated_user, - request=request) - success_url = self.get_success_url(request, activated_user) - try: - to, args, kwargs = success_url - return redirect(to, *args, **kwargs) - except ValueError: - return redirect(success_url) - return super(ActivationView, self).get(request, *args, **kwargs) - - def activate(self, request): - """ - Implement account-activation logic here. - - """ - print "activate function calles" - raise NotImplementedError - - def get_success_url(self, request, user): - raise NotImplementedError diff --git a/registration/signals.py b/registration/signals.py deleted file mode 100644 index 343e3a55..00000000 --- a/registration/signals.py +++ /dev/null @@ -1,8 +0,0 @@ -from django.dispatch import Signal - - -# A new user has registered. -user_registered = Signal(providing_args=["user", "request"]) - -# A user has activated his or her account. -user_activated = Signal(providing_args=["user", "request"]) diff --git a/registration/templates/activation_complete.html b/registration/templates/activation_complete.html deleted file mode 100644 index db8a5731..00000000 --- a/registration/templates/activation_complete.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "registration_base.html" %} -{% load i18n %} -{% block title %} Aktivierung abgeschlossen!{% endblock %} -{% block content %} -{% url 'auth_login' as auth_login_url %} -
-

Vielen Dank für die Registrierung. Du kannst Dich hier anmelden.

-
-{% endblock %} diff --git a/registration/templates/login.html b/registration/templates/login.html deleted file mode 100644 index 0851a073..00000000 --- a/registration/templates/login.html +++ /dev/null @@ -1,41 +0,0 @@ -{% extends "registration_base.html" %} -{% load i18n %} -{% block title %}Login{% endblock %} -{% block content %} - {% url 'auth_password_reset' as auth_pwd_reset_url %} - {% url 'registration_register' as register_url %} -
-
-

volunteer-planner.org

- -

Login

-
-
- {% if form.errors %} -

{% blocktrans %}Your username and password didn't match. Please try again.{% endblocktrans %}

- {% endif %} - -
{% csrf_token %} -
- - -
-
- - -
- - - - -
-
-{% endblock %} diff --git a/registration/templates/logout.html b/registration/templates/logout.html deleted file mode 100644 index ebdd7fc9..00000000 --- a/registration/templates/logout.html +++ /dev/null @@ -1,7 +0,0 @@ -{% extends "registration_base.html" %} -{% load i18n %} -{% block title %}Logged out{% endblock %} -{% block content %} -

ausgeloggt!

-

Nochmal einloggen?

-{% endblock %} diff --git a/registration/templates/registration_complete.html b/registration/templates/registration_complete.html deleted file mode 100644 index d150e9ba..00000000 --- a/registration/templates/registration_complete.html +++ /dev/null @@ -1,9 +0,0 @@ -{% extends "registration_base.html" %} -{% load i18n %} -{% block title %} Activation email sent{% endblock %} -{% block content %} -
-

Eine Aktivierungsmail wurde Dir soeben zugesendet.

-

Bitte bestätige die Anmeldung mit dem Link in der Email. Bitte schaue im Spam-Ordner nach, solltest Du nach 10 Minuten noch keine Mail bekommen haben.

-
-{% endblock %} diff --git a/registration/templates/registration_form.html b/registration/templates/registration_form.html deleted file mode 100644 index a72b1416..00000000 --- a/registration/templates/registration_form.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends "registration_base.html" %} -{% load i18n %} -{% block title %}Register for an account{% endblock %} -{% block content %} -
-
-

volunteer-planner.org

-

Registrierung

-
-
- {{ form.non_field_errors }} - -
{% csrf_token %} -
- - {% for email_error in form.email.errors %} - - {% endfor %} - -
-
- - -

Bitte keine Leerzeichen, Sonderzeichen und Umlaute verwenden.

-
-
- - -
-
- - -
- -
-
- -{% endblock %} diff --git a/registration/urls.py b/registration/urls.py deleted file mode 100644 index f9676041..00000000 --- a/registration/urls.py +++ /dev/null @@ -1,71 +0,0 @@ -""" -URL patterns for the views included in ``django.contrib.auth``. - -Including these URLs (via the ``include()`` directive) will set up the -following patterns based at whatever URL prefix they are included -under: - -* User login at ``login/``. - -* User logout at ``logout/``. - -* The two-step password change at ``password/change/`` and - ``password/change/done/``. - -* The four-step password reset at ``password/reset/``, - ``password/reset/confirm/``, ``password/reset/complete/`` and - ``password/reset/done/``. - -The default registration backend already has an ``include()`` for -these URLs, so under the default setup it is not necessary to manually -include these views. Other backends may or may not include them; -consult a specific backend's documentation for details. - -""" -from .views import RegistrationView, ActivationView, reg_complete, reg_act_complete - -from django.conf.urls import include -from django.conf.urls import patterns -from django.conf.urls import url -from django.views.generic import TemplateView -from django.contrib.auth import views as auth_views - -urlpatterns = patterns('', - url(r'^password/change/$', - auth_views.password_change, - name='password_change'), - url(r'^password/change/done/$', - auth_views.password_change_done, - name='password_change_done'), - url(r'^password/reset/$', - auth_views.password_reset, - name='password_reset'), - url(r'^password/reset/done/$', - auth_views.password_reset_done, - name='password_reset_done'), - url(r'^password/reset/complete/$', - auth_views.password_reset_complete, - name='password_reset_complete'), - url(r'^password/reset/confirm/(?P[0-9A-Za-z]+)-(?P.+)/$', - auth_views.password_reset_confirm, - name='password_reset_confirm'), - url(r'^registration/$', - RegistrationView.as_view(), - {'template_name': 'registration_form.html'}, - name='registation'), - url(r'^activate/$', - ActivationView.as_view(), - name='user_activate'), - url(r'^login/$', - 'django.contrib.auth.views.login', - {'template_name': 'login.html'}, - name='auth_login'), - url(r'^logout/$', - 'django.contrib.auth.views.logout', - {'template_name': 'logout.html'}, - name='auth_logout'), - url(r'^registration_complete/$', - reg_complete, name="registration_complete"), - url(r'^registration_activation_complete/$', - reg_act_complete, name="registration_activation_complete"), - ) diff --git a/registration/views.py b/registration/views.py deleted file mode 100644 index e57835a6..00000000 --- a/registration/views.py +++ /dev/null @@ -1,141 +0,0 @@ -from django.conf import settings -from django.contrib.sites.models import RequestSite -from django.contrib.sites.models import Site -from django.shortcuts import render_to_response -from django.template.context import RequestContext - -from registration import signals -from models import RegistrationProfile -from registration import ActivationView as BaseActivationView -from registration import RegistrationView as BaseRegistrationView - - -class RegistrationView(BaseRegistrationView): - """ - A registration backend which follows a simple workflow: - - 1. User signs up, inactive account is created. - - 2. Email is sent to user with activation link. - - 3. User clicks activation link, account is now active. - - Using this backend requires that - - * ``registration`` be listed in the ``INSTALLED_APPS`` setting - (since this backend makes use of models defined in this - application). - - * The setting ``ACCOUNT_ACTIVATION_DAYS`` be supplied, specifying - (as an integer) the number of days from registration during - which a user may activate their account (after that period - expires, activation will be disallowed). - - * The creation of the templates - ``registration/activation_email_subject.txt`` and - ``registration/activation_email.txt``, which will be used for - the activation email. See the notes for this backends - ``register`` method for details regarding these templates. - - Additionally, registration can be temporarily closed by adding the - setting ``REGISTRATION_OPEN`` and setting it to - ``False``. Omitting this setting, or setting it to ``True``, will - be interpreted as meaning that registration is currently open and - permitted. - - Internally, this is accomplished via storing an activation key in - an instance of ``registration.models.RegistrationProfile``. See - that model and its custom manager for full documentation of its - fields and supported operations. - - """ - def register(self, request, **cleaned_data): - """ - Given a username, email address and password, register a new - user account, which will initially be inactive. - - Along with the new ``User`` object, a new - ``registration.models.RegistrationProfile`` will be created, - tied to that ``User``, containing the activation key which - will be used for this account. - - An email will be sent to the supplied email address; this - email should contain an activation link. The email will be - rendered using two templates. See the documentation for - ``RegistrationProfile.send_activation_email()`` for - information about these templates and the contexts provided to - them. - - After the ``User`` and ``RegistrationProfile`` are created and - the activation email is sent, the signal - ``registration.signals.user_registered`` will be sent, with - the new ``User`` as the keyword argument ``user`` and the - class of this backend as the sender. - - """ - username, email, password = cleaned_data['username'], cleaned_data['email'], cleaned_data['password1'] - if Site._meta.installed: - site = Site.objects.get_current() - else: - site = RequestSite(request) - new_user = RegistrationProfile.objects.create_inactive_user(username, email, - password, site) - signals.user_registered.send(sender=self.__class__, - user=new_user, - request=request) - return new_user - - def registration_allowed(self, request): - """ - Indicate whether account registration is currently permitted, - based on the value of the setting ``REGISTRATION_OPEN``. This - is determined as follows: - - * If ``REGISTRATION_OPEN`` is not specified in settings, or is - set to ``True``, registration is permitted. - - * If ``REGISTRATION_OPEN`` is both specified and set to - ``False``, registration is not permitted. - - """ - return getattr(settings, 'REGISTRATION_OPEN', True) - - def get_success_url(self, request, user): - """ - Return the name of the URL to redirect to after successful - user registration. - - """ - return ('registration_complete', (), {}) - - -class ActivationView(BaseActivationView): - def activate(self, request): - """ - Given an an activation key, look up and activate the user - account corresponding to that key (if possible). - - After successful activation, the signal - ``registration.signals.user_activated`` will be sent, with the - newly activated ``User`` as the keyword argument ``user`` and - the class of this backend as the sender. - - """ - activation_key = request.GET.get('activation_key') - activated_user = RegistrationProfile.objects.activate_user(activation_key) - if activated_user: - signals.user_activated.send(sender=self.__class__, - user=activated_user, - request=request) - return activated_user - - def get_success_url(self, request, user): - return ('registration_activation_complete', (), {}) - - -def reg_complete(request): - return render_to_response('registration_complete.html', context_instance=RequestContext(request, locals())) - - -def reg_act_complete(request): - return render_to_response('activation_complete.html', context_instance=RequestContext(request, locals())) diff --git a/volunteer_planner/reload.touch b/registration_history/__init__.py similarity index 100% rename from volunteer_planner/reload.touch rename to registration_history/__init__.py diff --git a/registration_history/migrations/0001_initial.py b/registration_history/migrations/0001_initial.py new file mode 100644 index 00000000..24203d5a --- /dev/null +++ b/registration_history/migrations/0001_initial.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('accounts', '0001_initial'), + ('scheduler', '0025_merge'), + ] + + operations = [ + migrations.CreateModel( + name='OldRegistrationProfile', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, + auto_created=True, primary_key=True)), + ('activation_key', models.CharField(max_length=40, + verbose_name='activation key')), + ], + options={ + 'db_table': 'registration_registrationprofile', + 'managed': False, + }, + ), + migrations.CreateModel( + name='OldRegistrationProfileNeed', + fields=[ + ('id', models.AutoField(verbose_name='ID', serialize=False, + auto_created=True, primary_key=True)), + ('need', models.ForeignKey(to='scheduler.Need')), + ('registrationprofile', models.ForeignKey( + to='registration_history.OldRegistrationProfile')), + ], + options={ + 'db_table': 'registration_registrationprofile_needs', + 'managed': False, + }, + ), + migrations.AddField( + model_name='oldregistrationprofile', + name='needs', + field=models.ManyToManyField(to='scheduler.Need', + verbose_name=b'registrierte Schichten', + through='registration_history.OldRegistrationProfileNeed'), + ), + migrations.AddField( + model_name='oldregistrationprofile', + name='user', + field=models.OneToOneField(verbose_name='user', + to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/registration_history/migrations/0001_squashed_0006_remove_model.py b/registration_history/migrations/0001_squashed_0006_remove_model.py new file mode 100644 index 00000000..9af8607d --- /dev/null +++ b/registration_history/migrations/0001_squashed_0006_remove_model.py @@ -0,0 +1,68 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.conf import settings + +from django.db import models, migrations + + +class Migration(migrations.Migration): + replaces = [ + (b'registration_history', '0001_initial'), + (b'registration_history', '0002_move_user_needs'), + (b'registration_history', '0003_switch_to_managed_mode'), + (b'registration_history', '0004_migrate_to_redux'), + (b'registration_history', '0005_remove_model'), + (b'registration', '0001_initial'), + (b'registration', '0002_auto_20150819_0134'), + (b'registration', '0003_auto_20150819_0140'), + (b'registration', '0004_auto_20150903_2258'), + (b'registration', '0004_auto_20150830_1945'), + (b'registration', '0004_auto_20150822_1800'), + (b'registration', '0006_auto_20150917_2328'), + (b'registration', '0005_merge'), + (b'registration', '0006_remove_registrationprofile_interests'), + (b'registration', '0002_registrationprofile_activated'), + (b'registration', '0003_migrate_activatedstatus'), + ] + + dependencies = [ + ('accounts', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('scheduler', '0021_add_shift_users'), + ] + + operations = [ + migrations.CreateModel( + name='RegistrationProfile', + fields=[ + ('id', models.AutoField(verbose_name='ID', + serialize=False, + auto_created=True, + primary_key=True)), + ('activation_key', models.CharField(max_length=40, + verbose_name='activation key')), + ('user', models.OneToOneField(verbose_name='user', + to=settings.AUTH_USER_MODEL)), + ], + options={ + 'db_table': 'registration_registrationprofile', + 'managed': True, + 'verbose_name': 'registration profile', + 'verbose_name_plural': 'registration profiles', + }, + ), + migrations.AlterModelOptions( + name='RegistrationProfile', + options={ + 'managed': False + }, + ), + migrations.RemoveField( + model_name='RegistrationProfile', + name='user', + ), + migrations.DeleteModel( + name='RegistrationProfile', + ), + ] diff --git a/registration_history/migrations/0002_move_user_needs.py b/registration_history/migrations/0002_move_user_needs.py new file mode 100644 index 00000000..1f776f08 --- /dev/null +++ b/registration_history/migrations/0002_move_user_needs.py @@ -0,0 +1,51 @@ +# coding: utf-8 + +from __future__ import unicode_literals + +import sys + +from django.db import migrations + +ACTIVATED = u"ALREADY_ACTIVATED" + + +def move_user_needs(apps, schema_editor): + OldRegistrationModel = apps.get_model("registration_history", + 'OldRegistrationProfile') + UserAccount = apps.get_model("accounts", "UserAccount") + ShiftHelper = apps.get_model("scheduler", "ShiftHelper") + + sys.stdout.write(' ' * 80) + sys.stdout.flush() + + account_count, shift_count, users_without_shifts = 0, 0, 0 + for rp in OldRegistrationModel.objects.all(): + + if rp.activation_key == ACTIVATED: + has_shifts = False + account, _ = UserAccount.objects.get_or_create(user=rp.user) + account_count += 1 + for need in rp.needs.all(): + shift_helper, _ = ShiftHelper.objects.get_or_create( + user_account=account, need=need) + shift_count += 1 + has_shifts = True + if not has_shifts: + users_without_shifts += 1 + if account_count % 43 == 0: + sys.stdout.write( + '\r Migrated {} accounts totalling {} shifts ({} users w/o shifts)'.format( + account_count, shift_count, users_without_shifts)) + sys.stdout.flush() + + +class Migration(migrations.Migration): + dependencies = [ + ('accounts', '0001_initial'), + ('registration_history', '0001_initial'), + ('scheduler', '0021_add_shift_users'), + ] + + operations = [ + migrations.RunPython(move_user_needs) + ] diff --git a/registration_history/migrations/0003_switch_to_managed_mode.py b/registration_history/migrations/0003_switch_to_managed_mode.py new file mode 100644 index 00000000..eb1c2629 --- /dev/null +++ b/registration_history/migrations/0003_switch_to_managed_mode.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('registration_history', '0002_move_user_needs'), + ] + + operations = [ + migrations.AlterModelOptions( + name='oldregistrationprofile', + options={ + 'managed': True + }, + ), + migrations.AlterModelOptions( + name='oldregistrationprofileneed', + options={ + 'managed': True + }, + ), + ] diff --git a/registration_history/migrations/0004_migrate_to_redux.py b/registration_history/migrations/0004_migrate_to_redux.py new file mode 100644 index 00000000..1a846d16 --- /dev/null +++ b/registration_history/migrations/0004_migrate_to_redux.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('registration_history', '0003_switch_to_managed_mode'), + ] + + operations = [ + migrations.AlterModelOptions( + name='oldregistrationprofile', + options={ + 'managed': True, + 'verbose_name': 'registration profile', + 'verbose_name_plural': 'registration profiles' + }, + ), + migrations.RemoveField( + model_name='oldregistrationprofile', + name='needs', + ), + migrations.DeleteModel( + name='OldRegistrationProfileNeed', + ), + ] diff --git a/registration_history/migrations/0005_remove_model.py b/registration_history/migrations/0005_remove_model.py new file mode 100644 index 00000000..3bd0274d --- /dev/null +++ b/registration_history/migrations/0005_remove_model.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('registration_history', '0004_migrate_to_redux'), + ] + + operations = [ + migrations.AlterModelOptions( + name='oldregistrationprofile', + options={ + 'managed': False, + 'verbose_name': 'registration profile', + 'verbose_name_plural': 'registration profiles' + }, + ), + migrations.RemoveField( + model_name='oldregistrationprofile', + name='user', + ), + migrations.DeleteModel( + name='OldRegistrationProfile', + ), + ] diff --git a/registration_history/migrations/__init__.py b/registration_history/migrations/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/registration_history/models.py b/registration_history/models.py new file mode 100644 index 00000000..826aab74 --- /dev/null +++ b/registration_history/models.py @@ -0,0 +1,26 @@ +# from django.conf import settings +# from django.db import models +# +# from django.utils.translation import ugettext_lazy as _ +# +# MANAGED = True +# class OldRegistrationProfileNeed(models.Model): +# registrationprofile = models.ForeignKey('OldRegistrationProfile') +# need = models.ForeignKey('scheduler.Need') +# +# class Meta: +# managed = MANAGED +# db_table = 'registration_registrationprofile_needs' +# class OldRegistrationProfile(models.Model): +# class Meta: +# managed = MANAGED +# db_table = 'registration_registrationprofile' +# verbose_name = _('registration profile') +# verbose_name_plural = _('registration profiles') +# +# ACTIVATED = u"ALREADY_ACTIVATED" +# +# user = models.OneToOneField(settings.AUTH_USER_MODEL, +# verbose_name=_('user')) +# activation_key = models.CharField(_('activation key'), max_length=40) +# activated = models.BooleanField(default=False) diff --git a/requirements/_base.txt b/requirements/_base.txt index a16606c3..865ca239 100644 --- a/requirements/_base.txt +++ b/requirements/_base.txt @@ -1,21 +1,23 @@ -Django==1.8.4 -argparse==1.2.1 +argparse==1.4.0 decorator==4.0.2 django-appconf==0.6 django-ckeditor==4.5.0 django-compressor==1.4 +django-extensions==1.5.7 +django-registration-redux==1.2 +Django==1.8.4 +djangocms-admin-style==0.2.8 ipdb==0.8.1 -ipython==4.0.0 ipython-genutils==0.1.0 +ipython==4.0.0 path.py==7.6.1 pexpect==3.3 pickleshare==0.5 python-dateutil==2.4.2 +python-memcached==1.57 simplegeneric==0.8.1 six==1.7.3 sqlparse==0.1.16 traitlets==4.0.0 wsgiref==0.1.2 xlwt==1.0.0 -python-memcached==1.57 -djangocms-admin-style==0.2.8 diff --git a/requirements/dev.txt b/requirements/dev.txt index f834574e..08da1004 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,6 +1,7 @@ -r _base.txt +coverage==4.0 django-debug-toolbar==1.3.2 -django-extensions==1.5.6 factory-boy==2.5.2 -pytest==2.7.2 +pytest-cov==2.1.0 pytest-django==2.8.0 +pytest==2.7.2 diff --git a/resources/bootstrap/assets/js/ie10-viewport-bug-workaround.js b/resources/bootstrap/assets/js/ie10-viewport-bug-workaround.js new file mode 100644 index 00000000..e762096f --- /dev/null +++ b/resources/bootstrap/assets/js/ie10-viewport-bug-workaround.js @@ -0,0 +1,23 @@ +/*! + * IE10 viewport hack for Surface/desktop Windows 8 bug + * Copyright 2014-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +// See the Getting Started docs for more information: +// http://getbootstrap.com/getting-started/#support-ie10-width + +(function () { + 'use strict'; + + if (navigator.userAgent.match(/IEMobile\/10\.0/)) { + var msViewportStyle = document.createElement('style') + msViewportStyle.appendChild( + document.createTextNode( + '@-ms-viewport{width:auto!important}' + ) + ) + document.querySelector('head').appendChild(msViewportStyle) + } + +})(); diff --git a/scheduler/static/bootstrap/dist/css/bootstrap-theme.css b/resources/bootstrap/css/bootstrap-theme.css similarity index 100% rename from scheduler/static/bootstrap/dist/css/bootstrap-theme.css rename to resources/bootstrap/css/bootstrap-theme.css diff --git a/scheduler/static/bootstrap/dist/css/bootstrap-theme.css.map b/resources/bootstrap/css/bootstrap-theme.css.map similarity index 100% rename from scheduler/static/bootstrap/dist/css/bootstrap-theme.css.map rename to resources/bootstrap/css/bootstrap-theme.css.map diff --git a/scheduler/static/bootstrap/dist/css/bootstrap-theme.min.css b/resources/bootstrap/css/bootstrap-theme.min.css similarity index 100% rename from scheduler/static/bootstrap/dist/css/bootstrap-theme.min.css rename to resources/bootstrap/css/bootstrap-theme.min.css diff --git a/scheduler/static/bootstrap/docs/dist/css/bootstrap.css b/resources/bootstrap/css/bootstrap.css similarity index 100% rename from scheduler/static/bootstrap/docs/dist/css/bootstrap.css rename to resources/bootstrap/css/bootstrap.css diff --git a/scheduler/static/bootstrap/docs/dist/css/bootstrap.css.map b/resources/bootstrap/css/bootstrap.css.map similarity index 100% rename from scheduler/static/bootstrap/docs/dist/css/bootstrap.css.map rename to resources/bootstrap/css/bootstrap.css.map diff --git a/scheduler/static/bootstrap/docs/dist/css/bootstrap.min.css b/resources/bootstrap/css/bootstrap.min.css similarity index 100% rename from scheduler/static/bootstrap/docs/dist/css/bootstrap.min.css rename to resources/bootstrap/css/bootstrap.min.css diff --git a/resources/bootstrap/css/sticky-footer-navbar.css b/resources/bootstrap/css/sticky-footer-navbar.css new file mode 100644 index 00000000..e69de29b diff --git a/scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.eot b/resources/bootstrap/fonts/glyphicons-halflings-regular.eot similarity index 100% rename from scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.eot rename to resources/bootstrap/fonts/glyphicons-halflings-regular.eot diff --git a/scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.svg b/resources/bootstrap/fonts/glyphicons-halflings-regular.svg similarity index 100% rename from scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.svg rename to resources/bootstrap/fonts/glyphicons-halflings-regular.svg diff --git a/scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf b/resources/bootstrap/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf rename to resources/bootstrap/fonts/glyphicons-halflings-regular.ttf diff --git a/scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.woff b/resources/bootstrap/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.woff rename to resources/bootstrap/fonts/glyphicons-halflings-regular.woff diff --git a/scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 b/resources/bootstrap/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from scheduler/static/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 rename to resources/bootstrap/fonts/glyphicons-halflings-regular.woff2 diff --git a/scheduler/static/bootstrap/dist/js/bootstrap.js b/resources/bootstrap/js/bootstrap.js similarity index 100% rename from scheduler/static/bootstrap/dist/js/bootstrap.js rename to resources/bootstrap/js/bootstrap.js diff --git a/scheduler/static/bootstrap/dist/js/bootstrap.min.js b/resources/bootstrap/js/bootstrap.min.js similarity index 100% rename from scheduler/static/bootstrap/dist/js/bootstrap.min.js rename to resources/bootstrap/js/bootstrap.min.js diff --git a/scheduler/static/bootstrap/dist/js/npm.js b/resources/bootstrap/js/npm.js similarity index 100% rename from scheduler/static/bootstrap/dist/js/npm.js rename to resources/bootstrap/js/npm.js diff --git a/resources/custom/css/vp.css b/resources/custom/css/vp.css new file mode 100644 index 00000000..271c3b66 --- /dev/null +++ b/resources/custom/css/vp.css @@ -0,0 +1,145 @@ +/************************** + * BEGIN sticky footer + * see http://getbootstrap.com/examples/sticky-footer-navbar/ + */ + +html { + position: relative; + min-height: 100%; +} + +body { + /* Margin bottom by footer height */ + margin-bottom: 60px; +} + +.footer { + position: absolute; + bottom: 0; + width: 100%; + /* Set the fixed height of the footer here */ + height: 60px; + background-color: #f5f5f5; +} + +/* END sticky footer + **************************/ + +body > .container { + padding: 60px 15px 0; +} + +.container .text-muted { + margin: 20px 0; +} + +.footer > .container { + padding-right: 15px; + padding-left: 15px; +} + +code { + font-size: 80%; +} + + +.label-0 { + background-color: #777; +} +.label-0[href]:hover, +.label-0[href]:focus { + background-color: #5e5e5e; +} +.label-5 { + background-color: #337ab7; +} +.label-5[href]:hover, +.label-5[href]:focus { + background-color: #286090; +} +.label-4 { + background-color: #5cb85c; +} +.label-4[href]:hover, +.label-4[href]:focus { + background-color: #449d44; +} +.label-3 { + background-color: #5bc0de; +} +.label-3[href]:hover, +.label-3[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-2[href]:hover, +.label-2[href]:focus { + background-color: #ec971f; +} + +.label-1 { + background-color: #d9534f; +} +.label-1[href]:hover, +.label-1[href]:focus { + background-color: #c9302c; +} + +.priority_column { + text-align: left; + width: 15%; +} + + + + +.dropdown-submenu { + position:relative; +} +.dropdown-submenu>.dropdown-menu { + top:0; + left:100%; + margin-top:-6px; + margin-left:-1px; + -webkit-border-radius:0 6px 6px 6px; + -moz-border-radius:0 6px 6px 6px; + border-radius:0 6px 6px 6px; +} +.dropdown-submenu:hover>.dropdown-menu { + display:block; +} +.dropdown-submenu>a:after { + display:block; + content:" "; + float:right; + width:0; + height:0; + border-color:transparent; + border-style:solid; + border-width:5px 0 5px 5px; + border-left-color:#cccccc; + margin-top:5px; + margin-right:-10px; +} +.dropdown-submenu:hover>a:after { + border-left-color:#ffffff; +} +.dropdown-submenu.pull-left { + float:none; +} +.dropdown-submenu.pull-left>.dropdown-menu { + left:-100%; + margin-left:10px; + -webkit-border-radius:6px 0 6px 6px; + -moz-border-radius:6px 0 6px 6px; + border-radius:6px 0 6px 6px; +} + +.dropdown-menu li { + display: block; +} +.spacer{ + margin-top:35px; +} diff --git a/resources/custom/js/vp.js b/resources/custom/js/vp.js new file mode 100644 index 00000000..cf85cc80 --- /dev/null +++ b/resources/custom/js/vp.js @@ -0,0 +1,3 @@ +/** + * Created by chris on 03.09.15. + */ diff --git a/scheduler/static/bootstrap/js/tests/vendor/jquery.min.js b/resources/jquery/js/jquery.min.js similarity index 100% rename from scheduler/static/bootstrap/js/tests/vendor/jquery.min.js rename to resources/jquery/js/jquery.min.js diff --git a/resources/typehead/js/typeahead.bundle.js b/resources/typehead/js/typeahead.bundle.js new file mode 100644 index 00000000..bb0c8aed --- /dev/null +++ b/resources/typehead/js/typeahead.bundle.js @@ -0,0 +1,2451 @@ +/*! + * typeahead.js 0.11.1 + * https://github.com/twitter/typeahead.js + * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT + */ + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define("bloodhound", [ "jquery" ], function(a0) { + return root["Bloodhound"] = factory(a0); + }); + } else if (typeof exports === "object") { + module.exports = factory(require("jquery")); + } else { + root["Bloodhound"] = factory(jQuery); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + noop: function() {} + }; + }(); + var VERSION = "0.11.1"; + var tokenizers = function() { + "use strict"; + return { + nonword: nonword, + whitespace: whitespace, + obj: { + nonword: getObjTokenizer(nonword), + whitespace: getObjTokenizer(whitespace) + } + }; + function whitespace(str) { + str = _.toStr(str); + return str ? str.split(/\s+/) : []; + } + function nonword(str) { + str = _.toStr(str); + return str ? str.split(/\W+/) : []; + } + function getObjTokenizer(tokenizer) { + return function setKey(keys) { + keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0); + return function tokenize(o) { + var tokens = []; + _.each(keys, function(k) { + tokens = tokens.concat(tokenizer(_.toStr(o[k]))); + }); + return tokens; + }; + }; + } + }(); + var LruCache = function() { + "use strict"; + function LruCache(maxSize) { + this.maxSize = _.isNumber(maxSize) ? maxSize : 100; + this.reset(); + if (this.maxSize <= 0) { + this.set = this.get = $.noop; + } + } + _.mixin(LruCache.prototype, { + set: function set(key, val) { + var tailItem = this.list.tail, node; + if (this.size >= this.maxSize) { + this.list.remove(tailItem); + delete this.hash[tailItem.key]; + this.size--; + } + if (node = this.hash[key]) { + node.val = val; + this.list.moveToFront(node); + } else { + node = new Node(key, val); + this.list.add(node); + this.hash[key] = node; + this.size++; + } + }, + get: function get(key) { + var node = this.hash[key]; + if (node) { + this.list.moveToFront(node); + return node.val; + } + }, + reset: function reset() { + this.size = 0; + this.hash = {}; + this.list = new List(); + } + }); + function List() { + this.head = this.tail = null; + } + _.mixin(List.prototype, { + add: function add(node) { + if (this.head) { + node.next = this.head; + this.head.prev = node; + } + this.head = node; + this.tail = this.tail || node; + }, + remove: function remove(node) { + node.prev ? node.prev.next = node.next : this.head = node.next; + node.next ? node.next.prev = node.prev : this.tail = node.prev; + }, + moveToFront: function(node) { + this.remove(node); + this.add(node); + } + }); + function Node(key, val) { + this.key = key; + this.val = val; + this.prev = this.next = null; + } + return LruCache; + }(); + var PersistentStorage = function() { + "use strict"; + var LOCAL_STORAGE; + try { + LOCAL_STORAGE = window.localStorage; + LOCAL_STORAGE.setItem("~~~", "!"); + LOCAL_STORAGE.removeItem("~~~"); + } catch (err) { + LOCAL_STORAGE = null; + } + function PersistentStorage(namespace, override) { + this.prefix = [ "__", namespace, "__" ].join(""); + this.ttlKey = "__ttl__"; + this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix)); + this.ls = override || LOCAL_STORAGE; + !this.ls && this._noop(); + } + _.mixin(PersistentStorage.prototype, { + _prefix: function(key) { + return this.prefix + key; + }, + _ttlKey: function(key) { + return this._prefix(key) + this.ttlKey; + }, + _noop: function() { + this.get = this.set = this.remove = this.clear = this.isExpired = _.noop; + }, + _safeSet: function(key, val) { + try { + this.ls.setItem(key, val); + } catch (err) { + if (err.name === "QuotaExceededError") { + this.clear(); + this._noop(); + } + } + }, + get: function(key) { + if (this.isExpired(key)) { + this.remove(key); + } + return decode(this.ls.getItem(this._prefix(key))); + }, + set: function(key, val, ttl) { + if (_.isNumber(ttl)) { + this._safeSet(this._ttlKey(key), encode(now() + ttl)); + } else { + this.ls.removeItem(this._ttlKey(key)); + } + return this._safeSet(this._prefix(key), encode(val)); + }, + remove: function(key) { + this.ls.removeItem(this._ttlKey(key)); + this.ls.removeItem(this._prefix(key)); + return this; + }, + clear: function() { + var i, keys = gatherMatchingKeys(this.keyMatcher); + for (i = keys.length; i--; ) { + this.remove(keys[i]); + } + return this; + }, + isExpired: function(key) { + var ttl = decode(this.ls.getItem(this._ttlKey(key))); + return _.isNumber(ttl) && now() > ttl ? true : false; + } + }); + return PersistentStorage; + function now() { + return new Date().getTime(); + } + function encode(val) { + return JSON.stringify(_.isUndefined(val) ? null : val); + } + function decode(val) { + return $.parseJSON(val); + } + function gatherMatchingKeys(keyMatcher) { + var i, key, keys = [], len = LOCAL_STORAGE.length; + for (i = 0; i < len; i++) { + if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) { + keys.push(key.replace(keyMatcher, "")); + } + } + return keys; + } + }(); + var Transport = function() { + "use strict"; + var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10); + function Transport(o) { + o = o || {}; + this.cancelled = false; + this.lastReq = null; + this._send = o.transport; + this._get = o.limiter ? o.limiter(this._get) : this._get; + this._cache = o.cache === false ? new LruCache(0) : sharedCache; + } + Transport.setMaxPendingRequests = function setMaxPendingRequests(num) { + maxPendingRequests = num; + }; + Transport.resetCache = function resetCache() { + sharedCache.reset(); + }; + _.mixin(Transport.prototype, { + _fingerprint: function fingerprint(o) { + o = o || {}; + return o.url + o.type + $.param(o.data || {}); + }, + _get: function(o, cb) { + var that = this, fingerprint, jqXhr; + fingerprint = this._fingerprint(o); + if (this.cancelled || fingerprint !== this.lastReq) { + return; + } + if (jqXhr = pendingRequests[fingerprint]) { + jqXhr.done(done).fail(fail); + } else if (pendingRequestsCount < maxPendingRequests) { + pendingRequestsCount++; + pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always); + } else { + this.onDeckRequestArgs = [].slice.call(arguments, 0); + } + function done(resp) { + cb(null, resp); + that._cache.set(fingerprint, resp); + } + function fail() { + cb(true); + } + function always() { + pendingRequestsCount--; + delete pendingRequests[fingerprint]; + if (that.onDeckRequestArgs) { + that._get.apply(that, that.onDeckRequestArgs); + that.onDeckRequestArgs = null; + } + } + }, + get: function(o, cb) { + var resp, fingerprint; + cb = cb || $.noop; + o = _.isString(o) ? { + url: o + } : o || {}; + fingerprint = this._fingerprint(o); + this.cancelled = false; + this.lastReq = fingerprint; + if (resp = this._cache.get(fingerprint)) { + cb(null, resp); + } else { + this._get(o, cb); + } + }, + cancel: function() { + this.cancelled = true; + } + }); + return Transport; + }(); + var SearchIndex = window.SearchIndex = function() { + "use strict"; + var CHILDREN = "c", IDS = "i"; + function SearchIndex(o) { + o = o || {}; + if (!o.datumTokenizer || !o.queryTokenizer) { + $.error("datumTokenizer and queryTokenizer are both required"); + } + this.identify = o.identify || _.stringify; + this.datumTokenizer = o.datumTokenizer; + this.queryTokenizer = o.queryTokenizer; + this.reset(); + } + _.mixin(SearchIndex.prototype, { + bootstrap: function bootstrap(o) { + this.datums = o.datums; + this.trie = o.trie; + }, + add: function(data) { + var that = this; + data = _.isArray(data) ? data : [ data ]; + _.each(data, function(datum) { + var id, tokens; + that.datums[id = that.identify(datum)] = datum; + tokens = normalizeTokens(that.datumTokenizer(datum)); + _.each(tokens, function(token) { + var node, chars, ch; + node = that.trie; + chars = token.split(""); + while (ch = chars.shift()) { + node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode()); + node[IDS].push(id); + } + }); + }); + }, + get: function get(ids) { + var that = this; + return _.map(ids, function(id) { + return that.datums[id]; + }); + }, + search: function search(query) { + var that = this, tokens, matches; + tokens = normalizeTokens(this.queryTokenizer(query)); + _.each(tokens, function(token) { + var node, chars, ch, ids; + if (matches && matches.length === 0) { + return false; + } + node = that.trie; + chars = token.split(""); + while (node && (ch = chars.shift())) { + node = node[CHILDREN][ch]; + } + if (node && chars.length === 0) { + ids = node[IDS].slice(0); + matches = matches ? getIntersection(matches, ids) : ids; + } else { + matches = []; + return false; + } + }); + return matches ? _.map(unique(matches), function(id) { + return that.datums[id]; + }) : []; + }, + all: function all() { + var values = []; + for (var key in this.datums) { + values.push(this.datums[key]); + } + return values; + }, + reset: function reset() { + this.datums = {}; + this.trie = newNode(); + }, + serialize: function serialize() { + return { + datums: this.datums, + trie: this.trie + }; + } + }); + return SearchIndex; + function normalizeTokens(tokens) { + tokens = _.filter(tokens, function(token) { + return !!token; + }); + tokens = _.map(tokens, function(token) { + return token.toLowerCase(); + }); + return tokens; + } + function newNode() { + var node = {}; + node[IDS] = []; + node[CHILDREN] = {}; + return node; + } + function unique(array) { + var seen = {}, uniques = []; + for (var i = 0, len = array.length; i < len; i++) { + if (!seen[array[i]]) { + seen[array[i]] = true; + uniques.push(array[i]); + } + } + return uniques; + } + function getIntersection(arrayA, arrayB) { + var ai = 0, bi = 0, intersection = []; + arrayA = arrayA.sort(); + arrayB = arrayB.sort(); + var lenArrayA = arrayA.length, lenArrayB = arrayB.length; + while (ai < lenArrayA && bi < lenArrayB) { + if (arrayA[ai] < arrayB[bi]) { + ai++; + } else if (arrayA[ai] > arrayB[bi]) { + bi++; + } else { + intersection.push(arrayA[ai]); + ai++; + bi++; + } + } + return intersection; + } + }(); + var Prefetch = function() { + "use strict"; + var keys; + keys = { + data: "data", + protocol: "protocol", + thumbprint: "thumbprint" + }; + function Prefetch(o) { + this.url = o.url; + this.ttl = o.ttl; + this.cache = o.cache; + this.prepare = o.prepare; + this.transform = o.transform; + this.transport = o.transport; + this.thumbprint = o.thumbprint; + this.storage = new PersistentStorage(o.cacheKey); + } + _.mixin(Prefetch.prototype, { + _settings: function settings() { + return { + url: this.url, + type: "GET", + dataType: "json" + }; + }, + store: function store(data) { + if (!this.cache) { + return; + } + this.storage.set(keys.data, data, this.ttl); + this.storage.set(keys.protocol, location.protocol, this.ttl); + this.storage.set(keys.thumbprint, this.thumbprint, this.ttl); + }, + fromCache: function fromCache() { + var stored = {}, isExpired; + if (!this.cache) { + return null; + } + stored.data = this.storage.get(keys.data); + stored.protocol = this.storage.get(keys.protocol); + stored.thumbprint = this.storage.get(keys.thumbprint); + isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol; + return stored.data && !isExpired ? stored.data : null; + }, + fromNetwork: function(cb) { + var that = this, settings; + if (!cb) { + return; + } + settings = this.prepare(this._settings()); + this.transport(settings).fail(onError).done(onResponse); + function onError() { + cb(true); + } + function onResponse(resp) { + cb(null, that.transform(resp)); + } + }, + clear: function clear() { + this.storage.clear(); + return this; + } + }); + return Prefetch; + }(); + var Remote = function() { + "use strict"; + function Remote(o) { + this.url = o.url; + this.prepare = o.prepare; + this.transform = o.transform; + this.transport = new Transport({ + cache: o.cache, + limiter: o.limiter, + transport: o.transport + }); + } + _.mixin(Remote.prototype, { + _settings: function settings() { + return { + url: this.url, + type: "GET", + dataType: "json" + }; + }, + get: function get(query, cb) { + var that = this, settings; + if (!cb) { + return; + } + query = query || ""; + settings = this.prepare(query, this._settings()); + return this.transport.get(settings, onResponse); + function onResponse(err, resp) { + err ? cb([]) : cb(that.transform(resp)); + } + }, + cancelLastRequest: function cancelLastRequest() { + this.transport.cancel(); + } + }); + return Remote; + }(); + var oParser = function() { + "use strict"; + return function parse(o) { + var defaults, sorter; + defaults = { + initialize: true, + identify: _.stringify, + datumTokenizer: null, + queryTokenizer: null, + sufficient: 5, + sorter: null, + local: [], + prefetch: null, + remote: null + }; + o = _.mixin(defaults, o || {}); + !o.datumTokenizer && $.error("datumTokenizer is required"); + !o.queryTokenizer && $.error("queryTokenizer is required"); + sorter = o.sorter; + o.sorter = sorter ? function(x) { + return x.sort(sorter); + } : _.identity; + o.local = _.isFunction(o.local) ? o.local() : o.local; + o.prefetch = parsePrefetch(o.prefetch); + o.remote = parseRemote(o.remote); + return o; + }; + function parsePrefetch(o) { + var defaults; + if (!o) { + return null; + } + defaults = { + url: null, + ttl: 24 * 60 * 60 * 1e3, + cache: true, + cacheKey: null, + thumbprint: "", + prepare: _.identity, + transform: _.identity, + transport: null + }; + o = _.isString(o) ? { + url: o + } : o; + o = _.mixin(defaults, o); + !o.url && $.error("prefetch requires url to be set"); + o.transform = o.filter || o.transform; + o.cacheKey = o.cacheKey || o.url; + o.thumbprint = VERSION + o.thumbprint; + o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax; + return o; + } + function parseRemote(o) { + var defaults; + if (!o) { + return; + } + defaults = { + url: null, + cache: true, + prepare: null, + replace: null, + wildcard: null, + limiter: null, + rateLimitBy: "debounce", + rateLimitWait: 300, + transform: _.identity, + transport: null + }; + o = _.isString(o) ? { + url: o + } : o; + o = _.mixin(defaults, o); + !o.url && $.error("remote requires url to be set"); + o.transform = o.filter || o.transform; + o.prepare = toRemotePrepare(o); + o.limiter = toLimiter(o); + o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax; + delete o.replace; + delete o.wildcard; + delete o.rateLimitBy; + delete o.rateLimitWait; + return o; + } + function toRemotePrepare(o) { + var prepare, replace, wildcard; + prepare = o.prepare; + replace = o.replace; + wildcard = o.wildcard; + if (prepare) { + return prepare; + } + if (replace) { + prepare = prepareByReplace; + } else if (o.wildcard) { + prepare = prepareByWildcard; + } else { + prepare = idenityPrepare; + } + return prepare; + function prepareByReplace(query, settings) { + settings.url = replace(settings.url, query); + return settings; + } + function prepareByWildcard(query, settings) { + settings.url = settings.url.replace(wildcard, encodeURIComponent(query)); + return settings; + } + function idenityPrepare(query, settings) { + return settings; + } + } + function toLimiter(o) { + var limiter, method, wait; + limiter = o.limiter; + method = o.rateLimitBy; + wait = o.rateLimitWait; + if (!limiter) { + limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait); + } + return limiter; + function debounce(wait) { + return function debounce(fn) { + return _.debounce(fn, wait); + }; + } + function throttle(wait) { + return function throttle(fn) { + return _.throttle(fn, wait); + }; + } + } + function callbackToDeferred(fn) { + return function wrapper(o) { + var deferred = $.Deferred(); + fn(o, onSuccess, onError); + return deferred; + function onSuccess(resp) { + _.defer(function() { + deferred.resolve(resp); + }); + } + function onError(err) { + _.defer(function() { + deferred.reject(err); + }); + } + }; + } + }(); + var Bloodhound = function() { + "use strict"; + var old; + old = window && window.Bloodhound; + function Bloodhound(o) { + o = oParser(o); + this.sorter = o.sorter; + this.identify = o.identify; + this.sufficient = o.sufficient; + this.local = o.local; + this.remote = o.remote ? new Remote(o.remote) : null; + this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null; + this.index = new SearchIndex({ + identify: this.identify, + datumTokenizer: o.datumTokenizer, + queryTokenizer: o.queryTokenizer + }); + o.initialize !== false && this.initialize(); + } + Bloodhound.noConflict = function noConflict() { + window && (window.Bloodhound = old); + return Bloodhound; + }; + Bloodhound.tokenizers = tokenizers; + _.mixin(Bloodhound.prototype, { + __ttAdapter: function ttAdapter() { + var that = this; + return this.remote ? withAsync : withoutAsync; + function withAsync(query, sync, async) { + return that.search(query, sync, async); + } + function withoutAsync(query, sync) { + return that.search(query, sync); + } + }, + _loadPrefetch: function loadPrefetch() { + var that = this, deferred, serialized; + deferred = $.Deferred(); + if (!this.prefetch) { + deferred.resolve(); + } else if (serialized = this.prefetch.fromCache()) { + this.index.bootstrap(serialized); + deferred.resolve(); + } else { + this.prefetch.fromNetwork(done); + } + return deferred.promise(); + function done(err, data) { + if (err) { + return deferred.reject(); + } + that.add(data); + that.prefetch.store(that.index.serialize()); + deferred.resolve(); + } + }, + _initialize: function initialize() { + var that = this, deferred; + this.clear(); + (this.initPromise = this._loadPrefetch()).done(addLocalToIndex); + return this.initPromise; + function addLocalToIndex() { + that.add(that.local); + } + }, + initialize: function initialize(force) { + return !this.initPromise || force ? this._initialize() : this.initPromise; + }, + add: function add(data) { + this.index.add(data); + return this; + }, + get: function get(ids) { + ids = _.isArray(ids) ? ids : [].slice.call(arguments); + return this.index.get(ids); + }, + search: function search(query, sync, async) { + var that = this, local; + local = this.sorter(this.index.search(query)); + sync(this.remote ? local.slice() : local); + if (this.remote && local.length < this.sufficient) { + this.remote.get(query, processRemote); + } else if (this.remote) { + this.remote.cancelLastRequest(); + } + return this; + function processRemote(remote) { + var nonDuplicates = []; + _.each(remote, function(r) { + !_.some(local, function(l) { + return that.identify(r) === that.identify(l); + }) && nonDuplicates.push(r); + }); + async && async(nonDuplicates); + } + }, + all: function all() { + return this.index.all(); + }, + clear: function clear() { + this.index.reset(); + return this; + }, + clearPrefetchCache: function clearPrefetchCache() { + this.prefetch && this.prefetch.clear(); + return this; + }, + clearRemoteCache: function clearRemoteCache() { + Transport.resetCache(); + return this; + }, + ttAdapter: function ttAdapter() { + return this.__ttAdapter(); + } + }); + return Bloodhound; + }(); + return Bloodhound; +}); + +(function(root, factory) { + if (typeof define === "function" && define.amd) { + define("typeahead.js", [ "jquery" ], function(a0) { + return factory(a0); + }); + } else if (typeof exports === "object") { + module.exports = factory(require("jquery")); + } else { + factory(jQuery); + } +})(this, function($) { + var _ = function() { + "use strict"; + return { + isMsie: function() { + return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false; + }, + isBlankString: function(str) { + return !str || /^\s*$/.test(str); + }, + escapeRegExChars: function(str) { + return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); + }, + isString: function(obj) { + return typeof obj === "string"; + }, + isNumber: function(obj) { + return typeof obj === "number"; + }, + isArray: $.isArray, + isFunction: $.isFunction, + isObject: $.isPlainObject, + isUndefined: function(obj) { + return typeof obj === "undefined"; + }, + isElement: function(obj) { + return !!(obj && obj.nodeType === 1); + }, + isJQuery: function(obj) { + return obj instanceof $; + }, + toStr: function toStr(s) { + return _.isUndefined(s) || s === null ? "" : s + ""; + }, + bind: $.proxy, + each: function(collection, cb) { + $.each(collection, reverseArgs); + function reverseArgs(index, value) { + return cb(value, index); + } + }, + map: $.map, + filter: $.grep, + every: function(obj, test) { + var result = true; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (!(result = test.call(null, val, key, obj))) { + return false; + } + }); + return !!result; + }, + some: function(obj, test) { + var result = false; + if (!obj) { + return result; + } + $.each(obj, function(key, val) { + if (result = test.call(null, val, key, obj)) { + return false; + } + }); + return !!result; + }, + mixin: $.extend, + identity: function(x) { + return x; + }, + clone: function(obj) { + return $.extend(true, {}, obj); + }, + getIdGenerator: function() { + var counter = 0; + return function() { + return counter++; + }; + }, + templatify: function templatify(obj) { + return $.isFunction(obj) ? obj : template; + function template() { + return String(obj); + } + }, + defer: function(fn) { + setTimeout(fn, 0); + }, + debounce: function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments, later, callNow; + later = function() { + timeout = null; + if (!immediate) { + result = func.apply(context, args); + } + }; + callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) { + result = func.apply(context, args); + } + return result; + }; + }, + throttle: function(func, wait) { + var context, args, timeout, result, previous, later; + previous = 0; + later = function() { + previous = new Date(); + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date(), remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }, + stringify: function(val) { + return _.isString(val) ? val : JSON.stringify(val); + }, + noop: function() {} + }; + }(); + var WWW = function() { + "use strict"; + var defaultClassNames = { + wrapper: "twitter-typeahead", + input: "tt-input", + hint: "tt-hint", + menu: "tt-menu", + dataset: "tt-dataset", + suggestion: "tt-suggestion", + selectable: "tt-selectable", + empty: "tt-empty", + open: "tt-open", + cursor: "tt-cursor", + highlight: "tt-highlight" + }; + return build; + function build(o) { + var www, classes; + classes = _.mixin({}, defaultClassNames, o); + www = { + css: buildCss(), + classes: classes, + html: buildHtml(classes), + selectors: buildSelectors(classes) + }; + return { + css: www.css, + html: www.html, + classes: www.classes, + selectors: www.selectors, + mixin: function(o) { + _.mixin(o, www); + } + }; + } + function buildHtml(c) { + return { + wrapper: '', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e; + $e = $.Event(namespace + type); + (args = args || []).unshift($e); + this.$el.trigger.apply(this.$el, args); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function getRegex(patterns, caseSensitive, wordsOnly) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + escapedPatterns.push(_.escapeRegExChars(patterns[i])); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = o.name || nameGenerator(); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", this.name, suggestions, false); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", this.name, suggestions, true); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + rendered += suggestions.length; + that._append(query, suggestions.slice(0, that.limit - rendered)); + that.async && that.trigger("asyncReceived", query); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion || suggestionTemplate + }; + function suggestionTemplate(context) { + return $("
").text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, isDatasetEmpty); + function isDatasetEmpty(dataset) { + return dataset.isEmpty(); + } + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) { + this._updateHint(); + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, payload, cancelMove; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + payload = data ? data.obj : null; + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", payload)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", payload); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(newVal); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({ + autocomplete: "off", + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + autocomplete: "off", + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/resources/typehead/js/typeahead.bundle.min.js b/resources/typehead/js/typeahead.bundle.min.js new file mode 100644 index 00000000..ffd98f32 --- /dev/null +++ b/resources/typehead/js/typeahead.bundle.min.js @@ -0,0 +1,8 @@ +/*! + * typeahead.js 0.11.1 + * https://github.com/twitter/typeahead.js + * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT + */ + +!function(a,b){"function"==typeof define&&define.amd?define("bloodhound",["jquery"],function(c){return a.Bloodhound=b(c)}):"object"==typeof exports?module.exports=b(require("jquery")):a.Bloodhound=b(jQuery)}(this,function(a){var b=function(){"use strict";return{isMsie:function(){return/(msie|trident)/i.test(navigator.userAgent)?navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2]:!1},isBlankString:function(a){return!a||/^\s*$/.test(a)},escapeRegExChars:function(a){return a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")},isString:function(a){return"string"==typeof a},isNumber:function(a){return"number"==typeof a},isArray:a.isArray,isFunction:a.isFunction,isObject:a.isPlainObject,isUndefined:function(a){return"undefined"==typeof a},isElement:function(a){return!(!a||1!==a.nodeType)},isJQuery:function(b){return b instanceof a},toStr:function(a){return b.isUndefined(a)||null===a?"":a+""},bind:a.proxy,each:function(b,c){function d(a,b){return c(b,a)}a.each(b,d)},map:a.map,filter:a.grep,every:function(b,c){var d=!0;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?void 0:!1}),!!d):d},some:function(b,c){var d=!1;return b?(a.each(b,function(a,e){return(d=c.call(null,e,a,b))?!1:void 0}),!!d):d},mixin:a.extend,identity:function(a){return a},clone:function(b){return a.extend(!0,{},b)},getIdGenerator:function(){var a=0;return function(){return a++}},templatify:function(b){function c(){return String(b)}return a.isFunction(b)?b:c},defer:function(a){setTimeout(a,0)},debounce:function(a,b,c){var d,e;return function(){var f,g,h=this,i=arguments;return f=function(){d=null,c||(e=a.apply(h,i))},g=c&&!d,clearTimeout(d),d=setTimeout(f,b),g&&(e=a.apply(h,i)),e}},throttle:function(a,b){var c,d,e,f,g,h;return g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)},function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,0>=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},stringify:function(a){return b.isString(a)?a:JSON.stringify(a)},noop:function(){}}}(),c="0.11.1",d=function(){"use strict";function a(a){return a=b.toStr(a),a?a.split(/\s+/):[]}function c(a){return a=b.toStr(a),a?a.split(/\W+/):[]}function d(a){return function(c){return c=b.isArray(c)?c:[].slice.call(arguments,0),function(d){var e=[];return b.each(c,function(c){e=e.concat(a(b.toStr(d[c])))}),e}}}return{nonword:c,whitespace:a,obj:{nonword:d(c),whitespace:d(a)}}}(),e=function(){"use strict";function c(c){this.maxSize=b.isNumber(c)?c:100,this.reset(),this.maxSize<=0&&(this.set=this.get=a.noop)}function d(){this.head=this.tail=null}function e(a,b){this.key=a,this.val=b,this.prev=this.next=null}return b.mixin(c.prototype,{set:function(a,b){var c,d=this.list.tail;this.size>=this.maxSize&&(this.list.remove(d),delete this.hash[d.key],this.size--),(c=this.hash[a])?(c.val=b,this.list.moveToFront(c)):(c=new e(a,b),this.list.add(c),this.hash[a]=c,this.size++)},get:function(a){var b=this.hash[a];return b?(this.list.moveToFront(b),b.val):void 0},reset:function(){this.size=0,this.hash={},this.list=new d}}),b.mixin(d.prototype,{add:function(a){this.head&&(a.next=this.head,this.head.prev=a),this.head=a,this.tail=this.tail||a},remove:function(a){a.prev?a.prev.next=a.next:this.head=a.next,a.next?a.next.prev=a.prev:this.tail=a.prev},moveToFront:function(a){this.remove(a),this.add(a)}}),c}(),f=function(){"use strict";function c(a,c){this.prefix=["__",a,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=new RegExp("^"+b.escapeRegExChars(this.prefix)),this.ls=c||h,!this.ls&&this._noop()}function d(){return(new Date).getTime()}function e(a){return JSON.stringify(b.isUndefined(a)?null:a)}function f(b){return a.parseJSON(b)}function g(a){var b,c,d=[],e=h.length;for(b=0;e>b;b++)(c=h.key(b)).match(a)&&d.push(c.replace(a,""));return d}var h;try{h=window.localStorage,h.setItem("~~~","!"),h.removeItem("~~~")}catch(i){h=null}return b.mixin(c.prototype,{_prefix:function(a){return this.prefix+a},_ttlKey:function(a){return this._prefix(a)+this.ttlKey},_noop:function(){this.get=this.set=this.remove=this.clear=this.isExpired=b.noop},_safeSet:function(a,b){try{this.ls.setItem(a,b)}catch(c){"QuotaExceededError"===c.name&&(this.clear(),this._noop())}},get:function(a){return this.isExpired(a)&&this.remove(a),f(this.ls.getItem(this._prefix(a)))},set:function(a,c,f){return b.isNumber(f)?this._safeSet(this._ttlKey(a),e(d()+f)):this.ls.removeItem(this._ttlKey(a)),this._safeSet(this._prefix(a),e(c))},remove:function(a){return this.ls.removeItem(this._ttlKey(a)),this.ls.removeItem(this._prefix(a)),this},clear:function(){var a,b=g(this.keyMatcher);for(a=b.length;a--;)this.remove(b[a]);return this},isExpired:function(a){var c=f(this.ls.getItem(this._ttlKey(a)));return b.isNumber(c)&&d()>c?!0:!1}}),c}(),g=function(){"use strict";function c(a){a=a||{},this.cancelled=!1,this.lastReq=null,this._send=a.transport,this._get=a.limiter?a.limiter(this._get):this._get,this._cache=a.cache===!1?new e(0):h}var d=0,f={},g=6,h=new e(10);return c.setMaxPendingRequests=function(a){g=a},c.resetCache=function(){h.reset()},b.mixin(c.prototype,{_fingerprint:function(b){return b=b||{},b.url+b.type+a.param(b.data||{})},_get:function(a,b){function c(a){b(null,a),k._cache.set(i,a)}function e(){b(!0)}function h(){d--,delete f[i],k.onDeckRequestArgs&&(k._get.apply(k,k.onDeckRequestArgs),k.onDeckRequestArgs=null)}var i,j,k=this;i=this._fingerprint(a),this.cancelled||i!==this.lastReq||((j=f[i])?j.done(c).fail(e):g>d?(d++,f[i]=this._send(a).done(c).fail(e).always(h)):this.onDeckRequestArgs=[].slice.call(arguments,0))},get:function(c,d){var e,f;d=d||a.noop,c=b.isString(c)?{url:c}:c||{},f=this._fingerprint(c),this.cancelled=!1,this.lastReq=f,(e=this._cache.get(f))?d(null,e):this._get(c,d)},cancel:function(){this.cancelled=!0}}),c}(),h=window.SearchIndex=function(){"use strict";function c(c){c=c||{},c.datumTokenizer&&c.queryTokenizer||a.error("datumTokenizer and queryTokenizer are both required"),this.identify=c.identify||b.stringify,this.datumTokenizer=c.datumTokenizer,this.queryTokenizer=c.queryTokenizer,this.reset()}function d(a){return a=b.filter(a,function(a){return!!a}),a=b.map(a,function(a){return a.toLowerCase()})}function e(){var a={};return a[i]=[],a[h]={},a}function f(a){for(var b={},c=[],d=0,e=a.length;e>d;d++)b[a[d]]||(b[a[d]]=!0,c.push(a[d]));return c}function g(a,b){var c=0,d=0,e=[];a=a.sort(),b=b.sort();for(var f=a.length,g=b.length;f>c&&g>d;)a[c]b[d]?d++:(e.push(a[c]),c++,d++);return e}var h="c",i="i";return b.mixin(c.prototype,{bootstrap:function(a){this.datums=a.datums,this.trie=a.trie},add:function(a){var c=this;a=b.isArray(a)?a:[a],b.each(a,function(a){var f,g;c.datums[f=c.identify(a)]=a,g=d(c.datumTokenizer(a)),b.each(g,function(a){var b,d,g;for(b=c.trie,d=a.split("");g=d.shift();)b=b[h][g]||(b[h][g]=e()),b[i].push(f)})})},get:function(a){var c=this;return b.map(a,function(a){return c.datums[a]})},search:function(a){var c,e,j=this;return c=d(this.queryTokenizer(a)),b.each(c,function(a){var b,c,d,f;if(e&&0===e.length)return!1;for(b=j.trie,c=a.split("");b&&(d=c.shift());)b=b[h][d];return b&&0===c.length?(f=b[i].slice(0),void(e=e?g(e,f):f)):(e=[],!1)}),e?b.map(f(e),function(a){return j.datums[a]}):[]},all:function(){var a=[];for(var b in this.datums)a.push(this.datums[b]);return a},reset:function(){this.datums={},this.trie=e()},serialize:function(){return{datums:this.datums,trie:this.trie}}}),c}(),i=function(){"use strict";function a(a){this.url=a.url,this.ttl=a.ttl,this.cache=a.cache,this.prepare=a.prepare,this.transform=a.transform,this.transport=a.transport,this.thumbprint=a.thumbprint,this.storage=new f(a.cacheKey)}var c;return c={data:"data",protocol:"protocol",thumbprint:"thumbprint"},b.mixin(a.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},store:function(a){this.cache&&(this.storage.set(c.data,a,this.ttl),this.storage.set(c.protocol,location.protocol,this.ttl),this.storage.set(c.thumbprint,this.thumbprint,this.ttl))},fromCache:function(){var a,b={};return this.cache?(b.data=this.storage.get(c.data),b.protocol=this.storage.get(c.protocol),b.thumbprint=this.storage.get(c.thumbprint),a=b.thumbprint!==this.thumbprint||b.protocol!==location.protocol,b.data&&!a?b.data:null):null},fromNetwork:function(a){function b(){a(!0)}function c(b){a(null,e.transform(b))}var d,e=this;a&&(d=this.prepare(this._settings()),this.transport(d).fail(b).done(c))},clear:function(){return this.storage.clear(),this}}),a}(),j=function(){"use strict";function a(a){this.url=a.url,this.prepare=a.prepare,this.transform=a.transform,this.transport=new g({cache:a.cache,limiter:a.limiter,transport:a.transport})}return b.mixin(a.prototype,{_settings:function(){return{url:this.url,type:"GET",dataType:"json"}},get:function(a,b){function c(a,c){b(a?[]:e.transform(c))}var d,e=this;if(b)return a=a||"",d=this.prepare(a,this._settings()),this.transport.get(d,c)},cancelLastRequest:function(){this.transport.cancel()}}),a}(),k=function(){"use strict";function d(d){var e;return d?(e={url:null,ttl:864e5,cache:!0,cacheKey:null,thumbprint:"",prepare:b.identity,transform:b.identity,transport:null},d=b.isString(d)?{url:d}:d,d=b.mixin(e,d),!d.url&&a.error("prefetch requires url to be set"),d.transform=d.filter||d.transform,d.cacheKey=d.cacheKey||d.url,d.thumbprint=c+d.thumbprint,d.transport=d.transport?h(d.transport):a.ajax,d):null}function e(c){var d;if(c)return d={url:null,cache:!0,prepare:null,replace:null,wildcard:null,limiter:null,rateLimitBy:"debounce",rateLimitWait:300,transform:b.identity,transport:null},c=b.isString(c)?{url:c}:c,c=b.mixin(d,c),!c.url&&a.error("remote requires url to be set"),c.transform=c.filter||c.transform,c.prepare=f(c),c.limiter=g(c),c.transport=c.transport?h(c.transport):a.ajax,delete c.replace,delete c.wildcard,delete c.rateLimitBy,delete c.rateLimitWait,c}function f(a){function b(a,b){return b.url=f(b.url,a),b}function c(a,b){return b.url=b.url.replace(g,encodeURIComponent(a)),b}function d(a,b){return b}var e,f,g;return e=a.prepare,f=a.replace,g=a.wildcard,e?e:e=f?b:a.wildcard?c:d}function g(a){function c(a){return function(c){return b.debounce(c,a)}}function d(a){return function(c){return b.throttle(c,a)}}var e,f,g;return e=a.limiter,f=a.rateLimitBy,g=a.rateLimitWait,e||(e=/^throttle$/i.test(f)?d(g):c(g)),e}function h(c){return function(d){function e(a){b.defer(function(){g.resolve(a)})}function f(a){b.defer(function(){g.reject(a)})}var g=a.Deferred();return c(d,e,f),g}}return function(c){var f,g;return f={initialize:!0,identify:b.stringify,datumTokenizer:null,queryTokenizer:null,sufficient:5,sorter:null,local:[],prefetch:null,remote:null},c=b.mixin(f,c||{}),!c.datumTokenizer&&a.error("datumTokenizer is required"),!c.queryTokenizer&&a.error("queryTokenizer is required"),g=c.sorter,c.sorter=g?function(a){return a.sort(g)}:b.identity,c.local=b.isFunction(c.local)?c.local():c.local,c.prefetch=d(c.prefetch),c.remote=e(c.remote),c}}(),l=function(){"use strict";function c(a){a=k(a),this.sorter=a.sorter,this.identify=a.identify,this.sufficient=a.sufficient,this.local=a.local,this.remote=a.remote?new j(a.remote):null,this.prefetch=a.prefetch?new i(a.prefetch):null,this.index=new h({identify:this.identify,datumTokenizer:a.datumTokenizer,queryTokenizer:a.queryTokenizer}),a.initialize!==!1&&this.initialize()}var e;return e=window&&window.Bloodhound,c.noConflict=function(){return window&&(window.Bloodhound=e),c},c.tokenizers=d,b.mixin(c.prototype,{__ttAdapter:function(){function a(a,b,d){return c.search(a,b,d)}function b(a,b){return c.search(a,b)}var c=this;return this.remote?a:b},_loadPrefetch:function(){function b(a,b){return a?c.reject():(e.add(b),e.prefetch.store(e.index.serialize()),void c.resolve())}var c,d,e=this;return c=a.Deferred(),this.prefetch?(d=this.prefetch.fromCache())?(this.index.bootstrap(d),c.resolve()):this.prefetch.fromNetwork(b):c.resolve(),c.promise()},_initialize:function(){function a(){b.add(b.local)}var b=this;return this.clear(),(this.initPromise=this._loadPrefetch()).done(a),this.initPromise},initialize:function(a){return!this.initPromise||a?this._initialize():this.initPromise},add:function(a){return this.index.add(a),this},get:function(a){return a=b.isArray(a)?a:[].slice.call(arguments),this.index.get(a)},search:function(a,c,d){function e(a){var c=[];b.each(a,function(a){!b.some(f,function(b){return g.identify(a)===g.identify(b)})&&c.push(a)}),d&&d(c)}var f,g=this;return f=this.sorter(this.index.search(a)),c(this.remote?f.slice():f),this.remote&&f.length=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},stringify:function(a){return b.isString(a)?a:JSON.stringify(a)},noop:function(){}}}(),c=function(){"use strict";function a(a){var g,h;return h=b.mixin({},f,a),g={css:e(),classes:h,html:c(h),selectors:d(h)},{css:g.css,html:g.html,classes:g.classes,selectors:g.selectors,mixin:function(a){b.mixin(a,g)}}}function c(a){return{wrapper:'',menu:'
'}}function d(a){var c={};return b.each(a,function(a,b){c[b]="."+a}),c}function e(){var a={wrapper:{position:"relative",display:"inline-block"},hint:{position:"absolute",top:"0",left:"0",borderColor:"transparent",boxShadow:"none",opacity:"1"},input:{position:"relative",verticalAlign:"top",backgroundColor:"transparent"},inputWithNoHint:{position:"relative",verticalAlign:"top"},menu:{position:"absolute",top:"100%",left:"0",zIndex:"100",display:"none"},ltr:{left:"0",right:"auto"},rtl:{left:"auto",right:" 0"}};return b.isMsie()&&b.mixin(a.input,{backgroundImage:"url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"}),a}var f={wrapper:"twitter-typeahead",input:"tt-input",hint:"tt-hint",menu:"tt-menu",dataset:"tt-dataset",suggestion:"tt-suggestion",selectable:"tt-selectable",empty:"tt-empty",open:"tt-open",cursor:"tt-cursor",highlight:"tt-highlight"};return a}(),d=function(){"use strict";function c(b){b&&b.el||a.error("EventBus initialized without el"),this.$el=a(b.el)}var d,e;return d="typeahead:",e={render:"rendered",cursorchange:"cursorchanged",select:"selected",autocomplete:"autocompleted"},b.mixin(c.prototype,{_trigger:function(b,c){var e;return e=a.Event(d+b),(c=c||[]).unshift(e),this.$el.trigger.apply(this.$el,c),e},before:function(a){var b,c;return b=[].slice.call(arguments,1),c=this._trigger("before"+a,b),c.isDefaultPrevented()},trigger:function(a){var b;this._trigger(a,[].slice.call(arguments,1)),(b=e[a])&&this._trigger(b,[].slice.call(arguments,1))}}),c}(),e=function(){"use strict";function a(a,b,c,d){var e;if(!c)return this;for(b=b.split(i),c=d?h(c,d):c,this._callbacks=this._callbacks||{};e=b.shift();)this._callbacks[e]=this._callbacks[e]||{sync:[],async:[]},this._callbacks[e][a].push(c);return this}function b(b,c,d){return a.call(this,"async",b,c,d)}function c(b,c,d){return a.call(this,"sync",b,c,d)}function d(a){var b;if(!this._callbacks)return this;for(a=a.split(i);b=a.shift();)delete this._callbacks[b];return this}function e(a){var b,c,d,e,g;if(!this._callbacks)return this;for(a=a.split(i),d=[].slice.call(arguments,1);(b=a.shift())&&(c=this._callbacks[b]);)e=f(c.sync,this,[b].concat(d)),g=f(c.async,this,[b].concat(d)),e()&&j(g);return this}function f(a,b,c){function d(){for(var d,e=0,f=a.length;!d&&f>e;e+=1)d=a[e].apply(b,c)===!1;return!d}return d}function g(){var a;return a=window.setImmediate?function(a){setImmediate(function(){a()})}:function(a){setTimeout(function(){a()},0)}}function h(a,b){return a.bind?a.bind(b):function(){a.apply(b,[].slice.call(arguments,0))}}var i=/\s+/,j=g();return{onSync:c,onAsync:b,off:d,trigger:e}}(),f=function(a){"use strict";function c(a,c,d){for(var e,f=[],g=0,h=a.length;h>g;g++)f.push(b.escapeRegExChars(a[g]));return e=d?"\\b("+f.join("|")+")\\b":"("+f.join("|")+")",c?new RegExp(e):new RegExp(e,"i")}var d={node:null,pattern:null,tagName:"strong",className:null,wordsOnly:!1,caseSensitive:!1};return function(e){function f(b){var c,d,f;return(c=h.exec(b.data))&&(f=a.createElement(e.tagName),e.className&&(f.className=e.className),d=b.splitText(c.index),d.splitText(c[0].length),f.appendChild(d.cloneNode(!0)),b.parentNode.replaceChild(f,d)),!!c}function g(a,b){for(var c,d=3,e=0;e