From 6ff16c6d4094dec847091de145be49694938f708 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 11:29:35 +0200 Subject: [PATCH 001/111] init commit --- .gitignore | 7 +++ eoasite/__init__.py | 0 eoasite/settings.py | 125 ++++++++++++++++++++++++++++++++++++++++++++ eoasite/urls.py | 21 ++++++++ eoasite/wsgi.py | 16 ++++++ manage.py | 22 ++++++++ 6 files changed, 191 insertions(+) create mode 100644 .gitignore create mode 100644 eoasite/__init__.py create mode 100644 eoasite/settings.py create mode 100644 eoasite/urls.py create mode 100644 eoasite/wsgi.py create mode 100755 manage.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4134212 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.pyc +*~ +__pychache__ +myvenv +db.sqlite3 +/static +.DS_Store diff --git a/eoasite/__init__.py b/eoasite/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/eoasite/settings.py b/eoasite/settings.py new file mode 100644 index 0000000..2b4c212 --- /dev/null +++ b/eoasite/settings.py @@ -0,0 +1,125 @@ +""" +Django settings for eoasite project. + +Generated by 'django-admin startproject' using Django 1.11.3. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '5+7@!8y6k^)b(3s%8_8y$ryhuyw2$fs2z$d8)%cr8o)5as&k@@' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['127.0.0.1','141.5.105.187'] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'eoasite.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'eoasite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': 'testdb', + 'USER': 'testdb_admin', + 'PASSWORD': 'testdb1pwd', + 'HOST': 'localhost', + 'PORT': '', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Europe/Berlin' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'static') diff --git a/eoasite/urls.py b/eoasite/urls.py new file mode 100644 index 0000000..5fa4a8f --- /dev/null +++ b/eoasite/urls.py @@ -0,0 +1,21 @@ +"""eoasite URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/1.11/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.conf.urls import url, include + 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) +""" +from django.conf.urls import url +from django.contrib import admin + +urlpatterns = [ + url(r'^admin/', admin.site.urls), +] diff --git a/eoasite/wsgi.py b/eoasite/wsgi.py new file mode 100644 index 0000000..79f93da --- /dev/null +++ b/eoasite/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for eoasite project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eoasite.settings") + +application = get_wsgi_application() diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..1a45282 --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eoasite.settings") + try: + from django.core.management import execute_from_command_line + except ImportError: + # The above import may fail for some other reason. Ensure that the + # issue is really that Django is missing to avoid masking other + # exceptions on Python 2. + try: + import django + except ImportError: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) + raise + execute_from_command_line(sys.argv) From 9af4734d5cbc015f3231f100fcc1bde62881e423 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 12:12:36 +0200 Subject: [PATCH 002/111] Adding models --- eoa/__init__.py | 0 eoa/admin.py | 7 ++++++ eoa/apps.py | 5 +++++ eoa/migrations/0001_initial.py | 40 ++++++++++++++++++++++++++++++++++ eoa/migrations/__init__.py | 0 eoa/models.py | 34 +++++++++++++++++++++++++++++ eoa/tests.py | 3 +++ eoa/views.py | 3 +++ eoasite/settings.py | 1 + 9 files changed, 93 insertions(+) create mode 100644 eoa/__init__.py create mode 100644 eoa/admin.py create mode 100644 eoa/apps.py create mode 100644 eoa/migrations/0001_initial.py create mode 100644 eoa/migrations/__init__.py create mode 100644 eoa/models.py create mode 100644 eoa/tests.py create mode 100644 eoa/views.py diff --git a/eoa/__init__.py b/eoa/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/eoa/admin.py b/eoa/admin.py new file mode 100644 index 0000000..7ed9492 --- /dev/null +++ b/eoa/admin.py @@ -0,0 +1,7 @@ +from django.contrib import admin +from .models import Publication, Author + +admin.site.register(Publication) +admin.site.register(Author) + +# Register your models here. diff --git a/eoa/apps.py b/eoa/apps.py new file mode 100644 index 0000000..48176a3 --- /dev/null +++ b/eoa/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class EoaConfig(AppConfig): + name = 'eoa' diff --git a/eoa/migrations/0001_initial.py b/eoa/migrations/0001_initial.py new file mode 100644 index 0000000..1bcb750 --- /dev/null +++ b/eoa/migrations/0001_initial.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-05 10:04 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Author', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('firstname', models.CharField(max_length=50)), + ('lastname', models.CharField(max_length=100)), + ('middlenames', models.CharField(default=None, max_length=150)), + ('born', models.DateField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='Publication', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=200)), + ('pages', models.IntegerField()), + ('price', models.FloatField()), + ('created_date', models.DateTimeField(default=django.utils.timezone.now)), + ('published_date', models.DateTimeField(blank=True, null=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Author')), + ], + ), + ] diff --git a/eoa/migrations/__init__.py b/eoa/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/eoa/models.py b/eoa/models.py new file mode 100644 index 0000000..3ac30d6 --- /dev/null +++ b/eoa/models.py @@ -0,0 +1,34 @@ +from django.db import models +from django.utils import timezone + +# Create your models here. +class Author(models.Model): + firstname = models.CharField(max_length=50) + lastname = models.CharField(max_length=100) + middlenames = models.CharField(max_length=150, default=None) + born = models.DateField( + blank=True, null=True) + + def edit_birthday(self): + self.born = timezone.now() + self.save() + + def __str__(self): + return self.lastname + +class Publication(models.Model): + author = models.ForeignKey(Author) + title = models.CharField(max_length=200) + pages = models.IntegerField() + price = models.FloatField() + created_date = models.DateTimeField( + default = timezone.now) + published_date = models.DateTimeField( + blank=True, null=True) + + def publish(self): + self.published_date = timezone.now() + self.save() + + def __str__(self): + return self.title diff --git a/eoa/tests.py b/eoa/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/eoa/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/eoa/views.py b/eoa/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/eoa/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/eoasite/settings.py b/eoasite/settings.py index 2b4c212..591d621 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -37,6 +37,7 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'eoa', ] MIDDLEWARE = [ From 4ac82145a9285de12d3b0145c951c0c4b02dbc79 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 14:00:23 +0200 Subject: [PATCH 003/111] add tests --- eoa/migrations/0001_initial.py | 3 ++- eoa/migrations/0002_auto_20170705_1329.py | 20 +++++++++++++++++++ eoa/models.py | 14 ++++++++++--- eoa/tests.py | 24 ++++++++++++++++++++++- eoasite/settings.py | 3 +++ 5 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 eoa/migrations/0002_auto_20170705_1329.py diff --git a/eoa/migrations/0001_initial.py b/eoa/migrations/0001_initial.py index 1bcb750..d5d9742 100644 --- a/eoa/migrations/0001_initial.py +++ b/eoa/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-05 10:04 +# Generated by Django 1.11.3 on 2017-07-05 11:18 from __future__ import unicode_literals from django.db import migrations, models @@ -22,6 +22,7 @@ class Migration(migrations.Migration): ('firstname', models.CharField(max_length=50)), ('lastname', models.CharField(max_length=100)), ('middlenames', models.CharField(default=None, max_length=150)), + ('email', models.EmailField(blank=True, default=None, max_length=70, null=True, unique=True)), ('born', models.DateField(blank=True, null=True)), ], ), diff --git a/eoa/migrations/0002_auto_20170705_1329.py b/eoa/migrations/0002_auto_20170705_1329.py new file mode 100644 index 0000000..1fa03c6 --- /dev/null +++ b/eoa/migrations/0002_auto_20170705_1329.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-05 11:29 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='author', + name='middlenames', + field=models.CharField(default=None, max_length=150, null=True), + ), + ] diff --git a/eoa/models.py b/eoa/models.py index 3ac30d6..e336c0b 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -5,7 +5,15 @@ class Author(models.Model): firstname = models.CharField(max_length=50) lastname = models.CharField(max_length=100) - middlenames = models.CharField(max_length=150, default=None) + middlenames = models.CharField(max_length=150, + default=None, + null=True) + email = models.EmailField( + default=None, + max_length=70, + blank=True, + null=True, + unique=True) born = models.DateField( blank=True, null=True) @@ -14,7 +22,7 @@ def edit_birthday(self): self.save() def __str__(self): - return self.lastname + return (self.firstname + ' ' + self.middlenames + ' ' + self.lastname) class Publication(models.Model): author = models.ForeignKey(Author) @@ -31,4 +39,4 @@ def publish(self): self.save() def __str__(self): - return self.title + return self.title diff --git a/eoa/tests.py b/eoa/tests.py index 7ce503c..ae90654 100644 --- a/eoa/tests.py +++ b/eoa/tests.py @@ -1,3 +1,25 @@ +import datetime + from django.test import TestCase +from django.utils import timezone + +from .models import Author + + +class AuthorModelTests(TestCase): + def setUp(self): + Author.objects.create( + firstname='Test', + lastname='Ußer', + middlenames='D.', + email='test@test.ert') + Author.objects.create( + firstname='Test2', + lastname='Äöü-89', + ) -# Create your tests here. + def test_string_output(self): + user = Author.objects.get(firstname='Test') + user2 = Author.objects.get(firstname='Test2') + self.assertEqual(user.__str__(), 'Test D. Ußer') + self.assertEqual(user2.email,None) diff --git a/eoasite/settings.py b/eoasite/settings.py index 591d621..4c026bf 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -82,6 +82,9 @@ 'PASSWORD': 'testdb1pwd', 'HOST': 'localhost', 'PORT': '', + 'TEST': { + 'NAME': 'testdb_test', + }, } } From 539e319f761e6203a7fa6735b452d57f5e637c0d Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 14:05:52 +0200 Subject: [PATCH 004/111] pipeline prt1 --- eoasite/settings.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/eoasite/settings.py b/eoasite/settings.py index 4c026bf..6a9f655 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -77,13 +77,13 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'testdb', - 'USER': 'testdb_admin', + 'NAME': 'dev', + 'USER': 'dev', 'PASSWORD': 'testdb1pwd', 'HOST': 'localhost', 'PORT': '', 'TEST': { - 'NAME': 'testdb_test', + 'NAME': 'dev_test', }, } } From 1c058edda0346d2f9b1faf7579a5098faf8a6e60 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 14:07:21 +0200 Subject: [PATCH 005/111] Add .gitlab-ci.yml --- .gitlab-ci.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..9d5f698 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,18 @@ +image: django:latest + +services: + - postgres:latest + +stages: + - test + - deploy + +variables: + POSTGRES_DB: dev + POSTGRES_USER: dev + POSTGRES_PASSWORD: dev + +all_tests: + stage: test + script: + - python3 manage.py test \ No newline at end of file From 9eb4ac2d905dc7630f1092d0ac460221c8ce1dc0 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 14:22:02 +0200 Subject: [PATCH 006/111] db settings --- .gitlab-ci.yml | 2 +- eoasite/settings.py | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9d5f698..de8d524 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,4 +15,4 @@ variables: all_tests: stage: test script: - - python3 manage.py test \ No newline at end of file + - python3 manage.py test diff --git a/eoasite/settings.py b/eoasite/settings.py index 6a9f655..0c58bb7 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -80,11 +80,8 @@ 'NAME': 'dev', 'USER': 'dev', 'PASSWORD': 'testdb1pwd', - 'HOST': 'localhost', + 'HOST': 'postgres', 'PORT': '', - 'TEST': { - 'NAME': 'dev_test', - }, } } From 0463b412ffeb1019953b1d86862516af20ce98a7 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 14:25:00 +0200 Subject: [PATCH 007/111] db set 2 --- eoasite/settings.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/eoasite/settings.py b/eoasite/settings.py index 0c58bb7..08be63d 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -79,9 +79,12 @@ 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dev', 'USER': 'dev', - 'PASSWORD': 'testdb1pwd', + 'PASSWORD': 'dev', 'HOST': 'postgres', 'PORT': '', + 'TEST': { + 'NAME': 'dev_test', + }, } } From b76828eb9c320c91168fe57eb3f84e23613630cb Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 16:22:45 +0200 Subject: [PATCH 008/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index de8d524..ed6d54e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,3 +16,12 @@ all_tests: stage: test script: - python3 manage.py test + +deploy: + stage: deploy + script: + - ssh -t django@deployhost "cd django/eoa-django-test && git pull && python3 manage.py runserver 0.0.0.0:8000" + only: + - master + when: on_success + \ No newline at end of file From 295c368497d979fad639f54146b922e991b11502 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 16:44:47 +0200 Subject: [PATCH 009/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ed6d54e..59dfbf1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,6 +2,29 @@ image: django:latest services: - postgres:latest + +before_script: + # Install ssh-agent if not already installed, it is required by Docker. + # (change apt-get to yum if you use a CentOS-based image) + - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' + + # Run ssh-agent (inside the build environment) + - eval $(ssh-agent -s) + + # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store + - ssh-add <(echo "$SSH_PRIVATE_KEY") + + # For Docker builds disable host key checking. Be aware that by adding that + # you are suspectible to man-in-the-middle attacks. + # WARNING: Use this only with the Docker executor, if you use it with shell + # you will overwrite your user's SSH config. + - mkdir -p ~/.ssh + - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' + # In order to properly check the server's host key, assuming you created the + # SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines + # instead. + # - mkdir -p ~/.ssh + # - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts' stages: - test @@ -20,7 +43,7 @@ all_tests: deploy: stage: deploy script: - - ssh -t django@deployhost "cd django/eoa-django-test && git pull && python3 manage.py runserver 0.0.0.0:8000" + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py runserver 0.0.0.0:8000" only: - master when: on_success From b368f337045165073e2e554bc67f0ee4f42350d8 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 16:58:55 +0200 Subject: [PATCH 010/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 59dfbf1..6c6669b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,28 +3,13 @@ image: django:latest services: - postgres:latest -before_script: - # Install ssh-agent if not already installed, it is required by Docker. - # (change apt-get to yum if you use a CentOS-based image) - - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - - # Run ssh-agent (inside the build environment) - - eval $(ssh-agent -s) - - # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store - - ssh-add <(echo "$SSH_PRIVATE_KEY") - - # For Docker builds disable host key checking. Be aware that by adding that - # you are suspectible to man-in-the-middle attacks. - # WARNING: Use this only with the Docker executor, if you use it with shell - # you will overwrite your user's SSH config. - - mkdir -p ~/.ssh - - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - # In order to properly check the server's host key, assuming you created the - # SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines - # instead. - # - mkdir -p ~/.ssh - # - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts' +.shared_hidden_key: &deploy # This is an anchor + before_script: + - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' + - eval $(ssh-agent -s) + - ssh-add <(echo "$SSH_PRIVATE_KEY") + - mkdir -p ~/.ssh + - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' stages: - test @@ -41,6 +26,7 @@ all_tests: - python3 manage.py test deploy: + <<: *deploy stage: deploy script: - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py runserver 0.0.0.0:8000" From 60315c231ba46a4f2cf33087b86eaa6578b7cb5e Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 17:11:30 +0200 Subject: [PATCH 011/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6c6669b..186ef92 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py runserver 0.0.0.0:8000" + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && source venv/bin/activate && python3 manage.py runserver 0.0.0.0:8000" only: - master when: on_success From 242d1e3defef6fbb07163fbf93eaa37a57c8023a Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 17:19:04 +0200 Subject: [PATCH 012/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 186ef92..3224da0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && source venv/bin/activate && python3 manage.py runserver 0.0.0.0:8000" + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && source ../venv/bin/activate && python3 manage.py runserver 0.0.0.0:8000" only: - master when: on_success From f69419dd3d94e1819e42d6c36af8fdbc3db66ca8 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 17:26:57 +0200 Subject: [PATCH 013/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3224da0..6c6669b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && source ../venv/bin/activate && python3 manage.py runserver 0.0.0.0:8000" + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py runserver 0.0.0.0:8000" only: - master when: on_success From cfd9233774f8670ba745725897f4a5aa98cb46d0 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 17:27:57 +0200 Subject: [PATCH 014/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6c6669b..6be2e7d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py runserver 0.0.0.0:8000" + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py makemigrations eoa && python3 manage.py migrate eoa && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000 &" only: - master when: on_success From 4c27cbe553546f515d28f9777dc618b795688fd9 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 5 Jul 2017 17:57:19 +0200 Subject: [PATCH 015/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6be2e7d..9201a61 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py makemigrations eoa && python3 manage.py migrate eoa && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000 &" + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py makemigrations eoa && python3 manage.py migrate eoa && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000" only: - master when: on_success From 45052b6c6aa0318d77884fb6bd1a197891545ac8 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 12:27:38 +0200 Subject: [PATCH 016/111] deploy via compose --- .dockerignore | 6 ++++++ Dockerfile | 7 +++++++ docker-compose.yml | 18 ++++++++++++++++++ eoasite/settings.py | 12 ++++++------ loaddjango.sh | 7 +++++++ requirements.txt | 2 ++ start_deploy.sh | 5 +++++ 7 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100755 loaddjango.sh create mode 100644 requirements.txt create mode 100644 start_deploy.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..faea375 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,6 @@ +# excluded files are not sent to build context +# this keeps docker files smaller and file transfers lower +.dockerignore +.gitignore +.gitlab-ci.yml +myvenv diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bf74993 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,7 @@ +FROM python:3.5 +ENV PYTHONUNBUFFERED 1 +RUN mkdir /code +WORKDIR /code +ADD requirements.txt /code/ +RUN pip3 install -r requirements.txt +ADD . /code/ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..12cdbbd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3' + +services: + postgres: + image: postgres + volumes: + - pg_data:/var/lib/postgresql + web: + build: . + command: sh loaddjango.sh + volumes: + - .:/code + ports: + - "8000:8000" + links: + - postgres +volumes: + pg_data: diff --git a/eoasite/settings.py b/eoasite/settings.py index 08be63d..cb01a31 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -23,7 +23,7 @@ SECRET_KEY = '5+7@!8y6k^)b(3s%8_8y$ryhuyw2$fs2z$d8)%cr8o)5as&k@@' # SECURITY WARNING: don't run with debug turned on in production! -DEBUG = True +DEBUG = False ALLOWED_HOSTS = ['127.0.0.1','141.5.105.187'] @@ -77,13 +77,13 @@ DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'dev', - 'USER': 'dev', - 'PASSWORD': 'dev', + 'NAME': 'postgres', + 'USER': 'postgres', + #'PASSWORD': 'dev', 'HOST': 'postgres', - 'PORT': '', + 'PORT': '5432', 'TEST': { - 'NAME': 'dev_test', + 'NAME': 'db_test', }, } } diff --git a/loaddjango.sh b/loaddjango.sh new file mode 100755 index 0000000..2e5344a --- /dev/null +++ b/loaddjango.sh @@ -0,0 +1,7 @@ +!#/bin/bash + +python manage.py makemigrations eoa +python manage.py migrate eoa +python manage.py makemigrations +python manage.py migrate +python manage.py runserver 0.0.0.0:8000 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a4a0ad6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +Django +psycopg2 diff --git a/start_deploy.sh b/start_deploy.sh new file mode 100644 index 0000000..45ec123 --- /dev/null +++ b/start_deploy.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +docker-compose up -d postgres + +docker-compose up -d From 008dd51664d781d9ac77104776e0698e684a8761 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 12:54:56 +0200 Subject: [PATCH 017/111] edit db setings --- eoasite/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eoasite/settings.py b/eoasite/settings.py index cb01a31..45483ad 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -79,7 +79,7 @@ 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'postgres', 'USER': 'postgres', - #'PASSWORD': 'dev', + 'PASSWORD': 'dev', 'HOST': 'postgres', 'PORT': '5432', 'TEST': { From 591849aa4ab02c8ce0ab39ac086d3a4550d7d95a Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 12:56:47 +0200 Subject: [PATCH 018/111] edit db setings 2 --- .gitlab-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9201a61..82851ad 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -16,8 +16,8 @@ stages: - deploy variables: - POSTGRES_DB: dev - POSTGRES_USER: dev + POSTGRES_DB: postgres + POSTGRES_USER: postgres POSTGRES_PASSWORD: dev all_tests: @@ -33,4 +33,4 @@ deploy: only: - master when: on_success - \ No newline at end of file + From 5dc0d0cac1a62add56fb5286755dc7f9680fc7ec Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 13:29:08 +0200 Subject: [PATCH 019/111] admin settings -- still no pwd from ENV --- docker-compose.yml | 2 ++ loaddjango.sh | 6 +++++- start_deploy.sh | 6 ++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 12cdbbd..39cf028 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,8 @@ services: - pg_data:/var/lib/postgresql web: build: . + environment: + - ADMIN_PWD command: sh loaddjango.sh volumes: - .:/code diff --git a/loaddjango.sh b/loaddjango.sh index 2e5344a..1e703c3 100755 --- a/loaddjango.sh +++ b/loaddjango.sh @@ -1,7 +1,11 @@ -!#/bin/bash +#!/bin/bash +# Migrate database python manage.py makemigrations eoa python manage.py migrate eoa python manage.py makemigrations python manage.py migrate +# Create superuser with pwd from env variable +echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.filter(email='admin@example.com', is_superuser=True).delete(); User.objects.create_superuser('admin', 'admin@example.com', 'testUser')" | python manage.py shell +# Start server python manage.py runserver 0.0.0.0:8000 diff --git a/start_deploy.sh b/start_deploy.sh index 45ec123..aa1ffbb 100644 --- a/start_deploy.sh +++ b/start_deploy.sh @@ -1,5 +1,11 @@ #!/bin/bash +docker-compose build + +docker-compose pull + docker-compose up -d postgres docker-compose up -d + +echo 'Deployed' From 80840d697ee859f0c8d7f835ec76642edc26b025 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 13:33:34 +0200 Subject: [PATCH 020/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 82851ad..49fb1db 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,7 +29,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && python3 manage.py makemigrations eoa && python3 manage.py migrate eoa && python3 manage.py migrate && python3 manage.py runserver 0.0.0.0:8000" + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh start_deploy.sh " only: - master when: on_success From 24708133b4f047ff6e04142492edc800a9a3f63e Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 13:45:40 +0200 Subject: [PATCH 021/111] fix waiting time for postgres --- start_deploy.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/start_deploy.sh b/start_deploy.sh index aa1ffbb..90fc5e9 100644 --- a/start_deploy.sh +++ b/start_deploy.sh @@ -6,6 +6,8 @@ docker-compose pull docker-compose up -d postgres +sleep 2 + docker-compose up -d echo 'Deployed' From 7883e706a1ef30f2242b0dccd8668b91fa7dcdaf Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 14:10:34 +0200 Subject: [PATCH 022/111] load static files --- loaddjango.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/loaddjango.sh b/loaddjango.sh index 1e703c3..1ee80af 100755 --- a/loaddjango.sh +++ b/loaddjango.sh @@ -1,5 +1,6 @@ #!/bin/bash - +# Load static files +python manage.py collectstatic -v0 --noinput # Migrate database python manage.py makemigrations eoa python manage.py migrate eoa From fea84be25a33100cb994e20b5bddbf1a0834989b Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 14:57:43 +0200 Subject: [PATCH 023/111] vol for static files --- docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 39cf028..54bb322 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,11 +7,12 @@ services: - pg_data:/var/lib/postgresql web: build: . - environment: + environment: - ADMIN_PWD command: sh loaddjango.sh volumes: - .:/code + - /static:/static ports: - "8000:8000" links: From 8494e793c37e7a287c8118ff74e679699944522a Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 15:43:02 +0200 Subject: [PATCH 024/111] auto nginx --- config/nginx/mydjango.conf | 18 ++++++++++++++++++ docker-compose.yml | 31 +++++++++++++++++++++++-------- 2 files changed, 41 insertions(+), 8 deletions(-) create mode 100644 config/nginx/mydjango.conf diff --git a/config/nginx/mydjango.conf b/config/nginx/mydjango.conf new file mode 100644 index 0000000..d4fdbef --- /dev/null +++ b/config/nginx/mydjango.conf @@ -0,0 +1,18 @@ +upstream web { + ip_hash; + server web:8000; +} + +server { + + location /static/ { + autoindex on; + alias /static/; + } + + location / { + proxy_pass http://web/; + } + listen 8000; + server_name localhost; +} diff --git a/docker-compose.yml b/docker-compose.yml index 54bb322..bebc342 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,21 +1,36 @@ version: '3' services: - postgres: - image: postgres + nginx: + image: nginx:latest + container_name: nz01 + ports: + - "8000:8000" volumes: - - pg_data:/var/lib/postgresql + - .:/code + - ./config/nginx:/etc/nginx/conf.d + - ./static:/static + depends_on: + - web web: build: . environment: - ADMIN_PWD + container_name: dz01 command: sh loaddjango.sh + depends_on: + - postgres volumes: - .:/code - - /static:/static - ports: - - "8000:8000" - links: - - postgres + - ./static:/static + expose: + - "8000" + + postgres: + image: postgres:latest + container_name: pz01 + volumes: + - pg_data:/var/lib/postgresql + volumes: pg_data: From 9fbc45997cafd746dab867b416166195ada989b3 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 15:56:16 +0200 Subject: [PATCH 025/111] auto nginx host --- .gitlab-ci.yml | 13 +++++++------ config/nginx/mydjango.conf | 10 +++++----- docker-compose.yml | 9 ++++----- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 49fb1db..a5589e3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,9 @@ image: django:latest -services: - - postgres:latest - +.shared_hidden_key: &test + services: + - postgres:latest + .shared_hidden_key: &deploy # This is an anchor before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' @@ -21,16 +22,16 @@ variables: POSTGRES_PASSWORD: dev all_tests: + <<: *test stage: test script: - python3 manage.py test - + deploy: - <<: *deploy + <<: *deploy stage: deploy script: - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh start_deploy.sh " only: - master when: on_success - diff --git a/config/nginx/mydjango.conf b/config/nginx/mydjango.conf index d4fdbef..9554163 100644 --- a/config/nginx/mydjango.conf +++ b/config/nginx/mydjango.conf @@ -1,18 +1,18 @@ -upstream web { +upstream web { ip_hash; server web:8000; } server { - location /static/ { - autoindex on; - alias /static/; + location /static/ { + autoindex on; + alias /static/; } location / { proxy_pass http://web/; } listen 8000; - server_name localhost; + server_name $DEPLOYHOST; } diff --git a/docker-compose.yml b/docker-compose.yml index bebc342..18f56ec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,32 +3,31 @@ version: '3' services: nginx: image: nginx:latest - container_name: nz01 + environment: + - DEPLOYHOST ports: - "8000:8000" volumes: - .:/code - ./config/nginx:/etc/nginx/conf.d - - ./static:/static + - /static:/static depends_on: - web web: build: . environment: - ADMIN_PWD - container_name: dz01 command: sh loaddjango.sh depends_on: - postgres volumes: - .:/code - - ./static:/static + - /static:/static expose: - "8000" postgres: image: postgres:latest - container_name: pz01 volumes: - pg_data:/var/lib/postgresql From 7546c86143ecf2e36cae0b7ef2195fc69d4feb62 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 16:08:35 +0200 Subject: [PATCH 026/111] chg pipeline --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a5589e3..51cef65 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh start_deploy.sh " + - ssh -t cloud@$DEPLOYHOST "export DEPLOYHOST=$DEPLOYHOST && cd django/eoa-django-test && git pull && sh start_deploy.sh " only: - master when: on_success From 00ec11959d0c326ff1cf5f263a4879c26f519c4e Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 16:23:06 +0200 Subject: [PATCH 027/111] bad req bug --- config/nginx/mydjango.conf | 2 +- docker-compose.yml | 4 ++-- eoasite/settings.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/config/nginx/mydjango.conf b/config/nginx/mydjango.conf index 9554163..bd96c5f 100644 --- a/config/nginx/mydjango.conf +++ b/config/nginx/mydjango.conf @@ -14,5 +14,5 @@ server { proxy_pass http://web/; } listen 8000; - server_name $DEPLOYHOST; + server_name localhost; } diff --git a/docker-compose.yml b/docker-compose.yml index 18f56ec..df41fd0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: volumes: - .:/code - ./config/nginx:/etc/nginx/conf.d - - /static:/static + - ./static:/static depends_on: - web web: @@ -22,7 +22,7 @@ services: - postgres volumes: - .:/code - - /static:/static + - ./static:/static expose: - "8000" diff --git a/eoasite/settings.py b/eoasite/settings.py index 45483ad..eaa92af 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -25,7 +25,7 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False -ALLOWED_HOSTS = ['127.0.0.1','141.5.105.187'] +ALLOWED_HOSTS = ['web','127.0.0.1','141.5.105.187'] # Application definition From 8b5ea9de1246776f08d5e28d4eed29eda062c90c Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Thu, 6 Jul 2017 16:48:34 +0200 Subject: [PATCH 028/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 51cef65..a5589e3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,7 +31,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "export DEPLOYHOST=$DEPLOYHOST && cd django/eoa-django-test && git pull && sh start_deploy.sh " + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh start_deploy.sh " only: - master when: on_success From cdf751810f0be0e3ca8802b9f11fc17a0cb7d08a Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 10:52:37 +0200 Subject: [PATCH 029/111] new branch, env for deploy --- .gitlab-ci.yml | 5 ++++- eoa/models.py | 24 +++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a5589e3..b04eb77 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,6 +32,9 @@ deploy: stage: deploy script: - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh start_deploy.sh " + environment: + name: production + url: http://141.5.105.187:8000 only: - master - when: on_success + when: manual diff --git a/eoa/models.py b/eoa/models.py index e336c0b..a110a11 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -14,6 +14,7 @@ class Author(models.Model): blank=True, null=True, unique=True) + publications = models.ManyToManyField(Publication) born = models.DateField( blank=True, null=True) @@ -24,8 +25,26 @@ def edit_birthday(self): def __str__(self): return (self.firstname + ' ' + self.middlenames + ' ' + self.lastname) + class Meta: + ordering = ('lastname',) + class Publication(models.Model): - author = models.ForeignKey(Author) + series_choice = ( + ('sources', 'Sources'), + ('studies', 'Studies'), + ('essays', 'Essays'), + ('proceedings', 'Proceedings'), + ('textbooks', 'Textbooks'), + ) + language_choice = ( + ('de', 'German'), + ('en', 'English'), + ('it', 'Italian'), + ) + series = models.CharField(max_length=20, choices=series_choice) + language = models.CharField(max_length=2, choices=language_choice) + published = models.BooleanField() + featured = models.BooleanField() title = models.CharField(max_length=200) pages = models.IntegerField() price = models.FloatField() @@ -40,3 +59,6 @@ def publish(self): def __str__(self): return self.title + + class Meta: + ordering = ('title',) From 3533d74b06886b1cfd9fa073af873ea04a4cd51d Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Fri, 7 Jul 2017 10:54:29 +0200 Subject: [PATCH 030/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b04eb77..443098c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -34,7 +34,7 @@ deploy: - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh start_deploy.sh " environment: name: production - url: http://141.5.105.187:8000 + url: http://141.5.105.187:8000 only: - master when: manual From 0225f97bee93758902d6a5c79fe45c1d9dd769b2 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 10:55:53 +0200 Subject: [PATCH 031/111] fix model order --- eoa/models.py | 52 +++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index a110a11..146173c 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -2,32 +2,6 @@ from django.utils import timezone # Create your models here. -class Author(models.Model): - firstname = models.CharField(max_length=50) - lastname = models.CharField(max_length=100) - middlenames = models.CharField(max_length=150, - default=None, - null=True) - email = models.EmailField( - default=None, - max_length=70, - blank=True, - null=True, - unique=True) - publications = models.ManyToManyField(Publication) - born = models.DateField( - blank=True, null=True) - - def edit_birthday(self): - self.born = timezone.now() - self.save() - - def __str__(self): - return (self.firstname + ' ' + self.middlenames + ' ' + self.lastname) - - class Meta: - ordering = ('lastname',) - class Publication(models.Model): series_choice = ( ('sources', 'Sources'), @@ -62,3 +36,29 @@ def __str__(self): class Meta: ordering = ('title',) + +class Author(models.Model): + firstname = models.CharField(max_length=50) + lastname = models.CharField(max_length=100) + middlenames = models.CharField(max_length=150, + default=None, + null=True) + email = models.EmailField( + default=None, + max_length=70, + blank=True, + null=True, + unique=True) + publications = models.ManyToManyField(Publication) + born = models.DateField( + blank=True, null=True) + + def edit_birthday(self): + self.born = timezone.now() + self.save() + + def __str__(self): + return (self.firstname + ' ' + self.middlenames + ' ' + self.lastname) + + class Meta: + ordering = ('lastname',) From ed0ff99ac928af04391197f687039607e0130097 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Fri, 7 Jul 2017 10:59:30 +0200 Subject: [PATCH 032/111] Update .gitlab-ci.yml --- .gitlab-ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a5589e3..534c738 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,7 +25,11 @@ all_tests: <<: *test stage: test script: - - python3 manage.py test + - python manage.py makemigrations eoa + - python manage.py migrate eoa + - python manage.py makemigrations + - python manage.py migrate + - python manage.py test deploy: <<: *deploy From 88e0792a8c7cab7ad1022a793546713f9fa32610 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 11:05:01 +0200 Subject: [PATCH 033/111] model defaults featured/published --- eoa/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index 146173c..5fadbf8 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -17,8 +17,8 @@ class Publication(models.Model): ) series = models.CharField(max_length=20, choices=series_choice) language = models.CharField(max_length=2, choices=language_choice) - published = models.BooleanField() - featured = models.BooleanField() + published = models.BooleanField(default=False) + featured = models.BooleanField(default=False) title = models.CharField(max_length=200) pages = models.IntegerField() price = models.FloatField() From 321131b843fc1e23587f67b3b5a1bed9a043800d Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 11:10:55 +0200 Subject: [PATCH 034/111] model defaults 2 --- eoa/models.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index 5fadbf8..1ed217d 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -15,8 +15,14 @@ class Publication(models.Model): ('en', 'English'), ('it', 'Italian'), ) - series = models.CharField(max_length=20, choices=series_choice) - language = models.CharField(max_length=2, choices=language_choice) + series = models.CharField( + max_length=20, + choices=series_choice, + default='sources') + language = models.CharField( + max_length=2, + choices=language_choice, + default='de') published = models.BooleanField(default=False) featured = models.BooleanField(default=False) title = models.CharField(max_length=200) From 76e0e27e9ce06f46a050c50df3ee3a59bd6c086c Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 11:48:11 +0200 Subject: [PATCH 035/111] extend model author --- eoa/models.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index 1ed217d..9206a56 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -25,7 +25,9 @@ class Publication(models.Model): default='de') published = models.BooleanField(default=False) featured = models.BooleanField(default=False) + publications_id = models.IntegerField() title = models.CharField(max_length=200) + subtitle = models.CharField(max_length=200) pages = models.IntegerField() price = models.FloatField() created_date = models.DateTimeField( @@ -46,18 +48,28 @@ class Meta: class Author(models.Model): firstname = models.CharField(max_length=50) lastname = models.CharField(max_length=100) - middlenames = models.CharField(max_length=150, - default=None, - null=True) + middlenames = models.CharField( + max_length=150, + default=None, + blank=True) email = models.EmailField( default=None, max_length=70, blank=True, null=True, unique=True) + homepage = models.CharField( + max_length=200, + default=None, + blank=True) + description = models.CharField( + max_length=200, + default=None, + blank=True) publications = models.ManyToManyField(Publication) born = models.DateField( blank=True, null=True) + foto = models.ImageField(upload_to='authors', blank=True) def edit_birthday(self): self.born = timezone.now() From 77bab98d679d2da5b40c46222b97699bcb42c771 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 11:56:52 +0200 Subject: [PATCH 036/111] models: imagefield dep. --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index a4a0ad6..6b5eb44 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ Django psycopg2 +Pillow From 9d76f3f35c49e21af12c84c16eea206799cac298 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 12:00:10 +0200 Subject: [PATCH 037/111] deps for imagefield 2 --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 11db5e5..eae26b5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,6 +25,7 @@ all_tests: <<: *test stage: test script: + - pip install -r requirements.txt - python manage.py makemigrations eoa - python manage.py migrate eoa - python manage.py makemigrations From cdfad4b5760e7ce0ff253c642193a6855b0ba2a0 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 12:04:02 +0200 Subject: [PATCH 038/111] model fix --- eoa/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eoa/models.py b/eoa/models.py index 9206a56..e265659 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -25,7 +25,7 @@ class Publication(models.Model): default='de') published = models.BooleanField(default=False) featured = models.BooleanField(default=False) - publications_id = models.IntegerField() + publication_id = models.IntegerField(default=None) title = models.CharField(max_length=200) subtitle = models.CharField(max_length=200) pages = models.IntegerField() From 44bf07441ba1c5b180d015db7fa143825277008b Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 12:34:26 +0200 Subject: [PATCH 039/111] models added --- eoa/models.py | 66 +++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index e265659..5132d7e 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -1,20 +1,21 @@ from django.db import models from django.utils import timezone +series_choice = ( + ('sources', 'Sources'), + ('studies', 'Studies'), + ('essays', 'Essays'), + ('proceedings', 'Proceedings'), + ('textbooks', 'Textbooks'), +) +language_choice = ( + ('de', 'German'), + ('en', 'English'), + ('it', 'Italian'), +) + # Create your models here. class Publication(models.Model): - series_choice = ( - ('sources', 'Sources'), - ('studies', 'Studies'), - ('essays', 'Essays'), - ('proceedings', 'Proceedings'), - ('textbooks', 'Textbooks'), - ) - language_choice = ( - ('de', 'German'), - ('en', 'English'), - ('it', 'Italian'), - ) series = models.CharField( max_length=20, choices=series_choice, @@ -80,3 +81,44 @@ def __str__(self): class Meta: ordering = ('lastname',) + +class Part(models.Model): + publication = models.ForeignKey(Publication) + title = models.CharField(max_length=200, blank=True) + order = models.IntegerField(null=False) + language = models.CharField( + max_length=2, + choices=language_choice, + default='de') + authors = models.ManyToManyField( + Author, + default=None, + blank=True) + doi = models.CharField(max_length=200, blank=True) + citation = models.CharField(max_length=200, blank=True) + pdf = models.FileField(upload_to=filepath_chapter, blank=True) + +class Chapter(models.Model): + publication = models.ForeignKey(Publication) + part = models.ForeignKey(Part, blank=True) + title = models.CharField(max_length=200, blank=False) + part = models.CharField(max_length=200, blank=True) + number = models.CharField(max_length=20, blank=True) + order = models.IntegerField(null=False) + language = models.CharField( + max_length=2, + choices=language_choice, + default='de') + authors = models.ManyToManyField( + Author, + default=None, + blank=True) + doi = models.CharField(max_length=200, blank=True) + citation = models.CharField(max_length=200, blank=True) + pdf = models.FileField(upload_to=filepath_chapter, blank=True) + + def __str__(self): + return (self.order + ':' + self.title) + + class Meta: + ordering = ('order',) From 3f9b9b2ab6ce223913c2af7ede11b62808755091 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 14:17:44 +0200 Subject: [PATCH 040/111] more models --- eoa/models.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eoa/models.py b/eoa/models.py index 5132d7e..30d6542 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -120,5 +120,8 @@ class Chapter(models.Model): def __str__(self): return (self.order + ':' + self.title) + def idstring(self): + return ('chap_' + self.order) + class Meta: ordering = ('order',) From 5a7f54fb6fb23cad4cb0885ee1d3184222d7d006 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 15:31:45 +0200 Subject: [PATCH 041/111] more model --- eoa/models.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index 30d6542..0392705 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -1,6 +1,17 @@ from django.db import models from django.utils import timezone +def filepath(instance, filename): + strPublicationSerie = instance.Publication.Serie + strPublicationNumber = str(instance.Publication.Number) + baseString = strPublicationSerie + "/" + strPublicationNumber + "/" + if instance.__class__.__name__ = Chapter: + strChapterOrder = str(instance.Order) + strFilePath = baseString + strChapterOrder + "/" + filename + elif instance..__class__.__name__ = Publication: + strFilePath = baseString + "/" + filename + return strFilePath + series_choice = ( ('sources', 'Sources'), ('studies', 'Studies'), @@ -96,7 +107,7 @@ class Part(models.Model): blank=True) doi = models.CharField(max_length=200, blank=True) citation = models.CharField(max_length=200, blank=True) - pdf = models.FileField(upload_to=filepath_chapter, blank=True) + pdf = models.FileField(upload_to=filepath, blank=True) class Chapter(models.Model): publication = models.ForeignKey(Publication) @@ -115,7 +126,7 @@ class Chapter(models.Model): blank=True) doi = models.CharField(max_length=200, blank=True) citation = models.CharField(max_length=200, blank=True) - pdf = models.FileField(upload_to=filepath_chapter, blank=True) + pdf = models.FileField(upload_to=filepath, blank=True) def __str__(self): return (self.order + ':' + self.title) From f02731f25ff56efe4e899fcff63b0521f18e3e5b Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 15:33:11 +0200 Subject: [PATCH 042/111] more model 2 --- eoa/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index 0392705..2abb9e0 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -5,10 +5,10 @@ def filepath(instance, filename): strPublicationSerie = instance.Publication.Serie strPublicationNumber = str(instance.Publication.Number) baseString = strPublicationSerie + "/" + strPublicationNumber + "/" - if instance.__class__.__name__ = Chapter: + if instance.__class__.__name__ == Chapter: strChapterOrder = str(instance.Order) strFilePath = baseString + strChapterOrder + "/" + filename - elif instance..__class__.__name__ = Publication: + elif instance..__class__.__name__ == Publication: strFilePath = baseString + "/" + filename return strFilePath From 3a74abfccdb6b796365e9fa2e3777219e6d22926 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 15:39:24 +0200 Subject: [PATCH 043/111] more model 3 --- eoa/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eoa/models.py b/eoa/models.py index 2abb9e0..5e73d46 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -8,7 +8,7 @@ def filepath(instance, filename): if instance.__class__.__name__ == Chapter: strChapterOrder = str(instance.Order) strFilePath = baseString + strChapterOrder + "/" + filename - elif instance..__class__.__name__ == Publication: + elif instance.__class__.__name__ == Publication: strFilePath = baseString + "/" + filename return strFilePath From 2f67ffa04a911e4878cdf1ba5ffcd4672647a32d Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 15:41:00 +0200 Subject: [PATCH 044/111] fix defautl --- eoa/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eoa/models.py b/eoa/models.py index 5e73d46..569b7c6 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -39,7 +39,7 @@ class Publication(models.Model): featured = models.BooleanField(default=False) publication_id = models.IntegerField(default=None) title = models.CharField(max_length=200) - subtitle = models.CharField(max_length=200) + subtitle = models.CharField(max_length=200,default=None) pages = models.IntegerField() price = models.FloatField() created_date = models.DateTimeField( From 1e3848129f762fc7a5fee503107fd6904ab4b831 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 15:58:35 +0200 Subject: [PATCH 045/111] fix null=True --- eoa/models.py | 101 ++++++++++++++++++++++++-------------------------- 1 file changed, 49 insertions(+), 52 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index 569b7c6..29eb98f 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -25,6 +25,41 @@ def filepath(instance, filename): ('it', 'Italian'), ) +charStandard = models.CharField( + max_length=200, + default=None, + blank=True, + null=True) + +class CommonTextPart(models.Model): + publication = models.ForeignKey(Publication) + title = models.CharField(max_length=200, blank=True) + order = models.PositiveIntegerField(null=False) + number = models.CharField(max_length=20, blank=True) + language = models.CharField( + max_length=2, + choices=language_choice, + default='de') + authors = models.ManyToManyField( + Author, + default=None, + blank=True) + doi = models.CharField(max_length=200, blank=True) + citation = models.CharField(max_length=200, blank=True) + pdf = models.FileField(upload_to=filepath, blank=True) + + def __str__(self): + return (self.order + ':' + self.title) + + def idstring(self): + base = instance.__class__.__name__.lower() + return (base + self.order) + + + class Meta: + abstract = True + ordering = ('order',) + # Create your models here. class Publication(models.Model): series = models.CharField( @@ -40,7 +75,7 @@ class Publication(models.Model): publication_id = models.IntegerField(default=None) title = models.CharField(max_length=200) subtitle = models.CharField(max_length=200,default=None) - pages = models.IntegerField() + pages = models.PositiveIntegerField() price = models.FloatField() created_date = models.DateTimeField( default = timezone.now) @@ -60,24 +95,15 @@ class Meta: class Author(models.Model): firstname = models.CharField(max_length=50) lastname = models.CharField(max_length=100) - middlenames = models.CharField( - max_length=150, - default=None, - blank=True) + middlenames = charStandard email = models.EmailField( default=None, max_length=70, blank=True, null=True, unique=True) - homepage = models.CharField( - max_length=200, - default=None, - blank=True) - description = models.CharField( - max_length=200, - default=None, - blank=True) + homepage = charStandard + description = charStandard publications = models.ManyToManyField(Publication) born = models.DateField( blank=True, null=True) @@ -93,46 +119,17 @@ def __str__(self): class Meta: ordering = ('lastname',) -class Part(models.Model): - publication = models.ForeignKey(Publication) - title = models.CharField(max_length=200, blank=True) - order = models.IntegerField(null=False) - language = models.CharField( - max_length=2, - choices=language_choice, - default='de') - authors = models.ManyToManyField( - Author, - default=None, - blank=True) - doi = models.CharField(max_length=200, blank=True) - citation = models.CharField(max_length=200, blank=True) - pdf = models.FileField(upload_to=filepath, blank=True) +class Part(CommonTextPart): + pass -class Chapter(models.Model): - publication = models.ForeignKey(Publication) +class Chapter(CommonTextPart): part = models.ForeignKey(Part, blank=True) - title = models.CharField(max_length=200, blank=False) - part = models.CharField(max_length=200, blank=True) - number = models.CharField(max_length=20, blank=True) - order = models.IntegerField(null=False) - language = models.CharField( - max_length=2, - choices=language_choice, - default='de') - authors = models.ManyToManyField( - Author, - default=None, - blank=True) - doi = models.CharField(max_length=200, blank=True) - citation = models.CharField(max_length=200, blank=True) - pdf = models.FileField(upload_to=filepath, blank=True) - - def __str__(self): - return (self.order + ':' + self.title) - def idstring(self): - return ('chap_' + self.order) +class Section(CommonTextPart): + part = models.ForeignKey(Part, blank=True) + chapter = models.ForeignKey(Chapter, blank=False) - class Meta: - ordering = ('order',) +class Subsection(CommonTextPart): + part = odels.ForeignKey(Part, blank=True) + chapter = models.ForeignKey(Chapter, blank=False) + section = models.ForeignKey(Section, blank=False) From 588f64790bc3b2fcaac557edd9651beb2123c6f9 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 16:01:24 +0200 Subject: [PATCH 046/111] order of classes --- eoa/models.py | 68 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 28 deletions(-) diff --git a/eoa/models.py b/eoa/models.py index 29eb98f..834a8d5 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -31,34 +31,11 @@ def filepath(instance, filename): blank=True, null=True) -class CommonTextPart(models.Model): - publication = models.ForeignKey(Publication) - title = models.CharField(max_length=200, blank=True) - order = models.PositiveIntegerField(null=False) - number = models.CharField(max_length=20, blank=True) - language = models.CharField( - max_length=2, - choices=language_choice, - default='de') - authors = models.ManyToManyField( - Author, - default=None, - blank=True) - doi = models.CharField(max_length=200, blank=True) - citation = models.CharField(max_length=200, blank=True) - pdf = models.FileField(upload_to=filepath, blank=True) - - def __str__(self): - return (self.order + ':' + self.title) - - def idstring(self): - base = instance.__class__.__name__.lower() - return (base + self.order) - - - class Meta: - abstract = True - ordering = ('order',) +########################################## +# +# basic information on publication and authors +# +########################################### # Create your models here. class Publication(models.Model): @@ -119,6 +96,41 @@ def __str__(self): class Meta: ordering = ('lastname',) +########################################## +# +# Common Text Parts and their abstract classes +# +########################################### + +class CommonTextPart(models.Model): + publication = models.ForeignKey(Publication) + title = models.CharField(max_length=200, blank=True) + order = models.PositiveIntegerField(null=False) + number = models.CharField(max_length=20, blank=True) + language = models.CharField( + max_length=2, + choices=language_choice, + default='de') + authors = models.ManyToManyField( + Author, + default=None, + blank=True) + doi = models.CharField(max_length=200, blank=True) + citation = models.CharField(max_length=200, blank=True) + pdf = models.FileField(upload_to=filepath, blank=True) + + def __str__(self): + return (self.order + ':' + self.title) + + def idstring(self): + base = instance.__class__.__name__.lower() + return (base + self.order) + + + class Meta: + abstract = True + ordering = ('order',) + class Part(CommonTextPart): pass From 42f9aaef392f5cdc28d8921dd903c5eacb757bcf Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 7 Jul 2017 16:03:49 +0200 Subject: [PATCH 047/111] typo odels --- eoa/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eoa/models.py b/eoa/models.py index 834a8d5..eafd88e 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -142,6 +142,6 @@ class Section(CommonTextPart): chapter = models.ForeignKey(Chapter, blank=False) class Subsection(CommonTextPart): - part = odels.ForeignKey(Part, blank=True) + part = models.ForeignKey(Part, blank=True) chapter = models.ForeignKey(Chapter, blank=False) section = models.ForeignKey(Section, blank=False) From 9e1062bc459b85085b0b9c4a7956628e61d77e52 Mon Sep 17 00:00:00 2001 From: Klaus Thoden Date: Tue, 11 Jul 2017 14:56:57 +0200 Subject: [PATCH 048/111] Klaus testing a third user --- eoa/tests.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eoa/tests.py b/eoa/tests.py index ae90654..05a82a1 100644 --- a/eoa/tests.py +++ b/eoa/tests.py @@ -17,6 +17,10 @@ def setUp(self): firstname='Test2', lastname='Äöü-89', ) + Author.objects.create( + firstname='Drei', + lastname='Hurra-89', + ) def test_string_output(self): user = Author.objects.get(firstname='Test') From 96939992b031634f62c371cd7b928e5c829eae60 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Tue, 11 Jul 2017 15:33:49 +0200 Subject: [PATCH 049/111] addings models --- .dockerignore | 1 + .gitignore | 1 + eoa/migrations/0003_auto_20170711_1243.py | 216 ++++++++++++++++++++++ eoa/migrations/0004_auto_20170711_1251.py | 30 +++ eoa/migrations/0005_auto_20170711_1306.py | 21 +++ eoa/migrations/0006_paragraph.py | 41 ++++ eoa/models.py | 55 ++++-- eoa/tests.py | 4 +- eoasite/settings_local.py | 126 +++++++++++++ 9 files changed, 478 insertions(+), 17 deletions(-) create mode 100644 eoa/migrations/0003_auto_20170711_1243.py create mode 100644 eoa/migrations/0004_auto_20170711_1251.py create mode 100644 eoa/migrations/0005_auto_20170711_1306.py create mode 100644 eoa/migrations/0006_paragraph.py create mode 100644 eoasite/settings_local.py diff --git a/.dockerignore b/.dockerignore index faea375..4931b75 100644 --- a/.dockerignore +++ b/.dockerignore @@ -4,3 +4,4 @@ .gitignore .gitlab-ci.yml myvenv +eoa-venv diff --git a/.gitignore b/.gitignore index 4134212..57caf0e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *~ __pychache__ myvenv +eoa-venv db.sqlite3 /static .DS_Store diff --git a/eoa/migrations/0003_auto_20170711_1243.py b/eoa/migrations/0003_auto_20170711_1243.py new file mode 100644 index 0000000..5083625 --- /dev/null +++ b/eoa/migrations/0003_auto_20170711_1243.py @@ -0,0 +1,216 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 10:43 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import eoa.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0002_auto_20170705_1329'), + ] + + operations = [ + migrations.CreateModel( + name='Chapter', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField()), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ], + options={ + 'ordering': ('order',), + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Part', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField()), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ], + options={ + 'ordering': ('order',), + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Section', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField()), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ], + options={ + 'ordering': ('order',), + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Subsection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField()), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ], + options={ + 'ordering': ('order',), + 'abstract': False, + }, + ), + migrations.AlterModelOptions( + name='author', + options={'ordering': ('lastname',)}, + ), + migrations.AlterModelOptions( + name='publication', + options={'ordering': ('title',)}, + ), + migrations.RemoveField( + model_name='author', + name='middlenames', + ), + migrations.RemoveField( + model_name='publication', + name='author', + ), + migrations.AddField( + model_name='author', + name='foto', + field=models.ImageField(blank=True, upload_to='authors'), + ), + migrations.AddField( + model_name='author', + name='publications', + field=models.ManyToManyField(to='eoa.Publication'), + ), + migrations.AddField( + model_name='publication', + name='featured', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='publication', + name='language', + field=models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2), + ), + migrations.AddField( + model_name='publication', + name='publication_id', + field=models.IntegerField(default=None), + ), + migrations.AddField( + model_name='publication', + name='published', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='publication', + name='series', + field=models.CharField(choices=[('sources', 'Sources'), ('studies', 'Studies'), ('essays', 'Essays'), ('proceedings', 'Proceedings'), ('textbooks', 'Textbooks')], default='sources', max_length=20), + ), + migrations.AddField( + model_name='publication', + name='subtitle', + field=models.CharField(default=None, max_length=200), + ), + migrations.AlterField( + model_name='publication', + name='pages', + field=models.PositiveIntegerField(), + ), + migrations.AddField( + model_name='subsection', + name='authors', + field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), + ), + migrations.AddField( + model_name='subsection', + name='chapter', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter'), + ), + migrations.AddField( + model_name='subsection', + name='part', + field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AddField( + model_name='subsection', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + migrations.AddField( + model_name='subsection', + name='section', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Section'), + ), + migrations.AddField( + model_name='section', + name='authors', + field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), + ), + migrations.AddField( + model_name='section', + name='chapter', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter'), + ), + migrations.AddField( + model_name='section', + name='part', + field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AddField( + model_name='section', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + migrations.AddField( + model_name='part', + name='authors', + field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), + ), + migrations.AddField( + model_name='part', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + migrations.AddField( + model_name='chapter', + name='authors', + field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), + ), + migrations.AddField( + model_name='chapter', + name='part', + field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AddField( + model_name='chapter', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + ] diff --git a/eoa/migrations/0004_auto_20170711_1251.py b/eoa/migrations/0004_auto_20170711_1251.py new file mode 100644 index 0000000..56969fb --- /dev/null +++ b/eoa/migrations/0004_auto_20170711_1251.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 10:51 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0003_auto_20170711_1243'), + ] + + operations = [ + migrations.AddField( + model_name='author', + name='description', + field=models.CharField(blank=True, default=None, max_length=200, null=True), + ), + migrations.AddField( + model_name='author', + name='homepage', + field=models.CharField(blank=True, default=None, max_length=200, null=True), + ), + migrations.AddField( + model_name='author', + name='middlenames', + field=models.CharField(blank=True, default=None, max_length=200, null=True), + ), + ] diff --git a/eoa/migrations/0005_auto_20170711_1306.py b/eoa/migrations/0005_auto_20170711_1306.py new file mode 100644 index 0000000..544f0b9 --- /dev/null +++ b/eoa/migrations/0005_auto_20170711_1306.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 11:06 +from __future__ import unicode_literals + +from django.db import migrations, models +import eoa.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0004_auto_20170711_1251'), + ] + + operations = [ + migrations.AlterField( + model_name='author', + name='foto', + field=models.ImageField(blank=True, upload_to=eoa.models.filepath), + ), + ] diff --git a/eoa/migrations/0006_paragraph.py b/eoa/migrations/0006_paragraph.py new file mode 100644 index 0000000..d7897ab --- /dev/null +++ b/eoa/migrations/0006_paragraph.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 13:03 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import eoa.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0005_auto_20170711_1306'), + ] + + operations = [ + migrations.CreateModel( + name='Paragraph', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField()), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('text', models.TextField()), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ('chapter', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), + ('part', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part')), + ('publication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication')), + ('section', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Section')), + ('subsection', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection')), + ], + options={ + 'ordering': ('order',), + 'abstract': False, + }, + ), + ] diff --git a/eoa/models.py b/eoa/models.py index eafd88e..329422b 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -1,35 +1,51 @@ from django.db import models from django.utils import timezone +################################################# +# +# file path should depend on instance type +# +################################################# + def filepath(instance, filename): strPublicationSerie = instance.Publication.Serie strPublicationNumber = str(instance.Publication.Number) baseString = strPublicationSerie + "/" + strPublicationNumber + "/" - if instance.__class__.__name__ == Chapter: - strChapterOrder = str(instance.Order) - strFilePath = baseString + strChapterOrder + "/" + filename + if instance.__class__.__name__ == Author: + strFilePath = 'authors' elif instance.__class__.__name__ == Publication: strFilePath = baseString + "/" + filename + elif instance.__class__.__name__ == Chapter: + strChapterOrder = str(instance.Order) + strFilePath = baseString + strChapterOrder + "/" + filename return strFilePath +############################################ +# +# default settings which are used in several places +# +############################################ + series_choice = ( ('sources', 'Sources'), ('studies', 'Studies'), ('essays', 'Essays'), ('proceedings', 'Proceedings'), ('textbooks', 'Textbooks'), -) + ) + language_choice = ( ('de', 'German'), ('en', 'English'), ('it', 'Italian'), -) + ) -charStandard = models.CharField( - max_length=200, - default=None, - blank=True, - null=True) +default_char = { + 'max_length':200, + 'default':None, + 'blank':True, + 'null':True + } ########################################## # @@ -72,26 +88,28 @@ class Meta: class Author(models.Model): firstname = models.CharField(max_length=50) lastname = models.CharField(max_length=100) - middlenames = charStandard + middlenames = models.CharField(**default_char) email = models.EmailField( default=None, max_length=70, blank=True, null=True, unique=True) - homepage = charStandard - description = charStandard + homepage = models.CharField(**default_char) + description = models.CharField(**default_char) publications = models.ManyToManyField(Publication) born = models.DateField( blank=True, null=True) - foto = models.ImageField(upload_to='authors', blank=True) + foto = models.ImageField(upload_to=filepath, blank=True) def edit_birthday(self): self.born = timezone.now() self.save() def __str__(self): - return (self.firstname + ' ' + self.middlenames + ' ' + self.lastname) + return (str(self.firstname) + ' '\ + + str(self.middlenames) + ' '\ + + str(self.lastname)) class Meta: ordering = ('lastname',) @@ -145,3 +163,10 @@ class Subsection(CommonTextPart): part = models.ForeignKey(Part, blank=True) chapter = models.ForeignKey(Chapter, blank=False) section = models.ForeignKey(Section, blank=False) + +class Paragraph(CommonTextPart): + part = models.ForeignKey(Part, blank=True) + chapter = models.ForeignKey(Chapter, blank=True) + section = models.ForeignKey(Section, blank=True) + subsection = models.ForeignKey(Subsection, blank=True) + text = models.TextField(blank=False) diff --git a/eoa/tests.py b/eoa/tests.py index ae90654..8ea2110 100644 --- a/eoa/tests.py +++ b/eoa/tests.py @@ -5,13 +5,13 @@ from .models import Author - class AuthorModelTests(TestCase): def setUp(self): Author.objects.create( firstname='Test', lastname='Ußer', - middlenames='D.', + middlenames ='D.', + homepage='www.data.de', email='test@test.ert') Author.objects.create( firstname='Test2', diff --git a/eoasite/settings_local.py b/eoasite/settings_local.py new file mode 100644 index 0000000..5b7dd91 --- /dev/null +++ b/eoasite/settings_local.py @@ -0,0 +1,126 @@ +""" +Django settings for eoasite project. + +Generated by 'django-admin startproject' using Django 1.11.3. + +For more information on this file, see +https://docs.djangoproject.com/en/1.11/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.11/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '5+7@!8y6k^)b(3s%8_8y$ryhuyw2$fs2z$d8)%cr8o)5as&k@@' + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +ALLOWED_HOSTS = ['web','localhost','127.0.0.1','141.5.105.187'] + + +# Application definition + +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'eoa', +] + +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] + +ROOT_URLCONF = 'eoasite.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] + +WSGI_APPLICATION = 'eoasite.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.11/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.postgresql_psycopg2', + 'NAME': 'dev', + 'USER': 'dev', + 'PASSWORD': 'dev', + 'HOST': 'localhost', + 'PORT': '5432', + }, +} + + +# Password validation +# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/1.11/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Europe/Berlin' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.11/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, 'static') From 9bb652b02f550e23d227b2c0931b00bdf9fe255d Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Tue, 11 Jul 2017 16:59:35 +0200 Subject: [PATCH 050/111] Add models to admin interface, dbg model definitions --- eoa/admin.py | 10 +- eoa/migrations/0007_auto_20170711_1629.py | 97 ++++++ eoa/migrations/0008_auto_20170711_1635.py | 25 ++ eoa/migrations/0009_auto_20170711_1651.py | 21 ++ eoa/migrations/0010_auto_20170711_1654.py | 51 +++ eoa/models.py | 79 ++++- eoa/teidoc/baernighausen.xml | 380 ++++++++++++++++++++++ 7 files changed, 647 insertions(+), 16 deletions(-) create mode 100644 eoa/migrations/0007_auto_20170711_1629.py create mode 100644 eoa/migrations/0008_auto_20170711_1635.py create mode 100644 eoa/migrations/0009_auto_20170711_1651.py create mode 100644 eoa/migrations/0010_auto_20170711_1654.py create mode 100644 eoa/teidoc/baernighausen.xml diff --git a/eoa/admin.py b/eoa/admin.py index 7ed9492..f01b134 100644 --- a/eoa/admin.py +++ b/eoa/admin.py @@ -1,7 +1,13 @@ from django.contrib import admin -from .models import Publication, Author +from .models import * admin.site.register(Publication) admin.site.register(Author) - +admin.site.register(Citation) +admin.site.register(Part) +admin.site.register(Chapter) +admin.site.register(Section) +admin.site.register(Subsection) +admin.site.register(Subsubsection) +admin.site.register(Paragraph) # Register your models here. diff --git a/eoa/migrations/0007_auto_20170711_1629.py b/eoa/migrations/0007_auto_20170711_1629.py new file mode 100644 index 0000000..aa3aa35 --- /dev/null +++ b/eoa/migrations/0007_auto_20170711_1629.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 14:29 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import eoa.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0006_paragraph'), + ] + + operations = [ + migrations.CreateModel( + name='Citation', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('pub_type', models.CharField(choices=[('book', 'Book'), ('journalArticle', 'Journal Article'), ('bookSection', 'Book Section'), ('thesis', 'Thesis')], default='book', max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='en', max_length=2)), + ('title', models.CharField(max_length=200)), + ('date', models.DateField(blank=True)), + ('place', models.CharField(max_length=200)), + ('publisher', models.CharField(max_length=200)), + ('volume', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('issue', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('pages', models.CharField(blank=True, max_length=20)), + ('idstring', models.CharField(max_length=200)), + ], + options={ + 'ordering': ('title',), + }, + ), + migrations.CreateModel( + name='Subsubsection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField()), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), + ('part', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part')), + ], + options={ + 'abstract': False, + 'ordering': ('order',), + }, + ), + migrations.AddField( + model_name='publication', + name='publisher', + field=models.CharField(blank=True, default=None, max_length=200, null=True), + ), + migrations.AlterField( + model_name='publication', + name='created_date', + field=models.DateField(default=django.utils.timezone.now), + ), + migrations.AlterField( + model_name='publication', + name='published_date', + field=models.DateField(blank=True, null=True), + ), + migrations.AddField( + model_name='subsubsection', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + migrations.AddField( + model_name='subsubsection', + name='section', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Section'), + ), + migrations.AddField( + model_name='subsubsection', + name='subsection', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection'), + ), + migrations.AddField( + model_name='author', + name='citations', + field=models.ManyToManyField(to='eoa.Citation'), + ), + migrations.AddField( + model_name='paragraph', + name='subsubsection', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsubsection'), + ), + ] diff --git a/eoa/migrations/0008_auto_20170711_1635.py b/eoa/migrations/0008_auto_20170711_1635.py new file mode 100644 index 0000000..29a8f7c --- /dev/null +++ b/eoa/migrations/0008_auto_20170711_1635.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 14:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0007_auto_20170711_1629'), + ] + + operations = [ + migrations.AlterField( + model_name='author', + name='citations', + field=models.ManyToManyField(blank=True, to='eoa.Citation'), + ), + migrations.AlterField( + model_name='author', + name='publications', + field=models.ManyToManyField(blank=True, to='eoa.Publication'), + ), + ] diff --git a/eoa/migrations/0009_auto_20170711_1651.py b/eoa/migrations/0009_auto_20170711_1651.py new file mode 100644 index 0000000..0bda7ff --- /dev/null +++ b/eoa/migrations/0009_auto_20170711_1651.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 14:51 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0008_auto_20170711_1635'), + ] + + operations = [ + migrations.AlterField( + model_name='chapter', + name='part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + ] diff --git a/eoa/migrations/0010_auto_20170711_1654.py b/eoa/migrations/0010_auto_20170711_1654.py new file mode 100644 index 0000000..8839fa2 --- /dev/null +++ b/eoa/migrations/0010_auto_20170711_1654.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-11 14:54 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0009_auto_20170711_1651'), + ] + + operations = [ + migrations.AlterField( + model_name='paragraph', + name='chapter', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter'), + ), + migrations.AlterField( + model_name='paragraph', + name='part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AlterField( + model_name='paragraph', + name='section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Section'), + ), + migrations.AlterField( + model_name='paragraph', + name='subsection', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection'), + ), + migrations.AlterField( + model_name='section', + name='part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AlterField( + model_name='subsection', + name='part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AlterField( + model_name='subsubsection', + name='part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + ] diff --git a/eoa/models.py b/eoa/models.py index 329422b..5f0148c 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -34,6 +34,13 @@ def filepath(instance, filename): ('textbooks', 'Textbooks'), ) +citation_choice = ( + ('book', 'Book'), + ('journalArticle', 'Journal Article'), + ('bookSection', 'Book Section'), + ('thesis', 'Thesis'), + ) + language_choice = ( ('de', 'German'), ('en', 'English'), @@ -49,11 +56,10 @@ def filepath(instance, filename): ########################################## # -# basic information on publication and authors +# basic information on publications, citations and authors # ########################################### -# Create your models here. class Publication(models.Model): series = models.CharField( max_length=20, @@ -66,13 +72,14 @@ class Publication(models.Model): published = models.BooleanField(default=False) featured = models.BooleanField(default=False) publication_id = models.IntegerField(default=None) + publisher = models.CharField(**default_char) title = models.CharField(max_length=200) subtitle = models.CharField(max_length=200,default=None) pages = models.PositiveIntegerField() price = models.FloatField() - created_date = models.DateTimeField( + created_date = models.DateField( default = timezone.now) - published_date = models.DateTimeField( + published_date = models.DateField( blank=True, null=True) def publish(self): @@ -85,6 +92,36 @@ def __str__(self): class Meta: ordering = ('title',) + +class Citation(models.Model): + pub_type = models.CharField( + max_length=20, + choices=citation_choice, + default='book' + ) + language = models.CharField( + max_length=2, + choices=language_choice, + default='en') + title = models.CharField(max_length=200) + date = models.DateField( + blank=True, null=False) + place = models.CharField(max_length=200) + publisher = models.CharField(max_length=200) + volume = models.CharField(**default_char) + issue = models.CharField(**default_char) + pages = models.CharField(max_length=20, blank=True) + # No automatic idstring here, is there a way to achive this? + idstring = models.CharField(max_length=200) + + def __str__(self): + return self.title + + + class Meta: + ordering = ('title',) + + class Author(models.Model): firstname = models.CharField(max_length=50) lastname = models.CharField(max_length=100) @@ -97,7 +134,8 @@ class Author(models.Model): unique=True) homepage = models.CharField(**default_char) description = models.CharField(**default_char) - publications = models.ManyToManyField(Publication) + publications = models.ManyToManyField(Publication,blank=True) + citations = models.ManyToManyField(Citation,blank=True) born = models.DateField( blank=True, null=True) foto = models.ImageField(upload_to=filepath, blank=True) @@ -138,35 +176,48 @@ class CommonTextPart(models.Model): pdf = models.FileField(upload_to=filepath, blank=True) def __str__(self): - return (self.order + ':' + self.title) + return (str(self.order) + ':' + self.title) def idstring(self): base = instance.__class__.__name__.lower() - return (base + self.order) + return (base + str(self.order)) class Meta: abstract = True ordering = ('order',) + class Part(CommonTextPart): pass + class Chapter(CommonTextPart): - part = models.ForeignKey(Part, blank=True) + part = models.ForeignKey(Part, blank=True, null=True) + class Section(CommonTextPart): - part = models.ForeignKey(Part, blank=True) + part = models.ForeignKey(Part, blank=True, null=True) chapter = models.ForeignKey(Chapter, blank=False) + class Subsection(CommonTextPart): - part = models.ForeignKey(Part, blank=True) + part = models.ForeignKey(Part, blank=True, null=True) + chapter = models.ForeignKey(Chapter, blank=False) + section = models.ForeignKey(Section, blank=False) + + +class Subsubsection(CommonTextPart): + part = models.ForeignKey(Part, blank=True, null=True) chapter = models.ForeignKey(Chapter, blank=False) section = models.ForeignKey(Section, blank=False) + subsection = models.ForeignKey(Subsection, blank=False) + class Paragraph(CommonTextPart): - part = models.ForeignKey(Part, blank=True) - chapter = models.ForeignKey(Chapter, blank=True) - section = models.ForeignKey(Section, blank=True) - subsection = models.ForeignKey(Subsection, blank=True) + part = models.ForeignKey(Part, blank=True, null=True) + chapter = models.ForeignKey(Chapter, blank=True, null=True) + section = models.ForeignKey(Section, blank=True, null=True) + subsection = models.ForeignKey(Subsection, blank=True, null=True) + subsubsection = models.ForeignKey(Subsubsection, blank=True, null=True) text = models.TextField(blank=False) diff --git a/eoa/teidoc/baernighausen.xml b/eoa/teidoc/baernighausen.xml new file mode 100644 index 0000000..8c36f69 --- /dev/null +++ b/eoa/teidoc/baernighausen.xml @@ -0,0 +1,380 @@ + + + + + + Studies + Into The Archive + Curious Objects + Julia Bärnighausen + + + Edition Open Access + 2016-12-15 + + +

Converted from a Word document

+
+
+ + + text-decoration: line-through; + letter-spacing:0.3em + font-variant:small-caps + + +
+ + +
+

Hyperimage | PP

+

PP–1 "What I can name cannot really prick me. The incapacity to name is a good symptom of disturbance. […] The effect is certain but unlocatable, it does not find its sign, its name; it is sharp and yet lands in a vague zone of myself; it is acute yet muffled, it cries out in silence. Odd contradiction: a floating flash." (R. Barthes, Camera Lucida, 1981, Ch. 22, p. 51)

+
+ A 'Floating Flash' +

This quote from Roland Barthes' Camera Lucida does not refer to the material photo-object. Although he is undoubtedly aware of the materiality of the photographic process, Barthes is mainly interested in the emotional attraction of the image, the visual representation of what, for him, has once been there. There could be said a lot about this apparent desire for the indexical photograph that is ultimately never just indexical. However, I would like to focus on something else. What is so fascinating about Bathes' Camera Lucida is the pronounced commitment to affect, intuition and personal experience: a vague but striking appeal ("the floating flash"), an attraction to something unknown exactly because it is unknown, unnamed, unlocatable. In what follows I would like to engage in the description of some of those ambivalent objects from the photo library of the Kunsthistorisches Institut in Florenz. However, their 'punctum', to continue once more in Barthes-terms, is not just a visual sensation but also a material one deriving from the traces of use left behind on those photo-objects, from their age, inscriptions and so on. They are "curious objects" both in character (being extraordinary in one way or another) and in the sense that they provoke curiosity, a desire for inquiry – for finding out what is actually behind them and why they seem so striking to us.

+

This paper is an attempt to bridge the gap between the extraordinary and the canonic, between affect and objectivity in the archive by drawing on the notion of curiosity as a scientific concept, in order to help us understand how art history was shaped by the use of photographs and vice versa. It takes as it premise that an archive is a dynamic and hybrid space, an "ecosystem" as Elizabeth Edwards has pointed out – never neutral and ever changing.

+
+
+ Curious Objects +

PP–2 The photo library of the KHI holds more than 610.000 photographs of Italian art from late antiquity to the modern era focusing especially on central and northern Italy. Photographs were (and still are) instruments of art historical study. They would be handed around in class, put up on walls and laid out on tables in order to be described and compared. For this purpose the photographs had to be archived in a way that they could be consulted without too much difficulty while at the same time preserving them for future use. Like in many public photo libraries at this time, they were mounted on cardboards, inscribed, labeled and put in boxes, which were kept standing upright in shelves. They were classified according to a system that usually reflected the needs of their users, in our case: according to a canon of very well-known and established art historical categories: Painting, Sculpture, Architecture and the Applied Arts (very roughly speaking). It is the section mentioned last, the applied arts, that our project at the KHI focusses on and my examples relate to it. Its history and classification represent to some extent the status of the applied arts in the second half of the nineteenth century between a certain demarcation and an increasing appreciation. Of course, this is a very reduced summary of a rather large discourse... My colleague Stefanie Klamm will talk about this later in the case of the Kunstbibliothek in Berlin, which originally belonged to the museum of the applied arts and the became independent over time.

+

Now, what about those "curious objects"? PP–3 About a year ago we came across a view remarkable photographs in a section called 'duplicates'. This section is not part of the main holdings of the photo library. It is placed on the ground floor of the Palazzo Grifoni, where we also keep the inventory books, large format photographs, prints and drawings a. o. The seemingly marginal position of these photo boxes away from the main holdings piqued our curiosity. Inside we found piles of various photographs: some of them modern others historical prints, some pasted on the typical green KHI-cardboards and indeed labeled 'duplicates', some that had not been mounted or labelled at all and some that had cardboards and inscriptions unknown to us – like this one.

+

PP–4 Some of you know this photograph already, since I have presented it before. I chose it again, because it allows numerous connections, some of which we would like to visualize with the help of 'Hyperimage'. As explained before, 'Hyperimage' is a digital tool we will use for the online publication of the proceedings of our conference. Please note that it is not designed for talks. I am using it merely to exemplify some of its possibilities, i.e. to connect images on various levels. In a later stadium we will also be able to link them with texts.

+

Go to Hyperimage! This photograph is an albumen print mounted on cardboard. It shows a mirror on a white background with an ornamental frame. The glass of the mirror consists of seven compartments. It reflects sandy and cobble stone ground, several wooden boxes stacked over each other (one inscribed FRAGILE, here upside down as well back-to-front), above these boxes a photo camera covered up by a dark linen, next to the camera (very vaguely) the contours of maybe two legs (possibly those of the photographer taking the picture), behind the boxes a carriage and horse and in the background the façade of a building with an impressive entrance flanked by two columns supporting a balcony. Go to verso The back of the cardboard reveals a stamp of the "Galerie Sangiorgi" filled in by handwritten notes on the mirror. Across the stamp the comment "Vendu" tells us that the mirror was sold.

+

Research showed that the Galleria Sangiorgi was a renowned Roman auction house founded by the Italian entrepreneur Giuseppe Sangiorgi (1850–1928) in 1892 and that it was based in the Palazzo Borghese. Link In fact, the façade depicted in the image is that of the Palazzo Borghese in Rome. The mirror was photographed right in front of it on the street by daylight, which was common practice at the time. The photograph has also been retouched in several places: First, the white area surrounding the mirror was produced with the help of a so-called "mask" on the negative. Additionally, the diagonal dark scratches are characteristic for the use of a pen or pencil on the negative. Apparently, the photo was meant to show that the mirror was still fully functioning, which might be why the reflection was not eliminated entirely.

+

Coming back to Sangiorgi, it also transpired that, like many of his contemporaries, he kept a workshop where the antiquities from his collection were reproduced for sale by trained artists. Go back to PP PP–5 Browsing through the holdings of the Photothek, we found a series of similar photographs both in the 'duplicates' and in the main holdings, that can be attributed to the Galleria Sangiorgi and this studio, some of them containing even more and richer inscriptions: There are names and addresses of clients, information on the status of the objects (i.e. if there were sold) and on their prizes (which are usually encrypted by letters), as well as notes on negotiations and instructions on how to actually reproduce the artworks.

+

PP–6 It thus appears that, before their archival life at the KHI, these photos were strongly involved in the workings of the auction house. They seem to have been used as reference copies, communication devices and samples circulating amongst collectors, art-dealers, artists and photographers. Approaching the closure of the gallery in 1970, many were spread across different archives – one of them being the Fondazione Zeri in Bologna, who also hold a considerable number of Sangiorgi-photographs.

+

Now, what makes these photos "curious objects", is not only their striking visual insight (the perceived view into the past through the reflection of the mirror), but also their materiality and beauty, the exceptionally high number of inscriptions, the aesthetics of their age and of the traces and marks left behind. Also: Despite their fascinating qualities they were completely unknown to us until very recently. And even now, after some research, all we know is that some of the photos were inventoried retrospectively in the 1960s but probably entered the archive much earlier. A view of them came from the Biblioteca Hertziana in Rome, but for the most part we have not come across any information on their provenance yet. Their status as "curious objects" thus derives from a combination of material beauty, rareness and (to some extent and not in a bad way) ignorance. When ignorance is uncovered the experience of novelty goes along with it – the feeling of having "discovered" or "re-discovered" something that was unknown before.

+

In the project we have now and then touched on the narrative of discovery in the archive without really being able to contextualize it. I would like to propose that this narrative as well as the experiences described before (the wondering about objects based on certain criteria) might be connected to the long history of curiosity within the sciences and humanities, as Lorraine Daston and others have pointed out. We will come back to that later.

+
+
+ Into The Archive: Hybrid Spaces +

With the "re-discovery" of the Sangiorgi-"duplicates", which aren't even duplicates for the most part! (we checked), they were finally given inventory numbers and added to the database. However, they did not end up in the main holdings of the Photothek but in a section called "Cimelia Photographica" – the photographic "treasures" (so to say). It is a selection of historical photos from the Photothek dating roughly into the time between the 1850s and 1900. They are not only particularly old, but also especially interesting with regards to their materiality, their mounting, inscriptions, coloring and so on. Now, with their attribution to the Cimelia section, the archival value of the Sangiorgi-"duplicates" changed dramatically. Looking at this, these photographs are both "curious objects" and – as are all photographs in fact – hybrid objects combining not only various material and technical qualities, but also different histories, discourses and archival meanings. As Petra Wodtke will argue, they open up another space of meaning that is external to all the well-known dichotomies and instead embraces multiplicity – what Homi Bhabha calls "The Third Space". They are also part of larger transformation processes of both archival knowledge and meaning.

+

PP–7 Take this other photo-object on i.e.: According to the annotations this is a Florentine vase, dated into the seventeenth century, with the coats of arms of the Corsini-Medici. However, only by holding the cardboard close to your eyes and by turning it a little in your hands, you will actually be able to see this ominous vase! The slide mounted on a cardboard is not mentioned once, which to us seems very curious indeed. Obviously, the focus here was not on the material photo-object but on the art work depicted in it, which goes along with what has been the major function of the photo library for many years: to provide scholars with images of artworks. Contemporary users and scholars are increasingly interested in the materiality of photo-objects including their affective qualities, their archival itineraries and their role within larger transformation processes. Stefanie Klamm will come back to this later.

+
+
+ An Epistemology Of Curious Things? +

For some time now scholars on photography and photo-archives as well as historians of science and ideas have pointed to the essential role of seemingly marginal objects like our so-called "duplicates". Their separation from the main holdings forces us to re-examine what we consider to be important, useful or interesting according to the standards of our discipline. For art history in general and photo theory in particular the shift of emphasis from the canonic to the marginal, from the image depicted in the photo to the three-dimensional photo-object, may very well be connected to the dominance of visual history in the last view decades and the emergence of digital technology in combination with an increasing sense for their limits and – inspired by anthropology and archaeology a. o., a renewed desire to go back to the actual material artefact.

+

In any case, the seemingly marginal status of the formerly unknown Sangiorgi-photographs (but also their visual and material abundance) made them "curious" objects, which piqued our attention, and then turned them into not only canonic objects but "treasures". The emotionally motivated intervention of the archivists (us) caused a fundamental shift in the archival existence of the photographs. The responsibility of archivists regarding such decision making processes has been discussed extensively by Joan M. Schwartz an others.

+

One approach could be, to study the history of curiosity, to write a historical epistemology of curious things and curiosity. Or in other words: a study of the historical, technical and material preconditions, developments and consequences of the concept of curiosity in the humanities and sciences? Of course, scholars like Lorraine Daston, have done that – most of them starting in early modern Europe, where a particularly strong debate about curiosity and its status arose around 1500 and continued until at least 1800, including thinkers like Thomas Hobbes, Réne Decartes, Blaise Pascal, and David Hume. Very roughly speaking, this debate oscillated between vice and virtue, or, as Lorraine Daston puts it: "god and bad curiosity, legitimate and illegitimate knowledge" . Very roughly speaking, curiosity has been associated with bodily and intellectual desires, with lust, pride, greed, with wonder and strangeness and with an active, self-disciplining and constant pursuit of knowledge. Looking at this, it is not only an emotional concept based on experiences but also an intellectual and discursive one.

+

To consider our own (photo) archival experiences against the background of these early modern concepts and their reception would probably be a very promising task. In fact, the notion of curiosity in the photo-archive has been addressed by Elizabeth Edwards in 2013 who introduces the term as an alternative for (or maybe rather an extension to?) the concept of "gaze" in photo theory. Her study is part of a larger volume on African archives edited by Tamar Garb. Drawing on Michel Foucault Edwards describes curiosity as a "world-openness, even wonderment, a form of epistemic and conceptual inquisitiveness which opens up multiple meanings that stem from a consciousness of ignorance and the capacity for interest."

+

An epistemology of curious photo-objects and of curiosity in the photo-archive could be a chance to re-consider and to express our own practices and experiences without giving in to the prejudices that come along with the paradigm of objectivity. However, Edwards is right to point out that in instrumentalizing the concept of curiosity, we might not such much overcome the paradigm of objectivity but be in danger of objectifying and over-simplifying human experiences and relations, which is especially troubling when it comes to photographs of persons in, for example, colonial contexts. So far, I have concentrated on photographs of objects, works of the applied arts mainly. Like in the Kunstbibliothek's archive, persons rarely show up in the images and if so, only accidentally it seems. In the cases of the Antikensammlung and particularly of the Hahne-Niehoff-Archive, on the contrary, we are confronted with other, sometimes more painful, techniques of objectification and appropriation. In fact, I think that we are still struggling to mediate between photographs depicting objects and photographs that objectify. Persons, in particular.

+

All in all curiosity has its place in the sciences and humanities, as do any other scholarly concepts, and to deny that or the sentiments and experiences that go along with it, would be negligent at best, as again, Joan Schwartz has pointed out repeatedly.

+
+
+ Shaping Art History +

Finally, returning to the cardinal question, which is uncomfortable as well since we could yet not fully answer it: How exactly did photographs in archives shape art history and in what ways do they continue to do so?

+

Costanza Caraffa and others have shown how the academic use of photographs and the establishment of photo-archives in the second half of the nineteenth century did not just coincide with art historical methods like comparative viewing, stylistic analyses and connaisseurship, but how all of these aspects were mutually dependent. I already mentioned how photographs were collected and classified according to art historical standards at the Photothek of the KHI and how they were mounted on cardboards to make them manageable, mobile and tangible, which suited the comparative approach of art history.

+

However, from what we have seen so far in our project, none of these practices are exclusive to art history or Archaeology and Ethnology. Of course the themes of the photos vary, as do the motifs and intentions of scholars as well as their self-image, the perspectives on the photos, and the writings and ideas that are produced from or about them. But regarding the handling of photographs, there might not be too many differences after all: Interventions like coloring, cutting, pasting, mounting and retouching photographs were and are common practice to a certain extent. Maybe it is all much more symbiotic than we (or at least I) expected at first? Perhaps we just need to differentiate between more transdisciplinary and disciplinary aspects, things that the fours archives all have in common and those that they don't – take them apart one by one in order to generate a theory of knowledge that is open for differences as well as for transdisciplinary concepts. One of those transdisciplinary concepts could be the notion of curiosity.

+

A self-reflective history of curiosity in the photo-archive might be a means to ask especially critical and therefore uncomfortable questions i.e. about personal decision making. Like with the marginal objects (unnoticed at first and then unexpectedly revealing), the uncomfortable questions usually turn out to be the most important.

+
+ Bibliography + + + + Curiosity: How Science Became Interested in Everything + + Philip + Ball + + + University of Chicago Press + 2013 + +

Philip Ball: Curiosity. How Science Became Interested in Everything, London 2013.

+
+
+
+
+ + + Camera Lucida: Reflections on Photography + + Roland + Barthes + + + New York + Macmillan + 1981 + +

Roland Barthes: Camera Lucida. Reflections on Photography [1980], translated by Richard Howard, first engl. ed., New York 1981.

+
+
+
+
+ + + Curiosity: A Cultural History of Early Modern Inquiry + + Barbara M. + Benedict + + + Chicago + University of Chicago Press + 2001 + +

Barbara M. Benedict: Curiosity: A Cultural History of Early Modern Inquiry, Chicago 2001.

+
+
+
+
+ + + Photo Archives and the Photographic Memory of Art History + + Costanza + Caraffa + + + Deutscher Kunstverlag + Munich + 2011 + +

Costanza Caraffa (ed.): Photo Archives and the Photographic Memory of Art History, Munich 2011.

+
+
+
+
+ + + Il gusto di un’epoca e la Galleria Sangiorgi + + Francesca di + Castro + + + + Strenna dei Romanisti + + 76 + 203–2016 + 2015 + +

Francesca di Castro: Il gusto di un'epoca e la Galleria Sangiorgi, in: Strenna dei Romanisti, Rome 2015, pp. 203–216.

+
+
+
+
+ + + Archives, Records, and Power: Monographic Issue of Archival Science + + Terry + Cook + + + Joan M. + Schwartz + + + vol. 1 (issues 1–2), vol. 2 (issues 3–4) + International Journal on Recorded Information + 2002 + +

Terry Cook and Joan M. Schwartz (ed.): Archives, Records and Power. Monographic Issue of Archival Science. International Journal on Recorded Information, vol. 1 (ed. 1–2), vol. 2. (ed. 3–4), Sept. 2002.

+
+
+
+
+ + + Curiosity in Early Modern Science + + Lorraine + Daston + + + + Word & Image. A Journal of Verbal/Visual Enquiry + + 11 + 4 + 391–404 + 1995 + +

Lorraine Daston: Curiosity in Early Modern Science, in: Word & Image. A Journal of Verbal/Visual Enquiry, 11/4 (1995), pp. 391–404.

+
+
+
+
+ + + Wonders and the Order of Nature 1150–1750 + + Lorraine + Daston + + + Katharine + Park + + + New York + Zone Books + 1998 + +

Lorraine Daston and Katharine Park: Wonders and the Order of Nature 1150–1750, New York 1998.

+
+
+
+
+ + + All Curls and Pearls, review of Neil Kenney, \emphThe Uses of Curiosity in Early Modern France and Germany, Oxford 2004 + + Lorraine + Daston + + + + London Review of Books + + 27 + 12 + 37–38 + 2005 + +

Lorraine Daston: All Curls and Pearls, review of Neil Kenney, The Uses of Curiosity in Early Modern France and Germany, Oxford 2004, in: London Review of Books, vol. 27, no. 12, 23. June 2005, pp. 37–38.

+
+
+
+
+ + + Objectivity + + Lorraine + Daston + + + Peter + Galison + + + New York + MIT Press + 2007 + +

Lorraine Daston and Peter Galison: Objectivity, New York 2007

+
+
+
+
+ + + Photographs Objects Histories: On the Materiality of Images + + Elizabeth + Edwards + + + Janice + Hart + + + London + Routledge + 2004 + +

Elizabeth Edwards and Janice Hart (ed.): Photographs Objects Histories: On the Materiality of Images, London 2004.

+
+
+
+
+ + + Looking at Photographs: Between Contemplation, Curiosity and Gaze + + Elizabeth + Edwards + + + + Distance and Desire: Encounters with the African Archive + + T. + Garb + + + New York + 48–54 + Steidl + 2013 + +

Elizabeth Edwards: Looking at Photographs. Between Contemplation, Curiosity and Gaze, in: Distance and Desire: Encounters with the African Archive, ed. by T. Garb, Göttingen 2013, pp. 48–54.

+
+
+
+
+ + + The Uses of Curiosity in Early Modern France and Germany + + Neil + Kenney + + + Oxford + Oxford University Press + 2004 + +

Neil Kenney: The Uses of Curiosity in Early Modern France and Germany, Oxford 2004.

+
+
+
+
+ + + Collezionismo e mercato artistico a Roma tra '800 e '900: La Galleria Sangiorgi. Tesi di laurea in metodologia della ricerca storico-artistica + + Debora + Loiacono + + + 2008 + +

Debora Loiacono: Collezionismo e mercato artistico a Roma tra '800 e '900: La Galleria Sangiorgi. Tesi di laurea in metodologia della ricerca storico-artistica, supervisor: Alberto Cottino, Bologna, unpublished thesis in the Master of Arts, Bologna 2008.

+
+
+
+
+ + + Gli arredi ‘in stile’ della Galleria Sangiorgi di Roma e qualche appunto su Umberto Giunti alias Falsario in Calcinaccio + + Debora + Loiacono + + + + Vallori Tattili + + 105–116 + 2011 + +

Debora Loiacono.: Gli arredi 'in stile' della Galleria Sangiorgi di Roma e qualche appunto su Umberto Giunti alias Falsario in Calcinaccio, in: Vallori Tattili, No. 0, July–Dec. 2011, pp. 105–116.

+
+
+
+
+
+
+
+ Images +

1 Mirror Reflecting Camera, Carriage and Palazzo Borghese in Rome (2nd h. 18th c.), unidentified photographer, albumin print, c. 1900, 27,2 x 15,1 cm (photo), inv. no. 614519, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

2 Verso of Mirror Reflecting Camera, Carriage and Palazzo Borghese in Rome (2nd half 18th c.), inv. no. 614519, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

3 Mirror Reflecting Camera (18th c.), unidentified photographer, albumin print, c. 1900, 18,1 x 14,1 cm (cardboard), inv. no. 612102, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

4 Verso of Mirror Reflecting Camera (18th c.), inv. no. 612102, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

5 Mirror Reflecting Camera on Tripod and Photographer, unidentified photographer, collodion print, not mounted, c. 1900, 17 x 11,5 cm (photo), inv. no. 615904, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

6 Marble Basin, unidentified photographer, colored silver-gelatin print, after 1890, 12,9 x 21,3 cm (photo), inv. no. 612087, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

7 Verso of Marble Basin, inv. no. 612087, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

8 Chest of Drawers with Shadow of Camera and Head (18th c.), unidentified photographer, silver gelatin print on cardboard mount stamped 'sorted out as double', ca. 1900?, 16 x 17,3 cm (photo), inv. no. 176186, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

9 Boxes Containing 'Doubles' in the Photo Library, digital photograph, Stefano Fancelli, 2016, Kunsthistorisches Institut in Florenz – Max-Planck-Institut.

+

10 Postcard of Palazzo Borghese in Rome, Phot. Ernesto Richter, Roma, collotype, c. 1900–1940, 13,8 x 8,8 cm (photo), private collection Julia Bärnighausen.

+
+
+
+ +
+
From 9bc08ec4176070b25592ebe6c805971b8c4c6d85 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Tue, 11 Jul 2017 17:11:44 +0200 Subject: [PATCH 051/111] add docker-compose down and sleep to update files properly --- start_deploy.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/start_deploy.sh b/start_deploy.sh index 90fc5e9..02ee9e7 100644 --- a/start_deploy.sh +++ b/start_deploy.sh @@ -4,6 +4,10 @@ docker-compose build docker-compose pull +docker-compose down + +sleep 2 + docker-compose up -d postgres sleep 2 From 4cf701132e24d941aa1d77d6ddd9462aa6b75797 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Tue, 11 Jul 2017 17:19:55 +0200 Subject: [PATCH 052/111] removing volume from docker-compose, lots of migration errors --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index df41fd0..fc2de3b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -29,7 +29,7 @@ services: postgres: image: postgres:latest volumes: - - pg_data:/var/lib/postgresql + - pg_data volumes: pg_data: From 15a5fcafe9341caa6d2910305aacf0b610822514 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Tue, 11 Jul 2017 21:42:30 +0200 Subject: [PATCH 053/111] Remove volume from postgres, leads to migration errors --- docker-compose.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index fc2de3b..eb5b9a6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,9 +27,4 @@ services: - "8000" postgres: - image: postgres:latest - volumes: - - pg_data - -volumes: - pg_data: + image: postgres:latest \ No newline at end of file From f1d551869bdcf337e979c173b760dbc674959798 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Tue, 11 Jul 2017 21:43:51 +0200 Subject: [PATCH 054/111] Update start_deploy.sh --- start_deploy.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/start_deploy.sh b/start_deploy.sh index 02ee9e7..90fc5e9 100644 --- a/start_deploy.sh +++ b/start_deploy.sh @@ -4,10 +4,6 @@ docker-compose build docker-compose pull -docker-compose down - -sleep 2 - docker-compose up -d postgres sleep 2 From f4e7fbd5e01cb14bbb04c8fe1ffe8b0f911d5bbe Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 12 Jul 2017 15:59:28 +0200 Subject: [PATCH 055/111] Add assertRaises test --- .gitlab-ci.yml | 2 +- Dockerfile | 2 +- requirements.txt => config/requirements.txt | 0 docker-compose.yml | 2 +- eoa/migrations/0001_initial.py | 228 +++++++++++++++++++- eoa/migrations/0002_auto_20170705_1329.py | 20 -- eoa/migrations/0003_auto_20170711_1243.py | 216 ------------------- eoa/migrations/0004_auto_20170711_1251.py | 30 --- eoa/migrations/0005_auto_20170711_1306.py | 21 -- eoa/migrations/0006_paragraph.py | 41 ---- eoa/migrations/0007_auto_20170711_1629.py | 97 --------- eoa/migrations/0008_auto_20170711_1635.py | 25 --- eoa/migrations/0009_auto_20170711_1651.py | 21 -- eoa/migrations/0010_auto_20170711_1654.py | 51 ----- eoa/models.py | 54 ++--- eoa/tests.py | 15 ++ loaddjango.sh => scripts/loaddjango.sh | 0 scripts/run_local_tests.sh | 11 + scripts/run_tests.sh | 9 + start_deploy.sh => scripts/start_deploy.sh | 0 20 files changed, 285 insertions(+), 560 deletions(-) rename requirements.txt => config/requirements.txt (100%) delete mode 100644 eoa/migrations/0002_auto_20170705_1329.py delete mode 100644 eoa/migrations/0003_auto_20170711_1243.py delete mode 100644 eoa/migrations/0004_auto_20170711_1251.py delete mode 100644 eoa/migrations/0005_auto_20170711_1306.py delete mode 100644 eoa/migrations/0006_paragraph.py delete mode 100644 eoa/migrations/0007_auto_20170711_1629.py delete mode 100644 eoa/migrations/0008_auto_20170711_1635.py delete mode 100644 eoa/migrations/0009_auto_20170711_1651.py delete mode 100644 eoa/migrations/0010_auto_20170711_1654.py rename loaddjango.sh => scripts/loaddjango.sh (100%) create mode 100755 scripts/run_local_tests.sh create mode 100755 scripts/run_tests.sh rename start_deploy.sh => scripts/start_deploy.sh (100%) mode change 100644 => 100755 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index eae26b5..377e570 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -36,7 +36,7 @@ deploy: <<: *deploy stage: deploy script: - - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh start_deploy.sh " + - ssh -t cloud@$DEPLOYHOST "cd django/eoa-django-test && git pull && sh scripts/start_deploy.sh " environment: name: production url: http://141.5.105.187:8000 diff --git a/Dockerfile b/Dockerfile index bf74993..df0232f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,6 @@ FROM python:3.5 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code -ADD requirements.txt /code/ +ADD config/requirements.txt /code/ RUN pip3 install -r requirements.txt ADD . /code/ diff --git a/requirements.txt b/config/requirements.txt similarity index 100% rename from requirements.txt rename to config/requirements.txt diff --git a/docker-compose.yml b/docker-compose.yml index fc2de3b..c206907 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,7 @@ services: build: . environment: - ADMIN_PWD - command: sh loaddjango.sh + command: sh scripts/loaddjango.sh depends_on: - postgres volumes: diff --git a/eoa/migrations/0001_initial.py b/eoa/migrations/0001_initial.py index d5d9742..894982b 100644 --- a/eoa/migrations/0001_initial.py +++ b/eoa/migrations/0001_initial.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-05 11:18 +# Generated by Django 1.11.3 on 2017-07-12 13:58 from __future__ import unicode_literals +import django.core.validators from django.db import migrations, models import django.db.models.deletion -import django.utils.timezone +import eoa.models class Migration(migrations.Migration): @@ -19,23 +20,228 @@ class Migration(migrations.Migration): name='Author', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('firstname', models.CharField(max_length=50)), - ('lastname', models.CharField(max_length=100)), - ('middlenames', models.CharField(default=None, max_length=150)), - ('email', models.EmailField(blank=True, default=None, max_length=70, null=True, unique=True)), + ('firstname', models.CharField(max_length=200)), + ('lastname', models.CharField(max_length=200)), + ('middlenames', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('email', models.EmailField(blank=True, default=None, max_length=200, null=True, unique=True)), + ('homepage', models.URLField(blank=True, default=None, null=True)), + ('description', models.CharField(blank=True, default=None, max_length=200, null=True)), ('born', models.DateField(blank=True, null=True)), + ('foto', models.ImageField(blank=True, upload_to=eoa.models.filepath)), ], + options={ + 'ordering': ('lastname',), + }, ), migrations.CreateModel( - name='Publication', + name='Chapter', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField(validators=[django.core.validators.RegexValidator('^\\d{1,10}$')])), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ], + options={ + 'abstract': False, + 'ordering': ('order',), + }, + ), + migrations.CreateModel( + name='Citation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('pub_type', models.CharField(choices=[('book', 'Book'), ('journalArticle', 'Journal Article'), ('bookSection', 'Book Section'), ('thesis', 'Thesis')], default='book', max_length=20)), ('title', models.CharField(max_length=200)), - ('pages', models.IntegerField()), + ('date', models.IntegerField(blank=True, validators=[django.core.validators.RegexValidator('^\\d{1,10}$')])), + ('place', models.CharField(max_length=200)), + ('publisher', models.CharField(max_length=200)), + ('volume', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('issue', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('pages', models.CharField(blank=True, max_length=20)), + ('idstring', models.CharField(max_length=200)), + ], + options={ + 'ordering': ('title',), + }, + ), + migrations.CreateModel( + name='Paragraph', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField(validators=[django.core.validators.RegexValidator('^\\d{1,10}$')])), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('text', models.TextField()), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ('chapter', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), + ], + options={ + 'abstract': False, + 'ordering': ('order',), + }, + ), + migrations.CreateModel( + name='Part', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField(validators=[django.core.validators.RegexValidator('^\\d{1,10}$')])), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ], + options={ + 'abstract': False, + 'ordering': ('order',), + }, + ), + migrations.CreateModel( + name='Publication', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('series', models.CharField(choices=[('sources', 'Sources'), ('studies', 'Studies'), ('essays', 'Essays'), ('proceedings', 'Proceedings'), ('textbooks', 'Textbooks')], default='sources', max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('published', models.BooleanField(default=False)), + ('featured', models.BooleanField(default=False)), + ('publication_id', models.IntegerField(default=None)), + ('publisher', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('title', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('subtitle', models.CharField(blank=True, default=None, max_length=200, null=True)), + ('pages', models.PositiveIntegerField()), ('price', models.FloatField()), - ('created_date', models.DateTimeField(default=django.utils.timezone.now)), - ('published_date', models.DateTimeField(blank=True, null=True)), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Author')), + ('created_date', models.DateField(default=None, null=True)), + ('published_date', models.DateField(blank=True, default=None, null=True)), ], + options={ + 'ordering': ('title',), + }, + ), + migrations.CreateModel( + name='Section', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField(validators=[django.core.validators.RegexValidator('^\\d{1,10}$')])), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), + ('part', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part')), + ('publication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication')), + ], + options={ + 'abstract': False, + 'ordering': ('order',), + }, + ), + migrations.CreateModel( + name='Subsection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField(validators=[django.core.validators.RegexValidator('^\\d{1,10}$')])), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), + ('part', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part')), + ('publication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication')), + ('section', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Section')), + ], + options={ + 'abstract': False, + 'ordering': ('order',), + }, + ), + migrations.CreateModel( + name='Subsubsection', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(blank=True, max_length=200)), + ('order', models.PositiveIntegerField(validators=[django.core.validators.RegexValidator('^\\d{1,10}$')])), + ('number', models.CharField(blank=True, max_length=20)), + ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), + ('doi', models.CharField(blank=True, max_length=200)), + ('citation', models.CharField(blank=True, max_length=200)), + ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), + ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), + ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), + ('part', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part')), + ('publication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication')), + ('section', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Section')), + ('subsection', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection')), + ], + options={ + 'abstract': False, + 'ordering': ('order',), + }, + ), + migrations.AddField( + model_name='part', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + migrations.AddField( + model_name='paragraph', + name='part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AddField( + model_name='paragraph', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + migrations.AddField( + model_name='paragraph', + name='section', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Section'), + ), + migrations.AddField( + model_name='paragraph', + name='subsection', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection'), + ), + migrations.AddField( + model_name='paragraph', + name='subsubsection', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsubsection'), + ), + migrations.AddField( + model_name='chapter', + name='part', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), + ), + migrations.AddField( + model_name='chapter', + name='publication', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), + ), + migrations.AddField( + model_name='author', + name='citations', + field=models.ManyToManyField(blank=True, related_name='was_cited', to='eoa.Citation'), + ), + migrations.AddField( + model_name='author', + name='publications', + field=models.ManyToManyField(blank=True, related_name='has_published', to='eoa.Publication'), ), ] diff --git a/eoa/migrations/0002_auto_20170705_1329.py b/eoa/migrations/0002_auto_20170705_1329.py deleted file mode 100644 index 1fa03c6..0000000 --- a/eoa/migrations/0002_auto_20170705_1329.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-05 11:29 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='author', - name='middlenames', - field=models.CharField(default=None, max_length=150, null=True), - ), - ] diff --git a/eoa/migrations/0003_auto_20170711_1243.py b/eoa/migrations/0003_auto_20170711_1243.py deleted file mode 100644 index 5083625..0000000 --- a/eoa/migrations/0003_auto_20170711_1243.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 10:43 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import eoa.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0002_auto_20170705_1329'), - ] - - operations = [ - migrations.CreateModel( - name='Chapter', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=200)), - ('order', models.PositiveIntegerField()), - ('number', models.CharField(blank=True, max_length=20)), - ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), - ('doi', models.CharField(blank=True, max_length=200)), - ('citation', models.CharField(blank=True, max_length=200)), - ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), - ], - options={ - 'ordering': ('order',), - 'abstract': False, - }, - ), - migrations.CreateModel( - name='Part', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=200)), - ('order', models.PositiveIntegerField()), - ('number', models.CharField(blank=True, max_length=20)), - ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), - ('doi', models.CharField(blank=True, max_length=200)), - ('citation', models.CharField(blank=True, max_length=200)), - ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), - ], - options={ - 'ordering': ('order',), - 'abstract': False, - }, - ), - migrations.CreateModel( - name='Section', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=200)), - ('order', models.PositiveIntegerField()), - ('number', models.CharField(blank=True, max_length=20)), - ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), - ('doi', models.CharField(blank=True, max_length=200)), - ('citation', models.CharField(blank=True, max_length=200)), - ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), - ], - options={ - 'ordering': ('order',), - 'abstract': False, - }, - ), - migrations.CreateModel( - name='Subsection', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=200)), - ('order', models.PositiveIntegerField()), - ('number', models.CharField(blank=True, max_length=20)), - ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), - ('doi', models.CharField(blank=True, max_length=200)), - ('citation', models.CharField(blank=True, max_length=200)), - ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), - ], - options={ - 'ordering': ('order',), - 'abstract': False, - }, - ), - migrations.AlterModelOptions( - name='author', - options={'ordering': ('lastname',)}, - ), - migrations.AlterModelOptions( - name='publication', - options={'ordering': ('title',)}, - ), - migrations.RemoveField( - model_name='author', - name='middlenames', - ), - migrations.RemoveField( - model_name='publication', - name='author', - ), - migrations.AddField( - model_name='author', - name='foto', - field=models.ImageField(blank=True, upload_to='authors'), - ), - migrations.AddField( - model_name='author', - name='publications', - field=models.ManyToManyField(to='eoa.Publication'), - ), - migrations.AddField( - model_name='publication', - name='featured', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='publication', - name='language', - field=models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2), - ), - migrations.AddField( - model_name='publication', - name='publication_id', - field=models.IntegerField(default=None), - ), - migrations.AddField( - model_name='publication', - name='published', - field=models.BooleanField(default=False), - ), - migrations.AddField( - model_name='publication', - name='series', - field=models.CharField(choices=[('sources', 'Sources'), ('studies', 'Studies'), ('essays', 'Essays'), ('proceedings', 'Proceedings'), ('textbooks', 'Textbooks')], default='sources', max_length=20), - ), - migrations.AddField( - model_name='publication', - name='subtitle', - field=models.CharField(default=None, max_length=200), - ), - migrations.AlterField( - model_name='publication', - name='pages', - field=models.PositiveIntegerField(), - ), - migrations.AddField( - model_name='subsection', - name='authors', - field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), - ), - migrations.AddField( - model_name='subsection', - name='chapter', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter'), - ), - migrations.AddField( - model_name='subsection', - name='part', - field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - migrations.AddField( - model_name='subsection', - name='publication', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), - ), - migrations.AddField( - model_name='subsection', - name='section', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Section'), - ), - migrations.AddField( - model_name='section', - name='authors', - field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), - ), - migrations.AddField( - model_name='section', - name='chapter', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter'), - ), - migrations.AddField( - model_name='section', - name='part', - field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - migrations.AddField( - model_name='section', - name='publication', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), - ), - migrations.AddField( - model_name='part', - name='authors', - field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), - ), - migrations.AddField( - model_name='part', - name='publication', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), - ), - migrations.AddField( - model_name='chapter', - name='authors', - field=models.ManyToManyField(blank=True, default=None, to='eoa.Author'), - ), - migrations.AddField( - model_name='chapter', - name='part', - field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - migrations.AddField( - model_name='chapter', - name='publication', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), - ), - ] diff --git a/eoa/migrations/0004_auto_20170711_1251.py b/eoa/migrations/0004_auto_20170711_1251.py deleted file mode 100644 index 56969fb..0000000 --- a/eoa/migrations/0004_auto_20170711_1251.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 10:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0003_auto_20170711_1243'), - ] - - operations = [ - migrations.AddField( - model_name='author', - name='description', - field=models.CharField(blank=True, default=None, max_length=200, null=True), - ), - migrations.AddField( - model_name='author', - name='homepage', - field=models.CharField(blank=True, default=None, max_length=200, null=True), - ), - migrations.AddField( - model_name='author', - name='middlenames', - field=models.CharField(blank=True, default=None, max_length=200, null=True), - ), - ] diff --git a/eoa/migrations/0005_auto_20170711_1306.py b/eoa/migrations/0005_auto_20170711_1306.py deleted file mode 100644 index 544f0b9..0000000 --- a/eoa/migrations/0005_auto_20170711_1306.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 11:06 -from __future__ import unicode_literals - -from django.db import migrations, models -import eoa.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0004_auto_20170711_1251'), - ] - - operations = [ - migrations.AlterField( - model_name='author', - name='foto', - field=models.ImageField(blank=True, upload_to=eoa.models.filepath), - ), - ] diff --git a/eoa/migrations/0006_paragraph.py b/eoa/migrations/0006_paragraph.py deleted file mode 100644 index d7897ab..0000000 --- a/eoa/migrations/0006_paragraph.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 13:03 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import eoa.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0005_auto_20170711_1306'), - ] - - operations = [ - migrations.CreateModel( - name='Paragraph', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=200)), - ('order', models.PositiveIntegerField()), - ('number', models.CharField(blank=True, max_length=20)), - ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), - ('doi', models.CharField(blank=True, max_length=200)), - ('citation', models.CharField(blank=True, max_length=200)), - ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), - ('text', models.TextField()), - ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), - ('chapter', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), - ('part', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part')), - ('publication', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication')), - ('section', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Section')), - ('subsection', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection')), - ], - options={ - 'ordering': ('order',), - 'abstract': False, - }, - ), - ] diff --git a/eoa/migrations/0007_auto_20170711_1629.py b/eoa/migrations/0007_auto_20170711_1629.py deleted file mode 100644 index aa3aa35..0000000 --- a/eoa/migrations/0007_auto_20170711_1629.py +++ /dev/null @@ -1,97 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 14:29 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import eoa.models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0006_paragraph'), - ] - - operations = [ - migrations.CreateModel( - name='Citation', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('pub_type', models.CharField(choices=[('book', 'Book'), ('journalArticle', 'Journal Article'), ('bookSection', 'Book Section'), ('thesis', 'Thesis')], default='book', max_length=20)), - ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='en', max_length=2)), - ('title', models.CharField(max_length=200)), - ('date', models.DateField(blank=True)), - ('place', models.CharField(max_length=200)), - ('publisher', models.CharField(max_length=200)), - ('volume', models.CharField(blank=True, default=None, max_length=200, null=True)), - ('issue', models.CharField(blank=True, default=None, max_length=200, null=True)), - ('pages', models.CharField(blank=True, max_length=20)), - ('idstring', models.CharField(max_length=200)), - ], - options={ - 'ordering': ('title',), - }, - ), - migrations.CreateModel( - name='Subsubsection', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(blank=True, max_length=200)), - ('order', models.PositiveIntegerField()), - ('number', models.CharField(blank=True, max_length=20)), - ('language', models.CharField(choices=[('de', 'German'), ('en', 'English'), ('it', 'Italian')], default='de', max_length=2)), - ('doi', models.CharField(blank=True, max_length=200)), - ('citation', models.CharField(blank=True, max_length=200)), - ('pdf', models.FileField(blank=True, upload_to=eoa.models.filepath)), - ('authors', models.ManyToManyField(blank=True, default=None, to='eoa.Author')), - ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter')), - ('part', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part')), - ], - options={ - 'abstract': False, - 'ordering': ('order',), - }, - ), - migrations.AddField( - model_name='publication', - name='publisher', - field=models.CharField(blank=True, default=None, max_length=200, null=True), - ), - migrations.AlterField( - model_name='publication', - name='created_date', - field=models.DateField(default=django.utils.timezone.now), - ), - migrations.AlterField( - model_name='publication', - name='published_date', - field=models.DateField(blank=True, null=True), - ), - migrations.AddField( - model_name='subsubsection', - name='publication', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Publication'), - ), - migrations.AddField( - model_name='subsubsection', - name='section', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Section'), - ), - migrations.AddField( - model_name='subsubsection', - name='subsection', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection'), - ), - migrations.AddField( - model_name='author', - name='citations', - field=models.ManyToManyField(to='eoa.Citation'), - ), - migrations.AddField( - model_name='paragraph', - name='subsubsection', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsubsection'), - ), - ] diff --git a/eoa/migrations/0008_auto_20170711_1635.py b/eoa/migrations/0008_auto_20170711_1635.py deleted file mode 100644 index 29a8f7c..0000000 --- a/eoa/migrations/0008_auto_20170711_1635.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 14:35 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0007_auto_20170711_1629'), - ] - - operations = [ - migrations.AlterField( - model_name='author', - name='citations', - field=models.ManyToManyField(blank=True, to='eoa.Citation'), - ), - migrations.AlterField( - model_name='author', - name='publications', - field=models.ManyToManyField(blank=True, to='eoa.Publication'), - ), - ] diff --git a/eoa/migrations/0009_auto_20170711_1651.py b/eoa/migrations/0009_auto_20170711_1651.py deleted file mode 100644 index 0bda7ff..0000000 --- a/eoa/migrations/0009_auto_20170711_1651.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 14:51 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0008_auto_20170711_1635'), - ] - - operations = [ - migrations.AlterField( - model_name='chapter', - name='part', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - ] diff --git a/eoa/migrations/0010_auto_20170711_1654.py b/eoa/migrations/0010_auto_20170711_1654.py deleted file mode 100644 index 8839fa2..0000000 --- a/eoa/migrations/0010_auto_20170711_1654.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.3 on 2017-07-11 14:54 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('eoa', '0009_auto_20170711_1651'), - ] - - operations = [ - migrations.AlterField( - model_name='paragraph', - name='chapter', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Chapter'), - ), - migrations.AlterField( - model_name='paragraph', - name='part', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - migrations.AlterField( - model_name='paragraph', - name='section', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Section'), - ), - migrations.AlterField( - model_name='paragraph', - name='subsection', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Subsection'), - ), - migrations.AlterField( - model_name='section', - name='part', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - migrations.AlterField( - model_name='subsection', - name='part', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - migrations.AlterField( - model_name='subsubsection', - name='part', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='eoa.Part'), - ), - ] diff --git a/eoa/models.py b/eoa/models.py index 5f0148c..f15d9c8 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -1,5 +1,6 @@ from django.db import models from django.utils import timezone +from django.core.validators import URLValidator, RegexValidator ################################################# # @@ -51,7 +52,7 @@ def filepath(instance, filename): 'max_length':200, 'default':None, 'blank':True, - 'null':True + 'null':True, } ########################################## @@ -73,17 +74,20 @@ class Publication(models.Model): featured = models.BooleanField(default=False) publication_id = models.IntegerField(default=None) publisher = models.CharField(**default_char) - title = models.CharField(max_length=200) - subtitle = models.CharField(max_length=200,default=None) + title = models.CharField(**default_char) + subtitle = models.CharField(**default_char) pages = models.PositiveIntegerField() price = models.FloatField() created_date = models.DateField( - default = timezone.now) + default =None, + null=True) published_date = models.DateField( - blank=True, null=True) + blank=True, + null=True, + default=None) def publish(self): - self.published_date = timezone.now() + self.published_date = timezone.now().year self.save() def __str__(self): @@ -99,13 +103,11 @@ class Citation(models.Model): choices=citation_choice, default='book' ) - language = models.CharField( - max_length=2, - choices=language_choice, - default='en') title = models.CharField(max_length=200) - date = models.DateField( - blank=True, null=False) + date = models.IntegerField( + blank=True, + null=False, + validators=[RegexValidator(r'^\d{1,10}$')]) place = models.CharField(max_length=200) publisher = models.CharField(max_length=200) volume = models.CharField(**default_char) @@ -117,31 +119,33 @@ class Citation(models.Model): def __str__(self): return self.title - class Meta: ordering = ('title',) class Author(models.Model): - firstname = models.CharField(max_length=50) - lastname = models.CharField(max_length=100) + firstname = models.CharField(max_length=200, blank=False) + lastname = models.CharField(max_length=200, blank=False) middlenames = models.CharField(**default_char) email = models.EmailField( - default=None, - max_length=70, - blank=True, - null=True, + **default_char, unique=True) - homepage = models.CharField(**default_char) + homepage = models.URLField(**default_char) description = models.CharField(**default_char) - publications = models.ManyToManyField(Publication,blank=True) - citations = models.ManyToManyField(Citation,blank=True) + publications = models.ManyToManyField( + Publication, + blank=True, + related_name='has_published') + citations = models.ManyToManyField( + Citation, + blank=True, + related_name='was_cited') born = models.DateField( blank=True, null=True) foto = models.ImageField(upload_to=filepath, blank=True) def edit_birthday(self): - self.born = timezone.now() + self.born = datetime.now() self.save() def __str__(self): @@ -161,7 +165,9 @@ class Meta: class CommonTextPart(models.Model): publication = models.ForeignKey(Publication) title = models.CharField(max_length=200, blank=True) - order = models.PositiveIntegerField(null=False) + order = models.PositiveIntegerField( + null=False, + validators=[RegexValidator(r'^\d{1,10}$')]) number = models.CharField(max_length=20, blank=True) language = models.CharField( max_length=2, diff --git a/eoa/tests.py b/eoa/tests.py index 480db31..dc74dae 100644 --- a/eoa/tests.py +++ b/eoa/tests.py @@ -2,9 +2,14 @@ from django.test import TestCase from django.utils import timezone +from django.db.utils import IntegrityError from .models import Author +from django.core.exceptions import ValidationError, NON_FIELD_ERRORS + + + class AuthorModelTests(TestCase): def setUp(self): Author.objects.create( @@ -27,3 +32,13 @@ def test_string_output(self): user2 = Author.objects.get(firstname='Test2') self.assertEqual(user.__str__(), 'Test D. Ußer') self.assertEqual(user2.email,None) + + def testUniqueEmail(self): + with self.assertRaises(IntegrityError): + Author.objects.create( + firstname='Mer', + lastname='Bauer', + email='test@test.ert') + +class AuthorFormTests(TestCase): + pass diff --git a/loaddjango.sh b/scripts/loaddjango.sh similarity index 100% rename from loaddjango.sh rename to scripts/loaddjango.sh diff --git a/scripts/run_local_tests.sh b/scripts/run_local_tests.sh new file mode 100755 index 0000000..e27a049 --- /dev/null +++ b/scripts/run_local_tests.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +pth=$(pwd) +prjdir=${pth%/*} + +#cd $prjdir + +python manage.py makemigrations eoa --settings=eoasite.settings_local +python manage.py migrate eoa --settings=eoasite.settings_local +python manage.py migrate --settings=eoasite.settings_local +python manage.py test --settings=eoasite.settings_local diff --git a/scripts/run_tests.sh b/scripts/run_tests.sh new file mode 100755 index 0000000..7255dcb --- /dev/null +++ b/scripts/run_tests.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +cd .. + +python manage.py makemigrations eoa +python manage.py migrate eoa +python manage.py makemigrations +python manage.py migrate +python manage.py test diff --git a/start_deploy.sh b/scripts/start_deploy.sh old mode 100644 new mode 100755 similarity index 100% rename from start_deploy.sh rename to scripts/start_deploy.sh From cd97a7c3660253596c6cb747924b19956ab9ee92 Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 12 Jul 2017 16:01:27 +0200 Subject: [PATCH 056/111] chg folder strct --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 377e570..810a5bb 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,7 +25,7 @@ all_tests: <<: *test stage: test script: - - pip install -r requirements.txt + - pip install -r config/requirements.txt - python manage.py makemigrations eoa - python manage.py migrate eoa - python manage.py makemigrations From 92fdebd45597c3949f79f84f15c10c98eb5a8b4c Mon Sep 17 00:00:00 2001 From: "malte.vogl" Date: Wed, 12 Jul 2017 16:07:05 +0200 Subject: [PATCH 057/111] fix emailfield **def not working --- eoa/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eoa/models.py b/eoa/models.py index f15d9c8..670def5 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -128,7 +128,9 @@ class Author(models.Model): lastname = models.CharField(max_length=200, blank=False) middlenames = models.CharField(**default_char) email = models.EmailField( - **default_char, + default=None, + blank=True, + null=True, unique=True) homepage = models.URLField(**default_char) description = models.CharField(**default_char) From 99788fab10247e9fd3adaa28eb2a009c7ee18685 Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Fri, 21 Jul 2017 15:01:06 +0200 Subject: [PATCH 058/111] Add publications app, starting templates --- eoa/migrations/0002_auto_20170721_1348.py | 56 ++++ eoa/models.py | 6 +- eoa/tests.py | 2 +- eoasite/settings.py | 2 + eoasite/settings_local.py | 2 + eoasite/urls.py | 3 +- publications/__init__.py | 0 publications/admin.py | 3 + publications/apps.py | 5 + publications/migrations/__init__.py | 0 publications/models.py | 3 + publications/templates/publications/base.html | 263 ++++++++++++++++++ .../templates/publications/eoa_default.html | 24 ++ .../templates/publications/index.html | 42 +++ .../publications/publication_base.html | 133 +++++++++ .../templates/publications/test_index.html | 31 +++ publications/templatetags/__init__.py | 0 publications/templatetags/equation.py | 23 ++ publications/tests.py | 3 + publications/urls.py | 8 + publications/views.py | 51 ++++ 21 files changed, 657 insertions(+), 3 deletions(-) create mode 100644 eoa/migrations/0002_auto_20170721_1348.py create mode 100644 publications/__init__.py create mode 100644 publications/admin.py create mode 100644 publications/apps.py create mode 100644 publications/migrations/__init__.py create mode 100644 publications/models.py create mode 100644 publications/templates/publications/base.html create mode 100644 publications/templates/publications/eoa_default.html create mode 100644 publications/templates/publications/index.html create mode 100644 publications/templates/publications/publication_base.html create mode 100644 publications/templates/publications/test_index.html create mode 100644 publications/templatetags/__init__.py create mode 100644 publications/templatetags/equation.py create mode 100644 publications/tests.py create mode 100644 publications/urls.py create mode 100644 publications/views.py diff --git a/eoa/migrations/0002_auto_20170721_1348.py b/eoa/migrations/0002_auto_20170721_1348.py new file mode 100644 index 0000000..b17d932 --- /dev/null +++ b/eoa/migrations/0002_auto_20170721_1348.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.3 on 2017-07-21 11:48 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='paragraph', + options={}, + ), + migrations.RemoveField( + model_name='paragraph', + name='authors', + ), + migrations.RemoveField( + model_name='paragraph', + name='citation', + ), + migrations.RemoveField( + model_name='paragraph', + name='doi', + ), + migrations.RemoveField( + model_name='paragraph', + name='language', + ), + migrations.RemoveField( + model_name='paragraph', + name='number', + ), + migrations.RemoveField( + model_name='paragraph', + name='order', + ), + migrations.RemoveField( + model_name='paragraph', + name='pdf', + ), + migrations.RemoveField( + model_name='paragraph', + name='title', + ), + migrations.AlterField( + model_name='author', + name='email', + field=models.EmailField(blank=True, default=None, max_length=254, null=True, unique=True), + ), + ] diff --git a/eoa/models.py b/eoa/models.py index 670def5..c0aeb87 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -222,10 +222,14 @@ class Subsubsection(CommonTextPart): subsection = models.ForeignKey(Subsection, blank=False) -class Paragraph(CommonTextPart): +class Paragraph(models.Model): + publication = models.ForeignKey(Publication) part = models.ForeignKey(Part, blank=True, null=True) chapter = models.ForeignKey(Chapter, blank=True, null=True) section = models.ForeignKey(Section, blank=True, null=True) subsection = models.ForeignKey(Subsection, blank=True, null=True) subsubsection = models.ForeignKey(Subsubsection, blank=True, null=True) text = models.TextField(blank=False) + + def __str__(self): + return (str(self.text)[:30]) diff --git a/eoa/tests.py b/eoa/tests.py index dc74dae..29781ac 100644 --- a/eoa/tests.py +++ b/eoa/tests.py @@ -4,7 +4,7 @@ from django.utils import timezone from django.db.utils import IntegrityError -from .models import Author +from .models import Author, Publication from django.core.exceptions import ValidationError, NON_FIELD_ERRORS diff --git a/eoasite/settings.py b/eoasite/settings.py index eaa92af..9e0bd4c 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -37,7 +37,9 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'sekizai', 'eoa', + 'publications', ] MIDDLEWARE = [ diff --git a/eoasite/settings_local.py b/eoasite/settings_local.py index 5b7dd91..f9aa1f5 100644 --- a/eoasite/settings_local.py +++ b/eoasite/settings_local.py @@ -37,7 +37,9 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'sekizai', 'eoa', + 'publications', ] MIDDLEWARE = [ diff --git a/eoasite/urls.py b/eoasite/urls.py index 5fa4a8f..d9223df 100644 --- a/eoasite/urls.py +++ b/eoasite/urls.py @@ -13,9 +13,10 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url +from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), + url(r'^publications/', include('publications.urls')), ] diff --git a/publications/__init__.py b/publications/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/publications/admin.py b/publications/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/publications/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/publications/apps.py b/publications/apps.py new file mode 100644 index 0000000..2672905 --- /dev/null +++ b/publications/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class PublicationsConfig(AppConfig): + name = 'publications' diff --git a/publications/migrations/__init__.py b/publications/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/publications/models.py b/publications/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/publications/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/publications/templates/publications/base.html b/publications/templates/publications/base.html new file mode 100644 index 0000000..6cbeee3 --- /dev/null +++ b/publications/templates/publications/base.html @@ -0,0 +1,263 @@ +{% load i18n admin_static %} +{% load static %} +{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %} + + + + + {% block title %}Max Planck Research Library{% endblock %} + + + + + + + {% render_block "css" %} + {% block metatags %} + {% endblock %} + + {% block blockbots %}{% endblock %} + + + + + + + + + + + + + + + + + + {% comment %} + + + + {% endcomment %} + + + + + + + + + + + + + + + + + + + + + + {% cms_toolbar %} + +
+
+ {% comment %} + Hier ist das Hauptmenü, das abhängig von der jeweiligen Reihe gestaltet wird + Verschiedene Styles einführen + + {% endcomment %} + + {% if Style == 'MPRL' %} + {% include "includes/mprl_header.html" %} + {% elif Style == 'EOS' %} + {% include "includes/eos_header.html" %} + {% elif Style == 'Portal' %} + {% include "includes/mprl_header.html" %} + {% elif Style == 'eoa-eos' %} + {% include "includes/eoa-eos_header.html" %} + {% else %} + {% include "includes/umbrella_header.html" %} + {% endif %} + + + {% comment %} + {% if Style == 'MPRL' %} + {% include "includes/mprl_header.html" %} + {% endif %} + {% if Style == 'EOS' %} + {% include "includes/eos_header.html" %} + {% endif %} + {% if Style == 'Portal' %} + {% include "includes/mprl_header.html" %} + {% endif %} + {% if Style == 'eoa-eos' %} + {% include "includes/eoa-eos_header.html" %} + {% endif %} + {% endcomment %} + +
+ +
+
+ + +
+
+ + + +
+ {% placeholder base_content %} + {% block base_content %}{% endblock %} + {% render_block "js" %} + +
+ +
+
+ {% comment %} + Hier ist der Footer in Abhängigkeit von den Serien + {% endcomment %} + {% if Style == 'MPRL' %} + {% include "includes/mprl_footer.html" %} + {% endif %} + {% if Style == 'EOS' %} + {% include "includes/eos_footer.html" %} + {% endif %} + {% if Style == 'Portal' %} + {% include "includes/portal_footer.html" %} + {% endif %} +
+ +
+ + +
+ + diff --git a/publications/templates/publications/eoa_default.html b/publications/templates/publications/eoa_default.html new file mode 100644 index 0000000..3f0eb8f --- /dev/null +++ b/publications/templates/publications/eoa_default.html @@ -0,0 +1,24 @@ +{% extends "publications/base.html" %} + +
+
+
+
+ {% include "includes/eos_header.html" %} +
+
+ {% block base_content %} + + {% block content %} + {% endblock %} + + {% endblock %} + + {% comment %} + {% placeholder base_content %} + {% block base_content %} + {% endblock %} + {% render_block "js" %} + {% endcomment %} +
+
diff --git a/publications/templates/publications/index.html b/publications/templates/publications/index.html new file mode 100644 index 0000000..272b4e0 --- /dev/null +++ b/publications/templates/publications/index.html @@ -0,0 +1,42 @@ +{% extends "publications/publication_base.html" %} +{% block below %} + + + +

{{ Publication.Descriptionlong|safe }}

+ + + +{% if Publication.Additionalinfo %} + +
+ {{ Publication.Additionalinfo|safe }} +
+ +{% endif %} + +{% endblock %} diff --git a/publications/templates/publications/publication_base.html b/publications/templates/publications/publication_base.html new file mode 100644 index 0000000..0f49309 --- /dev/null +++ b/publications/templates/publications/publication_base.html @@ -0,0 +1,133 @@ +{% extends 'publications/eoa_default.html' %} + +{% block content %} +
+
+ +{% block left %} +

+{% endblock %} +
+
+{%block middle %} + +

{{ Publication.get_Serie_display }} {{ Publication.Number }}

+

{{ Publication.Title|safe }}

+ {% if Publication.Subtitle %} +
{{ Publication.Subtitle|safe }}
+ {% endif %} +

+ {% if Publication.Publicationauthor1 %} + {{ Publication.Publicationauthor1 }}{% if Publication.Publicationauthor2 %}, + {{ Publication.Publicationauthor2 }}{% if Publication.Publicationauthor3 %}, + {{ Publication.Publicationauthor3 }}{% if Publication.Publicationauthor4 %}, + {{ Publication.Publicationauthor4 }}{% if Publication.Publicationauthor5 %}, + {{ Publication.Publicationauthor5 }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% if Publication.Publicationauthorsuffix %} + {{ Publication.Publicationauthorsuffix }} + {% endif %} +

+

 

+

{% if Publication.Submitter %}Submitted by: {{ Publication.Submitter }}
{% endif %} + {% if Publication.Editorialcoordination %}Editorial Coordination: {{ Publication.Editorialcoordination|safe }}
{% endif %} + {% if Publication.Copyeditor %}Copyedited by: {{ Publication.Copyeditor|safe }}
{% endif %} + {% if Publication.Translator %}{{ Publication.Translator|safe }}
{% endif %} +

+ +{% endblock %} +
+
+{% block right %} + +
+ ISBN: {{ Publication.Isbn }}
+ Price: {{ Publication.Price }} {% if Publication.Pages %}| {{ Publication.Pages }} p.{% endif %}
+ + Print on Demand: {{ Publication.Shoplink|safe }}
+ Booksellers can order directly via email at verlagservice@sigloch.de.
+ + Publication Date: {{ Publication.Datepublished }}
+ {% if Publication.Doilink %}DOI: {{ Publication.Doilink }}{% endif %} +
+
+ + +
+ Read online + {% if Publication.Publicationpdffile %} Download PDF ({{ Publication.Publicationpdffile.size|filesizeformat }}){% endif %} + {% if Publication.Publicationebookfile %} Download Ebook ({{ Publication.Publicationebookfile.size|filesizeformat }}){% endif %} + + +
+ + +
+ + {% if Publication.Publicationlicense == "by-nc-sa" %} +

This publication is licensed under a Creative Commons Attribution-Non Commercial-Share Alike 3.0 Germany (cc by-nc-sa 3.0) Licence.

+ {% endif %} +
+ +{% endblock %} + +
+
+
+
+{% block below %} + + +{% endblock %} +
+
+ + +{% endblock %} + +{% block breadcrumb %} + +{% endblock %} + + + +{% block title %} +Edition Open Access | {{ Publication.Title }} +{% endblock %} +{% block metatags %} + + +{% if Publication.Publicationauthor1 %}{% endif %} +{% if Publication.Publicationauthor2 %}{% endif %} +{% if Publication.Publicationauthor3 %}{% endif %} +{% if Publication.Publicationauthor4 %}{% endif %} +{% if Publication.Publicationauthor5 %}{% endif %} + + + + + +{% if Publication.Publicationauthor1 %}{% endif %} +{% if Publication.Publicationauthor2 %}{% endif %} +{% if Publication.Publicationauthor3 %}{% endif %} +{% if Publication.Publicationauthor4 %}{% endif %} +{% if Publication.Publicationauthor5 %}{% endif %} + +{% endblock %} diff --git a/publications/templates/publications/test_index.html b/publications/templates/publications/test_index.html new file mode 100644 index 0000000..be88d85 --- /dev/null +++ b/publications/templates/publications/test_index.html @@ -0,0 +1,31 @@ +{% load staticfiles %} + + + Publication test + + + + + + + + +
+
+
+ {% for post in publications %} +
+
+ {{ post.published_date }} +
+

{{ post.title }}

+

{{ post.author }}

+
+ {% endfor %} +
+
+
+ + diff --git a/publications/templatetags/__init__.py b/publications/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/publications/templatetags/equation.py b/publications/templatetags/equation.py new file mode 100644 index 0000000..291fa8b --- /dev/null +++ b/publications/templatetags/equation.py @@ -0,0 +1,23 @@ +from django.utils.safestring import mark_safe +__author__ = 'kai' + +from lxml import html +from django import template +from django.template.defaultfilters import stringfilter +register = template.Library() + +@register.filter(is_safe=True) +@stringfilter +def equations(value): + xmlElement = html.fragment_fromstring(value, create_parent='span') + for xmlChild in xmlElement.iterchildren(): + if xmlChild.tag == "img": + if xmlChild.get("tex") is not None: + del xmlChild.attrib['tex'] + strResult = html.tostring(xmlElement).decode("utf-8") + # remove first six characters to get rid of + strResult = strResult[6:] + # remove last seven characters to get rid of + strResult = strResult[:-7] + return mark_safe(strResult) +#equations.is_safe = True \ No newline at end of file diff --git a/publications/tests.py b/publications/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/publications/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/publications/urls.py b/publications/urls.py new file mode 100644 index 0000000..9dc101c --- /dev/null +++ b/publications/urls.py @@ -0,0 +1,8 @@ +from django.conf.urls import url +from . import views +from django.conf.urls.i18n import i18n_patterns + +urlpatterns = [ + url(r'^$', views.allpublications, name='Show all publications'), + url(r'^(?P(sources|studies|proceedings|textbooks))/(?P(.*?))/index.html$', views.publication, name='Show publication'), +] diff --git a/publications/views.py b/publications/views.py new file mode 100644 index 0000000..70ffd17 --- /dev/null +++ b/publications/views.py @@ -0,0 +1,51 @@ +from django.shortcuts import render +from django.template import loader +from django.http import HttpResponse, Http404 +from sekizai.context import SekizaiContext as Context + +from eoa.models import * + +def Templatestyle(serie): + if serie == "sources": + return "EOS" + else: + return "MPRL" + +def allpublications(request): + currentpublications = Publication.objects.all() + return render(request, 'publications/index.html',{'publications': currentpublications}) + +def publication(request,serie,number): + currentpublications = Publication.objects.all()#series=serie,publication_id=number) + return render(request,'publications/index.html',{'publications': currentpublications}) + #template = loader.get_template('publications/index.html') + #listofchapters = currentpublication.chapter_set.all().order_by('Order') + #Indexsection.objects.filter(Publication=Currentpublication.pk) + # Check if there are Indexsection-Objects for this Publication + #Keywordindex = "No" + #if len(Indexsection.objects.filter(Publication=Currentpublication.pk,Kind="keyword")) > 0: + # Keywordindex = "Yes" + # Personindex = "No" + # if len(Indexsection.objects.filter(Publication=Currentpublication.pk,Kind="person")) > 0: + # Personindex = "Yes" + # Locationindex = "No" + # if len(Indexsection.objects.filter(Publication=Currentpublication.pk,Kind="location")) > 0: + # Locationindex = "Yes" + # Reviews = "No" + # if len(Review.objects.filter(Publication=Currentpublication.pk)) > 0: + # Reviews = "Yes" + # Reports = "No" + # if len(Report.objects.filter(Publication=Currentpublication.pk)) > 0: + # Reports = "Yes" + #Content = Context ({ + # 'Style' : Templatestyle(serie), + # #'Listofchapters' : Listofchapters, + # 'Publication' : currentpublication, + # 'Highlight' : serie, + #'Keywordindex' : Keywordindex, + #'Personindex' : Personindex, + #'Locationindex' : Locationindex, + #'Reviews' : Reviews, + #'Reports' : Reports, + #}) + #return HttpResponse(Template.render(Content)) From 3aa3537e3745273cb7014a6a2672767f3755e75c Mon Sep 17 00:00:00 2001 From: Malte Vogl Date: Tue, 25 Jul 2017 14:53:21 +0200 Subject: [PATCH 059/111] Adding views,urls,importer --- config/requirements.txt | 3 + .../0003_publication_description.py | 20 + eoa/models.py | 1 + eoa/teidoc/exampleTEI.xml | 794 +++ eoa/teidoc/minimalTEI.xml | 153 + eoasite/settings.py | 26 +- eoasite/settings_local.py | 24 +- .../templates/eoasite/editors_and_board.html | 62 + eoasite/templates/eoasite/eoa-eos_header.html | 15 + .../templates/eoasite/eos_editors_right.html | 16 + eoasite/templates/eoasite/eos_footer.html | 41 + eoasite/templates/eoasite/eos_header.html | 17 + eoasite/templates/eoasite/main_toc.html | 18 + .../eoasite/mprl_editors_buttom.html | 63 + .../templates/eoasite/mprl_editors_right.html | 61 + eoasite/templates/eoasite/mprl_footer.html | 42 + eoasite/templates/eoasite/mprl_header.html | 33 + eoasite/templates/eoasite/portal_footer.html | 48 + eoasite/templates/eoasite/portal_header.html | 7 + eoasite/templates/eoasite/support_toc.html | 25 + .../templates/eoasite/umbrella_header.html | 7 + eoasite/urls.py | 5 +- media/bootstrap/css/bootstrap-responsive.css | 1109 +++ .../css/bootstrap-responsive.min.css | 9 + media/bootstrap/css/bootstrap.css | 6158 +++++++++++++++++ media/bootstrap/css/bootstrap.min.css | 9 + .../img/glyphicons-halflings-original.png | Bin 0 -> 12799 bytes .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes media/bootstrap/img/glyphicons-halflings.png | Bin 0 -> 30096 bytes media/bootstrap/js/bootstrap.js | 2268 ++++++ media/bootstrap/js/bootstrap.min.js | 6 + .../lightbox/css/bootstrap-lightbox.min.css | 19 + media/bootstrap/lightbox/css/pygment_trac.css | 69 + media/bootstrap/lightbox/css/styles.css | 170 + media/bootstrap/lightbox/img/Thumbs.db | Bin 0 -> 12800 bytes .../img/glyphicons-halflings-white.png | Bin 0 -> 8777 bytes .../lightbox/img/glyphicons-halflings.png | Bin 0 -> 12799 bytes media/bootstrap/lightbox/img/large.png | Bin 0 -> 226884 bytes media/bootstrap/lightbox/img/small.png | Bin 0 -> 16432 bytes .../lightbox/js/bootstrap-lightbox.min.js | 21 + media/bootstrap/lightbox/js/scale.fix.js | 17 + .../lightbox/prettify/lang-apollo.js | 2 + media/bootstrap/lightbox/prettify/lang-clj.js | 18 + media/bootstrap/lightbox/prettify/lang-css.js | 2 + media/bootstrap/lightbox/prettify/lang-go.js | 1 + media/bootstrap/lightbox/prettify/lang-hs.js | 2 + .../bootstrap/lightbox/prettify/lang-lisp.js | 3 + media/bootstrap/lightbox/prettify/lang-lua.js | 2 + media/bootstrap/lightbox/prettify/lang-ml.js | 2 + media/bootstrap/lightbox/prettify/lang-n.js | 4 + .../bootstrap/lightbox/prettify/lang-proto.js | 1 + .../bootstrap/lightbox/prettify/lang-scala.js | 2 + media/bootstrap/lightbox/prettify/lang-sql.js | 2 + media/bootstrap/lightbox/prettify/lang-tex.js | 1 + media/bootstrap/lightbox/prettify/lang-vb.js | 2 + .../bootstrap/lightbox/prettify/lang-vhdl.js | 3 + .../bootstrap/lightbox/prettify/lang-wiki.js | 2 + media/bootstrap/lightbox/prettify/lang-xq.js | 3 + .../bootstrap/lightbox/prettify/lang-yaml.js | 2 + .../bootstrap/lightbox/prettify/prettify.css | 31 + media/bootstrap/lightbox/prettify/prettify.js | 28 + media/css/eoa-front.css | 162 + media/design/about_foto.jpg | Bin 0 -> 31282 bytes media/design/background Kopie.jpg | Bin 0 -> 28282 bytes media/design/background.jpg | Bin 0 -> 149947 bytes media/design/cc_88x31.png | Bin 0 -> 5460 bytes media/design/eos/eos_logo_color_front.jpg | Bin 0 -> 30045 bytes media/design/eos/head_minerva-eos.jpeg | Bin 0 -> 32309 bytes media/design/eos/head_sources.jpg | Bin 0 -> 31372 bytes media/design/eos/head_sources_b.jpg | Bin 0 -> 3405 bytes media/design/eos/head_sources_c.jpg | Bin 0 -> 3431 bytes media/design/eos/head_sources_eos.jpg | Bin 0 -> 50778 bytes media/design/eos/head_sources_green.jpg | Bin 0 -> 1210 bytes media/design/eos/head_sources_green_b.jpg | Bin 0 -> 2843 bytes media/design/eos/head_sources_green_c.jpg | Bin 0 -> 2686 bytes media/design/eos/intro1.png | Bin 0 -> 19387 bytes media/design/eos/intro2.png | Bin 0 -> 23533 bytes media/design/eos/intro3.png | Bin 0 -> 91259 bytes media/design/eos/intro4.png | Bin 0 -> 102316 bytes media/design/eos/intro5.png | Bin 0 -> 59979 bytes media/design/eos/logo_brill.jpg | Bin 0 -> 32796 bytes media/design/eos/logo_hosc.png | Bin 0 -> 18617 bytes media/design/eos/logo_isis.jpg | Bin 0 -> 8590 bytes media/design/eos/logo_mpiwg.png | Bin 0 -> 50654 bytes media/design/frontpicture.jpg | Bin 0 -> 332509 bytes media/design/frontpicture_small.jpg | Bin 0 -> 275931 bytes media/design/head_black.jpg | Bin 0 -> 789 bytes media/design/head_essays_b.jpg | Bin 0 -> 3239 bytes media/design/head_essays_c.jpg | Bin 0 -> 3322 bytes media/design/head_minerva-eos-links.jpg | Bin 0 -> 30893 bytes media/design/head_minerva-eos-mitte.jpg | Bin 0 -> 33362 bytes media/design/head_minerva-eos-rechts.jpg | Bin 0 -> 34083 bytes media/design/head_minerva-eos.jpg | Bin 0 -> 32309 bytes media/design/head_minerva.jpg | Bin 0 -> 20328 bytes media/design/head_minerva_short.jpg | Bin 0 -> 40789 bytes media/design/head_portal.jpg | Bin 0 -> 15568 bytes media/design/head_proceedings_b.jpg | Bin 0 -> 3692 bytes media/design/head_proceedings_c.jpg | Bin 0 -> 3668 bytes media/design/head_sources_b.jpg | Bin 0 -> 3405 bytes media/design/head_sources_c.jpg | Bin 0 -> 3431 bytes media/design/head_studies_b.jpg | Bin 0 -> 3511 bytes media/design/head_studies_c.jpg | Bin 0 -> 3547 bytes media/design/head_textbooks_b.jpg | Bin 0 -> 3661 bytes media/design/head_textbooks_c.jpg | Bin 0 -> 3795 bytes media/design/itunes.jpg | Bin 0 -> 2042 bytes media/design/kopf_schwarz.jpg | Bin 0 -> 60788 bytes media/design/minerva.jpg | Bin 0 -> 12990 bytes media/design/mprl/head_minerva.jpg | Bin 0 -> 20328 bytes media/design/mprl/mprl_foto_front.jpg | Bin 0 -> 29938 bytes media/design/oampgscigallery.jpg | Bin 0 -> 31766 bytes media/design/oaweek.jpg | Bin 0 -> 21888 bytes media/design/podcast_minerva.jpg | Bin 0 -> 314883 bytes media/design/proceedings.jpg | Bin 0 -> 2425 bytes media/design/proceedings.png | Bin 0 -> 2458 bytes media/design/rss.gif | Bin 0 -> 1283 bytes media/design/twitter.png | Bin 0 -> 3751 bytes media/favicon.ico | Bin 0 -> 12862 bytes media/javascript/example.css | 1742 +++++ media/javascript/font-awesome.min.css | 33 + media/javascript/jquery-1.9.1.min.js | 5 + media/javascript/jquery.easing.min.js | 44 + .../jquery.elevateZoom-2.5.5.min.js | 44 + media/javascript/jquery.roundabout.min.js | 41 + media/javascript/jquery.slides.min.js | 7 + media/javascript/pagination.png | Bin 0 -> 1394 bytes media/studies/1/Cover.jpg | Bin 0 -> 1288986 bytes media/studies/1/Cover_medium.jpg | Bin 0 -> 25747 bytes media/studies/1/Cover_small.jpg | Bin 0 -> 11075 bytes media/studies/1/Cover_smallright.jpg | Bin 0 -> 15948 bytes publications/management/__init__.py | 0 publications/management/commands/__init__.py | 0 .../management/commands/_importer_class.py | 192 + .../management/commands/tei_import.py | 108 + publications/templates/publications/base.html | 26 +- .../templates/publications/eoa_default.html | 2 +- .../templates/publications/index.html | 2 +- .../{test_index.html => index_simple.html} | 3 +- publications/urls.py | 1 - publications/views.py | 34 +- 139 files changed, 13857 insertions(+), 38 deletions(-) create mode 100644 eoa/migrations/0003_publication_description.py create mode 100644 eoa/teidoc/exampleTEI.xml create mode 100644 eoa/teidoc/minimalTEI.xml create mode 100644 eoasite/templates/eoasite/editors_and_board.html create mode 100644 eoasite/templates/eoasite/eoa-eos_header.html create mode 100755 eoasite/templates/eoasite/eos_editors_right.html create mode 100644 eoasite/templates/eoasite/eos_footer.html create mode 100644 eoasite/templates/eoasite/eos_header.html create mode 100644 eoasite/templates/eoasite/main_toc.html create mode 100755 eoasite/templates/eoasite/mprl_editors_buttom.html create mode 100755 eoasite/templates/eoasite/mprl_editors_right.html create mode 100644 eoasite/templates/eoasite/mprl_footer.html create mode 100644 eoasite/templates/eoasite/mprl_header.html create mode 100644 eoasite/templates/eoasite/portal_footer.html create mode 100644 eoasite/templates/eoasite/portal_header.html create mode 100644 eoasite/templates/eoasite/support_toc.html create mode 100644 eoasite/templates/eoasite/umbrella_header.html create mode 100644 media/bootstrap/css/bootstrap-responsive.css create mode 100644 media/bootstrap/css/bootstrap-responsive.min.css create mode 100644 media/bootstrap/css/bootstrap.css create mode 100644 media/bootstrap/css/bootstrap.min.css create mode 100644 media/bootstrap/img/glyphicons-halflings-original.png create mode 100644 media/bootstrap/img/glyphicons-halflings-white.png create mode 100644 media/bootstrap/img/glyphicons-halflings.png create mode 100644 media/bootstrap/js/bootstrap.js create mode 100644 media/bootstrap/js/bootstrap.min.js create mode 100644 media/bootstrap/lightbox/css/bootstrap-lightbox.min.css create mode 100644 media/bootstrap/lightbox/css/pygment_trac.css create mode 100644 media/bootstrap/lightbox/css/styles.css create mode 100644 media/bootstrap/lightbox/img/Thumbs.db create mode 100644 media/bootstrap/lightbox/img/glyphicons-halflings-white.png create mode 100644 media/bootstrap/lightbox/img/glyphicons-halflings.png create mode 100644 media/bootstrap/lightbox/img/large.png create mode 100644 media/bootstrap/lightbox/img/small.png create mode 100644 media/bootstrap/lightbox/js/bootstrap-lightbox.min.js create mode 100644 media/bootstrap/lightbox/js/scale.fix.js create mode 100644 media/bootstrap/lightbox/prettify/lang-apollo.js create mode 100644 media/bootstrap/lightbox/prettify/lang-clj.js create mode 100644 media/bootstrap/lightbox/prettify/lang-css.js create mode 100644 media/bootstrap/lightbox/prettify/lang-go.js create mode 100644 media/bootstrap/lightbox/prettify/lang-hs.js create mode 100644 media/bootstrap/lightbox/prettify/lang-lisp.js create mode 100644 media/bootstrap/lightbox/prettify/lang-lua.js create mode 100644 media/bootstrap/lightbox/prettify/lang-ml.js create mode 100644 media/bootstrap/lightbox/prettify/lang-n.js create mode 100644 media/bootstrap/lightbox/prettify/lang-proto.js create mode 100644 media/bootstrap/lightbox/prettify/lang-scala.js create mode 100644 media/bootstrap/lightbox/prettify/lang-sql.js create mode 100644 media/bootstrap/lightbox/prettify/lang-tex.js create mode 100644 media/bootstrap/lightbox/prettify/lang-vb.js create mode 100644 media/bootstrap/lightbox/prettify/lang-vhdl.js create mode 100644 media/bootstrap/lightbox/prettify/lang-wiki.js create mode 100644 media/bootstrap/lightbox/prettify/lang-xq.js create mode 100644 media/bootstrap/lightbox/prettify/lang-yaml.js create mode 100644 media/bootstrap/lightbox/prettify/prettify.css create mode 100644 media/bootstrap/lightbox/prettify/prettify.js create mode 100644 media/css/eoa-front.css create mode 100644 media/design/about_foto.jpg create mode 100644 media/design/background Kopie.jpg create mode 100644 media/design/background.jpg create mode 100644 media/design/cc_88x31.png create mode 100644 media/design/eos/eos_logo_color_front.jpg create mode 100644 media/design/eos/head_minerva-eos.jpeg create mode 100644 media/design/eos/head_sources.jpg create mode 100644 media/design/eos/head_sources_b.jpg create mode 100644 media/design/eos/head_sources_c.jpg create mode 100644 media/design/eos/head_sources_eos.jpg create mode 100644 media/design/eos/head_sources_green.jpg create mode 100644 media/design/eos/head_sources_green_b.jpg create mode 100644 media/design/eos/head_sources_green_c.jpg create mode 100644 media/design/eos/intro1.png create mode 100644 media/design/eos/intro2.png create mode 100644 media/design/eos/intro3.png create mode 100644 media/design/eos/intro4.png create mode 100644 media/design/eos/intro5.png create mode 100644 media/design/eos/logo_brill.jpg create mode 100644 media/design/eos/logo_hosc.png create mode 100644 media/design/eos/logo_isis.jpg create mode 100644 media/design/eos/logo_mpiwg.png create mode 100644 media/design/frontpicture.jpg create mode 100644 media/design/frontpicture_small.jpg create mode 100644 media/design/head_black.jpg create mode 100644 media/design/head_essays_b.jpg create mode 100644 media/design/head_essays_c.jpg create mode 100644 media/design/head_minerva-eos-links.jpg create mode 100644 media/design/head_minerva-eos-mitte.jpg create mode 100644 media/design/head_minerva-eos-rechts.jpg create mode 100644 media/design/head_minerva-eos.jpg create mode 100644 media/design/head_minerva.jpg create mode 100644 media/design/head_minerva_short.jpg create mode 100644 media/design/head_portal.jpg create mode 100644 media/design/head_proceedings_b.jpg create mode 100644 media/design/head_proceedings_c.jpg create mode 100644 media/design/head_sources_b.jpg create mode 100644 media/design/head_sources_c.jpg create mode 100644 media/design/head_studies_b.jpg create mode 100644 media/design/head_studies_c.jpg create mode 100644 media/design/head_textbooks_b.jpg create mode 100644 media/design/head_textbooks_c.jpg create mode 100644 media/design/itunes.jpg create mode 100644 media/design/kopf_schwarz.jpg create mode 100644 media/design/minerva.jpg create mode 100644 media/design/mprl/head_minerva.jpg create mode 100644 media/design/mprl/mprl_foto_front.jpg create mode 100644 media/design/oampgscigallery.jpg create mode 100644 media/design/oaweek.jpg create mode 100644 media/design/podcast_minerva.jpg create mode 100644 media/design/proceedings.jpg create mode 100644 media/design/proceedings.png create mode 100644 media/design/rss.gif create mode 100644 media/design/twitter.png create mode 100644 media/favicon.ico create mode 100644 media/javascript/example.css create mode 100644 media/javascript/font-awesome.min.css create mode 100644 media/javascript/jquery-1.9.1.min.js create mode 100644 media/javascript/jquery.easing.min.js create mode 100644 media/javascript/jquery.elevateZoom-2.5.5.min.js create mode 100644 media/javascript/jquery.roundabout.min.js create mode 100644 media/javascript/jquery.slides.min.js create mode 100644 media/javascript/pagination.png create mode 100644 media/studies/1/Cover.jpg create mode 100644 media/studies/1/Cover_medium.jpg create mode 100644 media/studies/1/Cover_small.jpg create mode 100644 media/studies/1/Cover_smallright.jpg create mode 100644 publications/management/__init__.py create mode 100644 publications/management/commands/__init__.py create mode 100644 publications/management/commands/_importer_class.py create mode 100644 publications/management/commands/tei_import.py rename publications/templates/publications/{test_index.html => index_simple.html} (95%) diff --git a/config/requirements.txt b/config/requirements.txt index 6b5eb44..a6aad22 100644 --- a/config/requirements.txt +++ b/config/requirements.txt @@ -1,3 +1,6 @@ Django psycopg2 Pillow +xmltodict +django-cms +django-sekizai diff --git a/eoa/migrations/0003_publication_description.py b/eoa/migrations/0003_publication_description.py new file mode 100644 index 0000000..1a04f69 --- /dev/null +++ b/eoa/migrations/0003_publication_description.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-07-25 12:35 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('eoa', '0002_auto_20170721_1348'), + ] + + operations = [ + migrations.AddField( + model_name='publication', + name='description', + field=models.TextField(blank=True, default=None, null=True), + ), + ] diff --git a/eoa/models.py b/eoa/models.py index c0aeb87..5901bc9 100644 --- a/eoa/models.py +++ b/eoa/models.py @@ -76,6 +76,7 @@ class Publication(models.Model): publisher = models.CharField(**default_char) title = models.CharField(**default_char) subtitle = models.CharField(**default_char) + description = models.TextField(blank=True,null=True,default=None) pages = models.PositiveIntegerField() price = models.FloatField() created_date = models.DateField( diff --git a/eoa/teidoc/exampleTEI.xml b/eoa/teidoc/exampleTEI.xml new file mode 100644 index 0000000..ef6a808 --- /dev/null +++ b/eoa/teidoc/exampleTEI.xml @@ -0,0 +1,794 @@ + + + + + + + + Studies + Der ewige Testband + Experimentell + Klaus Thoden + NN + Lindy Divarci + NN + Myself + + + + + + + Edition Open Access + pro-business.com + 2016-08-04 + 978-3-945561-XXX + http://www.book-on-demand.de/shop/14971 + DOI + + + +

Distributed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany License.

+
+
+
+ +

Born digital.

+
+
+ + +

Klein anfangen

+
+ +

Groß enden.

+
+ +

This abstract contains additional information.

+
+ + + + MPRL + Edition Open Access + + + + + Deutsch + +
+ + + text-decoration: line-through; + letter-spacing:0.3em + font-variant:small-caps + + +
+ + +
+ + + Chemical Laboratory. This idealized laboratory with metallurgical furnaces is from + William Lewis, Commercium Philosophico-Technicum (London, 1756). + Courtesy of Smith Image Collection, Van Pelt Dietrich Library, University of + Pennsylvania. +
+ + +
+ Max Planck Research Library for the History and Development of Knowledge +
+ Series Editors +

Ian T. Baldwin, Gerd Graßhoff, Jürgen Renn, Dagmar Schäfer, Robert Schlögl, Bernard F. + Schutz

+
+
+ Edition Open Access Development Team +

Lindy Divarci, Bendix Düker, Samuel Gfrörer, Klaus Thoden, Dirk Wintergrün.

+
+
+

The Edition Open Access (EOA) platform was founded to bring together publication + initiatives seeking to disseminate the results of scholarly work in a format that + combines traditional publications with the digital medium. It currently hosts the + open-access publications of the “Max Planck Research Library for the History and + Development of Knowledge” (MPRL) and “Edition Open Sources” (EOS). EOA is open to host + other open access initiatives similar in conception and spirit, in accordance with the + Berlin Declaration on Open Access to Knowledge in the sciences and humanities, which was + launched by the Max Planck Society in 2003.

+

By combining the advantages of traditional publications and the digital medium, the + platform offers a new way of publishing research and of studying historical topics or + current issues in relation to primary materials that are otherwise not easily available. + The volumes are available both as printed books and as online open access publications. + They are directed at scholars and students of various disciplines, and at a broader + public interested in how science shapes our world.

+
+
+ + + +
+ Max Planck Research Library for the History and Development of Knowledge +

The Max Planck Research Library for the History and Development of Knowledge comprises + the subseries, Studies, Proceedings and Textbooks. They present original scientific work + submitted under the scholarly responsibility of members of the Scientific Board and their + academic peers. The initiative is currently supported by research departments of three Max + Planck Institutes: the MPI for the History of Science, the Fritz Haber Institute of the + MPG and the MPI for Gravitational Physics (Albert Einstein Institute). The publications of + the Studies series are dedicated to key subjects in the history and development of + knowledge, bringing together perspectives from different fields and combining source-based + empirical research with theoretically guided approaches. The Proceedings series presents + the results of scientific meetings on current issues and supports, at the same time, + further cooperation on these issues by offering an electronic platform with further + resources and the possibility for comments and interactions.

+
+ Scientific Board +

Markus Antonietti, Antonio Becchi, Fabio Bevilacqua, William G. Boltz, Jens Braarvik, + Horst Bredekamp, Jed Z. Buchwald, Olivier Darrigol, Thomas Duve, Mike Edmunds, Fynn Ole + Engler, Robert K. Englund, Mordechai Feingold, Rivka Feldhay, Gideon Freudenthal, Paolo + Galluzzi, Kostas Gavroglu, Mark Geller, Domenico Giulini, Günther Görz, Gerd Graßhoff, + James Hough, Manfred Laubichler, Glenn Most, Klaus Müllen, Pier Daniele Napolitani, + Alessandro Nova, Hermann Parzinger, Dan Potts, Sabine Schmidtke, Circe Silva da Silva, Ana + Simões, Dieter Stein, Richard Stephenson, Mark Stitt, Noel M. Swerdlow, Liba Taub, Martin + Vingron, Scott Walter, Norton Wise, Gerhard Wolf, Rüdiger Wolfrum, Gereon Wolters, Zhang + Baichun.

+
+
+
+

A dedication

+
+
+ + +
+ This is the first part + + +
+ Document structure + +
+ This is the first section +

This the first section of a text. It is preceded by two hierarchical units, namely + Part and Chapter. As you can see above, the chapter command has two arguments, the + first one being the running head which is displayed in the header of each page, the + second being the text that is printed on the page where the chapter begins.

+

We offer two additional units below the section: the subsection and the + subsubsection. See below how they are displayed!

+ +
+ This is a subsection +

Here we are at an even lower hierarchical level. This can be quite useful. Be aware + that this level is not being displayed in the table of contents. Now, there is still + one level below that: the subsubsection.

+ +
+ A subsubsection +

A subsubsection will never be numbered and like its predecessor, it will not show + up in the table of contents.

+
+
+
+
+ +
+ Unnumbered document structure +

Chapter, section and subsection can also be used without numbers. Do you see the slight + changes in the layout? Also, the counter is not incremented. What should we use this + for?

+

How can we see if the next two are section or subsection? They have the same height. + What shall we do??

+
+ Section without numbers +

This the first section of a text. It is preceded by two hierarchical units, namely + Part and Chapter. As you can see above, the chapter command has two arguments, the + first one being the running head which is displayed in the header of each page. + Structure your text wisely.

+

Now, a running head only makes sense if your chapter spreads across several + pages.

+
+ Subsection without number + +

Here we are at an even lower hierarchical level. This can be quite useful. Be aware + that this level is not being displayed in the table of contents.

+
+
+
+ +
+ Markup +

The EOA flavour of Latex offers quite a few commands that help you markup words in your + text. And also, if you want to include words in different writing systems, they have to + be preceded by commands so that the system can switch to the correct font. The whole + scope is gathered in the next, rather experimental section.

+
+ Non-Latin alphabets +

This section showcases text written in writing systems other than Latin. It includes + Russian, Chinese, Hebrew and Greek.

+
+ Russian + +

First, Russian: В начале двадцатого века был одним из + идеологов богостроительства, в 1909 году помогал участникам этого течения + содержать фракционную школу на острове Капри для рабочих, которую В. И. Ленин + называл "литераторским центром богостроительства".

+
+
+ Chinese + +

Next, Chinese: 法兰克人接受了高卢罗马文化, + 改操罗曼语族语言(但在罗马人分布较少的高卢北部人多操日耳曼语族语言)。 克洛维定巴黎为首都,建立了新的王朝,史称墨洛温王朝,但是这个王朝在克 + 洛维死后陷入分裂,克洛维的四个儿子按照法兰克人的习惯,将法兰克国家一 分为四,分别是巴黎、奥尔良、苏瓦松和兰斯。

+
+
+ Hebrew + +

Then, Hebrew:ארגינעל האט די סעקרעטאריאט שטאב געדארפט צו זיין + א פאראייניגטע גרופע פון אומפארטייאישע שליחים פון יעדע לאנד וועלכע האבן נאר די + אינטערעסן פון זייערע אייגענע לענדער אבער עס האט זיך קיינמאל נישט געהעריג + אויסגעארבעט און נאר דער סעקרעטאר גענעראל איז אזוי באטראכט געווארן

+
+
+ Greek + +

And finally Greek: Ο φλοιός κυμαίνεται μεταξύ 5 και 70 km σε + βάθος. Τα λεπτά τμήματα του φλοιού είναι κάτω από τους ωκεανούς (ωκεάνιος φλοιός) + και αποτελούνται από πυκνά πετρώματα μαγνησίου, σιδήρου και πυριτίου. Τα παχύτερα + τμήματα του φλοιού είναι τα ηπειρωτικά τα οποία είναι λιγότερο πυκνά από τα + ωκεάνια και αποτελούνται από πετρώματα πλούσια σε νάτριο, αλουμίνιο και + πυρίτιο.

+
+
+ If in doubt + +

You can add complicated characters as images, for example, an apple: . Or a penguin:

+
+
+
+ Text markup + +

This is a regular paragraph. Words can appear in italics, – these + are examples of this – and some characters are superscript or subscript. A high pitched voice called and a deep resonating + bass answered. What is the + Math font good for? Be careful and use EOAbold only sparingly.

+ +

To read single Arabic words, as in Grammaticall Paradigms, we must know the sound of + the letters […] ‘b t θ + כ ח L m n w h y. place of the accent [\dots] never in ultima, therefore in penultima in + all disyllables as onsur, never higher than the antepenult, and there always in + polysyllables as nasara, nasarta unlwaaw [y]e penult be made long by quiescent by אוי + as tansoranias tansoriיna tansoraיna. Weiter im TextAdd., + f.1r.

+

Another paragraph showcasing some additional text marking features. + Text can be struck + through. And we can space out some words. But small caps I know pretty well. Last, but not least, here is + the way to enter web addresses: EOA! +

+ +

A short check on how hyperref works: + + +

+
+
+ Other types of text blocks + +

If you want to include a longer quote in a text, there is of course a command for + that. And inside that we also introduce you to how you can insert footnotes.Piaget 1985.

+ + Do you like the lorem ipsum text? I don't.. However, there should be a + longer piece of text in this example lateron. + +
+ Three constructs for lists +

This is a numbered list containing three items + This is the first entry.This is the second entry.This is the third entry +

+

In contrast to that, here is a list that is not numbered, but also contains the + same items!

+

+ + This is the first entry. + This is the second entry. + This is the third entry + +

+

Thirdly, if you want to give some definitions you can use EOAdescription: + A typesetting systemThis is you! +

+
+
+
+ Smaller spacings +

Small spacings are also there: U\,S\;A\EOAindexlocation{USofA}.

+
+
+ Some technical matters +

Some letters cannot be typed directly when writing in LaTeX. For example the tilde: + \EOAtilde. We have to use a command for that. Also, of course, as you have already + seen, you cannot write the percent sign as it is, because this is used for commentig. + Use \% instead. And for a backslash? \\? No. That's a newline. \textbackslash!

+
+
+
+ References and indices + +

Elements can be assigned labels so that we can later refer to them: sections, imagesThere is a nice image on page ., + tablesThere is a table on page . A lot of things can be cross-referenced.

+ +

By the way, JoyceJames Joyce is a darn good author. Read some of his stuff. It may be useful for indexing + some of your key terms in the text so that we can later link to catalogues that tells + the reader more about the things. Joyce died in ZurichZürich. You cannot read anything about him in neither or !

+ +

Now, here's a funny problem concerning the index. Consider one Lord Charles Cavendish, Lord Charles (son of the second duke of + Devonshire), (Fig. + , ) duty of service We actually have references in there. Can we do this? This is the reference + outside the index: (Fig. + , )

+

This paragraph illustrates various references (see section ). It + includes a reference to the image (see image ), two entries + for the index (Science Science and Confucius 孔夫子), one reference to a facsimile (see facsimile on page ) and one reference to a section. The last one is at the + beginning. And of course: references to the bibliography: . We can also cite manually with Plat. tim. + . +

+
+
+ + Floating environments + + +

Floating environments are bigger constructs like figures + and tables (). If you want to, you can leave + the placing of them to the typesetting system, in order to + avoid bigger stretches of white space (cf. ) .

+
+ Tables +

The following lines of code produce a table consisting of 4 columns and 3 rows. Is + the table right so?

+ + + This is a table + + Heading 1 + Heading 2 + Heading 3 + Heading 4 + + + Here + you + may + find + + + some + data + spread + over + + + the + table + in + cells + +
+
+
+ Figures +

Yet another section. We have an image here. The command takes five parameters: + filename, caption, label, width and position

+ +
+ + An image with a caption. It resembles a bird looking at you. Doesn't it? And do + you think it looks angry? +
+
+ + Ostafrikanische Arbeiter an einem der großen Knochengräben, die während der + paläontologischen Expedition des Berliner Naturkundemuseums in die damalige Kolonie + Deutsch-Ostafrika zwischen 1909 und 1913 angelegt wurden. (Koloriertes + Glasdiapositiv, Museum für Naturkunde Berlin, Historische Bild- u. + Schriftgutsammlungen, Bestand: Pal. Mus., Signatur: B V/177) +
+ +

The fat-free version of this is EOAfigurenonumber which does without a caption and a + label. We are using the same source image here, but by specifying the size of the + image, it will scale down accordingly.

+ +
+ +
+ +

The last image command – EOAlsfigure – takes three parameters the figure covers the + whole page

+
+ + That's a caption for the lovely landscape image +
+
+
+
+ Mathematics + + + +

Let's have some mathematics examples here. Latex is very good in typesetting formulæ, + so let's go for it! We already had this example, but here is another inline equation + 9 + 3 + \sqrt{9} = 3. Well, our root symbol + expands the line spacing a bit, so maybe we should not use it inline. Here is another + equation: 2^2 = 4.

+

Instead, an equation outside of a paragraph.

+

+ 6 + 6 = 12 + +

+ +

+ g_{\mu \nu} + = 7 +

+ +

And if it does not need to be numbered. They also don't take labels (why?).

+

+ 6 + 6 = 12 +

+ +

When you have some equations that belong somehow together.

+

+ 6 + 6 = 12\\ 12 + 12 = 24\\ 24 + 24 = 48\\ +

+ + +

An array of equations. All of them numbered individually.

+

+ 1 + 1 = 2\\ 2 + 2 = + 4\\ 4 + 4 = 8 +

+ +

Again, an array of equations without numbers. They don't get labels, either.

+

+ 1 + + 1 = 2\\ 2 + 2 = 4\\ 4 + 4 = 8 +

+ +

Let's insert an empty page here.

+ +
+
+ Transcription and translation + + + +

Starting all over. We can also cite newspapers: +

+ + +
+
+ + +
+ + Bibliography + + + + + + The Equilibration of Cognitive Structures + + University of Chicago Press + Chicago + + + + + + + + + + Die Metaphysik des Raumes bei Leibniz und Kant + + Kölner Universitäts-Verlag + Köln + + + + + + + + + + O mundo natural asiático aos olhos da Occidente. Contribuição dos textos ibéricos quinhentistas para a construção de uma nova consciência europeia sobre a Ásia + + + + + + + + + + + The Definition of Morality + + The Stanford Encyclopedia of Philosophy + 2011 [2002] + + + + + + + + + The two cultures of mathematics in ancient Greece + + Oxford University Press + Oxford + + + + + + + + + + {M}onte, {G}uidobaldo, {M}archese {D}el + + Charles Scribner's Sons + Detroit + + + + + + + + + + The Qin Maps: A Clue to Later Chinese Cartographic Development + + + + + + + + + + +
+ + + + + + + + + +
+
+
diff --git a/eoa/teidoc/minimalTEI.xml b/eoa/teidoc/minimalTEI.xml new file mode 100644 index 0000000..c34268d --- /dev/null +++ b/eoa/teidoc/minimalTEI.xml @@ -0,0 +1,153 @@ + + + + + + + + Studies + Minimal + A very small volume + Klaus Thoden + NN + Lindy Divarci + NN + Myself + + + + + + + Edition Open Access + pro-business.com + 2016-08-04 + 978-3-945561-XXX + http://www.book-on-demand.de/shop/14971 + DOI + + +

Distributed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany License.

+
+
+
+ +

This document is born digital.

+
+
+ + +

Just a brief example of a TEI document as input for Edition Open Access

+
+ +

This is an example how we can move towards a pure TEI-based workflow. This file contains a header and then a very short piece of text.

+
+ +

This abstract contains additional information.

+
+ + + + MPRL + Edition Open Access + + + + + Deutsch + +
+ + + text-decoration: line-through; + letter-spacing:0.3em + font-variant:small-caps + + +
+ + +
+ + + A cover image +
+ + +
+ Max Planck Research Library for the History and Development of Knowledge +
+ Series Editors +

Ian T. Baldwin, Gerd Graßhoff, Jürgen Renn, Dagmar Schäfer, Robert Schlögl, Bernard F. + Schutz

+
+
+ Edition Open Access Development Team +

Lindy Divarci, Bendix Düker, Samuel Gfrörer, Klaus Thoden, Dirk Wintergrün.

+
+
+

The Edition Open Access (EOA) platform was founded to bring together publication + initiatives seeking to disseminate the results of scholarly work in a format that + combines traditional publications with the digital medium. It currently hosts the + open-access publications of the “Max Planck Research Library for the History and + Development of Knowledge” (MPRL) and “Edition Open Sources” (EOS). EOA is open to host + other open access initiatives similar in conception and spirit, in accordance with the + Berlin Declaration on Open Access to Knowledge in the sciences and humanities, which was + launched by the Max Planck Society in 2003.

+

By combining the advantages of traditional publications and the digital medium, the + platform offers a new way of publishing research and of studying historical topics or + current issues in relation to primary materials that are otherwise not easily available. + The volumes are available both as printed books and as online open access publications. + They are directed at scholars and students of various disciplines, and at a broader + public interested in how science shapes our world.

+
+
+ + + +
+ Max Planck Research Library for the History and Development of Knowledge +

The Max Planck Research Library for the History and Development of Knowledge comprises + the subseries, Studies, Proceedings and Textbooks. They present original scientific work + submitted under the scholarly responsibility of members of the Scientific Board and their + academic peers. The initiative is currently supported by research departments of three Max + Planck Institutes: the MPI for the History of Science, the Fritz Haber Institute of the + MPG and the MPI for Gravitational Physics (Albert Einstein Institute). The publications of + the Studies series are dedicated to key subjects in the history and development of + knowledge, bringing together perspectives from different fields and combining source-based + empirical research with theoretically guided approaches. The Proceedings series presents + the results of scientific meetings on current issues and supports, at the same time, + further cooperation on these issues by offering an electronic platform with further + resources and the possibility for comments and interactions.

+
+ Scientific Board +

Markus Antonietti, Antonio Becchi, Fabio Bevilacqua, William G. Boltz, Jens Braarvik, + Horst Bredekamp, Jed Z. Buchwald, Olivier Darrigol, Thomas Duve, Mike Edmunds, Fynn Ole + Engler, Robert K. Englund, Mordechai Feingold, Rivka Feldhay, Gideon Freudenthal, Paolo + Galluzzi, Kostas Gavroglu, Mark Geller, Domenico Giulini, Günther Görz, Gerd Graßhoff, + James Hough, Manfred Laubichler, Glenn Most, Klaus Müllen, Pier Daniele Napolitani, + Alessandro Nova, Hermann Parzinger, Dan Potts, Sabine Schmidtke, Circe Silva da Silva, Ana + Simões, Dieter Stein, Richard Stephenson, Mark Stitt, Noel M. Swerdlow, Liba Taub, Martin + Vingron, Scott Walter, Norton Wise, Gerhard Wolf, Rüdiger Wolfrum, Gereon Wolters, Zhang + Baichun.

+
+
+
+ + +
+ Part 1: The Beginning +
+ As it began +
+ A good start +

The first paragraph of many to come.

+

The second will also contain a markup. Some bits of + italic text. Some words in + italics

+
+
+
+ +
+
diff --git a/eoasite/settings.py b/eoasite/settings.py index 9e0bd4c..cec6f02 100644 --- a/eoasite/settings.py +++ b/eoasite/settings.py @@ -37,12 +37,18 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.sites', + 'cms', + 'menus', + 'treebeard', 'sekizai', 'eoa', + 'eoasite', 'publications', ] MIDDLEWARE = [ + 'cms.middleware.utils.ApphookReloadMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -50,7 +56,12 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', -] + 'django.middleware.locale.LocaleMiddleware', + 'cms.middleware.user.CurrentUserMiddleware', + 'cms.middleware.page.CurrentPageMiddleware', + 'cms.middleware.toolbar.ToolbarMiddleware', + 'cms.middleware.language.LanguageCookieMiddleware', + ] ROOT_URLCONF = 'eoasite.urls' @@ -65,6 +76,8 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'sekizai.context_processors.sekizai', + 'cms.context_processors.cms_settings', ], }, }, @@ -109,11 +122,16 @@ }, ] +LANGUAGES = [ + ('en', 'English'), + ('de', 'German'), +] + # Internationalization # https://docs.djangoproject.com/en/1.11/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'en' TIME_ZONE = 'Europe/Berlin' @@ -123,9 +141,11 @@ USE_TZ = True - +SITE_ID = 1 # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') diff --git a/eoasite/settings_local.py b/eoasite/settings_local.py index f9aa1f5..0c51a34 100644 --- a/eoasite/settings_local.py +++ b/eoasite/settings_local.py @@ -37,12 +37,18 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + 'django.contrib.sites', + 'cms', + 'menus', + 'treebeard', 'sekizai', 'eoa', + 'eoasite', 'publications', ] MIDDLEWARE = [ + 'cms.middleware.utils.ApphookReloadMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', @@ -50,6 +56,11 @@ 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django.middleware.locale.LocaleMiddleware', + 'cms.middleware.user.CurrentUserMiddleware', + 'cms.middleware.page.CurrentPageMiddleware', + 'cms.middleware.toolbar.ToolbarMiddleware', + 'cms.middleware.language.LanguageCookieMiddleware', ] ROOT_URLCONF = 'eoasite.urls' @@ -65,6 +76,8 @@ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'sekizai.context_processors.sekizai', + 'cms.context_processors.cms_settings', ], }, }, @@ -106,11 +119,17 @@ }, ] +LANGUAGES = [ + ('en', 'English'), + ('de', 'German'), +] + + # Internationalization # https://docs.djangoproject.com/en/1.11/topics/i18n/ -LANGUAGE_CODE = 'en-us' +LANGUAGE_CODE = 'en' TIME_ZONE = 'Europe/Berlin' @@ -120,9 +139,12 @@ USE_TZ = True +SITE_ID = 1 # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.11/howto/static-files/ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') diff --git a/eoasite/templates/eoasite/editors_and_board.html b/eoasite/templates/eoasite/editors_and_board.html new file mode 100644 index 0000000..32815c3 --- /dev/null +++ b/eoasite/templates/eoasite/editors_and_board.html @@ -0,0 +1,62 @@ +
Series Editors
+

+ Ian T. Baldwin (Max Planck Institute for Chemical Ecology, Jena)
+ Gerd Graßhoff
(Department of Philosophy, Humboldt-Universität zu Berlin)
+ Jürgen Renn (Max Planck Institute for the History of Science, Berlin)
+ Dagmar Schäfer (Max Planck Institute for the History of Science, Berlin)
+ Robert Schlögl (Fritz Haber Institute, Berlin)
+ Bernard F. Schutz (Max Planck Institute for Gravitational Physics, Golm) +
+

+ + +
Editorial Board
+

+ Markus Antonietti (Max Planck Institute of Colloids and Interfaces, Golm)
+ Antonio Becchi (Humboldt University, Berlin)
+ Fabio Bevilacqua (University of Pavia)
+ William G. Boltz (University of Washington, Seattle)
+ Jens Braarvig (Oslo University)
+ Horst Bredekamp (Humboldt University, Berlin)
+ Jed Z. Buchwald (California Institute of Technology, Pasadena)
+ Olivier Darrigol (CNRS, Paris)
+ Thomas Duve (Max Planck Institute for European Legal History, Frankfurt am Main)
+ Mike Edmunds (Cardiff University)
+ Yehuda Elkana† (Wissenschaftskolleg zu Berlin)
+ Fynn Ole Engler (University of Rostock)
+ Robert K. Englund (University of California, Los Angeles)
+ Mordechai Feingold (California Institute of Technology, Pasadena)
+ Rivka Feldhay (Tel-Aviv University)
+ Gideon Freudenthal (Tel-Aviv University)
+ Paolo Galluzzi (Istituto e Museo di Storia della Scienza, Florence)
+ Kostas Gavroglu (University of Athens)
+ Mark Geller (Freie Universität Berlin)
+ Domenico Giulini (University of Hannover)
+ Günther Görz (University of Erlangen)
+ Gerd Graßhoff (Humboldt University, Berlin)
+ James Hough (University of Glasgow)
+ Manfred Laubichler (Arizona State University, Tempe)
+ Glenn Most (University of Chicago)
+ Klaus Müllen (Max Planck Institute for Polymer Research, Mainz)
+ Pier Daniele Napolitani (University of Pisa)
+ Alessandro Nova (Kunsthistorisches Institut in Florenz)
+ Hermann Parzinger (The Prussian Cultural Heritage Foundation, Berlin)
+ Dan T. Potts (Institute for the Study of the Ancient World, New York)
+ Mark Schiefsky (Harvard University)
+ Sabine Schmidtke (Freie Universität Berlin)
+ Circe Silva da Silva (Federal University of Espírito Santo, Vitoria)
+ Ana Simões (University of Lisbon)
+ Dieter Stein (University of Düsseldorf)
+ Richard Stephenson (Durham University)
+ Mark Stitt (Max Planck Institute of Molecular Plant Physiology, Potsdam)
+ Noel M. Swerdlow (California Institute of Technology, Pasadena)
+ Liba Taub (University of Cambridge)
+ Martin Vingron (Max Planck Institute for Molecular Genetics, Berlin)
+ Scott Walter (University of Nancy)
+ Norton Wise (University of California, Los Angeles)
+ Gerhard Wolf (Kunsthistorisches Institut in Florenz)
+ Rüdiger Wolfrum (Max Planck Institute for Comparative Public Law and International Law, Heidelberg)
+ Gereon Wolters (University of Konstanz)
+ Zhang Baichun (Chinese Academy of Sciences, Beijing) +
+

diff --git a/eoasite/templates/eoasite/eoa-eos_header.html b/eoasite/templates/eoasite/eoa-eos_header.html new file mode 100644 index 0000000..3373099 --- /dev/null +++ b/eoasite/templates/eoasite/eoa-eos_header.html @@ -0,0 +1,15 @@ + diff --git a/eoasite/templates/eoasite/eos_editors_right.html b/eoasite/templates/eoasite/eos_editors_right.html new file mode 100755 index 0000000..c1faf0b --- /dev/null +++ b/eoasite/templates/eoasite/eos_editors_right.html @@ -0,0 +1,16 @@ +
Editor-in-chief
+

+ Matteo Valleriani
Max Planck Institute for History of Science, Berlin

editor-in-chief@edition-open-sources.org +
+

+ +
Other Editors
+

+ Stephen P. Weldon
Department of History of Science, University of Oklahoma
+ Urs Schoepflin
Library of the Max Planck Institute for the History of Science, Berlin
+ Kerry V. Magruder
History of Science Collections, University of Oklahoma Libraries
+ Anne-Laurence Caudano
History Faculty, The University of Winnipeg
+ Massimiliano Badino
Facultat de Ciéncies, Universitat Autònoma de Barcelona
+ Robert G. Morrison
Bowdoin College +
+

\ No newline at end of file diff --git a/eoasite/templates/eoasite/eos_footer.html b/eoasite/templates/eoasite/eos_footer.html new file mode 100644 index 0000000..52ae7a8 --- /dev/null +++ b/eoasite/templates/eoasite/eos_footer.html @@ -0,0 +1,41 @@ + + + + + + + + + +
+

Series

+ +
+

Information

+ +
+

Institutions

+ +
+

Service

+ +
diff --git a/eoasite/templates/eoasite/eos_header.html b/eoasite/templates/eoasite/eos_header.html new file mode 100644 index 0000000..1986cd4 --- /dev/null +++ b/eoasite/templates/eoasite/eos_header.html @@ -0,0 +1,17 @@ +
+ + +
diff --git a/eoasite/templates/eoasite/main_toc.html b/eoasite/templates/eoasite/main_toc.html new file mode 100644 index 0000000..37f67bb --- /dev/null +++ b/eoasite/templates/eoasite/main_toc.html @@ -0,0 +1,18 @@ + diff --git a/eoasite/templates/eoasite/mprl_editors_buttom.html b/eoasite/templates/eoasite/mprl_editors_buttom.html new file mode 100755 index 0000000..7dff558 --- /dev/null +++ b/eoasite/templates/eoasite/mprl_editors_buttom.html @@ -0,0 +1,63 @@ +
+
+

+ Markus Antonietti (Max Planck Institute of Colloids and Interfaces, Golm)
+ Antonio Becchi (Humboldt University, Berlin)
+ Fabio Bevilacqua (University of Pavia)
+ William G. Boltz (University of Washington, Seattle)
+ Jens Braarvig (Oslo University)
+ Horst Bredekamp (Humboldt University, Berlin)
+ Jed Z. Buchwald (California Institute of Technology, Pasadena)
+ Olivier Darrigol (CNRS, Paris)
+ Thomas Duve (Max Planck Institute for European Legal History, Frankfurt am Main)
+ Mike Edmunds (Cardiff University)
+ Yehuda Elkana† (Wissenschaftskolleg zu Berlin)
+ Fynn Ole Engler (University of Rostock)
+ Robert K. Englund (University of California, Los Angeles)
+ Mordechai Feingold (California Institute of Technology, Pasadena)
+ Rivka Feldhay (Tel-Aviv University) +
+

+
+
+

+ Gideon Freudenthal (Tel-Aviv University)
+ Paolo Galluzzi (Istituto e Museo di Storia della Scienza, Florence)
+ Kostas Gavroglu (University of Athens)
+ Mark Geller (Freie Universität Berlin)
+ Domenico Giulini (University of Hannover)
+ Günther Görz (University of Erlangen)
+ Gerd Graßhoff (Humboldt University, Berlin)
+ James Hough (University of Glasgow)
+ Manfred Laubichler (Arizona State University, Tempe)
+ Glenn Most (University of Chicago)
+ Klaus Müllen (Max Planck Institute for Polymer Research, Mainz)
+ Pier Daniele Napolitani (University of Pisa)
+ Alessandro Nova (Kunsthistorisches Institut in Florenz)
+ Hermann Parzinger (The Prussian Cultural Heritage Foundation, Berlin)
+ Dan T. Potts (Institute for the Study of the Ancient World, New York)
+ Mark Schiefsky (Harvard University) +
+

+
+
+

+ Sabine Schmidtke (Freie Universität Berlin)
+ Circe Silva da Silva (Federal University of Espírito Santo, Vitoria)
+ Ana Simões (University of Lisbon)
+ Dieter Stein (University of Düsseldorf)
+ Richard Stephenson (Durham University)
+ Mark Stitt (Max Planck Institute of Molecular Plant Physiology, Potsdam)
+ Noel M. Swerdlow (California Institute of Technology, Pasadena)
+ Liba Taub (University of Cambridge)
+ Martin Vingron (Max Planck Institute for Molecular Genetics, Berlin)
+ Scott Walter (University of Nancy)
+ Norton Wise (University of California, Los Angeles)
+ Gerhard Wolf (Kunsthistorisches Institut in Florenz)
+ Rüdiger Wolfrum (Max Planck Institute for Comparative Public Law and International Law, Heidelberg)
+ Gereon Wolters (University of Konstanz)
+ Zhang Baichun (Chinese Academy of Sciences, Beijing) +
+

+
+
\ No newline at end of file diff --git a/eoasite/templates/eoasite/mprl_editors_right.html b/eoasite/templates/eoasite/mprl_editors_right.html new file mode 100755 index 0000000..aba49f5 --- /dev/null +++ b/eoasite/templates/eoasite/mprl_editors_right.html @@ -0,0 +1,61 @@ +
Series Editors
+

+ Ian T. Baldwin (Max Planck Institute for Chemical Ecology, Jena)
+ Jürgen Renn (Max Planck Institute for the History of Science, Berlin)
+ Dagmar Schäfer (Max Planck Institute for the History of Science, Berlin)
+ Robert Schlögl (Fritz Haber Institute, Berlin)
+ Bernard F. Schutz (Max Planck Institute for Gravitational Physics, Golm) +
+

+ + +
Editorial Board
+

+ Markus Antonietti (Max Planck Institute of Colloids and Interfaces, Golm)
+ Antonio Becchi (Humboldt University, Berlin)
+ Fabio Bevilacqua (University of Pavia)
+ William G. Boltz (University of Washington, Seattle)
+ Jens Braarvig (Oslo University)
+ Horst Bredekamp (Humboldt University, Berlin)
+ Jed Z. Buchwald (California Institute of Technology, Pasadena)
+ Olivier Darrigol (CNRS, Paris)
+ Thomas Duve (Max Planck Institute for European Legal History, Frankfurt am Main)
+ Mike Edmunds (Cardiff University)
+ Yehuda Elkana† (Wissenschaftskolleg zu Berlin)
+ Fynn Ole Engler (University of Rostock)
+ Robert K. Englund (University of California, Los Angeles)
+ Mordechai Feingold (California Institute of Technology, Pasadena)
+ Rivka Feldhay (Tel-Aviv University)
+ Gideon Freudenthal (Tel-Aviv University)
+ Paolo Galluzzi (Istituto e Museo di Storia della Scienza, Florence)
+ Kostas Gavroglu (University of Athens)
+ Mark Geller (Freie Universität Berlin)
+ Domenico Giulini (University of Hannover)
+ Günther Görz (University of Erlangen)
+ Gerd Graßhoff (Humboldt University, Berlin)
+ James Hough (University of Glasgow)
+ Manfred Laubichler (Arizona State University, Tempe)
+ Glenn Most (University of Chicago)
+ Klaus Müllen (Max Planck Institute for Polymer Research, Mainz)
+ Pier Daniele Napolitani (University of Pisa)
+ Alessandro Nova (Kunsthistorisches Institut in Florenz)
+ Hermann Parzinger (The Prussian Cultural Heritage Foundation, Berlin)
+ Dan T. Potts (Institute for the Study of the Ancient World, New York)
+ Mark Schiefsky (Harvard University)
+ Sabine Schmidtke (Freie Universität Berlin)
+ Circe Silva da Silva (Federal University of Espírito Santo, Vitoria)
+ Ana Simões (University of Lisbon)
+ Dieter Stein (University of Düsseldorf)
+ Richard Stephenson (Durham University)
+ Mark Stitt (Max Planck Institute of Molecular Plant Physiology, Potsdam)
+ Noel M. Swerdlow (California Institute of Technology, Pasadena)
+ Liba Taub (University of Cambridge)
+ Martin Vingron (Max Planck Institute for Molecular Genetics, Berlin)
+ Scott Walter (University of Nancy)
+ Norton Wise (University of California, Los Angeles)
+ Gerhard Wolf (Kunsthistorisches Institut in Florenz)
+ Rüdiger Wolfrum (Max Planck Institute for Comparative Public Law and International Law, Heidelberg)
+ Gereon Wolters (University of Konstanz)
+ Zhang Baichun (Chinese Academy of Sciences, Beijing) +
+

\ No newline at end of file diff --git a/eoasite/templates/eoasite/mprl_footer.html b/eoasite/templates/eoasite/mprl_footer.html new file mode 100644 index 0000000..30c2958 --- /dev/null +++ b/eoasite/templates/eoasite/mprl_footer.html @@ -0,0 +1,42 @@ + + + + + + + +
+

Series

+ +
+

Information

+ +
+

Institutes

+ +
+

Service

+ + +
diff --git a/eoasite/templates/eoasite/mprl_header.html b/eoasite/templates/eoasite/mprl_header.html new file mode 100644 index 0000000..92931f4 --- /dev/null +++ b/eoasite/templates/eoasite/mprl_header.html @@ -0,0 +1,33 @@ +
+ + +
diff --git a/eoasite/templates/eoasite/portal_footer.html b/eoasite/templates/eoasite/portal_footer.html new file mode 100644 index 0000000..12725a3 --- /dev/null +++ b/eoasite/templates/eoasite/portal_footer.html @@ -0,0 +1,48 @@ +
+
+

 

+
+
+ + + + + + + +
+

Series

+ +
+

Information

+ +
+

Institutes

+ +
+

Service

+ + +
diff --git a/eoasite/templates/eoasite/portal_header.html b/eoasite/templates/eoasite/portal_header.html new file mode 100644 index 0000000..e6b74a6 --- /dev/null +++ b/eoasite/templates/eoasite/portal_header.html @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/eoasite/templates/eoasite/support_toc.html b/eoasite/templates/eoasite/support_toc.html new file mode 100644 index 0000000..5f82843 --- /dev/null +++ b/eoasite/templates/eoasite/support_toc.html @@ -0,0 +1,25 @@ + diff --git a/eoasite/templates/eoasite/umbrella_header.html b/eoasite/templates/eoasite/umbrella_header.html new file mode 100644 index 0000000..f2687e3 --- /dev/null +++ b/eoasite/templates/eoasite/umbrella_header.html @@ -0,0 +1,7 @@ + diff --git a/eoasite/urls.py b/eoasite/urls.py index d9223df..2d171e0 100644 --- a/eoasite/urls.py +++ b/eoasite/urls.py @@ -16,7 +16,10 @@ from django.conf.urls import url,include from django.contrib import admin +from django.conf import settings +from django.conf.urls.static import static + urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^publications/', include('publications.urls')), -] + ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/media/bootstrap/css/bootstrap-responsive.css b/media/bootstrap/css/bootstrap-responsive.css new file mode 100644 index 0000000..5215a5d --- /dev/null +++ b/media/bootstrap/css/bootstrap-responsive.css @@ -0,0 +1,1109 @@ +/*! + * Bootstrap Responsive v2.3.0 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +@-ms-viewport { + width: device-width; +} + +.hidden { + display: none; + visibility: hidden; +} + +.visible-phone { + display: none !important; +} + +.visible-tablet { + display: none !important; +} + +.hidden-desktop { + display: none !important; +} + +.visible-desktop { + display: inherit !important; +} + +@media (min-width: 768px) and (max-width: 979px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important ; + } + .visible-tablet { + display: inherit !important; + } + .hidden-tablet { + display: none !important; + } +} + +@media (max-width: 767px) { + .hidden-desktop { + display: inherit !important; + } + .visible-desktop { + display: none !important; + } + .visible-phone { + display: inherit !important; + } + .hidden-phone { + display: none !important; + } +} + +.visible-print { + display: none !important; +} + +@media print { + .visible-print { + display: inherit !important; + } + .hidden-print { + display: none !important; + } +} + +@media (min-width: 1200px) { + .row { + margin-left: -30px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 30px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; + } + .span12 { + width: 1170px; + } + .span11 { + width: 1070px; + } + .span10 { + width: 970px; + } + .span9 { + width: 870px; + } + .span8 { + width: 770px; + } + .span7 { + width: 670px; + } + .span6 { + width: 570px; + } + .span5 { + width: 470px; + } + .span4 { + width: 370px; + } + .span3 { + width: 270px; + } + .span2 { + width: 170px; + } + .span1 { + width: 70px; + } + .offset12 { + margin-left: 1230px; + } + .offset11 { + margin-left: 1130px; + } + .offset10 { + margin-left: 1030px; + } + .offset9 { + margin-left: 930px; + } + .offset8 { + margin-left: 830px; + } + .offset7 { + margin-left: 730px; + } + .offset6 { + margin-left: 630px; + } + .offset5 { + margin-left: 530px; + } + .offset4 { + margin-left: 430px; + } + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.564102564102564%; + *margin-left: 2.5109110747408616%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.564102564102564%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.45299145299145%; + *width: 91.39979996362975%; + } + .row-fluid .span10 { + width: 82.90598290598291%; + *width: 82.8527914166212%; + } + .row-fluid .span9 { + width: 74.35897435897436%; + *width: 74.30578286961266%; + } + .row-fluid .span8 { + width: 65.81196581196582%; + *width: 65.75877432260411%; + } + .row-fluid .span7 { + width: 57.26495726495726%; + *width: 57.21176577559556%; + } + .row-fluid .span6 { + width: 48.717948717948715%; + *width: 48.664757228587014%; + } + .row-fluid .span5 { + width: 40.17094017094017%; + *width: 40.11774868157847%; + } + .row-fluid .span4 { + width: 31.623931623931625%; + *width: 31.570740134569924%; + } + .row-fluid .span3 { + width: 23.076923076923077%; + *width: 23.023731587561375%; + } + .row-fluid .span2 { + width: 14.52991452991453%; + *width: 14.476723040552828%; + } + .row-fluid .span1 { + width: 5.982905982905983%; + *width: 5.929714493544281%; + } + .row-fluid .offset12 { + margin-left: 105.12820512820512%; + *margin-left: 105.02182214948171%; + } + .row-fluid .offset12:first-child { + margin-left: 102.56410256410257%; + *margin-left: 102.45771958537915%; + } + .row-fluid .offset11 { + margin-left: 96.58119658119658%; + *margin-left: 96.47481360247316%; + } + .row-fluid .offset11:first-child { + margin-left: 94.01709401709402%; + *margin-left: 93.91071103837061%; + } + .row-fluid .offset10 { + margin-left: 88.03418803418803%; + *margin-left: 87.92780505546462%; + } + .row-fluid .offset10:first-child { + margin-left: 85.47008547008548%; + *margin-left: 85.36370249136206%; + } + .row-fluid .offset9 { + margin-left: 79.48717948717949%; + *margin-left: 79.38079650845607%; + } + .row-fluid .offset9:first-child { + margin-left: 76.92307692307693%; + *margin-left: 76.81669394435352%; + } + .row-fluid .offset8 { + margin-left: 70.94017094017094%; + *margin-left: 70.83378796144753%; + } + .row-fluid .offset8:first-child { + margin-left: 68.37606837606839%; + *margin-left: 68.26968539734497%; + } + .row-fluid .offset7 { + margin-left: 62.393162393162385%; + *margin-left: 62.28677941443899%; + } + .row-fluid .offset7:first-child { + margin-left: 59.82905982905982%; + *margin-left: 59.72267685033642%; + } + .row-fluid .offset6 { + margin-left: 53.84615384615384%; + *margin-left: 53.739770867430444%; + } + .row-fluid .offset6:first-child { + margin-left: 51.28205128205128%; + *margin-left: 51.175668303327875%; + } + .row-fluid .offset5 { + margin-left: 45.299145299145295%; + *margin-left: 45.1927623204219%; + } + .row-fluid .offset5:first-child { + margin-left: 42.73504273504273%; + *margin-left: 42.62865975631933%; + } + .row-fluid .offset4 { + margin-left: 36.75213675213675%; + *margin-left: 36.645753773413354%; + } + .row-fluid .offset4:first-child { + margin-left: 34.18803418803419%; + *margin-left: 34.081651209310785%; + } + .row-fluid .offset3 { + margin-left: 28.205128205128204%; + *margin-left: 28.0987452264048%; + } + .row-fluid .offset3:first-child { + margin-left: 25.641025641025642%; + *margin-left: 25.53464266230224%; + } + .row-fluid .offset2 { + margin-left: 19.65811965811966%; + *margin-left: 19.551736679396257%; + } + .row-fluid .offset2:first-child { + margin-left: 17.094017094017094%; + *margin-left: 16.98763411529369%; + } + .row-fluid .offset1 { + margin-left: 11.11111111111111%; + *margin-left: 11.004728132387708%; + } + .row-fluid .offset1:first-child { + margin-left: 8.547008547008547%; + *margin-left: 8.440625568285142%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 30px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 1156px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 1056px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 956px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 856px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 756px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 656px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 556px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 456px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 356px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 256px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 156px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 56px; + } + .thumbnails { + margin-left: -30px; + } + .thumbnails > li { + margin-left: 30px; + } + .row-fluid .thumbnails { + margin-left: 0; + } +} + +@media (min-width: 768px) and (max-width: 979px) { + .row { + margin-left: -20px; + *zoom: 1; + } + .row:before, + .row:after { + display: table; + line-height: 0; + content: ""; + } + .row:after { + clear: both; + } + [class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; + } + .container, + .navbar-static-top .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; + } + .span12 { + width: 724px; + } + .span11 { + width: 662px; + } + .span10 { + width: 600px; + } + .span9 { + width: 538px; + } + .span8 { + width: 476px; + } + .span7 { + width: 414px; + } + .span6 { + width: 352px; + } + .span5 { + width: 290px; + } + .span4 { + width: 228px; + } + .span3 { + width: 166px; + } + .span2 { + width: 104px; + } + .span1 { + width: 42px; + } + .offset12 { + margin-left: 764px; + } + .offset11 { + margin-left: 702px; + } + .offset10 { + margin-left: 640px; + } + .offset9 { + margin-left: 578px; + } + .offset8 { + margin-left: 516px; + } + .offset7 { + margin-left: 454px; + } + .offset6 { + margin-left: 392px; + } + .offset5 { + margin-left: 330px; + } + .offset4 { + margin-left: 268px; + } + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; + } + .row-fluid { + width: 100%; + *zoom: 1; + } + .row-fluid:before, + .row-fluid:after { + display: table; + line-height: 0; + content: ""; + } + .row-fluid:after { + clear: both; + } + .row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.7624309392265194%; + *margin-left: 2.709239449864817%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="span"]:first-child { + margin-left: 0; + } + .row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.7624309392265194%; + } + .row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; + } + .row-fluid .span11 { + width: 91.43646408839778%; + *width: 91.38327259903608%; + } + .row-fluid .span10 { + width: 82.87292817679558%; + *width: 82.81973668743387%; + } + .row-fluid .span9 { + width: 74.30939226519337%; + *width: 74.25620077583166%; + } + .row-fluid .span8 { + width: 65.74585635359117%; + *width: 65.69266486422946%; + } + .row-fluid .span7 { + width: 57.18232044198895%; + *width: 57.12912895262725%; + } + .row-fluid .span6 { + width: 48.61878453038674%; + *width: 48.56559304102504%; + } + .row-fluid .span5 { + width: 40.05524861878453%; + *width: 40.00205712942283%; + } + .row-fluid .span4 { + width: 31.491712707182323%; + *width: 31.43852121782062%; + } + .row-fluid .span3 { + width: 22.92817679558011%; + *width: 22.87498530621841%; + } + .row-fluid .span2 { + width: 14.3646408839779%; + *width: 14.311449394616199%; + } + .row-fluid .span1 { + width: 5.801104972375691%; + *width: 5.747913483013988%; + } + .row-fluid .offset12 { + margin-left: 105.52486187845304%; + *margin-left: 105.41847889972962%; + } + .row-fluid .offset12:first-child { + margin-left: 102.76243093922652%; + *margin-left: 102.6560479605031%; + } + .row-fluid .offset11 { + margin-left: 96.96132596685082%; + *margin-left: 96.8549429881274%; + } + .row-fluid .offset11:first-child { + margin-left: 94.1988950276243%; + *margin-left: 94.09251204890089%; + } + .row-fluid .offset10 { + margin-left: 88.39779005524862%; + *margin-left: 88.2914070765252%; + } + .row-fluid .offset10:first-child { + margin-left: 85.6353591160221%; + *margin-left: 85.52897613729868%; + } + .row-fluid .offset9 { + margin-left: 79.8342541436464%; + *margin-left: 79.72787116492299%; + } + .row-fluid .offset9:first-child { + margin-left: 77.07182320441989%; + *margin-left: 76.96544022569647%; + } + .row-fluid .offset8 { + margin-left: 71.2707182320442%; + *margin-left: 71.16433525332079%; + } + .row-fluid .offset8:first-child { + margin-left: 68.50828729281768%; + *margin-left: 68.40190431409427%; + } + .row-fluid .offset7 { + margin-left: 62.70718232044199%; + *margin-left: 62.600799341718584%; + } + .row-fluid .offset7:first-child { + margin-left: 59.94475138121547%; + *margin-left: 59.838368402492065%; + } + .row-fluid .offset6 { + margin-left: 54.14364640883978%; + *margin-left: 54.037263430116376%; + } + .row-fluid .offset6:first-child { + margin-left: 51.38121546961326%; + *margin-left: 51.27483249088986%; + } + .row-fluid .offset5 { + margin-left: 45.58011049723757%; + *margin-left: 45.47372751851417%; + } + .row-fluid .offset5:first-child { + margin-left: 42.81767955801105%; + *margin-left: 42.71129657928765%; + } + .row-fluid .offset4 { + margin-left: 37.01657458563536%; + *margin-left: 36.91019160691196%; + } + .row-fluid .offset4:first-child { + margin-left: 34.25414364640884%; + *margin-left: 34.14776066768544%; + } + .row-fluid .offset3 { + margin-left: 28.45303867403315%; + *margin-left: 28.346655695309746%; + } + .row-fluid .offset3:first-child { + margin-left: 25.69060773480663%; + *margin-left: 25.584224756083227%; + } + .row-fluid .offset2 { + margin-left: 19.88950276243094%; + *margin-left: 19.783119783707537%; + } + .row-fluid .offset2:first-child { + margin-left: 17.12707182320442%; + *margin-left: 17.02068884448102%; + } + .row-fluid .offset1 { + margin-left: 11.32596685082873%; + *margin-left: 11.219583872105325%; + } + .row-fluid .offset1:first-child { + margin-left: 8.56353591160221%; + *margin-left: 8.457152932878806%; + } + input, + textarea, + .uneditable-input { + margin-left: 0; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; + } + input.span12, + textarea.span12, + .uneditable-input.span12 { + width: 710px; + } + input.span11, + textarea.span11, + .uneditable-input.span11 { + width: 648px; + } + input.span10, + textarea.span10, + .uneditable-input.span10 { + width: 586px; + } + input.span9, + textarea.span9, + .uneditable-input.span9 { + width: 524px; + } + input.span8, + textarea.span8, + .uneditable-input.span8 { + width: 462px; + } + input.span7, + textarea.span7, + .uneditable-input.span7 { + width: 400px; + } + input.span6, + textarea.span6, + .uneditable-input.span6 { + width: 338px; + } + input.span5, + textarea.span5, + .uneditable-input.span5 { + width: 276px; + } + input.span4, + textarea.span4, + .uneditable-input.span4 { + width: 214px; + } + input.span3, + textarea.span3, + .uneditable-input.span3 { + width: 152px; + } + input.span2, + textarea.span2, + .uneditable-input.span2 { + width: 90px; + } + input.span1, + textarea.span1, + .uneditable-input.span1 { + width: 28px; + } +} + +@media (max-width: 767px) { + body { + padding-right: 20px; + padding-left: 20px; + } + .navbar-fixed-top, + .navbar-fixed-bottom, + .navbar-static-top { + margin-right: -20px; + margin-left: -20px; + } + .container-fluid { + padding: 0; + } + .dl-horizontal dt { + float: none; + width: auto; + clear: none; + text-align: left; + } + .dl-horizontal dd { + margin-left: 0; + } + .container { + width: auto; + } + .row-fluid { + width: 100%; + } + .row, + .thumbnails { + margin-left: 0; + } + .thumbnails > li { + float: none; + margin-left: 0; + } + [class*="span"], + .uneditable-input[class*="span"], + .row-fluid [class*="span"] { + display: block; + float: none; + width: 100%; + margin-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .span12, + .row-fluid .span12 { + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .row-fluid [class*="offset"]:first-child { + margin-left: 0; + } + .input-large, + .input-xlarge, + .input-xxlarge, + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input, + .input-append input, + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + display: inline-block; + width: auto; + } + .controls-row [class*="span"] + [class*="span"] { + margin-left: 0; + } + .modal { + position: fixed; + top: 20px; + right: 20px; + left: 20px; + width: auto; + margin: 0; + } + .modal.fade { + top: -100px; + } + .modal.fade.in { + top: 20px; + } +} + +@media (max-width: 480px) { + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); + } + .page-header h1 small { + display: block; + line-height: 20px; + } + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + .form-horizontal .control-label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + .form-horizontal .controls { + margin-left: 0; + } + .form-horizontal .control-list { + padding-top: 0; + } + .form-horizontal .form-actions { + padding-right: 10px; + padding-left: 10px; + } + .media .pull-left, + .media .pull-right { + display: block; + float: none; + margin-bottom: 10px; + } + .media-object { + margin-right: 0; + margin-left: 0; + } + .modal { + top: 10px; + right: 10px; + left: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + .carousel-caption { + position: static; + } +} + +@media (max-width: 979px) { + body { + padding-top: 0; + } + .navbar-fixed-top, + .navbar-fixed-bottom { + position: static; + } + .navbar-fixed-top { + margin-bottom: 20px; + } + .navbar-fixed-bottom { + margin-top: 20px; + } + .navbar-fixed-top .navbar-inner, + .navbar-fixed-bottom .navbar-inner { + padding: 5px; + } + .navbar .container { + width: auto; + padding: 0; + } + .navbar .brand { + padding-right: 10px; + padding-left: 10px; + margin: 0 0 0 -5px; + } + .nav-collapse { + clear: both; + } + .nav-collapse .nav { + float: none; + margin: 0 0 10px; + } + .nav-collapse .nav > li { + float: none; + } + .nav-collapse .nav > li > a { + margin-bottom: 2px; + } + .nav-collapse .nav > .divider-vertical { + display: none; + } + .nav-collapse .nav .nav-header { + color: #777777; + text-shadow: none; + } + .nav-collapse .nav > li > a, + .nav-collapse .dropdown-menu a { + padding: 9px 15px; + font-weight: bold; + color: #777777; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + } + .nav-collapse .btn { + padding: 4px 10px 4px; + font-weight: normal; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + } + .nav-collapse .dropdown-menu li + li a { + margin-bottom: 2px; + } + .nav-collapse .nav > li > a:hover, + .nav-collapse .nav > li > a:focus, + .nav-collapse .dropdown-menu a:hover, + .nav-collapse .dropdown-menu a:focus { + background-color: #f2f2f2; + } + .navbar-inverse .nav-collapse .nav > li > a, + .navbar-inverse .nav-collapse .dropdown-menu a { + color: #999999; + } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .nav > li > a:focus, + .navbar-inverse .nav-collapse .dropdown-menu a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:focus { + background-color: #111111; + } + .nav-collapse.in .btn-group { + padding: 0; + margin-top: 5px; + } + .nav-collapse .dropdown-menu { + position: static; + top: auto; + left: auto; + display: none; + float: none; + max-width: none; + padding: 0; + margin: 0 15px; + background-color: transparent; + border: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + } + .nav-collapse .open > .dropdown-menu { + display: block; + } + .nav-collapse .dropdown-menu:before, + .nav-collapse .dropdown-menu:after { + display: none; + } + .nav-collapse .dropdown-menu .divider { + display: none; + } + .nav-collapse .nav > li > .dropdown-menu:before, + .nav-collapse .nav > li > .dropdown-menu:after { + display: none; + } + .nav-collapse .navbar-form, + .nav-collapse .navbar-search { + float: none; + padding: 10px 15px; + margin: 10px 0; + border-top: 1px solid #f2f2f2; + border-bottom: 1px solid #f2f2f2; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); + } + .navbar-inverse .nav-collapse .navbar-form, + .navbar-inverse .nav-collapse .navbar-search { + border-top-color: #111111; + border-bottom-color: #111111; + } + .navbar .nav-collapse .nav.pull-right { + float: none; + margin-left: 0; + } + .nav-collapse, + .nav-collapse.collapse { + height: 0; + overflow: hidden; + } + .navbar .btn-navbar { + display: block; + } + .navbar-static .navbar-inner { + padding-right: 10px; + padding-left: 10px; + } +} + +@media (min-width: 980px) { + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} diff --git a/media/bootstrap/css/bootstrap-responsive.min.css b/media/bootstrap/css/bootstrap-responsive.min.css new file mode 100644 index 0000000..0597860 --- /dev/null +++ b/media/bootstrap/css/bootstrap-responsive.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap Responsive v2.3.0 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} diff --git a/media/bootstrap/css/bootstrap.css b/media/bootstrap/css/bootstrap.css new file mode 100644 index 0000000..b255056 --- /dev/null +++ b/media/bootstrap/css/bootstrap.css @@ -0,0 +1,6158 @@ +/*! + * Bootstrap v2.3.0 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */ + +.clearfix { + *zoom: 1; +} + +.clearfix:before, +.clearfix:after { + display: table; + line-height: 0; + content: ""; +} + +.clearfix:after { + clear: both; +} + +.hide-text { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.input-block-level { + display: block; + width: 100%; + min-height: 30px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} + +audio, +canvas, +video { + display: inline-block; + *display: inline; + *zoom: 1; +} + +audio:not([controls]) { + display: none; +} + +html { + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +a:hover, +a:active { + outline: 0; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; + border: 0; + -ms-interpolation-mode: bicubic; +} + +#map_canvas img, +.google-maps img { + max-width: none; +} + +button, +input, +select, +textarea { + margin: 0; + font-size: 100%; + vertical-align: middle; +} + +button, +input { + *overflow: visible; + line-height: normal; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +label, +select, +button, +input[type="button"], +input[type="reset"], +input[type="submit"], +input[type="radio"], +input[type="checkbox"] { + cursor: pointer; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + 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; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } +} + +body { + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 20px; + color: #333333; + background-color: #ffffff; +} + +a { + color: #0088cc; + text-decoration: none; +} + +a:hover, +a:focus { + color: #005580; + text-decoration: underline; +} + +.img-rounded { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +} + +.img-circle { + -webkit-border-radius: 500px; + -moz-border-radius: 500px; + border-radius: 500px; +} + +.row { + margin-left: -20px; + *zoom: 1; +} + +.row:before, +.row:after { + display: table; + line-height: 0; + content: ""; +} + +.row:after { + clear: both; +} + +[class*="span"] { + float: left; + min-height: 1px; + margin-left: 20px; +} + +.container, +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.span12 { + width: 940px; +} + +.span11 { + width: 860px; +} + +.span10 { + width: 780px; +} + +.span9 { + width: 700px; +} + +.span8 { + width: 620px; +} + +.span7 { + width: 540px; +} + +.span6 { + width: 460px; +} + +.span5 { + width: 380px; +} + +.span4 { + width: 300px; +} + +.span3 { + width: 220px; +} + +.span2 { + width: 140px; +} + +.span1 { + width: 60px; +} + +.offset12 { + margin-left: 980px; +} + +.offset11 { + margin-left: 900px; +} + +.offset10 { + margin-left: 820px; +} + +.offset9 { + margin-left: 740px; +} + +.offset8 { + margin-left: 660px; +} + +.offset7 { + margin-left: 580px; +} + +.offset6 { + margin-left: 500px; +} + +.offset5 { + margin-left: 420px; +} + +.offset4 { + margin-left: 340px; +} + +.offset3 { + margin-left: 260px; +} + +.offset2 { + margin-left: 180px; +} + +.offset1 { + margin-left: 100px; +} + +.row-fluid { + width: 100%; + *zoom: 1; +} + +.row-fluid:before, +.row-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.row-fluid:after { + clear: both; +} + +.row-fluid [class*="span"] { + display: block; + float: left; + width: 100%; + min-height: 30px; + margin-left: 2.127659574468085%; + *margin-left: 2.074468085106383%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.row-fluid [class*="span"]:first-child { + margin-left: 0; +} + +.row-fluid .controls-row [class*="span"] + [class*="span"] { + margin-left: 2.127659574468085%; +} + +.row-fluid .span12 { + width: 100%; + *width: 99.94680851063829%; +} + +.row-fluid .span11 { + width: 91.48936170212765%; + *width: 91.43617021276594%; +} + +.row-fluid .span10 { + width: 82.97872340425532%; + *width: 82.92553191489361%; +} + +.row-fluid .span9 { + width: 74.46808510638297%; + *width: 74.41489361702126%; +} + +.row-fluid .span8 { + width: 65.95744680851064%; + *width: 65.90425531914893%; +} + +.row-fluid .span7 { + width: 57.44680851063829%; + *width: 57.39361702127659%; +} + +.row-fluid .span6 { + width: 48.93617021276595%; + *width: 48.88297872340425%; +} + +.row-fluid .span5 { + width: 40.42553191489362%; + *width: 40.37234042553192%; +} + +.row-fluid .span4 { + width: 31.914893617021278%; + *width: 31.861702127659576%; +} + +.row-fluid .span3 { + width: 23.404255319148934%; + *width: 23.351063829787233%; +} + +.row-fluid .span2 { + width: 14.893617021276595%; + *width: 14.840425531914894%; +} + +.row-fluid .span1 { + width: 6.382978723404255%; + *width: 6.329787234042553%; +} + +.row-fluid .offset12 { + margin-left: 104.25531914893617%; + *margin-left: 104.14893617021275%; +} + +.row-fluid .offset12:first-child { + margin-left: 102.12765957446808%; + *margin-left: 102.02127659574467%; +} + +.row-fluid .offset11 { + margin-left: 95.74468085106382%; + *margin-left: 95.6382978723404%; +} + +.row-fluid .offset11:first-child { + margin-left: 93.61702127659574%; + *margin-left: 93.51063829787232%; +} + +.row-fluid .offset10 { + margin-left: 87.23404255319149%; + *margin-left: 87.12765957446807%; +} + +.row-fluid .offset10:first-child { + margin-left: 85.1063829787234%; + *margin-left: 84.99999999999999%; +} + +.row-fluid .offset9 { + margin-left: 78.72340425531914%; + *margin-left: 78.61702127659572%; +} + +.row-fluid .offset9:first-child { + margin-left: 76.59574468085106%; + *margin-left: 76.48936170212764%; +} + +.row-fluid .offset8 { + margin-left: 70.2127659574468%; + *margin-left: 70.10638297872339%; +} + +.row-fluid .offset8:first-child { + margin-left: 68.08510638297872%; + *margin-left: 67.9787234042553%; +} + +.row-fluid .offset7 { + margin-left: 61.70212765957446%; + *margin-left: 61.59574468085106%; +} + +.row-fluid .offset7:first-child { + margin-left: 59.574468085106375%; + *margin-left: 59.46808510638297%; +} + +.row-fluid .offset6 { + margin-left: 53.191489361702125%; + *margin-left: 53.085106382978715%; +} + +.row-fluid .offset6:first-child { + margin-left: 51.063829787234035%; + *margin-left: 50.95744680851063%; +} + +.row-fluid .offset5 { + margin-left: 44.68085106382979%; + *margin-left: 44.57446808510638%; +} + +.row-fluid .offset5:first-child { + margin-left: 42.5531914893617%; + *margin-left: 42.4468085106383%; +} + +.row-fluid .offset4 { + margin-left: 36.170212765957444%; + *margin-left: 36.06382978723405%; +} + +.row-fluid .offset4:first-child { + margin-left: 34.04255319148936%; + *margin-left: 33.93617021276596%; +} + +.row-fluid .offset3 { + margin-left: 27.659574468085104%; + *margin-left: 27.5531914893617%; +} + +.row-fluid .offset3:first-child { + margin-left: 25.53191489361702%; + *margin-left: 25.425531914893618%; +} + +.row-fluid .offset2 { + margin-left: 19.148936170212764%; + *margin-left: 19.04255319148936%; +} + +.row-fluid .offset2:first-child { + margin-left: 17.02127659574468%; + *margin-left: 16.914893617021278%; +} + +.row-fluid .offset1 { + margin-left: 10.638297872340425%; + *margin-left: 10.53191489361702%; +} + +.row-fluid .offset1:first-child { + margin-left: 8.51063829787234%; + *margin-left: 8.404255319148938%; +} + +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} + +.container { + margin-right: auto; + margin-left: auto; + *zoom: 1; +} + +.container:before, +.container:after { + display: table; + line-height: 0; + content: ""; +} + +.container:after { + clear: both; +} + +.container-fluid { + padding-right: 20px; + padding-left: 20px; + *zoom: 1; +} + +.container-fluid:before, +.container-fluid:after { + display: table; + line-height: 0; + content: ""; +} + +.container-fluid:after { + clear: both; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 30px; +} + +small { + font-size: 85%; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +cite { + font-style: normal; +} + +.muted { + color: #999999; +} + +a.muted:hover, +a.muted:focus { + color: #808080; +} + +.text-warning { + color: #c09853; +} + +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; +} + +.text-error { + color: #b94a48; +} + +a.text-error:hover, +a.text-error:focus { + color: #953b39; +} + +.text-info { + color: #3a87ad; +} + +a.text-info:hover, +a.text-info:focus { + color: #2d6987; +} + +.text-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 10px 0; + font-family: inherit; + font-weight: bold; + line-height: 20px; + color: inherit; + text-rendering: optimizelegibility; +} + +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + font-weight: normal; + line-height: 1; + color: #999999; +} + +h1, +h2, +h3 { + line-height: 40px; +} + +h1 { + font-size: 38.5px; +} + +h2 { + font-size: 31.5px; +} + +h3 { + font-size: 24.5px; +} + +h4 { + font-size: 17.5px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 11.9px; +} + +h1 small { + font-size: 24.5px; +} + +h2 small { + font-size: 17.5px; +} + +h3 small { + font-size: 14px; +} + +h4 small { + font-size: 14px; +} + +.page-header { + padding-bottom: 9px; + margin: 20px 0 30px; + border-bottom: 1px solid #eeeeee; +} + +ul, +ol { + padding: 0; + margin: 0 0 10px 25px; +} + +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} + +li { + line-height: 20px; +} + +ul.unstyled, +ol.unstyled { + margin-left: 0; + list-style: none; +} + +ul.inline, +ol.inline { + margin-left: 0; + list-style: none; +} + +ul.inline > li, +ol.inline > li { + display: inline-block; + *display: inline; + padding-right: 5px; + padding-left: 5px; + *zoom: 1; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal { + *zoom: 1; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + line-height: 0; + content: ""; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #ffffff; +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +code { + padding: 2px 4px; + color: #d14; + white-space: nowrap; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 20px; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +form { + margin: 0 0 20px; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +legend small { + font-size: 15px; + color: #999999; +} + +label, +input, +button, +select, +textarea { + font-size: 14px; + font-weight: normal; + line-height: 20px; +} + +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +label { + display: block; + margin-bottom: 5px; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + display: inline-block; + height: 20px; + padding: 4px 6px; + margin-bottom: 10px; + font-size: 14px; + line-height: 20px; + color: #555555; + vertical-align: middle; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +input, +textarea, +.uneditable-input { + width: 206px; +} + +textarea { + height: auto; +} + +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"], +.uneditable-input { + background-color: #ffffff; + border: 1px solid #cccccc; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus, +.uneditable-input:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + *margin-top: 0; + line-height: normal; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +select, +input[type="file"] { + height: 30px; + /* In IE7, the height of the select element cannot be changed by height, only font-size */ + + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + + line-height: 30px; +} + +select { + width: 220px; + background-color: #ffffff; + border: 1px solid #cccccc; +} + +select[multiple], +select[size] { + height: auto; +} + +select:focus, +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.uneditable-input, +.uneditable-textarea { + color: #999999; + cursor: not-allowed; + background-color: #fcfcfc; + border-color: #cccccc; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); +} + +.uneditable-input { + overflow: hidden; + white-space: nowrap; +} + +.uneditable-textarea { + width: auto; + height: auto; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; +} + +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; +} + +.radio, +.checkbox { + min-height: 20px; + padding-left: 20px; +} + +.radio input[type="radio"], +.checkbox input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio.inline, +.checkbox.inline { + display: inline-block; + padding-top: 5px; + margin-bottom: 0; + vertical-align: middle; +} + +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { + margin-left: 10px; +} + +.input-mini { + width: 60px; +} + +.input-small { + width: 90px; +} + +.input-medium { + width: 150px; +} + +.input-large { + width: 210px; +} + +.input-xlarge { + width: 270px; +} + +.input-xxlarge { + width: 530px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"], +.uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"] { + float: none; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-append .uneditable-input[class*="span"], +.input-prepend input[class*="span"], +.input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], +.row-fluid .input-prepend [class*="span"], +.row-fluid .input-append [class*="span"] { + display: inline-block; +} + +input, +textarea, +.uneditable-input { + margin-left: 0; +} + +.controls-row [class*="span"] + [class*="span"] { + margin-left: 20px; +} + +input.span12, +textarea.span12, +.uneditable-input.span12 { + width: 926px; +} + +input.span11, +textarea.span11, +.uneditable-input.span11 { + width: 846px; +} + +input.span10, +textarea.span10, +.uneditable-input.span10 { + width: 766px; +} + +input.span9, +textarea.span9, +.uneditable-input.span9 { + width: 686px; +} + +input.span8, +textarea.span8, +.uneditable-input.span8 { + width: 606px; +} + +input.span7, +textarea.span7, +.uneditable-input.span7 { + width: 526px; +} + +input.span6, +textarea.span6, +.uneditable-input.span6 { + width: 446px; +} + +input.span5, +textarea.span5, +.uneditable-input.span5 { + width: 366px; +} + +input.span4, +textarea.span4, +.uneditable-input.span4 { + width: 286px; +} + +input.span3, +textarea.span3, +.uneditable-input.span3 { + width: 206px; +} + +input.span2, +textarea.span2, +.uneditable-input.span2 { + width: 126px; +} + +input.span1, +textarea.span1, +.uneditable-input.span1 { + width: 46px; +} + +.controls-row { + *zoom: 1; +} + +.controls-row:before, +.controls-row:after { + display: table; + line-height: 0; + content: ""; +} + +.controls-row:after { + clear: both; +} + +.controls-row [class*="span"], +.row-fluid .controls-row [class*="span"] { + float: left; +} + +.controls-row .checkbox[class*="span"], +.controls-row .radio[class*="span"] { + padding-top: 5px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly] { + background-color: transparent; +} + +.control-group.warning .control-label, +.control-group.warning .help-block, +.control-group.warning .help-inline { + color: #c09853; +} + +.control-group.warning .checkbox, +.control-group.warning .radio, +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + color: #c09853; +} + +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; +} + +.control-group.error .control-label, +.control-group.error .help-block, +.control-group.error .help-inline { + color: #b94a48; +} + +.control-group.error .checkbox, +.control-group.error .radio, +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + color: #b94a48; +} + +.control-group.error input, +.control-group.error select, +.control-group.error textarea { + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; +} + +.control-group.success .control-label, +.control-group.success .help-block, +.control-group.success .help-inline { + color: #468847; +} + +.control-group.success .checkbox, +.control-group.success .radio, +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + color: #468847; +} + +.control-group.success input, +.control-group.success select, +.control-group.success textarea { + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { + color: #468847; + background-color: #dff0d8; + border-color: #468847; +} + +.control-group.info .control-label, +.control-group.info .help-block, +.control-group.info .help-inline { + color: #3a87ad; +} + +.control-group.info .checkbox, +.control-group.info .radio, +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + color: #3a87ad; +} + +.control-group.info input, +.control-group.info select, +.control-group.info textarea { + border-color: #3a87ad; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.control-group.info input:focus, +.control-group.info select:focus, +.control-group.info textarea:focus { + border-color: #2d6987; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; +} + +.control-group.info .input-prepend .add-on, +.control-group.info .input-append .add-on { + color: #3a87ad; + background-color: #d9edf7; + border-color: #3a87ad; +} + +input:focus:invalid, +textarea:focus:invalid, +select:focus:invalid { + color: #b94a48; + border-color: #ee5f5b; +} + +input:focus:invalid:focus, +textarea:focus:invalid:focus, +select:focus:invalid:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} + +.form-actions { + padding: 19px 20px 20px; + margin-top: 20px; + margin-bottom: 20px; + background-color: #f5f5f5; + border-top: 1px solid #e5e5e5; + *zoom: 1; +} + +.form-actions:before, +.form-actions:after { + display: table; + line-height: 0; + content: ""; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #595959; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + *display: inline; + padding-left: 5px; + vertical-align: middle; + *zoom: 1; +} + +.input-append, +.input-prepend { + display: inline-block; + margin-bottom: 10px; + font-size: 0; + white-space: nowrap; + vertical-align: middle; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input, +.input-append .dropdown-menu, +.input-prepend .dropdown-menu, +.input-append .popover, +.input-prepend .popover { + font-size: 14px; +} + +.input-append input, +.input-prepend input, +.input-append select, +.input-prepend select, +.input-append .uneditable-input, +.input-prepend .uneditable-input { + position: relative; + margin-bottom: 0; + *margin-left: 0; + vertical-align: top; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append input:focus, +.input-prepend input:focus, +.input-append select:focus, +.input-prepend select:focus, +.input-append .uneditable-input:focus, +.input-prepend .uneditable-input:focus { + z-index: 2; +} + +.input-append .add-on, +.input-prepend .add-on { + display: inline-block; + width: auto; + height: 20px; + min-width: 16px; + padding: 4px 5px; + font-size: 14px; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + background-color: #eeeeee; + border: 1px solid #ccc; +} + +.input-append .add-on, +.input-prepend .add-on, +.input-append .btn, +.input-prepend .btn, +.input-append .btn-group > .dropdown-toggle, +.input-prepend .btn-group > .dropdown-toggle { + vertical-align: top; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-append .active, +.input-prepend .active { + background-color: #a9dba9; + border-color: #46a546; +} + +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; +} + +.input-prepend .add-on:first-child, +.input-prepend .btn:first-child { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input, +.input-append select, +.input-append .uneditable-input { + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-append input + .btn-group .btn:last-child, +.input-append select + .btn-group .btn:last-child, +.input-append .uneditable-input + .btn-group .btn:last-child { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-append .add-on, +.input-append .btn, +.input-append .btn-group { + margin-left: -1px; +} + +.input-append .add-on:last-child, +.input-append .btn:last-child, +.input-append .btn-group:last-child > .dropdown-toggle { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.input-prepend.input-append input + .btn-group .btn, +.input-prepend.input-append select + .btn-group .btn, +.input-prepend.input-append .uneditable-input + .btn-group .btn { + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.input-prepend.input-append .btn-group:first-child { + margin-left: 0; +} + +input.search-query { + padding-right: 14px; + padding-right: 4px \9; + padding-left: 14px; + padding-left: 4px \9; + /* IE7-8 doesn't have border-radius, so don't indent the padding */ + + margin-bottom: 0; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +/* Allow for input prepend/append in search forms */ + +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.form-search .input-append .search-query { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search .input-append .btn { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .search-query { + -webkit-border-radius: 0 14px 14px 0; + -moz-border-radius: 0 14px 14px 0; + border-radius: 0 14px 14px 0; +} + +.form-search .input-prepend .btn { + -webkit-border-radius: 14px 0 0 14px; + -moz-border-radius: 14px 0 0 14px; + border-radius: 14px 0 0 14px; +} + +.form-search input, +.form-inline input, +.form-horizontal input, +.form-search textarea, +.form-inline textarea, +.form-horizontal textarea, +.form-search select, +.form-inline select, +.form-horizontal select, +.form-search .help-inline, +.form-inline .help-inline, +.form-horizontal .help-inline, +.form-search .uneditable-input, +.form-inline .uneditable-input, +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { + display: inline-block; + *display: inline; + margin-bottom: 0; + vertical-align: middle; + *zoom: 1; +} + +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} + +.form-search label, +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { + display: inline-block; +} + +.form-search .input-append, +.form-inline .input-append, +.form-search .input-prepend, +.form-inline .input-prepend { + margin-bottom: 0; +} + +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; + vertical-align: middle; +} + +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-right: 3px; + margin-left: 0; +} + +.control-group { + margin-bottom: 10px; +} + +legend + .control-group { + margin-top: 20px; + -webkit-margin-top-collapse: separate; +} + +.form-horizontal .control-group { + margin-bottom: 20px; + *zoom: 1; +} + +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { + display: table; + line-height: 0; + content: ""; +} + +.form-horizontal .control-group:after { + clear: both; +} + +.form-horizontal .control-label { + float: left; + width: 160px; + padding-top: 5px; + text-align: right; +} + +.form-horizontal .controls { + *display: inline-block; + *padding-left: 20px; + margin-left: 180px; + *margin-left: 0; +} + +.form-horizontal .controls:first-child { + *padding-left: 180px; +} + +.form-horizontal .help-block { + margin-bottom: 0; +} + +.form-horizontal input + .help-block, +.form-horizontal select + .help-block, +.form-horizontal textarea + .help-block, +.form-horizontal .uneditable-input + .help-block, +.form-horizontal .input-prepend + .help-block, +.form-horizontal .input-append + .help-block { + margin-top: 10px; +} + +.form-horizontal .form-actions { + padding-left: 180px; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + text-align: left; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.table th { + font-weight: bold; +} + +.table thead th { + vertical-align: bottom; +} + +.table caption + thead tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { + border-top: 0; +} + +.table tbody + tbody { + border-top: 2px solid #dddddd; +} + +.table .table { + background-color: #ffffff; +} + +.table-condensed th, +.table-condensed td { + padding: 4px 5px; +} + +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + *border-collapse: collapse; + border-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; +} + +.table-bordered caption + thead tr:first-child th, +.table-bordered caption + tbody tr:first-child th, +.table-bordered caption + tbody tr:first-child td, +.table-bordered colgroup + thead tr:first-child th, +.table-bordered colgroup + tbody tr:first-child th, +.table-bordered colgroup + tbody tr:first-child td, +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { + border-top: 0; +} + +.table-bordered thead:first-child tr:first-child > th:first-child, +.table-bordered tbody:first-child tr:first-child > td:first-child, +.table-bordered tbody:first-child tr:first-child > th:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-bottomright: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { + -webkit-border-bottom-left-radius: 0; + border-bottom-left-radius: 0; + -moz-border-radius-bottomleft: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { + -webkit-border-bottom-right-radius: 0; + border-bottom-right-radius: 0; + -moz-border-radius-bottomright: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered caption + tbody tr:first-child td:first-child, +.table-bordered colgroup + thead tr:first-child th:first-child, +.table-bordered colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; +} + +.table-bordered caption + thead tr:first-child th:last-child, +.table-bordered caption + tbody tr:first-child td:last-child, +.table-bordered colgroup + thead tr:first-child th:last-child, +.table-bordered colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-radius-topright: 4px; +} + +.table-striped tbody > tr:nth-child(odd) > td, +.table-striped tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover tbody tr:hover > td, +.table-hover tbody tr:hover > th { + background-color: #f5f5f5; +} + +table td[class*="span"], +table th[class*="span"], +.row-fluid table td[class*="span"], +.row-fluid table th[class*="span"] { + display: table-cell; + float: none; + margin-left: 0; +} + +.table td.span1, +.table th.span1 { + float: none; + width: 44px; + margin-left: 0; +} + +.table td.span2, +.table th.span2 { + float: none; + width: 124px; + margin-left: 0; +} + +.table td.span3, +.table th.span3 { + float: none; + width: 204px; + margin-left: 0; +} + +.table td.span4, +.table th.span4 { + float: none; + width: 284px; + margin-left: 0; +} + +.table td.span5, +.table th.span5 { + float: none; + width: 364px; + margin-left: 0; +} + +.table td.span6, +.table th.span6 { + float: none; + width: 444px; + margin-left: 0; +} + +.table td.span7, +.table th.span7 { + float: none; + width: 524px; + margin-left: 0; +} + +.table td.span8, +.table th.span8 { + float: none; + width: 604px; + margin-left: 0; +} + +.table td.span9, +.table th.span9 { + float: none; + width: 684px; + margin-left: 0; +} + +.table td.span10, +.table th.span10 { + float: none; + width: 764px; + margin-left: 0; +} + +.table td.span11, +.table th.span11 { + float: none; + width: 844px; + margin-left: 0; +} + +.table td.span12, +.table th.span12 { + float: none; + width: 924px; + margin-left: 0; +} + +.table tbody tr.success > td { + background-color: #dff0d8; +} + +.table tbody tr.error > td { + background-color: #f2dede; +} + +.table tbody tr.warning > td { + background-color: #fcf8e3; +} + +.table tbody tr.info > td { + background-color: #d9edf7; +} + +.table-hover tbody tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover tbody tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover tbody tr.warning:hover > td { + background-color: #faf2cc; +} + +.table-hover tbody tr.info:hover > td { + background-color: #c4e3f3; +} + +[class^="icon-"], +[class*=" icon-"] { + display: inline-block; + width: 14px; + height: 14px; + margin-top: 1px; + *margin-right: .3em; + line-height: 14px; + vertical-align: text-top; + background-image: url("../img/glyphicons-halflings.png"); + background-position: 14px 14px; + background-repeat: no-repeat; +} + +/* White icons with optional class, or on hover/focus/active states of certain elements */ + +.icon-white, +.nav-pills > .active > a > [class^="icon-"], +.nav-pills > .active > a > [class*=" icon-"], +.nav-list > .active > a > [class^="icon-"], +.nav-list > .active > a > [class*=" icon-"], +.navbar-inverse .nav > .active > a > [class^="icon-"], +.navbar-inverse .nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:focus > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > li > a:focus > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"], +.dropdown-submenu:hover > a > [class^="icon-"], +.dropdown-submenu:focus > a > [class^="icon-"], +.dropdown-submenu:hover > a > [class*=" icon-"], +.dropdown-submenu:focus > a > [class*=" icon-"] { + background-image: url("../img/glyphicons-halflings-white.png"); +} + +.icon-glass { + background-position: 0 0; +} + +.icon-music { + background-position: -24px 0; +} + +.icon-search { + background-position: -48px 0; +} + +.icon-envelope { + background-position: -72px 0; +} + +.icon-heart { + background-position: -96px 0; +} + +.icon-star { + background-position: -120px 0; +} + +.icon-star-empty { + background-position: -144px 0; +} + +.icon-user { + background-position: -168px 0; +} + +.icon-film { + background-position: -192px 0; +} + +.icon-th-large { + background-position: -216px 0; +} + +.icon-th { + background-position: -240px 0; +} + +.icon-th-list { + background-position: -264px 0; +} + +.icon-ok { + background-position: -288px 0; +} + +.icon-remove { + background-position: -312px 0; +} + +.icon-zoom-in { + background-position: -336px 0; +} + +.icon-zoom-out { + background-position: -360px 0; +} + +.icon-off { + background-position: -384px 0; +} + +.icon-signal { + background-position: -408px 0; +} + +.icon-cog { + background-position: -432px 0; +} + +.icon-trash { + background-position: -456px 0; +} + +.icon-home { + background-position: 0 -24px; +} + +.icon-file { + background-position: -24px -24px; +} + +.icon-time { + background-position: -48px -24px; +} + +.icon-road { + background-position: -72px -24px; +} + +.icon-download-alt { + background-position: -96px -24px; +} + +.icon-download { + background-position: -120px -24px; +} + +.icon-upload { + background-position: -144px -24px; +} + +.icon-inbox { + background-position: -168px -24px; +} + +.icon-play-circle { + background-position: -192px -24px; +} + +.icon-repeat { + background-position: -216px -24px; +} + +.icon-refresh { + background-position: -240px -24px; +} + +.icon-list-alt { + background-position: -264px -24px; +} + +.icon-lock { + background-position: -287px -24px; +} + +.icon-flag { + background-position: -312px -24px; +} + +.icon-headphones { + background-position: -336px -24px; +} + +.icon-volume-off { + background-position: -360px -24px; +} + +.icon-volume-down { + background-position: -384px -24px; +} + +.icon-volume-up { + background-position: -408px -24px; +} + +.icon-qrcode { + background-position: -432px -24px; +} + +.icon-barcode { + background-position: -456px -24px; +} + +.icon-tag { + background-position: 0 -48px; +} + +.icon-tags { + background-position: -25px -48px; +} + +.icon-book { + background-position: -48px -48px; +} + +.icon-bookmark { + background-position: -72px -48px; +} + +.icon-print { + background-position: -96px -48px; +} + +.icon-camera { + background-position: -120px -48px; +} + +.icon-font { + background-position: -144px -48px; +} + +.icon-bold { + background-position: -167px -48px; +} + +.icon-italic { + background-position: -192px -48px; +} + +.icon-text-height { + background-position: -216px -48px; +} + +.icon-text-width { + background-position: -240px -48px; +} + +.icon-align-left { + background-position: -264px -48px; +} + +.icon-align-center { + background-position: -288px -48px; +} + +.icon-align-right { + background-position: -312px -48px; +} + +.icon-align-justify { + background-position: -336px -48px; +} + +.icon-list { + background-position: -360px -48px; +} + +.icon-indent-left { + background-position: -384px -48px; +} + +.icon-indent-right { + background-position: -408px -48px; +} + +.icon-facetime-video { + background-position: -432px -48px; +} + +.icon-picture { + background-position: -456px -48px; +} + +.icon-pencil { + background-position: 0 -72px; +} + +.icon-map-marker { + background-position: -24px -72px; +} + +.icon-adjust { + background-position: -48px -72px; +} + +.icon-tint { + background-position: -72px -72px; +} + +.icon-edit { + background-position: -96px -72px; +} + +.icon-share { + background-position: -120px -72px; +} + +.icon-check { + background-position: -144px -72px; +} + +.icon-move { + background-position: -168px -72px; +} + +.icon-step-backward { + background-position: -192px -72px; +} + +.icon-fast-backward { + background-position: -216px -72px; +} + +.icon-backward { + background-position: -240px -72px; +} + +.icon-play { + background-position: -264px -72px; +} + +.icon-pause { + background-position: -288px -72px; +} + +.icon-stop { + background-position: -312px -72px; +} + +.icon-forward { + background-position: -336px -72px; +} + +.icon-fast-forward { + background-position: -360px -72px; +} + +.icon-step-forward { + background-position: -384px -72px; +} + +.icon-eject { + background-position: -408px -72px; +} + +.icon-chevron-left { + background-position: -432px -72px; +} + +.icon-chevron-right { + background-position: -456px -72px; +} + +.icon-plus-sign { + background-position: 0 -96px; +} + +.icon-minus-sign { + background-position: -24px -96px; +} + +.icon-remove-sign { + background-position: -48px -96px; +} + +.icon-ok-sign { + background-position: -72px -96px; +} + +.icon-question-sign { + background-position: -96px -96px; +} + +.icon-info-sign { + background-position: -120px -96px; +} + +.icon-screenshot { + background-position: -144px -96px; +} + +.icon-remove-circle { + background-position: -168px -96px; +} + +.icon-ok-circle { + background-position: -192px -96px; +} + +.icon-ban-circle { + background-position: -216px -96px; +} + +.icon-arrow-left { + background-position: -240px -96px; +} + +.icon-arrow-right { + background-position: -264px -96px; +} + +.icon-arrow-up { + background-position: -289px -96px; +} + +.icon-arrow-down { + background-position: -312px -96px; +} + +.icon-share-alt { + background-position: -336px -96px; +} + +.icon-resize-full { + background-position: -360px -96px; +} + +.icon-resize-small { + background-position: -384px -96px; +} + +.icon-plus { + background-position: -408px -96px; +} + +.icon-minus { + background-position: -433px -96px; +} + +.icon-asterisk { + background-position: -456px -96px; +} + +.icon-exclamation-sign { + background-position: 0 -120px; +} + +.icon-gift { + background-position: -24px -120px; +} + +.icon-leaf { + background-position: -48px -120px; +} + +.icon-fire { + background-position: -72px -120px; +} + +.icon-eye-open { + background-position: -96px -120px; +} + +.icon-eye-close { + background-position: -120px -120px; +} + +.icon-warning-sign { + background-position: -144px -120px; +} + +.icon-plane { + background-position: -168px -120px; +} + +.icon-calendar { + background-position: -192px -120px; +} + +.icon-random { + width: 16px; + background-position: -216px -120px; +} + +.icon-comment { + background-position: -240px -120px; +} + +.icon-magnet { + background-position: -264px -120px; +} + +.icon-chevron-up { + background-position: -288px -120px; +} + +.icon-chevron-down { + background-position: -313px -119px; +} + +.icon-retweet { + background-position: -336px -120px; +} + +.icon-shopping-cart { + background-position: -360px -120px; +} + +.icon-folder-close { + width: 16px; + background-position: -384px -120px; +} + +.icon-folder-open { + width: 16px; + background-position: -408px -120px; +} + +.icon-resize-vertical { + background-position: -432px -119px; +} + +.icon-resize-horizontal { + background-position: -456px -118px; +} + +.icon-hdd { + background-position: 0 -144px; +} + +.icon-bullhorn { + background-position: -24px -144px; +} + +.icon-bell { + background-position: -48px -144px; +} + +.icon-certificate { + background-position: -72px -144px; +} + +.icon-thumbs-up { + background-position: -96px -144px; +} + +.icon-thumbs-down { + background-position: -120px -144px; +} + +.icon-hand-right { + background-position: -144px -144px; +} + +.icon-hand-left { + background-position: -168px -144px; +} + +.icon-hand-up { + background-position: -192px -144px; +} + +.icon-hand-down { + background-position: -216px -144px; +} + +.icon-circle-arrow-right { + background-position: -240px -144px; +} + +.icon-circle-arrow-left { + background-position: -264px -144px; +} + +.icon-circle-arrow-up { + background-position: -288px -144px; +} + +.icon-circle-arrow-down { + background-position: -312px -144px; +} + +.icon-globe { + background-position: -336px -144px; +} + +.icon-wrench { + background-position: -360px -144px; +} + +.icon-tasks { + background-position: -384px -144px; +} + +.icon-filter { + background-position: -408px -144px; +} + +.icon-briefcase { + background-position: -432px -144px; +} + +.icon-fullscreen { + background-position: -456px -144px; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle { + *margin-bottom: -3px; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.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; + list-style: none; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + *border-right-width: 2px; + *border-bottom-width: 2px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #0081c2; + background-image: -moz-linear-gradient(top, #0088cc, #0077b3); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); + background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); + background-image: -o-linear-gradient(top, #0088cc, #0077b3); + background-image: linear-gradient(to bottom, #0088cc, #0077b3); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open { + *z-index: 1000; +} + +.open > .dropdown-menu { + display: block; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.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; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + -webkit-border-radius: 5px 5px 5px 0; + -moz-border-radius: 5px 5px 5px 0; + border-radius: 5px 5px 5px 0; +} + +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; +} + +.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 .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; + margin-top: 2px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.fade { + opacity: 0; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; +} + +.fade.in { + opacity: 1; +} + +.collapse { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition: height 0.35s ease; + -moz-transition: height 0.35s ease; + -o-transition: height 0.35s ease; + transition: height 0.35s ease; +} + +.collapse.in { + height: auto; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000000; + text-decoration: none; + cursor: pointer; + opacity: 0.4; + filter: alpha(opacity=40); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.btn { + display: inline-block; + *display: inline; + padding: 4px 12px; + margin-bottom: 0; + *margin-left: .3em; + font-size: 14px; + line-height: 20px; + color: #333333; + text-align: center; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + vertical-align: middle; + cursor: pointer; + background-color: #f5f5f5; + *background-color: #e6e6e6; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); + background-repeat: repeat-x; + border: 1px solid #cccccc; + *border: 0; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + border-bottom-color: #b3b3b3; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + color: #333333; + background-color: #e6e6e6; + *background-color: #d9d9d9; +} + +.btn:active, +.btn.active { + background-color: #cccccc \9; +} + +.btn:first-child { + *margin-left: 0; +} + +.btn:hover, +.btn:focus { + color: #333333; + text-decoration: none; + background-position: 0 -15px; + -webkit-transition: background-position 0.1s linear; + -moz-transition: background-position 0.1s linear; + -o-transition: background-position 0.1s linear; + transition: background-position 0.1s linear; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn.active, +.btn:active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn.disabled, +.btn[disabled] { + cursor: default; + background-image: none; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 19px; + font-size: 17.5px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.btn-large [class^="icon-"], +.btn-large [class*=" icon-"] { + margin-top: 4px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-small [class^="icon-"], +.btn-small [class*=" icon-"] { + margin-top: 0; +} + +.btn-mini [class^="icon-"], +.btn-mini [class*=" icon-"] { + margin-top: -1px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn-primary.active, +.btn-warning.active, +.btn-danger.active, +.btn-success.active, +.btn-info.active, +.btn-inverse.active { + color: rgba(255, 255, 255, 0.75); +} + +.btn-primary { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #006dcc; + *background-color: #0044cc; + background-image: -moz-linear-gradient(top, #0088cc, #0044cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); + background-image: -o-linear-gradient(top, #0088cc, #0044cc); + background-image: linear-gradient(to bottom, #0088cc, #0044cc); + background-repeat: repeat-x; + border-color: #0044cc #0044cc #002a80; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.btn-primary.disabled, +.btn-primary[disabled] { + color: #ffffff; + background-color: #0044cc; + *background-color: #003bb3; +} + +.btn-primary:active, +.btn-primary.active { + background-color: #003399 \9; +} + +.btn-warning { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #faa732; + *background-color: #f89406; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + border-color: #f89406 #f89406 #ad6704; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.btn-warning.disabled, +.btn-warning[disabled] { + color: #ffffff; + background-color: #f89406; + *background-color: #df8505; +} + +.btn-warning:active, +.btn-warning.active { + background-color: #c67605 \9; +} + +.btn-danger { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #da4f49; + *background-color: #bd362f; + background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); + background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); + background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); + background-repeat: repeat-x; + border-color: #bd362f #bd362f #802420; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.btn-danger.disabled, +.btn-danger[disabled] { + color: #ffffff; + background-color: #bd362f; + *background-color: #a9302a; +} + +.btn-danger:active, +.btn-danger.active { + background-color: #942a25 \9; +} + +.btn-success { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #5bb75b; + *background-color: #51a351; + background-image: -moz-linear-gradient(top, #62c462, #51a351); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); + background-image: -webkit-linear-gradient(top, #62c462, #51a351); + background-image: -o-linear-gradient(top, #62c462, #51a351); + background-image: linear-gradient(to bottom, #62c462, #51a351); + background-repeat: repeat-x; + border-color: #51a351 #51a351 #387038; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.btn-success.disabled, +.btn-success[disabled] { + color: #ffffff; + background-color: #51a351; + *background-color: #499249; +} + +.btn-success:active, +.btn-success.active { + background-color: #408140 \9; +} + +.btn-info { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #49afcd; + *background-color: #2f96b4; + background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); + background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); + background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); + background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); + background-repeat: repeat-x; + border-color: #2f96b4 #2f96b4 #1f6377; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.btn-info.disabled, +.btn-info[disabled] { + color: #ffffff; + background-color: #2f96b4; + *background-color: #2a85a0; +} + +.btn-info:active, +.btn-info.active { + background-color: #24748c \9; +} + +.btn-inverse { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #363636; + *background-color: #222222; + background-image: -moz-linear-gradient(top, #444444, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); + background-image: -webkit-linear-gradient(top, #444444, #222222); + background-image: -o-linear-gradient(top, #444444, #222222); + background-image: linear-gradient(to bottom, #444444, #222222); + background-repeat: repeat-x; + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.btn-inverse:hover, +.btn-inverse:focus, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + color: #ffffff; + background-color: #222222; + *background-color: #151515; +} + +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} + +button.btn, +input[type="submit"].btn { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { + padding: 0; + border: 0; +} + +button.btn.btn-large, +input[type="submit"].btn.btn-large { + *padding-top: 7px; + *padding-bottom: 7px; +} + +button.btn.btn-small, +input[type="submit"].btn.btn-small { + *padding-top: 3px; + *padding-bottom: 3px; +} + +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled] { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} + +.btn-link { + color: #0088cc; + cursor: pointer; + border-color: transparent; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #005580; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +.btn-link[disabled]:focus { + color: #333333; + text-decoration: none; +} + +.btn-group { + position: relative; + display: inline-block; + *display: inline; + *margin-left: .3em; + font-size: 0; + white-space: nowrap; + vertical-align: middle; + *zoom: 1; +} + +.btn-group:first-child { + *margin-left: 0; +} + +.btn-group + .btn-group { + margin-left: 5px; +} + +.btn-toolbar { + margin-top: 10px; + margin-bottom: 10px; + font-size: 0; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group > .btn + .btn { + margin-left: -1px; +} + +.btn-group > .btn, +.btn-group > .dropdown-menu, +.btn-group > .popover { + font-size: 14px; +} + +.btn-group > .btn-mini { + font-size: 10.5px; +} + +.btn-group > .btn-small { + font-size: 11.9px; +} + +.btn-group > .btn-large { + font-size: 17.5px; +} + +.btn-group > .btn:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active { + z-index: 2; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + *padding-top: 5px; + padding-right: 8px; + *padding-bottom: 5px; + padding-left: 8px; + -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group > .btn-mini + .dropdown-toggle { + *padding-top: 2px; + padding-right: 5px; + *padding-bottom: 2px; + padding-left: 5px; +} + +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; + *padding-bottom: 4px; +} + +.btn-group > .btn-large + .dropdown-toggle { + *padding-top: 7px; + padding-right: 12px; + *padding-bottom: 7px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + background-image: none; + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.btn-group.open .btn.dropdown-toggle { + background-color: #e6e6e6; +} + +.btn-group.open .btn-primary.dropdown-toggle { + background-color: #0044cc; +} + +.btn-group.open .btn-warning.dropdown-toggle { + background-color: #f89406; +} + +.btn-group.open .btn-danger.dropdown-toggle { + background-color: #bd362f; +} + +.btn-group.open .btn-success.dropdown-toggle { + background-color: #51a351; +} + +.btn-group.open .btn-info.dropdown-toggle { + background-color: #2f96b4; +} + +.btn-group.open .btn-inverse.dropdown-toggle { + background-color: #222222; +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + margin-top: 6px; +} + +.btn-large .caret { + border-top-width: 5px; + border-right-width: 5px; + border-left-width: 5px; +} + +.btn-mini .caret, +.btn-small .caret { + margin-top: 8px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-primary .caret, +.btn-warning .caret, +.btn-danger .caret, +.btn-info .caret, +.btn-success .caret, +.btn-inverse .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.btn-group-vertical { + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + max-width: 100%; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.btn-group-vertical > .btn + .btn { + margin-top: -1px; + margin-left: 0; +} + +.btn-group-vertical > .btn:first-child { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.btn-group-vertical > .btn:last-child { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.btn-group-vertical > .btn-large:first-child { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} + +.btn-group-vertical > .btn-large:last-child { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.alert { + padding: 8px 35px 8px 14px; + margin-bottom: 20px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + background-color: #fcf8e3; + border: 1px solid #fbeed5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.alert, +.alert h4 { + color: #c09853; +} + +.alert h4 { + margin: 0; +} + +.alert .close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success h4 { + color: #468847; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger h4, +.alert-error h4 { + color: #b94a48; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info h4 { + color: #3a87ad; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.nav { + margin-bottom: 20px; + margin-left: 0; + list-style: none; +} + +.nav > li > a { + display: block; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > li > a > img { + max-width: none; +} + +.nav > .pull-right { + float: right; +} + +.nav-header { + display: block; + padding: 3px 15px; + font-size: 11px; + font-weight: bold; + line-height: 20px; + color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + text-transform: uppercase; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav-list { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 0; +} + +.nav-list > li > a, +.nav-list .nav-header { + margin-right: -15px; + margin-left: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} + +.nav-list > li > a { + padding: 3px 15px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); + background-color: #0088cc; +} + +.nav-list [class^="icon-"], +.nav-list [class*=" icon-"] { + margin-right: 2px; +} + +.nav-list .divider { + *width: 100%; + height: 1px; + margin: 9px 1px; + *margin: -5px 0 5px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.nav-tabs, +.nav-pills { + *zoom: 1; +} + +.nav-tabs:before, +.nav-pills:before, +.nav-tabs:after, +.nav-pills:after { + display: table; + line-height: 0; + content: ""; +} + +.nav-tabs:after, +.nav-pills:after { + clear: both; +} + +.nav-tabs > li, +.nav-pills > li { + float: left; +} + +.nav-tabs > li > a, +.nav-pills > li > a { + padding-right: 12px; + padding-left: 12px; + margin-right: 2px; + line-height: 14px; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + margin-bottom: -1px; +} + +.nav-tabs > li > a { + padding-top: 8px; + padding-bottom: 8px; + line-height: 20px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover, +.nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li > a { + padding-top: 8px; + padding-bottom: 8px; + margin-top: 2px; + margin-bottom: 2px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #ffffff; + background-color: #0088cc; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li > a { + margin-right: 0; +} + +.nav-tabs.nav-stacked { + border-bottom: 0; +} + +.nav-tabs.nav-stacked > li > a { + border: 1px solid #ddd; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.nav-tabs.nav-stacked > li:first-child > a { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; +} + +.nav-tabs.nav-stacked > li:last-child > a { + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -moz-border-radius-bottomright: 4px; + -moz-border-radius-bottomleft: 4px; +} + +.nav-tabs.nav-stacked > li > a:hover, +.nav-tabs.nav-stacked > li > a:focus { + z-index: 2; + border-color: #ddd; +} + +.nav-pills.nav-stacked > li > a { + margin-bottom: 3px; +} + +.nav-pills.nav-stacked > li:last-child > a { + margin-bottom: 1px; +} + +.nav-tabs .dropdown-menu { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} + +.nav-pills .dropdown-menu { + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.nav .dropdown-toggle .caret { + margin-top: 6px; + border-top-color: #0088cc; + border-bottom-color: #0088cc; +} + +.nav .dropdown-toggle:hover .caret, +.nav .dropdown-toggle:focus .caret { + border-top-color: #005580; + border-bottom-color: #005580; +} + +/* move down carets for tabs */ + +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} + +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} + +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.nav > .dropdown.active > a:hover, +.nav > .dropdown.active > a:focus { + cursor: pointer; +} + +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover, +.nav > li.dropdown.open.active > a:focus { + color: #ffffff; + background-color: #999999; + border-color: #999999; +} + +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret, +.nav li.dropdown.open a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; + opacity: 1; + filter: alpha(opacity=100); +} + +.tabs-stacked .open > a:hover, +.tabs-stacked .open > a:focus { + border-color: #999999; +} + +.tabbable { + *zoom: 1; +} + +.tabbable:before, +.tabbable:after { + display: table; + line-height: 0; + content: ""; +} + +.tabbable:after { + clear: both; +} + +.tab-content { + overflow: auto; +} + +.tabs-below > .nav-tabs, +.tabs-right > .nav-tabs, +.tabs-left > .nav-tabs { + border-bottom: 0; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +.tabs-below > .nav-tabs { + border-top: 1px solid #ddd; +} + +.tabs-below > .nav-tabs > li { + margin-top: -1px; + margin-bottom: 0; +} + +.tabs-below > .nav-tabs > li > a { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} + +.tabs-below > .nav-tabs > li > a:hover, +.tabs-below > .nav-tabs > li > a:focus { + border-top-color: #ddd; + border-bottom-color: transparent; +} + +.tabs-below > .nav-tabs > .active > a, +.tabs-below > .nav-tabs > .active > a:hover, +.tabs-below > .nav-tabs > .active > a:focus { + border-color: transparent #ddd #ddd #ddd; +} + +.tabs-left > .nav-tabs > li, +.tabs-right > .nav-tabs > li { + float: none; +} + +.tabs-left > .nav-tabs > li > a, +.tabs-right > .nav-tabs > li > a { + min-width: 74px; + margin-right: 0; + margin-bottom: 3px; +} + +.tabs-left > .nav-tabs { + float: left; + margin-right: 19px; + border-right: 1px solid #ddd; +} + +.tabs-left > .nav-tabs > li > a { + margin-right: -1px; + -webkit-border-radius: 4px 0 0 4px; + -moz-border-radius: 4px 0 0 4px; + border-radius: 4px 0 0 4px; +} + +.tabs-left > .nav-tabs > li > a:hover, +.tabs-left > .nav-tabs > li > a:focus { + border-color: #eeeeee #dddddd #eeeeee #eeeeee; +} + +.tabs-left > .nav-tabs .active > a, +.tabs-left > .nav-tabs .active > a:hover, +.tabs-left > .nav-tabs .active > a:focus { + border-color: #ddd transparent #ddd #ddd; + *border-right-color: #ffffff; +} + +.tabs-right > .nav-tabs { + float: right; + margin-left: 19px; + border-left: 1px solid #ddd; +} + +.tabs-right > .nav-tabs > li > a { + margin-left: -1px; + -webkit-border-radius: 0 4px 4px 0; + -moz-border-radius: 0 4px 4px 0; + border-radius: 0 4px 4px 0; +} + +.tabs-right > .nav-tabs > li > a:hover, +.tabs-right > .nav-tabs > li > a:focus { + border-color: #eeeeee #eeeeee #eeeeee #dddddd; +} + +.tabs-right > .nav-tabs .active > a, +.tabs-right > .nav-tabs .active > a:hover, +.tabs-right > .nav-tabs .active > a:focus { + border-color: #ddd #ddd #ddd transparent; + *border-left-color: #ffffff; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.navbar { + *position: relative; + *z-index: 2; + margin-bottom: 20px; + overflow: visible; +} + +.navbar-inner { + min-height: 40px; + padding-right: 20px; + padding-left: 20px; + background-color: #fafafa; + background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); + background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); + background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); + background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); + background-repeat: repeat-x; + border: 1px solid #d4d4d4; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); + *zoom: 1; + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); +} + +.navbar-inner:before, +.navbar-inner:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-inner:after { + clear: both; +} + +.navbar .container { + width: auto; +} + +.nav-collapse.collapse { + height: auto; + overflow: visible; +} + +.navbar .brand { + display: block; + float: left; + padding: 10px 20px 10px; + margin-left: -20px; + font-size: 20px; + font-weight: 200; + color: #777777; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .brand:hover, +.navbar .brand:focus { + text-decoration: none; +} + +.navbar-text { + margin-bottom: 0; + line-height: 40px; + color: #777777; +} + +.navbar-link { + color: #777777; +} + +.navbar-link:hover, +.navbar-link:focus { + color: #333333; +} + +.navbar .divider-vertical { + height: 40px; + margin: 0 9px; + border-right: 1px solid #ffffff; + border-left: 1px solid #f2f2f2; +} + +.navbar .btn, +.navbar .btn-group { + margin-top: 5px; +} + +.navbar .btn-group .btn, +.navbar .input-prepend .btn, +.navbar .input-append .btn, +.navbar .input-prepend .btn-group, +.navbar .input-append .btn-group { + margin-top: 0; +} + +.navbar-form { + margin-bottom: 0; + *zoom: 1; +} + +.navbar-form:before, +.navbar-form:after { + display: table; + line-height: 0; + content: ""; +} + +.navbar-form:after { + clear: both; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 5px; +} + +.navbar-form input, +.navbar-form select, +.navbar-form .btn { + display: inline-block; + margin-bottom: 0; +} + +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { + margin-top: 3px; +} + +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 5px; + white-space: nowrap; +} + +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} + +.navbar-search { + position: relative; + float: left; + margin-top: 5px; + margin-bottom: 0; +} + +.navbar-search .search-query { + padding: 4px 14px; + margin-bottom: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 1; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.navbar-static-top { + position: static; + margin-bottom: 0; +} + +.navbar-static-top .navbar-inner { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + margin-bottom: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + border-width: 0 0 1px; +} + +.navbar-fixed-bottom .navbar-inner { + border-width: 1px 0 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { + padding-right: 0; + padding-left: 0; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.navbar-static-top .container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-top .navbar-inner, +.navbar-static-top .navbar-inner { + -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-fixed-bottom .navbar-inner { + -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); + box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +} + +.navbar .nav { + position: relative; + left: 0; + display: block; + float: left; + margin: 0 10px 0 0; +} + +.navbar .nav.pull-right { + float: right; + margin-right: 0; +} + +.navbar .nav > li { + float: left; +} + +.navbar .nav > li > a { + float: none; + padding: 10px 15px 10px; + color: #777777; + text-decoration: none; + text-shadow: 0 1px 0 #ffffff; +} + +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; +} + +.navbar .nav > li > a:focus, +.navbar .nav > li > a:hover { + color: #333333; + text-decoration: none; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + text-decoration: none; + background-color: #e5e5e5; + -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +} + +.navbar .btn-navbar { + display: none; + float: right; + padding: 7px 10px; + margin-right: 5px; + margin-left: 5px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #ededed; + *background-color: #e5e5e5; + background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); + background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); + background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); + background-repeat: repeat-x; + border-color: #e5e5e5 #e5e5e5 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); +} + +.navbar .btn-navbar:hover, +.navbar .btn-navbar:focus, +.navbar .btn-navbar:active, +.navbar .btn-navbar.active, +.navbar .btn-navbar.disabled, +.navbar .btn-navbar[disabled] { + color: #ffffff; + background-color: #e5e5e5; + *background-color: #d9d9d9; +} + +.navbar .btn-navbar:active, +.navbar .btn-navbar.active { + background-color: #cccccc \9; +} + +.navbar .btn-navbar .icon-bar { + display: block; + width: 18px; + height: 2px; + background-color: #f5f5f5; + -webkit-border-radius: 1px; + -moz-border-radius: 1px; + border-radius: 1px; + -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); + box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-navbar .icon-bar + .icon-bar { + margin-top: 3px; +} + +.navbar .nav > li > .dropdown-menu:before { + position: absolute; + top: -7px; + left: 9px; + display: inline-block; + border-right: 7px solid transparent; + border-bottom: 7px solid #ccc; + border-left: 7px solid transparent; + border-bottom-color: rgba(0, 0, 0, 0.2); + content: ''; +} + +.navbar .nav > li > .dropdown-menu:after { + position: absolute; + top: -6px; + left: 10px; + display: inline-block; + border-right: 6px solid transparent; + border-bottom: 6px solid #ffffff; + border-left: 6px solid transparent; + content: ''; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:before { + top: auto; + bottom: -7px; + border-top: 7px solid #ccc; + border-bottom: 0; + border-top-color: rgba(0, 0, 0, 0.2); +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu:after { + top: auto; + bottom: -6px; + border-top: 6px solid #ffffff; + border-bottom: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle, +.navbar .nav li.dropdown.active > .dropdown-toggle, +.navbar .nav li.dropdown.open.active > .dropdown-toggle { + color: #555555; + background-color: #e5e5e5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #555555; + border-bottom-color: #555555; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:before, +.navbar .nav > li > .dropdown-menu.pull-right:before { + right: 12px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu:after, +.navbar .nav > li > .dropdown-menu.pull-right:after { + right: 13px; + left: auto; +} + +.navbar .pull-right > li > .dropdown-menu .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { + right: 100%; + left: auto; + margin-right: -1px; + margin-left: 0; + -webkit-border-radius: 6px 0 6px 6px; + -moz-border-radius: 6px 0 6px 6px; + border-radius: 6px 0 6px 6px; +} + +.navbar-inverse .navbar-inner { + background-color: #1b1b1b; + background-image: -moz-linear-gradient(top, #222222, #111111); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); + background-image: -webkit-linear-gradient(top, #222222, #111111); + background-image: -o-linear-gradient(top, #222222, #111111); + background-image: linear-gradient(to bottom, #222222, #111111); + background-repeat: repeat-x; + border-color: #252525; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); +} + +.navbar-inverse .brand, +.navbar-inverse .nav > li > a { + color: #999999; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.navbar-inverse .brand:hover, +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .brand:focus, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; +} + +.navbar-inverse .brand { + color: #999999; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a:focus, +.navbar-inverse .nav > li > a:hover { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav .active > a, +.navbar-inverse .nav .active > a:hover, +.navbar-inverse .nav .active > a:focus { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .navbar-link { + color: #999999; +} + +.navbar-inverse .navbar-link:hover, +.navbar-inverse .navbar-link:focus { + color: #ffffff; +} + +.navbar-inverse .divider-vertical { + border-right-color: #222222; + border-left-color: #111111; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { + color: #ffffff; + background-color: #111111; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret, +.navbar-inverse .nav li.dropdown > a:focus .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .navbar-search .search-query { + color: #ffffff; + background-color: #515151; + border-color: #111111; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; +} + +.navbar-inverse .navbar-search .search-query:-moz-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { + color: #cccccc; +} + +.navbar-inverse .navbar-search .search-query:focus, +.navbar-inverse .navbar-search .search-query.focused { + padding: 5px 15px; + color: #333333; + text-shadow: 0 1px 0 #ffffff; + background-color: #ffffff; + border: 0; + outline: 0; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} + +.navbar-inverse .btn-navbar { + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e0e0e; + *background-color: #040404; + background-image: -moz-linear-gradient(top, #151515, #040404); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); + background-image: -webkit-linear-gradient(top, #151515, #040404); + background-image: -o-linear-gradient(top, #151515, #040404); + background-image: linear-gradient(to bottom, #151515, #040404); + background-repeat: repeat-x; + border-color: #040404 #040404 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.navbar-inverse .btn-navbar:hover, +.navbar-inverse .btn-navbar:focus, +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active, +.navbar-inverse .btn-navbar.disabled, +.navbar-inverse .btn-navbar[disabled] { + color: #ffffff; + background-color: #040404; + *background-color: #000000; +} + +.navbar-inverse .btn-navbar:active, +.navbar-inverse .btn-navbar.active { + background-color: #000000 \9; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + *display: inline; + text-shadow: 0 1px 0 #ffffff; + *zoom: 1; +} + +.breadcrumb > li > .divider { + padding: 0 5px; + color: #ccc; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + margin: 20px 0; +} + +.pagination ul { + display: inline-block; + *display: inline; + margin-bottom: 0; + margin-left: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + *zoom: 1; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} + +.pagination ul > li { + display: inline; +} + +.pagination ul > li > a, +.pagination ul > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination ul > li > a:hover, +.pagination ul > li > a:focus, +.pagination ul > .active > a, +.pagination ul > .active > span { + background-color: #f5f5f5; +} + +.pagination ul > .active > a, +.pagination ul > .active > span { + color: #999999; + cursor: default; +} + +.pagination ul > .disabled > span, +.pagination ul > .disabled > a, +.pagination ul > .disabled > a:hover, +.pagination ul > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: transparent; +} + +.pagination ul > li:first-child > a, +.pagination ul > li:first-child > span { + border-left-width: 1px; + -webkit-border-bottom-left-radius: 4px; + border-bottom-left-radius: 4px; + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-topleft: 4px; +} + +.pagination ul > li:last-child > a, +.pagination ul > li:last-child > span { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + border-bottom-right-radius: 4px; + -moz-border-radius-topright: 4px; + -moz-border-radius-bottomright: 4px; +} + +.pagination-centered { + text-align: center; +} + +.pagination-right { + text-align: right; +} + +.pagination-large ul > li > a, +.pagination-large ul > li > span { + padding: 11px 19px; + font-size: 17.5px; +} + +.pagination-large ul > li:first-child > a, +.pagination-large ul > li:first-child > span { + -webkit-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -webkit-border-top-left-radius: 6px; + border-top-left-radius: 6px; + -moz-border-radius-bottomleft: 6px; + -moz-border-radius-topleft: 6px; +} + +.pagination-large ul > li:last-child > a, +.pagination-large ul > li:last-child > span { + -webkit-border-top-right-radius: 6px; + border-top-right-radius: 6px; + -webkit-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + -moz-border-radius-topright: 6px; + -moz-border-radius-bottomright: 6px; +} + +.pagination-mini ul > li:first-child > a, +.pagination-small ul > li:first-child > a, +.pagination-mini ul > li:first-child > span, +.pagination-small ul > li:first-child > span { + -webkit-border-bottom-left-radius: 3px; + border-bottom-left-radius: 3px; + -webkit-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -moz-border-radius-bottomleft: 3px; + -moz-border-radius-topleft: 3px; +} + +.pagination-mini ul > li:last-child > a, +.pagination-small ul > li:last-child > a, +.pagination-mini ul > li:last-child > span, +.pagination-small ul > li:last-child > span { + -webkit-border-top-right-radius: 3px; + border-top-right-radius: 3px; + -webkit-border-bottom-right-radius: 3px; + border-bottom-right-radius: 3px; + -moz-border-radius-topright: 3px; + -moz-border-radius-bottomright: 3px; +} + +.pagination-small ul > li > a, +.pagination-small ul > li > span { + padding: 2px 10px; + font-size: 11.9px; +} + +.pagination-mini ul > li > a, +.pagination-mini ul > li > span { + padding: 0 6px; + font-size: 10.5px; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; + *zoom: 1; +} + +.pager:before, +.pager:after { + display: table; + line-height: 0; + 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; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop, +.modal-backdrop.fade.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal { + position: fixed; + top: 10%; + left: 50%; + z-index: 1050; + width: 560px; + margin-left: -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 10%; +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #eee; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-header h3 { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + max-height: 400px; + padding: 15px; + overflow-y: auto; +} + +.modal-form { + margin-bottom: 0; +} + +.modal-footer { + padding: 14px 15px 15px; + margin-bottom: 0; + text-align: right; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + *zoom: 1; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + line-height: 0; + 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; +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: #000000; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: #000000; + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: #000000; + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: #000000; + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: #000000; + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + -webkit-border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.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 { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.thumbnails { + margin-left: -20px; + list-style: none; + *zoom: 1; +} + +.thumbnails:before, +.thumbnails:after { + display: table; + line-height: 0; + content: ""; +} + +.thumbnails:after { + clear: both; +} + +.row-fluid .thumbnails { + margin-left: 0; +} + +.thumbnails > li { + float: left; + margin-bottom: 20px; + margin-left: 20px; +} + +.thumbnail { + display: block; + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; +} + +a.thumbnail:hover, +a.thumbnail:focus { + border-color: #0088cc; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + *overflow: visible; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label, +.badge { + display: inline-block; + padding: 2px 4px; + font-size: 11.844px; + font-weight: bold; + line-height: 14px; + color: #ffffff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + white-space: nowrap; + vertical-align: baseline; + background-color: #999999; +} + +.label { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.badge { + padding-right: 9px; + padding-left: 9px; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} + +.label:empty, +.badge:empty { + display: none; +} + +a.label:hover, +a.label:focus, +a.badge:hover, +a.badge:focus { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} + +.label-important, +.badge-important { + background-color: #b94a48; +} + +.label-important[href], +.badge-important[href] { + background-color: #953b39; +} + +.label-warning, +.badge-warning { + background-color: #f89406; +} + +.label-warning[href], +.badge-warning[href] { + background-color: #c67605; +} + +.label-success, +.badge-success { + background-color: #468847; +} + +.label-success[href], +.badge-success[href] { + background-color: #356635; +} + +.label-info, +.badge-info { + background-color: #3a87ad; +} + +.label-info[href], +.badge-info[href] { + background-color: #2d6987; +} + +.label-inverse, +.badge-inverse { + background-color: #333333; +} + +.label-inverse[href], +.badge-inverse[href] { + background-color: #1a1a1a; +} + +.btn .label, +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .label, +.btn-mini .badge { + top: 0; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f7f7f7; + background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); + background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); + background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); + background-repeat: repeat-x; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress .bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #ffffff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #0e90d2; + background-image: -moz-linear-gradient(top, #149bdf, #0480be); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); + background-image: -webkit-linear-gradient(top, #149bdf, #0480be); + background-image: -o-linear-gradient(top, #149bdf, #0480be); + background-image: linear-gradient(to bottom, #149bdf, #0480be); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress .bar + .bar { + -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); +} + +.progress-striped .bar { + background-color: #149bdf; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + -moz-background-size: 40px 40px; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-danger .bar, +.progress .bar-danger { + background-color: #dd514c; + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +} + +.progress-danger.progress-striped .bar, +.progress-striped .bar-danger { + background-color: #ee5f5b; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-success .bar, +.progress .bar-success { + background-color: #5eb95e; + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(to bottom, #62c462, #57a957); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +} + +.progress-success.progress-striped .bar, +.progress-striped .bar-success { + background-color: #62c462; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-info .bar, +.progress .bar-info { + background-color: #4bb1cf; + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(to bottom, #5bc0de, #339bb9); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +} + +.progress-info.progress-striped .bar, +.progress-striped .bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.progress-warning .bar, +.progress .bar-warning { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(to bottom, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +} + +.progress-warning.progress-striped .bar, +.progress-striped .bar-warning { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; + margin-bottom: 20px; + line-height: 1; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.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: 40%; + left: 15px; + width: 40px; + height: 40px; + margin-top: -20px; + font-size: 60px; + font-weight: 100; + line-height: 30px; + color: #ffffff; + text-align: center; + background: #222222; + border: 3px solid #ffffff; + -webkit-border-radius: 23px; + -moz-border-radius: 23px; + border-radius: 23px; + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.right { + right: 15px; + left: auto; +} + +.carousel-control:hover, +.carousel-control:focus { + color: #ffffff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-indicators { + position: absolute; + top: 15px; + right: 15px; + z-index: 5; + margin: 0; + list-style: none; +} + +.carousel-indicators li { + display: block; + float: left; + width: 10px; + height: 10px; + margin-left: 5px; + text-indent: -999px; + background-color: #ccc; + background-color: rgba(255, 255, 255, 0.25); + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 0; + bottom: 0; + left: 0; + padding: 15px; + background: #333333; + background: rgba(0, 0, 0, 0.75); +} + +.carousel-caption h4, +.carousel-caption p { + line-height: 20px; + color: #ffffff; +} + +.carousel-caption h4 { + margin: 0 0 5px; +} + +.carousel-caption p { + margin-bottom: 0; +} + +.hero-unit { + padding: 60px; + margin-bottom: 30px; + font-size: 18px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} + +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; + color: inherit; +} + +.hero-unit li { + line-height: 30px; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none; +} + +.show { + display: block; +} + +.invisible { + visibility: hidden; +} + +.affix { + position: fixed; +} diff --git a/media/bootstrap/css/bootstrap.min.css b/media/bootstrap/css/bootstrap.min.css new file mode 100644 index 0000000..fd5ed73 --- /dev/null +++ b/media/bootstrap/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v2.3.0 + * + * Copyright 2012 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}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}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.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;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.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}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.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 .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;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;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.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,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;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}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.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{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.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:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed} diff --git a/media/bootstrap/img/glyphicons-halflings-original.png b/media/bootstrap/img/glyphicons-halflings-original.png new file mode 100644 index 0000000000000000000000000000000000000000..a9969993201f9cee63cf9f49217646347297b643 GIT binary patch literal 12799 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 literal 0 HcmV?d00001 diff --git a/media/bootstrap/img/glyphicons-halflings-white.png b/media/bootstrap/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf6484a29d8da269f9bc874b25493a45fae3bae GIT binary patch literal 8777 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 B7G?kd literal 0 HcmV?d00001 diff --git a/media/bootstrap/img/glyphicons-halflings.png b/media/bootstrap/img/glyphicons-halflings.png new file mode 100644 index 0000000000000000000000000000000000000000..0d5f858d4b4f433ee320e5a802b1c396e2ce2e82 GIT binary patch literal 30096 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 (this.$items.length - 1) || pos < 0) return + + if (this.sliding) { + return this.$element.one('slid', function () { + that.to(pos) + }) + } + + if (activeIndex == pos) { + return this.pause().cycle() + } + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + , pause: function (e) { + if (!e) this.paused = true + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle() + } + clearInterval(this.interval) + this.interval = null + return this + } + + , next: function () { + if (this.sliding) return + return this.slide('next') + } + + , prev: function () { + if (this.sliding) return + return this.slide('prev') + } + + , slide: function (type, next) { + var $active = this.$element.find('.item.active') + , $next = next || $active[type]() + , isCycling = this.interval + , direction = type == 'next' ? 'left' : 'right' + , fallback = type == 'next' ? 'first' : 'last' + , that = this + , e + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + e = $.Event('slide', { + relatedTarget: $next[0] + , direction: direction + }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + } + + + /* CAROUSEL PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('carousel') + , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) + , action = typeof option == 'string' ? option : options.slide + if (!data) $this.data('carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.defaults = { + interval: 5000 + , pause: 'hover' + } + + $.fn.carousel.Constructor = Carousel + + + /* CAROUSEL NO CONFLICT + * ==================== */ + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + /* CAROUSEL DATA-API + * ================= */ + + $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + var $this = $(this), href + , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + , options = $.extend({}, $target.data(), $this.data()) + , slideIndex + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + +}(window.jQuery);/* ============================================================= + * bootstrap-collapse.js v2.3.0 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ============================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* COLLAPSE PUBLIC CLASS DEFINITION + * ================================ */ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, $.fn.collapse.defaults, options) + + if (this.options.parent) { + this.$parent = $(this.options.parent) + } + + this.options.toggle && this.toggle() + } + + Collapse.prototype = { + + constructor: Collapse + + , dimension: function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + , show: function () { + var dimension + , scroll + , actives + , hasData + + if (this.transitioning || this.$element.hasClass('in')) return + + dimension = this.dimension() + scroll = $.camelCase(['scroll', dimension].join('-')) + actives = this.$parent && this.$parent.find('> .accordion-group > .in') + + if (actives && actives.length) { + hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show'), 'shown') + $.support.transition && this.$element[dimension](this.$element[0][scroll]) + } + + , hide: function () { + var dimension + if (this.transitioning || !this.$element.hasClass('in')) return + dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide'), 'hidden') + this.$element[dimension](0) + } + + , reset: function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + , transition: function (method, startEvent, completeEvent) { + var that = this + , complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + , toggle: function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + } + + + /* COLLAPSE PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('collapse') + , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.defaults = { + toggle: true + } + + $.fn.collapse.Constructor = Collapse + + + /* COLLAPSE NO CONFLICT + * ==================== */ + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + /* COLLAPSE DATA-API + * ================= */ + + $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + , target = $this.attr('data-target') + || e.preventDefault() + || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 + , option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.jQuery);/* ============================================================ + * bootstrap-dropdown.js v2.3.0 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + $parent.toggleClass('open') + } + + $this.focus() + + return false + } + + , keydown: function (e) { + var $this + , $items + , $active + , $parent + , isActive + , index + + if (!/(38|40|27)/.test(e.keyCode)) return + + $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items + .eq(index) + .focus() + } + + } + + function clearMenus() { + $(toggle).each(function () { + getParent($(this)).removeClass('open') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = selector && $(selector) + + if (!$parent || !$parent.length) $parent = $this.parent() + + return $parent + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* DROPDOWN NO CONFLICT + * ==================== */ + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(document) + .on('click.dropdown.data-api', clearMenus) + .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('.dropdown-menu', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery); +/* ========================================================= + * bootstrap-modal.js v2.3.0 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ========================================================= + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* MODAL CLASS DEFINITION + * ====================== */ + + var Modal = function (element, options) { + this.options = options + this.$element = $(element) + .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.options.remote && this.$element.find('.modal-body').load(this.options.remote) + } + + Modal.prototype = { + + constructor: Modal + + , toggle: function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + , show: function () { + var that = this + , e = $.Event('show') + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) //don't move modals dom position + } + + that.$element.show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : + that.$element.focus().trigger('shown') + + }) + } + + , hide: function (e) { + e && e.preventDefault() + + var that = this + + e = $.Event('hide') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + + $.support.transition && this.$element.hasClass('fade') ? + this.hideWithTransition() : + this.hideModal() + } + + , enforceFocus: function () { + var that = this + $(document).on('focusin.modal', function (e) { + if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { + that.$element.focus() + } + }) + } + + , escape: function () { + var that = this + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.modal', function ( e ) { + e.which == 27 && that.hide() + }) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.modal') + } + } + + , hideWithTransition: function () { + var that = this + , timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } + + , hideModal: function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden') + }) + } + + , removeBackdrop: function () { + this.$backdrop.remove() + this.$backdrop = null + } + + , backdrop: function (callback) { + var that = this + , animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + this.$backdrop = $('