test
|  | @ -1,19 +1,63 @@ | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| from __future__ import unicode_literals | from __future__ import unicode_literals | ||||||
| 
 | 
 | ||||||
| from django.db import models, migrations | from django.db import migrations, models | ||||||
|  | import filer.fields.image | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class Migration(migrations.Migration): | class Migration(migrations.Migration): | ||||||
| 
 | 
 | ||||||
|     dependencies = [ |     dependencies = [ | ||||||
|  |         ('filer', '0003_auto_20160306_2306'), | ||||||
|  |         ('cms', '0013_urlconfrevision'), | ||||||
|     ] |     ] | ||||||
| 
 | 
 | ||||||
|     operations = [ |     operations = [ | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='DGGallery', | ||||||
|  |             fields=[ | ||||||
|  |                 ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), | ||||||
|  |                 ('name', models.CharField(max_length=30)), | ||||||
|  |                 ('parent', models.ForeignKey(null=True, to='digitalglarus.DGGallery', blank=True)), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'verbose_name_plural': 'dgGallery', | ||||||
|  |             }, | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='DGGalleryPlugin', | ||||||
|  |             fields=[ | ||||||
|  |                 ('cmsplugin_ptr', models.OneToOneField(primary_key=True, serialize=False, to='cms.CMSPlugin', auto_created=True, parent_link=True)), | ||||||
|  |                 ('dgGallery', models.ForeignKey(to='digitalglarus.DGGallery')), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('cms.cmsplugin',), | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='DGPicture', | ||||||
|  |             fields=[ | ||||||
|  |                 ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), | ||||||
|  |                 ('description', models.CharField(max_length=60)), | ||||||
|  |                 ('gallery', models.ForeignKey(to='digitalglarus.DGGallery')), | ||||||
|  |                 ('image', filer.fields.image.FilerImageField(related_name='dg_gallery', to='filer.Image')), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='DGSupportersPlugin', | ||||||
|  |             fields=[ | ||||||
|  |                 ('cmsplugin_ptr', models.OneToOneField(primary_key=True, serialize=False, to='cms.CMSPlugin', auto_created=True, parent_link=True)), | ||||||
|  |             ], | ||||||
|  |             options={ | ||||||
|  |                 'abstract': False, | ||||||
|  |             }, | ||||||
|  |             bases=('cms.cmsplugin',), | ||||||
|  |         ), | ||||||
|         migrations.CreateModel( |         migrations.CreateModel( | ||||||
|             name='Message', |             name='Message', | ||||||
|             fields=[ |             fields=[ | ||||||
|                 ('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)), |                 ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), | ||||||
|                 ('name', models.CharField(max_length=200)), |                 ('name', models.CharField(max_length=200)), | ||||||
|                 ('email', models.EmailField(max_length=254)), |                 ('email', models.EmailField(max_length=254)), | ||||||
|                 ('phone_number', models.CharField(max_length=200)), |                 ('phone_number', models.CharField(max_length=200)), | ||||||
|  | @ -21,4 +65,12 @@ class Migration(migrations.Migration): | ||||||
|                 ('received_date', models.DateTimeField(verbose_name='date received')), |                 ('received_date', models.DateTimeField(verbose_name='date received')), | ||||||
|             ], |             ], | ||||||
|         ), |         ), | ||||||
|  |         migrations.CreateModel( | ||||||
|  |             name='Supporter', | ||||||
|  |             fields=[ | ||||||
|  |                 ('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)), | ||||||
|  |                 ('name', models.CharField(max_length=200)), | ||||||
|  |                 ('description', models.TextField(null=True, blank=True)), | ||||||
|  |             ], | ||||||
|  |         ), | ||||||
|     ] |     ] | ||||||
|  |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0001_initial'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.AlterField( |  | ||||||
|             model_name='message', |  | ||||||
|             name='email', |  | ||||||
|             field=models.EmailField(max_length=75), |  | ||||||
|             preserve_default=True, |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,19 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0001_initial'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.AlterField( |  | ||||||
|             model_name='message', |  | ||||||
|             name='email', |  | ||||||
|             field=models.EmailField(max_length=75), |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,15 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0002_auto_20150522_0450'), |  | ||||||
|         ('digitalglarus', '0002_auto_20150527_1023'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|     ] |  | ||||||
|  | @ -1,25 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0003_merge'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.CreateModel( |  | ||||||
|             name='Supporter', |  | ||||||
|             fields=[ |  | ||||||
|                 ('id', models.AutoField(serialize=False, auto_created=True, verbose_name='ID', primary_key=True)), |  | ||||||
|                 ('name', models.CharField(max_length=200)), |  | ||||||
|                 ('description', models.CharField(max_length=500)), |  | ||||||
|             ], |  | ||||||
|             options={ |  | ||||||
|             }, |  | ||||||
|             bases=(models.Model,), |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0004_supporter'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.AlterField( |  | ||||||
|             model_name='supporter', |  | ||||||
|             name='description', |  | ||||||
|             field=models.TextField(), |  | ||||||
|             preserve_default=True, |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,51 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| import filer.fields.image |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('cms', '0012_auto_20150607_2207'), |  | ||||||
|         ('digitalglarus', '0005_auto_20160208_0218'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.CreateModel( |  | ||||||
|             name='DGGallery', |  | ||||||
|             fields=[ |  | ||||||
|                 ('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)), |  | ||||||
|                 ('name', models.CharField(max_length=30)), |  | ||||||
|                 ('parent', models.ForeignKey(blank=True, to='digitalglarus.DGGallery', null=True)), |  | ||||||
|             ], |  | ||||||
|             options={ |  | ||||||
|                 'verbose_name_plural': 'dgGallery', |  | ||||||
|             }, |  | ||||||
|             bases=(models.Model,), |  | ||||||
|         ), |  | ||||||
|         migrations.CreateModel( |  | ||||||
|             name='DGGalleryPlugin', |  | ||||||
|             fields=[ |  | ||||||
|                 ('cmsplugin_ptr', models.OneToOneField(primary_key=True, to='cms.CMSPlugin', auto_created=True, parent_link=True, serialize=False)), |  | ||||||
|                 ('dgGallery', models.ForeignKey(to='digitalglarus.DGGallery')), |  | ||||||
|             ], |  | ||||||
|             options={ |  | ||||||
|                 'abstract': False, |  | ||||||
|             }, |  | ||||||
|             bases=('cms.cmsplugin',), |  | ||||||
|         ), |  | ||||||
|         migrations.CreateModel( |  | ||||||
|             name='DGPicture', |  | ||||||
|             fields=[ |  | ||||||
|                 ('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)), |  | ||||||
|                 ('description', models.CharField(max_length=60)), |  | ||||||
|                 ('gallery', models.ForeignKey(to='digitalglarus.DGGallery')), |  | ||||||
|                 ('image', filer.fields.image.FilerImageField(related_name='dg_gallery', to='filer.Image')), |  | ||||||
|             ], |  | ||||||
|             options={ |  | ||||||
|             }, |  | ||||||
|             bases=(models.Model,), |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0006_dggallery_dggalleryplugin_dgpicture'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.AlterField( |  | ||||||
|             model_name='supporter', |  | ||||||
|             name='description', |  | ||||||
|             field=models.TextField(blank=True, null=True), |  | ||||||
|             preserve_default=True, |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,26 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('cms', '0012_auto_20150607_2207'), |  | ||||||
|         ('digitalglarus', '0007_auto_20160208_1031'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.CreateModel( |  | ||||||
|             name='DGSupportersPlugin', |  | ||||||
|             fields=[ |  | ||||||
|                 ('cmsplugin_ptr', models.OneToOneField(primary_key=True, auto_created=True, parent_link=True, to='cms.CMSPlugin', serialize=False)), |  | ||||||
|                 ('dgSupporters', models.ManyToManyField(to='digitalglarus.Supporter')), |  | ||||||
|             ], |  | ||||||
|             options={ |  | ||||||
|                 'abstract': False, |  | ||||||
|             }, |  | ||||||
|             bases=('cms.cmsplugin',), |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,18 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import models, migrations |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0008_dgsupportersplugin'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.RemoveField( |  | ||||||
|             model_name='dgsupportersplugin', |  | ||||||
|             name='dgSupporters', |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -1,19 +0,0 @@ | ||||||
| # -*- coding: utf-8 -*- |  | ||||||
| from __future__ import unicode_literals |  | ||||||
| 
 |  | ||||||
| from django.db import migrations, models |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class Migration(migrations.Migration): |  | ||||||
| 
 |  | ||||||
|     dependencies = [ |  | ||||||
|         ('digitalglarus', '0009_remove_dgsupportersplugin_dgsupporters'), |  | ||||||
|     ] |  | ||||||
| 
 |  | ||||||
|     operations = [ |  | ||||||
|         migrations.AlterField( |  | ||||||
|             model_name='message', |  | ||||||
|             name='email', |  | ||||||
|             field=models.EmailField(max_length=254), |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
|  | @ -46,6 +46,8 @@ SECRET_KEY = env('DJANGO_SECRET_KEY') | ||||||
| # Application definition | # Application definition | ||||||
| 
 | 
 | ||||||
| INSTALLED_APPS = ( | INSTALLED_APPS = ( | ||||||
|  |     'membership', | ||||||
|  |     'filer', | ||||||
|     'djangocms_admin_style', |     'djangocms_admin_style', | ||||||
|     'django.contrib.admin', |     'django.contrib.admin', | ||||||
|     'django.contrib.auth', |     'django.contrib.auth', | ||||||
|  | @ -68,6 +70,7 @@ INSTALLED_APPS = ( | ||||||
|     'djangocms_page_meta', |     'djangocms_page_meta', | ||||||
|     # django-filer |     # django-filer | ||||||
|     'cmsplugin_filer_file', |     'cmsplugin_filer_file', | ||||||
|  |     'cmsplugin_filer_image', | ||||||
|     'cmsplugin_filer_folder', |     'cmsplugin_filer_folder', | ||||||
|     'cmsplugin_filer_link', |     'cmsplugin_filer_link', | ||||||
|     'cmsplugin_filer_teaser', |     'cmsplugin_filer_teaser', | ||||||
|  | @ -77,9 +80,7 @@ INSTALLED_APPS = ( | ||||||
|     # ck-editor |     # ck-editor | ||||||
|     'djangocms_text_ckeditor', |     'djangocms_text_ckeditor', | ||||||
|     # djangocms-blog |     # djangocms-blog | ||||||
|     'filer', |  | ||||||
|     'easy_thumbnails', |     'easy_thumbnails', | ||||||
|     'cmsplugin_filer_image', |  | ||||||
|     'parler', |     'parler', | ||||||
|     'taggit', |     'taggit', | ||||||
|     'taggit_autosuggest', |     'taggit_autosuggest', | ||||||
|  | @ -87,13 +88,13 @@ INSTALLED_APPS = ( | ||||||
|     'meta', |     'meta', | ||||||
|     'meta_mixin', |     'meta_mixin', | ||||||
|     'admin_enhancer', |     'admin_enhancer', | ||||||
|     'djangocms_blog', |  | ||||||
|     'bootstrap3', |     'bootstrap3', | ||||||
|     'compressor', |     'compressor', | ||||||
|     # ungleich |     # ungleich | ||||||
|     'ungleich', |     'ungleich', | ||||||
|     'hosting', |     'hosting', | ||||||
|     'digitalglarus', |     'digitalglarus', | ||||||
|  |     'djangocms_blog', | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| MIDDLEWARE_CLASSES = ( | MIDDLEWARE_CLASSES = ( | ||||||
|  | @ -117,7 +118,9 @@ ROOT_URLCONF = 'dynamicweb.urls' | ||||||
| TEMPLATES = [ | TEMPLATES = [ | ||||||
|     { |     { | ||||||
|         'BACKEND': 'django.template.backends.django.DjangoTemplates', |         'BACKEND': 'django.template.backends.django.DjangoTemplates', | ||||||
|         'DIRS': [], |         'DIRS': [ | ||||||
|  |             os.path.join(PROJECT_DIR, 'membership/'),  # membership template | ||||||
|  |         ], | ||||||
|         'APP_DIRS': True, |         'APP_DIRS': True, | ||||||
|         'OPTIONS': { |         'OPTIONS': { | ||||||
|             'context_processors': [ |             'context_processors': [ | ||||||
|  | @ -279,7 +282,7 @@ MIGRATION_MODULES = { | ||||||
|     'djangocms_googlemap': 'djangocms_googlemap.migrations_django', |     'djangocms_googlemap': 'djangocms_googlemap.migrations_django', | ||||||
|     'djangocms_inherit': 'djangocms_inherit.migrations_django', |     'djangocms_inherit': 'djangocms_inherit.migrations_django', | ||||||
|     'djangocms_style': 'djangocms_style.migrations_django', |     'djangocms_style': 'djangocms_style.migrations_django', | ||||||
|     'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django', |     # 'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django', | ||||||
|     'cmsplugin_filer_file': 'cmsplugin_filer_file.migrations_django', |     'cmsplugin_filer_file': 'cmsplugin_filer_file.migrations_django', | ||||||
|     'cmsplugin_filer_folder': 'cmsplugin_filer_folder.migrations_django', |     'cmsplugin_filer_folder': 'cmsplugin_filer_folder.migrations_django', | ||||||
|     'cmsplugin_filer_link': 'cmsplugin_filer_link.migrations_django', |     'cmsplugin_filer_link': 'cmsplugin_filer_link.migrations_django', | ||||||
|  | @ -404,3 +407,4 @@ META_INCLUDE_KEYWORDS = ["ungleich", "hosting", "switzerland", | ||||||
| META_USE_SITES = True | META_USE_SITES = True | ||||||
| 
 | 
 | ||||||
| PARLER_LANGUAGES = {1: ({'code': 'en-us'}, {'code': 'de'},)} | PARLER_LANGUAGES = {1: ({'code': 'en-us'}, {'code': 'de'},)} | ||||||
|  | # AUTH_USER_MODEL = 'membership.CustomUser' | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ from django.conf.urls.static import static | ||||||
| 
 | 
 | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from hosting.views import railshosting | from hosting.views import railshosting | ||||||
|  | from membership import urls as membership_urls | ||||||
| 
 | 
 | ||||||
| urlpatterns = [ | urlpatterns = [ | ||||||
|                   url(r'^hosting/', include('hosting.urls', namespace="hosting")), |                   url(r'^hosting/', include('hosting.urls', namespace="hosting")), | ||||||
|  | @ -17,6 +18,7 @@ urlpatterns = [ | ||||||
| 
 | 
 | ||||||
| # note the django CMS URLs included via i18n_patterns | # note the django CMS URLs included via i18n_patterns | ||||||
| urlpatterns += i18n_patterns('', | urlpatterns += i18n_patterns('', | ||||||
|  |                              url(r'^login',include(membership_urls)), | ||||||
|                              url(r'^admin/', include(admin.site.urls)), |                              url(r'^admin/', include(admin.site.urls)), | ||||||
|                              url(r'^digitalglarus/', include('digitalglarus.urls', |                              url(r'^digitalglarus/', include('digitalglarus.urls', | ||||||
|                                                              namespace="digitalglarus")), |                                                              namespace="digitalglarus")), | ||||||
|  |  | ||||||
							
								
								
									
										14
									
								
								membership/forms.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,14 @@ | ||||||
|  | __author__ = 'tomislav' | ||||||
|  | from django import forms | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class LoginForm(forms.Form): | ||||||
|  |     email = forms.EmailField(label="Email address", max_length=50, | ||||||
|  |                             widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Enter email'})) | ||||||
|  |     password = forms.CharField(label='Password', max_length=50, | ||||||
|  |                                widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Password','type':'password'})) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class RegisterForm(LoginForm): | ||||||
|  |     name = forms.CharField(label='Name', max_length=50, | ||||||
|  |                            widget=forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Enter name'})) | ||||||
|  | @ -1,3 +1,109 @@ | ||||||
| from django.db import models | from django.db import models | ||||||
|  | from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager | ||||||
|  | from django.contrib.auth.hashers import make_password | ||||||
|  | from django.core.mail import send_mail | ||||||
| 
 | 
 | ||||||
| # Create your models here. | REGISTRATION_MESSAGE = {'subject': "Validation mail", | ||||||
|  |                         'message': 'Please validate Your account under this link http://localhost:8000/en-us/validate/{}', | ||||||
|  |                         'from': 'test@test.com'} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class MyUserManager(BaseUserManager): | ||||||
|  |     def create_user(self, email, name, password=None): | ||||||
|  |         """ | ||||||
|  |         Creates and saves a User with the given email, date of | ||||||
|  |         birth and password. | ||||||
|  |         """ | ||||||
|  |         if not email: | ||||||
|  |             raise ValueError('Users must have an email address') | ||||||
|  | 
 | ||||||
|  |         user = self.model( | ||||||
|  |             email=self.normalize_email(email), | ||||||
|  |             name=name | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         user.set_password(password) | ||||||
|  |         user.save(using=self._db) | ||||||
|  |         return user | ||||||
|  | 
 | ||||||
|  |     def create_superuser(self, email, name, password): | ||||||
|  |         """ | ||||||
|  |         Creates and saves a superuser with the given email, date of | ||||||
|  |         birth and password. | ||||||
|  |         """ | ||||||
|  |         user = self.create_user(email, | ||||||
|  |                                 password=password, | ||||||
|  |                                 name=name | ||||||
|  |                                 ) | ||||||
|  |         user.is_admin = True | ||||||
|  |         user.save(using=self._db) | ||||||
|  |         return user | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class CustomUser(AbstractBaseUser): | ||||||
|  |     VALIDATED_CHOICES = ((0, 'Not validated'), (1, 'Validated')) | ||||||
|  |     name = models.CharField(max_length=50) | ||||||
|  |     email = models.EmailField(unique=True) | ||||||
|  | 
 | ||||||
|  |     validated = models.IntegerField(choices=VALIDATED_CHOICES, default=0) | ||||||
|  |     validation_slug = models.CharField(db_index=True, unique=True, max_length=50) | ||||||
|  | 
 | ||||||
|  |     objects = MyUserManager() | ||||||
|  | 
 | ||||||
|  |     USERNAME_FIELD = "email" | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def register(cls, name, password, email): | ||||||
|  |         user = cls.objects.filter(email=email).first() | ||||||
|  |         if not user: | ||||||
|  |             user = cls.objects.create_user(username=name, email=email, password=password) | ||||||
|  |             if user: | ||||||
|  |                 user.validation_slug = make_password(None) | ||||||
|  |                 send_mail(REGISTRATION_MESSAGE['subject'], REGISTRATION_MESSAGE['message'].format(user.validation_slug), | ||||||
|  |                           REGISTRATION_MESSAGE['from'], [user.email], fail_silently=False) | ||||||
|  |                 return user | ||||||
|  |             else: | ||||||
|  |                 return None | ||||||
|  |         else: | ||||||
|  |             return None | ||||||
|  | 
 | ||||||
|  |     @classmethod | ||||||
|  |     def validate_url(cls, validation_slug): | ||||||
|  |         user = cls.objects.filter(validation_slug=validation_slug).first() | ||||||
|  |         if user: | ||||||
|  |             user.validated = 1 | ||||||
|  |             return True | ||||||
|  |         return False | ||||||
|  | 
 | ||||||
|  |     def get_full_name(self): | ||||||
|  |         # The user is identified by their email address | ||||||
|  |         return self.email | ||||||
|  | 
 | ||||||
|  |     def get_short_name(self): | ||||||
|  |         # The user is identified by their email address | ||||||
|  |         return self.email | ||||||
|  | 
 | ||||||
|  |     def __str__(self):  # __unicode__ on Python 2 | ||||||
|  |         return self.email | ||||||
|  | 
 | ||||||
|  |     def has_perm(self, perm, obj=None): | ||||||
|  |         "Does the user have a specific permission?" | ||||||
|  |         # Simplest possible answer: Yes, always | ||||||
|  |         return True | ||||||
|  | 
 | ||||||
|  |     def has_module_perms(self, app_label): | ||||||
|  |         "Does the user have permissions to view the app `app_label`?" | ||||||
|  |         # Simplest possible answer: Yes, always | ||||||
|  |         return True | ||||||
|  | 
 | ||||||
|  |     @property | ||||||
|  |     def is_staff(self): | ||||||
|  |         "Is the user a member of staff?" | ||||||
|  |         # Simplest possible answer: All admins are staff | ||||||
|  |         return self.is_admin | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # class CreditCards(models.Model): | ||||||
|  | #     id = models.IntegerField(primary_key=True) | ||||||
|  | #     user_id = models.ForeignKey(User, on_delete=models.CASCADE) | ||||||
|  | #     number = models.CharField(max_length=400) | ||||||
|  |  | ||||||
| Before Width: | Height: | Size: 473 KiB After Width: | Height: | Size: 473 KiB | 
| Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB | 
| Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB | 
|  | @ -1,11 +1,15 @@ | ||||||
| <html><head> | <html> | ||||||
|  | <head> | ||||||
|     <meta charset="utf-8"> |     <meta charset="utf-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> |     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> | ||||||
|     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> |     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> | ||||||
|     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> |     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" | ||||||
|      <link href="membership.css" rel="stylesheet" type="text/css"> |           type="text/css"> | ||||||
|   </head><body> |     {% load static %} | ||||||
|  |     <link href="{% get_static_prefix %}membership.css" rel="stylesheet" type="text/css"> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
| <div class="section"> | <div class="section"> | ||||||
|     <div class="container"> |     <div class="container"> | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
|  | @ -19,6 +23,7 @@ | ||||||
|                     <br>Have problems? contact us at |                     <br>Have problems? contact us at | ||||||
|                     <a href="">help@digitalglarus.ch</a> |                     <a href="">help@digitalglarus.ch</a> | ||||||
|                 </p> |                 </p> | ||||||
|  | 
 | ||||||
|                 <p></p> |                 <p></p> | ||||||
|             </div> |             </div> | ||||||
|             <a hrefhelp@digitalglarus.ch<="" p=""> |             <a hrefhelp@digitalglarus.ch<="" p=""> | ||||||
|  | @ -41,4 +46,5 @@ | ||||||
| </a> | </a> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| </body></html> | </body> | ||||||
|  | </html> | ||||||
|  | @ -1,11 +1,16 @@ | ||||||
| <html><head> | <html> | ||||||
|  | <head> | ||||||
|     <meta charset="utf-8"> |     <meta charset="utf-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> |     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> | ||||||
|     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> |     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> | ||||||
|     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> |     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" | ||||||
|     <link href="membership.css" rel="stylesheet" type="text/css"> |           type="text/css"> | ||||||
|   </head><body> |     {% load static %} | ||||||
|  |     <link href="{% get_static_prefix %}membership.css" rel="stylesheet" type="text/css"> | ||||||
|  | 
 | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
| <div class="navbar navbar-default navbar-static-top"> | <div class="navbar navbar-default navbar-static-top"> | ||||||
|     <div class="container"> |     <div class="container"> | ||||||
|         <div class="navbar-header"> |         <div class="navbar-header"> | ||||||
|  | @ -34,36 +39,41 @@ | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
|             <div class="col-md-6"> |             <div class="col-md-6"> | ||||||
|                 <h1>I'm already a member!</h1> |                 <h1>I'm already a member!</h1> | ||||||
|  | 
 | ||||||
|                 <p>To book you need to be logged in.</p> |                 <p>To book you need to be logged in.</p> | ||||||
|  | 
 | ||||||
|                 <h2>Log in</h2> |                 <h2>Log in</h2> | ||||||
|                 <hr> |                 <hr> | ||||||
|             <form role="form"> |                 <form role="form" action="" method="POST"> | ||||||
|  |                 {% csrf_token %} | ||||||
|  |                     {% for field in login_form %} | ||||||
|                         <div class="form-group"> |                         <div class="form-group"> | ||||||
|                 <label class="control-label" for="exampleInputEmail1">Email address</label> |                             {{ field.errors }} | ||||||
|                 <input class="form-control" id="exampleInputEmail1" placeholder="Enter email" type="email"> |                             <label class="control-label">{{ field.label }}</label>{{ field }} | ||||||
|               </div> |  | ||||||
|               <div class="form-group"> |  | ||||||
|                 <label class="control-label" for="exampleInputPassword1">Password</label> |  | ||||||
|                 <input class="form-control" id="exampleInputPassword1" placeholder="Password" type="password"> |  | ||||||
|                         </div> |                         </div> | ||||||
|  |                         {% endfor %} | ||||||
|  | 
 | ||||||
|                     <button type="submit" class="btn btn-default">Submit</button> |                     <button type="submit" class="btn btn-default">Submit</button> | ||||||
|                 </form> |                 </form> | ||||||
|             </div> |             </div> | ||||||
|             <div class="col-md-6"> |             <div class="col-md-6"> | ||||||
|                 <h1></h1> |                 <h1></h1> | ||||||
|  | 
 | ||||||
|                 <h1>Not yet a member?</h1> |                 <h1>Not yet a member?</h1> | ||||||
|  | 
 | ||||||
|                 <p>It only takes your email to register! |                 <p>It only takes your email to register! | ||||||
|                     You'll get a mail from us for confirmation.</p> |                     You'll get a mail from us for confirmation.</p> | ||||||
|  | 
 | ||||||
|                 <h2>Register</h2> |                 <h2>Register</h2> | ||||||
|                 <hr> |                 <hr> | ||||||
|             <form role="form"> |                 <form role="form" action="" method="POST"> | ||||||
|  |                 {% csrf_token %} | ||||||
|                      <div class="form-group"> |                      <div class="form-group"> | ||||||
|                 <label class="control-label" for="exampleInputEmail1">Name</label> |                         {% for field in register_form %} | ||||||
|                 <input class="form-control" id="exampleInputEmail1" placeholder="Enter name" type="text"> |                             {{ field.errors }} | ||||||
|               </div> |                             <label class="control-label">{{ field.label }}</label> | ||||||
|               <div class="form-group"> |                             {{ field }} | ||||||
|                 <label class="control-label" for="exampleInputPassword1">Email address</label> |                         {% endfor %} | ||||||
|                 <input class="form-control" id="exampleInputPassword1" placeholder="Enter email" type="email"> |  | ||||||
|                     </div> |                     </div> | ||||||
|                     <button type="submit" class="btn btn-default">Submit</button> |                     <button type="submit" class="btn btn-default">Submit</button> | ||||||
|                 </form> |                 </form> | ||||||
|  | @ -76,6 +86,7 @@ | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
|             <div class="col-sm-6"> |             <div class="col-sm-6"> | ||||||
|                 <h1>Digital Glarus</h1> |                 <h1>Digital Glarus</h1> | ||||||
|  | 
 | ||||||
|                 <p>In der Au 7 8762 Schwanden |                 <p>In der Au 7 8762 Schwanden | ||||||
|                     <br>Copyright © ungleich GmbH 2016</p> |                     <br>Copyright © ungleich GmbH 2016</p> | ||||||
|             </div> |             </div> | ||||||
|  | @ -84,6 +95,7 @@ | ||||||
|                     <br> |                     <br> | ||||||
|                     <br> |                     <br> | ||||||
|                 </p> |                 </p> | ||||||
|  | 
 | ||||||
|                 <div class="row"> |                 <div class="row"> | ||||||
|                     <div class="col-md-12 hidden-lg hidden-md hidden-sm text-left"> |                     <div class="col-md-12 hidden-lg hidden-md hidden-sm text-left"> | ||||||
|                         <a href="#"><i class="fa fa-3x fa-fw fa-instagram text-inverse"></i></a> |                         <a href="#"><i class="fa fa-3x fa-fw fa-instagram text-inverse"></i></a> | ||||||
|  | @ -106,4 +118,5 @@ | ||||||
| </footer> | </footer> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| </body></html> | </body> | ||||||
|  | </html> | ||||||
|  | @ -4,7 +4,8 @@ | ||||||
|     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> |     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> | ||||||
|     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> |     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> | ||||||
|     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> |     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | ||||||
|     <link href="membership.css" rel="stylesheet" type="text/css"> |     {% load static %} | ||||||
|  |     <link href="{% get_static_prefix %}membership.css" rel="stylesheet" type="text/css"> | ||||||
|   </head><body> |   </head><body> | ||||||
|     <div class="cover"> |     <div class="cover"> | ||||||
|       <div class="navbar"> |       <div class="navbar"> | ||||||
|  | @ -30,7 +31,9 @@ | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|       <div class="cover-image" style="background-image : url('photo-1418479631014-8cbf89db3431 2.jpg')"></div> |         {% load static %} | ||||||
|  | 
 | ||||||
|  |       <div class="cover-image" style="background-image : url('{% get_static_prefix %}photo-1418479631014-8cbf89db3431 2.jpg')"></div> | ||||||
|       <div class="container"> |       <div class="container"> | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
|           <div class="col-md-12 text-center"> |           <div class="col-md-12 text-center"> | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								membership/templates/validated.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,25 @@ | ||||||
|  | <html> | ||||||
|  | <head> | ||||||
|  |     <meta charset="utf-8"> | ||||||
|  |     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||||
|  |     <script type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> | ||||||
|  |     <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script> | ||||||
|  |     <link href="http://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css" rel="stylesheet" | ||||||
|  |           type="text/css"> | ||||||
|  |     <link href="http://pingendo.github.io/pingendo-bootstrap/themes/default/bootstrap.css" rel="stylesheet" | ||||||
|  |           type="text/css"> | ||||||
|  | </head> | ||||||
|  | <body> | ||||||
|  | <div class="section"> | ||||||
|  |     <div class="container"> | ||||||
|  |         <div class="row"> | ||||||
|  |             <div class="col-md-12"> | ||||||
|  |                 <h1 class="text-center text-muted">You're successfully validated!</h1> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										10
									
								
								membership/urls.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,10 @@ | ||||||
|  | __author__ = 'tomislav' | ||||||
|  | from django.conf.urls import url | ||||||
|  | 
 | ||||||
|  | from . import views | ||||||
|  | 
 | ||||||
|  | urlpatterns = ( | ||||||
|  |     url(r"^/$", views.LoginRegistrationView.as_view()), | ||||||
|  |     url(r"^/validate/(?P<validate_slug>.*)/$", views.validate_email), | ||||||
|  |     url(r"^/membership/$",views.MembershipView.as_view(),name='membership') | ||||||
|  | ) | ||||||
|  | @ -1,3 +1,45 @@ | ||||||
| from django.shortcuts import render | from django.shortcuts import render, redirect | ||||||
|  | from django.views.generic import View | ||||||
| 
 | 
 | ||||||
| # Create your views here. | from .models import CustomUser | ||||||
|  | from .forms import LoginForm, RegisterForm | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def validate_email(request, validate_slug): | ||||||
|  |     validated = User.validate_url(validate_slug) | ||||||
|  |     if validated: | ||||||
|  |         return render(request,'templates/validated.html') | ||||||
|  |     else: | ||||||
|  |         return render(request,'templates/error.html') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class LoginRegistrationView(View): | ||||||
|  |     def get(self, request): | ||||||
|  |         login_form = LoginForm() | ||||||
|  |         register_form = RegisterForm() | ||||||
|  |         if request.user.is_authenticated(): | ||||||
|  |             return redirect("membership") | ||||||
|  |         else: | ||||||
|  |             return render(request, 'templates/login.html', {'login_form': login_form, 'register_form': register_form}) | ||||||
|  | 
 | ||||||
|  |     def post(self, request): | ||||||
|  |         email = request.POST.get('email') | ||||||
|  |         password = request.POST.get('password') | ||||||
|  |         name = request.POST.get('name') | ||||||
|  |         if name and email and password: | ||||||
|  |             user = CustomUser.register(name, password,email) | ||||||
|  |             if user: | ||||||
|  |                 return render(request, 'templates/success.html') | ||||||
|  |             else: | ||||||
|  |                 return render(request, 'templates/error.html') | ||||||
|  | 
 | ||||||
|  |         elif email and password and not name: | ||||||
|  |             user = CustomUser.authenticate(email, password) | ||||||
|  |             if user: | ||||||
|  |                 return redirect('membership') | ||||||
|  |             else: | ||||||
|  |                 return render(request, 'templates/login', {'msg': 'Wrong username or password'}) | ||||||
|  | 
 | ||||||
|  | class MembershipView(View): | ||||||
|  |     def get(self,request): | ||||||
|  |         return render(request,'templates/membership.html') | ||||||
|  |  | ||||||
|  | @ -1,403 +0,0 @@ | ||||||
| /*! |  | ||||||
|  * Clean Blog v1.0.0 (http://startbootstrap.com) |  | ||||||
|  * Copyright 2014 Start Bootstrap |  | ||||||
|  * Licensed under Apache 2.0 (https://github.com/IronSummitMedia/startbootstrap/blob/gh-pages/LICENSE) |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| body { |  | ||||||
|   font-family: 'Lora', 'Times New Roman', serif; |  | ||||||
|   font-size: 20px; |  | ||||||
|   color: #404040; |  | ||||||
| } |  | ||||||
| p { |  | ||||||
|   line-height: 1.5; |  | ||||||
|   margin: 30px 0; |  | ||||||
| } |  | ||||||
| p a { |  | ||||||
|   text-decoration: underline; |  | ||||||
| } |  | ||||||
| h1, |  | ||||||
| h2, |  | ||||||
| h3, |  | ||||||
| h4, |  | ||||||
| h5, |  | ||||||
| h6 { |  | ||||||
|   font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; |  | ||||||
|   font-weight: 800; |  | ||||||
| } |  | ||||||
| a { |  | ||||||
|   color: #404040; |  | ||||||
| } |  | ||||||
| a:hover, |  | ||||||
| a:focus { |  | ||||||
|   color: #0085a1; |  | ||||||
| } |  | ||||||
| a img:hover, |  | ||||||
| a img:focus { |  | ||||||
|   cursor: zoom-in; |  | ||||||
| } |  | ||||||
| blockquote { |  | ||||||
|   color: #808080; |  | ||||||
|   font-style: italic; |  | ||||||
| } |  | ||||||
| hr.small { |  | ||||||
|   max-width: 100px; |  | ||||||
|   margin: 15px auto; |  | ||||||
|   border-width: 4px; |  | ||||||
|   border-color: white; |  | ||||||
| } |  | ||||||
| .navbar-custom { |  | ||||||
|   position: absolute; |  | ||||||
|   top: 0; |  | ||||||
|   left: 0; |  | ||||||
|   width: 100%; |  | ||||||
|   z-index: 3; |  | ||||||
|   font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; |  | ||||||
| } |  | ||||||
| .navbar-custom .navbar-brand { |  | ||||||
|   font-weight: 800; |  | ||||||
| } |  | ||||||
| .navbar-custom .nav li a { |  | ||||||
|   text-transform: uppercase; |  | ||||||
|   font-size: 12px; |  | ||||||
|   font-weight: 800; |  | ||||||
|   letter-spacing: 1px; |  | ||||||
| } |  | ||||||
| @media only screen and (min-width: 768px) { |  | ||||||
|   .navbar-custom { |  | ||||||
|     background: transparent; |  | ||||||
|     border-bottom: 1px solid transparent; |  | ||||||
|   } |  | ||||||
|   .navbar-custom .navbar-brand { |  | ||||||
|     color: white; |  | ||||||
|     padding: 20px; |  | ||||||
|   } |  | ||||||
|   .navbar-custom .navbar-brand:hover, |  | ||||||
|   .navbar-custom .navbar-brand:focus { |  | ||||||
|     color: rgba(255, 255, 255, 0.8); |  | ||||||
|   } |  | ||||||
|   .navbar-custom .nav li a { |  | ||||||
|     color: white; |  | ||||||
|     padding: 20px; |  | ||||||
|   } |  | ||||||
|   .navbar-custom .nav li a:hover, |  | ||||||
|   .navbar-custom .nav li a:focus { |  | ||||||
|     color: rgba(255, 255, 255, 0.8); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @media only screen and (min-width: 1170px) { |  | ||||||
|   .navbar-custom { |  | ||||||
|     -webkit-transition: background-color 0.3s; |  | ||||||
|     -moz-transition: background-color 0.3s; |  | ||||||
|     transition: background-color 0.3s; |  | ||||||
|     /* Force Hardware Acceleration in WebKit */ |  | ||||||
|     -webkit-transform: translate3d(0, 0, 0); |  | ||||||
|     -moz-transform: translate3d(0, 0, 0); |  | ||||||
|     -ms-transform: translate3d(0, 0, 0); |  | ||||||
|     -o-transform: translate3d(0, 0, 0); |  | ||||||
|     transform: translate3d(0, 0, 0); |  | ||||||
|     -webkit-backface-visibility: hidden; |  | ||||||
|     backface-visibility: hidden; |  | ||||||
|   } |  | ||||||
|   .navbar-custom.is-fixed { |  | ||||||
|     /* when the user scrolls down, we hide the header right above the viewport */ |  | ||||||
|     position: fixed; |  | ||||||
|     top: -61px; |  | ||||||
|     background-color: rgba(255, 255, 255, 0.9); |  | ||||||
|     border-bottom: 1px solid #f2f2f2; |  | ||||||
|     -webkit-transition: -webkit-transform 0.3s; |  | ||||||
|     -moz-transition: -moz-transform 0.3s; |  | ||||||
|     transition: transform 0.3s; |  | ||||||
|   } |  | ||||||
|   .navbar-custom.is-fixed .navbar-brand { |  | ||||||
|     color: #404040; |  | ||||||
|   } |  | ||||||
|   .navbar-custom.is-fixed .navbar-brand:hover, |  | ||||||
|   .navbar-custom.is-fixed .navbar-brand:focus { |  | ||||||
|     color: #0085a1; |  | ||||||
|   } |  | ||||||
|   .navbar-custom.is-fixed .nav li a { |  | ||||||
|     color: #404040; |  | ||||||
|   } |  | ||||||
|   .navbar-custom.is-fixed .nav li a:hover, |  | ||||||
|   .navbar-custom.is-fixed .nav li a:focus { |  | ||||||
|     color: #0085a1; |  | ||||||
|   } |  | ||||||
|   .navbar-custom.is-visible { |  | ||||||
|     /* if the user changes the scrolling direction, we show the header */ |  | ||||||
|     -webkit-transform: translate3d(0, 100%, 0); |  | ||||||
|     -moz-transform: translate3d(0, 100%, 0); |  | ||||||
|     -ms-transform: translate3d(0, 100%, 0); |  | ||||||
|     -o-transform: translate3d(0, 100%, 0); |  | ||||||
|     transform: translate3d(0, 100%, 0); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| .intro-header { |  | ||||||
|   background-color: #808080; |  | ||||||
|   background: no-repeat center center; |  | ||||||
|   background-attachment: scroll; |  | ||||||
|   -webkit-background-size: cover; |  | ||||||
|   -moz-background-size: cover; |  | ||||||
|   background-size: cover; |  | ||||||
|   -o-background-size: cover; |  | ||||||
|   margin-bottom: 50px; |  | ||||||
| } |  | ||||||
| .intro-header .site-heading, |  | ||||||
| .intro-header .post-heading, |  | ||||||
| .intro-header .page-heading { |  | ||||||
|   padding: 100px 0 50px; |  | ||||||
|   color: white; |  | ||||||
| } |  | ||||||
| @media only screen and (min-width: 768px) { |  | ||||||
|   .intro-header .site-heading, |  | ||||||
|   .intro-header .post-heading, |  | ||||||
|   .intro-header .page-heading { |  | ||||||
|     padding: 150px 0; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| .intro-header .site-heading, |  | ||||||
| .intro-header .page-heading { |  | ||||||
|   text-align: center; |  | ||||||
| } |  | ||||||
| .intro-header .site-heading h1, |  | ||||||
| .intro-header .page-heading h1 { |  | ||||||
|   margin-top: 0; |  | ||||||
|   font-size: 50px; |  | ||||||
| } |  | ||||||
| .intro-header .site-heading .subheading, |  | ||||||
| .intro-header .page-heading .subheading { |  | ||||||
|   font-size: 24px; |  | ||||||
|   line-height: 1.1; |  | ||||||
|   display: block; |  | ||||||
|   font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; |  | ||||||
|   font-weight: 300; |  | ||||||
|   margin: 10px 0 0; |  | ||||||
| } |  | ||||||
| @media only screen and (min-width: 768px) { |  | ||||||
|   .intro-header .site-heading h1, |  | ||||||
|   .intro-header .page-heading h1 { |  | ||||||
|     font-size: 80px; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| .intro-header .post-heading h1 { |  | ||||||
|   font-size: 35px; |  | ||||||
| } |  | ||||||
| .intro-header .post-heading .subheading, |  | ||||||
| .intro-header .post-heading .meta { |  | ||||||
|   line-height: 1.1; |  | ||||||
|   display: block; |  | ||||||
| } |  | ||||||
| .intro-header .post-heading .subheading { |  | ||||||
|   font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; |  | ||||||
|   font-size: 24px; |  | ||||||
|   margin: 10px 0 30px; |  | ||||||
|   font-weight: 600; |  | ||||||
| } |  | ||||||
| .intro-header .post-heading .meta { |  | ||||||
|   font-family: 'Lora', 'Times New Roman', serif; |  | ||||||
|   font-style: italic; |  | ||||||
|   font-weight: 300; |  | ||||||
|   font-size: 20px; |  | ||||||
| } |  | ||||||
| .intro-header .post-heading .meta a { |  | ||||||
|   color: white; |  | ||||||
| } |  | ||||||
| @media only screen and (min-width: 768px) { |  | ||||||
|   .intro-header .post-heading h1 { |  | ||||||
|     font-size: 55px; |  | ||||||
|   } |  | ||||||
|   .intro-header .post-heading .subheading { |  | ||||||
|     font-size: 30px; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| .post-preview > a { |  | ||||||
|   color: #404040; |  | ||||||
| } |  | ||||||
| .post-preview > a:hover, |  | ||||||
| .post-preview > a:focus { |  | ||||||
|   text-decoration: none; |  | ||||||
|   color: #0085a1; |  | ||||||
| } |  | ||||||
| .post-preview > a > .post-title { |  | ||||||
|   font-size: 30px; |  | ||||||
|   margin-top: 30px; |  | ||||||
|   margin-bottom: 10px; |  | ||||||
| } |  | ||||||
| .post-preview > a > .post-subtitle { |  | ||||||
|   margin: 0; |  | ||||||
|   font-weight: 300; |  | ||||||
|   margin-bottom: 10px; |  | ||||||
| } |  | ||||||
| .post-preview > .post-meta { |  | ||||||
|   color: #808080; |  | ||||||
|   font-size: 18px; |  | ||||||
|   font-style: italic; |  | ||||||
|   margin-top: 0; |  | ||||||
| } |  | ||||||
| .post-preview > .post-meta > a { |  | ||||||
|   text-decoration: none; |  | ||||||
|   color: #404040; |  | ||||||
| } |  | ||||||
| .post-preview > .post-meta > a:hover, |  | ||||||
| .post-preview > .post-meta > a:focus { |  | ||||||
|   color: #0085a1; |  | ||||||
|   text-decoration: underline; |  | ||||||
| } |  | ||||||
| @media only screen and (min-width: 768px) { |  | ||||||
|   .post-preview > a > .post-title { |  | ||||||
|     font-size: 36px; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| .section-heading { |  | ||||||
|   font-size: 36px; |  | ||||||
|   margin-top: 60px; |  | ||||||
|   font-weight: 700; |  | ||||||
| } |  | ||||||
| .caption { |  | ||||||
|   text-align: center; |  | ||||||
|   font-size: 14px; |  | ||||||
|   padding: 10px; |  | ||||||
|   font-style: italic; |  | ||||||
|   margin: 0; |  | ||||||
|   display: block; |  | ||||||
|   border-bottom-right-radius: 5px; |  | ||||||
|   border-bottom-left-radius: 5px; |  | ||||||
| } |  | ||||||
| footer { |  | ||||||
|   padding: 50px 0 65px; |  | ||||||
| } |  | ||||||
| footer .list-inline { |  | ||||||
|   margin: 0; |  | ||||||
|   padding: 0; |  | ||||||
| } |  | ||||||
| footer .copyright { |  | ||||||
|   font-size: 14px; |  | ||||||
|   text-align: center; |  | ||||||
|   margin-bottom: 0; |  | ||||||
| } |  | ||||||
| .floating-label-form-group { |  | ||||||
|   font-size: 14px; |  | ||||||
|   position: relative; |  | ||||||
|   margin-bottom: 0; |  | ||||||
|   padding-bottom: 0.5em; |  | ||||||
|   border-bottom: 1px solid #eeeeee; |  | ||||||
| } |  | ||||||
| .floating-label-form-group input, |  | ||||||
| .floating-label-form-group textarea { |  | ||||||
|   z-index: 1; |  | ||||||
|   position: relative; |  | ||||||
|   padding-right: 0; |  | ||||||
|   padding-left: 0; |  | ||||||
|   border: none; |  | ||||||
|   border-radius: 0; |  | ||||||
|   font-size: 1.5em; |  | ||||||
|   background: none; |  | ||||||
|   box-shadow: none !important; |  | ||||||
|   resize: none; |  | ||||||
| } |  | ||||||
| .floating-label-form-group label { |  | ||||||
|   display: block; |  | ||||||
|   z-index: 0; |  | ||||||
|   position: relative; |  | ||||||
|   top: 2em; |  | ||||||
|   margin: 0; |  | ||||||
|   font-size: 0.85em; |  | ||||||
|   line-height: 1.764705882em; |  | ||||||
|   vertical-align: middle; |  | ||||||
|   vertical-align: baseline; |  | ||||||
|   opacity: 0; |  | ||||||
|   -webkit-transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
|   -moz-transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
|   -ms-transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
|   transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
| } |  | ||||||
| .floating-label-form-group::not(:first-child) { |  | ||||||
|   padding-left: 14px; |  | ||||||
|   border-left: 1px solid #eeeeee; |  | ||||||
| } |  | ||||||
| .floating-label-form-group-with-value label { |  | ||||||
|   top: 0; |  | ||||||
|   opacity: 1; |  | ||||||
| } |  | ||||||
| .floating-label-form-group-with-focus label { |  | ||||||
|   color: #0085a1; |  | ||||||
| } |  | ||||||
| form .row:first-child .floating-label-form-group { |  | ||||||
|   border-top: 1px solid #eeeeee; |  | ||||||
| } |  | ||||||
| .btn { |  | ||||||
|   font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; |  | ||||||
|   text-transform: uppercase; |  | ||||||
|   font-size: 14px; |  | ||||||
|   font-weight: 800; |  | ||||||
|   letter-spacing: 1px; |  | ||||||
|   border-radius: 0; |  | ||||||
|   padding: 15px 25px; |  | ||||||
| } |  | ||||||
| .btn-lg { |  | ||||||
|   font-size: 16px; |  | ||||||
|   padding: 25px 35px; |  | ||||||
| } |  | ||||||
| .btn-default:hover, |  | ||||||
| .btn-default:focus { |  | ||||||
|   background-color: #0085a1; |  | ||||||
|   border: 1px solid #0085a1; |  | ||||||
|   color: white; |  | ||||||
| } |  | ||||||
| .pager { |  | ||||||
|   margin: 20px 0 0; |  | ||||||
| } |  | ||||||
| .pager li > a, |  | ||||||
| .pager li > span { |  | ||||||
|   font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; |  | ||||||
|   text-transform: uppercase; |  | ||||||
|   font-size: 14px; |  | ||||||
|   font-weight: 800; |  | ||||||
|   letter-spacing: 1px; |  | ||||||
|   padding: 15px 25px; |  | ||||||
|   background-color: white; |  | ||||||
|   border-radius: 0; |  | ||||||
| } |  | ||||||
| .pager li > a:hover, |  | ||||||
| .pager li > a:focus { |  | ||||||
|   color: white; |  | ||||||
|   background-color: #0085a1; |  | ||||||
|   border: 1px solid #0085a1; |  | ||||||
| } |  | ||||||
| .pager .disabled > a, |  | ||||||
| .pager .disabled > a:hover, |  | ||||||
| .pager .disabled > a:focus, |  | ||||||
| .pager .disabled > span { |  | ||||||
|   color: #808080; |  | ||||||
|   background-color: #404040; |  | ||||||
|   cursor: not-allowed; |  | ||||||
| } |  | ||||||
| ::-moz-selection { |  | ||||||
|   color: white; |  | ||||||
|   text-shadow: none; |  | ||||||
|   background: #0085a1; |  | ||||||
| } |  | ||||||
| ::selection { |  | ||||||
|   color: white; |  | ||||||
|   text-shadow: none; |  | ||||||
|   background: #0085a1; |  | ||||||
| } |  | ||||||
| img::selection { |  | ||||||
|   color: white; |  | ||||||
|   background: transparent; |  | ||||||
| } |  | ||||||
| img::-moz-selection { |  | ||||||
|   color: white; |  | ||||||
|   background: transparent; |  | ||||||
| } |  | ||||||
| body { |  | ||||||
|   webkit-tap-highlight-color: #0085a1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .text-center { |  | ||||||
|     text-align: center; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .blog-content img { |  | ||||||
|     width: 100%; |  | ||||||
| } |  | ||||||
| Before Width: | Height: | Size: 169 KiB | 
|  | @ -1,70 +0,0 @@ | ||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --> |  | ||||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> |  | ||||||
| <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" |  | ||||||
| 	 width="130px" height="40px" viewBox="0 0 130 40" enable-background="new 0 0 130 40" xml:space="preserve"> |  | ||||||
| <g> |  | ||||||
| 	<path fill="#FFFFFF" d="M41.207,31.459c0-0.431,0.15-0.846,0.453-1.25c0.301-0.406,0.733-0.771,1.293-1.094v-0.09 |  | ||||||
| 		c-0.294-0.16-0.552-0.388-0.774-0.675c-0.22-0.287-0.331-0.66-0.331-1.116c0-0.354,0.115-0.711,0.345-1.074 |  | ||||||
| 		c0.227-0.36,0.55-0.681,0.963-0.96v-0.088c-0.386-0.281-0.709-0.655-0.975-1.121c-0.263-0.462-0.396-1.019-0.396-1.666 |  | ||||||
| 		c0-0.605,0.117-1.148,0.352-1.627c0.237-0.48,0.554-0.887,0.954-1.228c0.397-0.34,0.857-0.597,1.382-0.775 |  | ||||||
| 		c0.521-0.177,1.079-0.265,1.667-0.265c0.605,0,1.151,0.088,1.637,0.265h4.444v1.659h-2.698c0.222,0.235,0.42,0.528,0.596,0.874 |  | ||||||
| 		c0.178,0.348,0.267,0.734,0.267,1.161c0,0.592-0.11,1.115-0.332,1.571c-0.221,0.457-0.524,0.844-0.907,1.16 |  | ||||||
| 		c-0.384,0.319-0.833,0.56-1.349,0.717c-0.515,0.162-1.069,0.245-1.659,0.245c-0.263,0-0.548-0.027-0.853-0.088 |  | ||||||
| 		c-0.301-0.057-0.599-0.148-0.895-0.266c-0.502,0.326-0.751,0.701-0.751,1.128c0,0.396,0.184,0.686,0.552,0.861 |  | ||||||
| 		c0.368,0.18,0.899,0.265,1.591,0.265h2.299c1.418,0,2.465,0.205,3.153,0.608c0.685,0.405,1.027,1.075,1.027,2.001 |  | ||||||
| 		c0,0.517-0.145,1.001-0.432,1.46c-0.288,0.457-0.697,0.857-1.229,1.204c-0.529,0.346-1.172,0.621-1.924,0.817 |  | ||||||
| 		c-0.751,0.201-1.591,0.302-2.522,0.302c-1.533,0-2.742-0.249-3.625-0.744C41.65,33.143,41.207,32.416,41.207,31.459z |  | ||||||
| 		 M43.062,31.193c0,0.516,0.284,0.932,0.853,1.249c0.568,0.317,1.39,0.477,2.464,0.477c0.575,0,1.095-0.056,1.56-0.167 |  | ||||||
| 		c0.464-0.109,0.863-0.257,1.195-0.441c0.333-0.186,0.584-0.395,0.763-0.628c0.177-0.235,0.263-0.485,0.263-0.755 |  | ||||||
| 		c0-0.47-0.196-0.782-0.584-0.939c-0.392-0.154-0.978-0.229-1.758-0.229h-1.902c-0.339,0-0.64-0.014-0.905-0.036 |  | ||||||
| 		c-0.267-0.019-0.518-0.066-0.752-0.143c-0.443,0.251-0.751,0.509-0.931,0.773C43.154,30.616,43.062,30.897,43.062,31.193z |  | ||||||
| 		 M46.138,24.668c0.621,0,1.149-0.205,1.594-0.618c0.441-0.414,0.664-0.986,0.664-1.724c0-0.71-0.223-1.276-0.664-1.703 |  | ||||||
| 		c-0.445-0.428-0.973-0.642-1.594-0.642s-1.149,0.213-1.591,0.642c-0.441,0.427-0.663,0.995-0.663,1.703 |  | ||||||
| 		c0,0.737,0.223,1.31,0.663,1.724C44.988,24.462,45.518,24.668,46.138,24.668z"/> |  | ||||||
| </g> |  | ||||||
| <path fill="#FFFFFF" d="M24.624,29.806H22.77l-0.184-1.853h-0.09c-0.55,0.64-1.15,1.154-1.796,1.544 |  | ||||||
| 	c-0.649,0.387-1.4,0.581-2.254,0.581c-1.327,0-2.296-0.385-2.904-1.153c-0.612-0.772-0.916-1.896-0.916-3.376v-5.616l-2.962-0.058 |  | ||||||
| 	l5.249-2.02l-0.022,1.528v5.871c0,0.991,0.175,1.719,0.526,2.186c0.351,0.466,0.953,0.7,1.808,0.7c0.579,0,1.109-0.144,1.589-0.426 |  | ||||||
| 	c0.48-0.282,0.996-0.76,1.544-1.431v-7.665h2.265L24.624,29.806L24.624,29.806z"/> |  | ||||||
| <path fill="#FFFFFF" d="M28.376,18.619h1.851l0.184,1.807h0.091c0.565-0.58,1.174-1.072,1.832-1.476 |  | ||||||
| 	c0.654-0.404,1.418-0.605,2.287-0.605c1.312,0,2.274,0.39,2.882,1.165c0.61,0.777,0.917,1.9,0.917,3.365v6.93h-2.267V23.17 |  | ||||||
| 	c0-0.975-0.173-1.695-0.525-2.161c-0.349-0.468-0.953-0.701-1.808-0.701c-0.596,0-1.128,0.152-1.603,0.447 |  | ||||||
| 	c-0.471,0.298-1,0.743-1.579,1.339v7.709h-2.263L28.376,18.619L28.376,18.619z"/> |  | ||||||
| <path fill="#FFFFFF" d="M63.696,24.225c0-0.917,0.161-1.737,0.481-2.461s0.746-1.343,1.281-1.853c0.532-0.51,1.143-0.9,1.831-1.167 |  | ||||||
| 	c0.687-0.267,1.397-0.399,2.128-0.399c0.823,0,1.551,0.128,2.187,0.389c0.629,0.259,1.17,0.621,1.609,1.084 |  | ||||||
| 	c0.444,0.467,0.781,1.023,1.007,1.672c0.229,0.647,0.346,1.36,0.346,2.139c0,0.23-0.013,0.447-0.035,0.653 |  | ||||||
| 	c-0.022,0.208-0.049,0.378-0.08,0.514H66.03c0.076,1.098,0.483,1.956,1.225,2.574c0.74,0.618,1.673,0.928,2.802,0.928 |  | ||||||
| 	c0.611,0,1.178-0.087,1.705-0.254c0.527-0.166,1.041-0.403,1.541-0.708l0.803,1.439c-0.575,0.366-1.23,0.674-1.956,0.928 |  | ||||||
| 	c-0.724,0.25-1.521,0.376-2.392,0.376c-0.838,0-1.627-0.131-2.366-0.397c-0.74-0.268-1.384-0.652-1.933-1.156 |  | ||||||
| 	c-0.55-0.504-0.981-1.118-1.294-1.844C63.853,25.957,63.696,25.138,63.696,24.225z M72.459,23.241c0-1.01-0.263-1.777-0.78-2.312 |  | ||||||
| 	s-1.256-0.8-2.218-0.8c-0.84,0-1.586,0.266-2.241,0.8c-0.657,0.535-1.063,1.302-1.214,2.312H72.459z"/> |  | ||||||
| <path fill="#FFFFFF" d="M82.007,18.264l0.008,11.77h-2.267V21.44h-4.247L82.007,18.264z M80.688,15.958 |  | ||||||
| 	c-0.488,0-0.891-0.146-1.215-0.434c-0.316-0.29-0.478-0.68-0.478-1.167s0.161-0.879,0.478-1.177 |  | ||||||
| 	c0.324-0.297,0.725-0.446,1.215-0.446c0.486,0,0.894,0.148,1.212,0.446c0.323,0.298,0.483,0.69,0.483,1.177 |  | ||||||
| 	c0,0.487-0.16,0.878-0.483,1.167C81.581,15.811,81.174,15.958,80.688,15.958z"/> |  | ||||||
| <path fill="#FFFFFF" d="M85.153,24.45c0-0.928,0.169-1.762,0.505-2.491c0.336-0.733,0.795-1.351,1.374-1.855 |  | ||||||
| 	c0.577-0.503,1.244-0.882,2-1.143c0.756-0.258,1.56-0.388,2.413-0.388c0.916,0,1.715,0.155,2.402,0.467 |  | ||||||
| 	c0.689,0.312,1.261,0.692,1.717,1.132l-1.096,1.44c-0.444-0.365-0.903-0.652-1.377-0.857c-0.469-0.205-0.981-0.307-1.531-0.307 |  | ||||||
| 	c-0.593,0-1.143,0.095-1.648,0.286c-0.502,0.19-0.933,0.46-1.29,0.812c-0.359,0.352-0.639,0.773-0.834,1.269 |  | ||||||
| 	c-0.199,0.495-0.298,1.043-0.298,1.635c0,0.596,0.096,1.142,0.285,1.636c0.191,0.497,0.466,0.919,0.822,1.271 |  | ||||||
| 	c0.358,0.348,0.782,0.621,1.269,0.812c0.49,0.189,1.029,0.284,1.627,0.284c0.685,0,1.304-0.129,1.852-0.389 |  | ||||||
| 	c0.548-0.259,1.045-0.571,1.487-0.94l0.962,1.467c-0.641,0.548-1.343,0.973-2.104,1.269c-0.763,0.297-1.558,0.444-2.38,0.444 |  | ||||||
| 	c-0.87,0-1.681-0.128-2.437-0.388c-0.755-0.258-1.405-0.641-1.955-1.145c-0.552-0.504-0.982-1.119-1.294-1.843 |  | ||||||
| 	C85.311,26.21,85.153,25.383,85.153,24.45z"/> |  | ||||||
| <path fill="#FFFFFF" d="M95.906,13.877l4.743-2.351v6.589l-0.138,2.517c0.566-0.58,1.173-1.068,1.832-1.465 |  | ||||||
| 	c0.655-0.396,1.416-0.594,2.287-0.594c1.311,0,2.271,0.388,2.881,1.165c0.608,0.778,0.914,1.901,0.914,3.364v6.93h-2.264v-6.635 |  | ||||||
| 	c0-0.977-0.175-1.695-0.527-2.161c-0.351-0.466-0.95-0.699-1.807-0.699c-0.594,0-1.13,0.149-1.599,0.446 |  | ||||||
| 	c-0.477,0.299-1.001,0.745-1.581,1.34v7.709h-2.265l-0.05-16.251L95.906,13.877z"/> |  | ||||||
| <g> |  | ||||||
| 	<polygon fill="#FFFFFF" points="108.854,8.822 108.09,10.416 117.573,10.456 118.336,8.831 	"/> |  | ||||||
| 	<polygon fill="#FFFFFF" points="108.103,12.298 107.315,13.971 116.812,13.991 117.573,12.336 	"/> |  | ||||||
| 	<polygon fill="#FFFFFF" points="109.955,15.869 114.305,6.606 115.98,6.631 111.682,15.871 	"/> |  | ||||||
| </g> |  | ||||||
| <g> |  | ||||||
| 	<path fill="#FFFFFF" d="M58.023,26.167c0,0.749,0.188,1.293,0.564,1.625c0.375,0.333,0.864,0.499,1.47,0.499 |  | ||||||
| 		c0.294,0,0.598-0.039,0.907-0.112c0.309-0.074,0.657-0.191,1.038-0.354l0.53,1.639c-0.25,0.086-0.491,0.166-0.718,0.243 |  | ||||||
| 		c-0.23,0.072-0.462,0.134-0.696,0.186c-0.236,0.054-0.482,0.097-0.739,0.133c-0.26,0.037-0.542,0.057-0.852,0.057 |  | ||||||
| 		c-1.21,0-2.128-0.346-2.755-1.041c-0.626-0.691-0.939-1.693-0.939-3.007V11.309h-3.539l5.727-4.035"/> |  | ||||||
| </g> |  | ||||||
| </svg> |  | ||||||
| Before Width: | Height: | Size: 6.6 KiB | 
|  | @ -1,29 +0,0 @@ | ||||||
| // Navigation Scripts to Show Header on Scroll-Up
 |  | ||||||
| jQuery(document).ready(function($) { |  | ||||||
|     var MQL = 1170; |  | ||||||
| 
 |  | ||||||
|     //primary navigation slide-in effect
 |  | ||||||
|     if ($(window).width() > MQL) { |  | ||||||
| 	var headerHeight = $('.navbar-custom').height(); |  | ||||||
| 	$(window).on('scroll', { |  | ||||||
| 	    previousTop: 0 |  | ||||||
| 	}, |  | ||||||
| 		     function() { |  | ||||||
| 			 var currentTop = $(window).scrollTop(); |  | ||||||
| 			 //check if user is scrolling up
 |  | ||||||
| 			 if (currentTop < this.previousTop) { |  | ||||||
| 			     //if scrolling up...
 |  | ||||||
| 			     if (currentTop > 0 && $('.navbar-custom').hasClass('is-fixed')) { |  | ||||||
| 				 $('.navbar-custom').addClass('is-visible'); |  | ||||||
| 			     } else { |  | ||||||
| 				 $('.navbar-custom').removeClass('is-visible is-fixed'); |  | ||||||
| 			     } |  | ||||||
| 			 } else { |  | ||||||
| 			     //if scrolling down...
 |  | ||||||
| 			     $('.navbar-custom').removeClass('is-visible'); |  | ||||||
| 			     if (currentTop > headerHeight && !$('.navbar-custom').hasClass('is-fixed')) $('.navbar-custom').addClass('is-fixed'); |  | ||||||
| 			 } |  | ||||||
| 			 this.previousTop = currentTop; |  | ||||||
| 		     }); |  | ||||||
|     } |  | ||||||
| }); |  | ||||||
|  | @ -1,458 +0,0 @@ | ||||||
| @import "variables.less"; |  | ||||||
| @import "mixins.less"; |  | ||||||
| 
 |  | ||||||
| // Global Components |  | ||||||
| 
 |  | ||||||
| body { |  | ||||||
| 	.serif; |  | ||||||
| 	font-size: 20px; |  | ||||||
| 	color: @gray-dark; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // -- Typography |  | ||||||
| 
 |  | ||||||
| p { |  | ||||||
| 	line-height: 1.5; |  | ||||||
| 	margin: 30px 0; |  | ||||||
| 	a { |  | ||||||
| 		text-decoration: underline; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| h1, |  | ||||||
| h2, |  | ||||||
| h3, |  | ||||||
| h4, |  | ||||||
| h5, |  | ||||||
| h6 { |  | ||||||
| 	.sans-serif; |  | ||||||
| 	font-weight: 800; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| a { |  | ||||||
| 	color: @gray-dark; |  | ||||||
| 	&:hover, |  | ||||||
| 	&:focus { |  | ||||||
| 		color: @brand-primary; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| a img { |  | ||||||
| 	&:hover, |  | ||||||
| 	&:focus { |  | ||||||
| 		cursor: zoom-in; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| blockquote { |  | ||||||
| 	color: @gray; |  | ||||||
| 	font-style: italic; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| hr.small { |  | ||||||
| 	max-width: 100px; |  | ||||||
| 	margin: 15px auto; |  | ||||||
| 	border-width: 4px; |  | ||||||
| 	border-color: white; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Navigation |  | ||||||
| 
 |  | ||||||
| .navbar-custom { |  | ||||||
| 	position: absolute; |  | ||||||
| 	top: 0; |  | ||||||
| 	left: 0; |  | ||||||
| 	width: 100%; |  | ||||||
| 	z-index: 3; |  | ||||||
| 	.sans-serif; |  | ||||||
| 	.navbar-brand { |  | ||||||
| 		font-weight: 800; |  | ||||||
| 	} |  | ||||||
| 	.nav { |  | ||||||
| 		li { |  | ||||||
| 			a { |  | ||||||
| 				text-transform: uppercase; |  | ||||||
| 				font-size: 12px; |  | ||||||
| 				font-weight: 800; |  | ||||||
| 				letter-spacing: 1px; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	@media only screen and (min-width: 768px) { |  | ||||||
| 		background: transparent; |  | ||||||
| 		border-bottom: 1px solid transparent; |  | ||||||
| 		.navbar-brand { |  | ||||||
| 			color: white; |  | ||||||
| 			padding: 20px; |  | ||||||
| 			&:hover, |  | ||||||
| 			&:focus { |  | ||||||
| 				color: @white-faded; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		.nav { |  | ||||||
| 			li { |  | ||||||
| 				a { |  | ||||||
| 					color: white; |  | ||||||
| 					padding: 20px; |  | ||||||
| 					&:hover, |  | ||||||
| 					&:focus { |  | ||||||
| 						color: @white-faded; |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	@media only screen and (min-width: 1170px) { |  | ||||||
| 		-webkit-transition: background-color 0.3s; |  | ||||||
| 		-moz-transition: background-color 0.3s; |  | ||||||
| 		transition: background-color 0.3s; |  | ||||||
| 		/* Force Hardware Acceleration in WebKit */ |  | ||||||
| 		-webkit-transform: translate3d(0, 0, 0); |  | ||||||
| 		-moz-transform: translate3d(0, 0, 0); |  | ||||||
| 		-ms-transform: translate3d(0, 0, 0); |  | ||||||
| 		-o-transform: translate3d(0, 0, 0); |  | ||||||
| 		transform: translate3d(0, 0, 0); |  | ||||||
| 		-webkit-backface-visibility: hidden; |  | ||||||
| 		backface-visibility: hidden; |  | ||||||
| 		&.is-fixed { |  | ||||||
| 			/* when the user scrolls down, we hide the header right above the viewport */ |  | ||||||
| 			position: fixed; |  | ||||||
| 			top: -61px; |  | ||||||
| 			background-color: fade(white, 90%); |  | ||||||
| 			border-bottom: 1px solid darken(white, 5%); |  | ||||||
| 			-webkit-transition: -webkit-transform 0.3s; |  | ||||||
| 			-moz-transition: -moz-transform 0.3s; |  | ||||||
| 			transition: transform 0.3s; |  | ||||||
| 			.navbar-brand { |  | ||||||
| 				color: @gray-dark; |  | ||||||
| 				&:hover, |  | ||||||
| 				&:focus { |  | ||||||
| 					color: @brand-primary; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			.nav { |  | ||||||
| 				li { |  | ||||||
| 					a { |  | ||||||
| 						color: @gray-dark; |  | ||||||
| 						&:hover, |  | ||||||
| 						&:focus { |  | ||||||
| 							color: @brand-primary; |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		&.is-visible { |  | ||||||
| 			/* if the user changes the scrolling direction, we show the header */ |  | ||||||
| 			-webkit-transform: translate3d(0, 100%, 0); |  | ||||||
| 			-moz-transform: translate3d(0, 100%, 0); |  | ||||||
| 			-ms-transform: translate3d(0, 100%, 0); |  | ||||||
| 			-o-transform: translate3d(0, 100%, 0); |  | ||||||
| 			transform: translate3d(0, 100%, 0); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Header |  | ||||||
| 
 |  | ||||||
| .intro-header { |  | ||||||
| 	background-color: @gray;  |  | ||||||
| 	background: no-repeat center center;  |  | ||||||
| 	background-attachment: scroll; |  | ||||||
| 	.background-cover; |  | ||||||
| 	// NOTE: Background images are set within the HTML using inline CSS! |  | ||||||
| 	margin-bottom: 50px; |  | ||||||
| 	.site-heading, |  | ||||||
| 	.post-heading, |  | ||||||
| 	.page-heading { |  | ||||||
| 		padding: 100px 0 50px; |  | ||||||
| 		color: white; |  | ||||||
| 		@media only screen and (min-width: 768px) { |  | ||||||
| 			padding: 150px 0; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	.site-heading, |  | ||||||
| 	.page-heading { |  | ||||||
| 		text-align: center; |  | ||||||
| 		h1 { |  | ||||||
| 			margin-top: 0; |  | ||||||
| 			font-size: 50px; |  | ||||||
| 		} |  | ||||||
| 		.subheading { |  | ||||||
| 			font-size: 24px; |  | ||||||
| 			line-height: 1.1; |  | ||||||
| 			display: block; |  | ||||||
| 			.sans-serif; |  | ||||||
| 			font-weight: 300; |  | ||||||
| 			margin: 10px 0 0; |  | ||||||
| 		} |  | ||||||
| 		@media only screen and (min-width: 768px) { |  | ||||||
| 			h1 { |  | ||||||
| 				font-size: 80px; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	.post-heading { |  | ||||||
| 		h1 { |  | ||||||
| 			font-size: 35px; |  | ||||||
| 		} |  | ||||||
| 		.subheading, |  | ||||||
| 		.meta { |  | ||||||
| 			line-height: 1.1; |  | ||||||
| 			display: block; |  | ||||||
| 		} |  | ||||||
| 		.subheading { |  | ||||||
| 			.sans-serif; |  | ||||||
| 			font-size: 24px; |  | ||||||
| 			margin: 10px 0 30px; |  | ||||||
| 			font-weight: 600; |  | ||||||
| 		} |  | ||||||
| 		.meta { |  | ||||||
| 			.serif; |  | ||||||
| 			font-style: italic; |  | ||||||
| 			font-weight: 300; |  | ||||||
| 			font-size: 20px; |  | ||||||
| 			a { |  | ||||||
| 				color: white; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		@media only screen and (min-width: 768px) { |  | ||||||
| 			h1 { |  | ||||||
| 				font-size: 55px; |  | ||||||
| 			} |  | ||||||
| 			.subheading { |  | ||||||
| 				font-size: 30px; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Post Preview Pages |  | ||||||
| 
 |  | ||||||
| .post-preview { |  | ||||||
| 	> a { |  | ||||||
| 		color: @gray-dark; |  | ||||||
| 		&:hover, |  | ||||||
| 		&:focus { |  | ||||||
| 			text-decoration: none; |  | ||||||
| 			color: @brand-primary; |  | ||||||
| 		} |  | ||||||
| 		> .post-title { |  | ||||||
| 			font-size: 30px; |  | ||||||
| 			margin-top: 30px; |  | ||||||
| 			margin-bottom: 10px; |  | ||||||
| 		} |  | ||||||
| 		> .post-subtitle { |  | ||||||
| 			margin: 0; |  | ||||||
| 			font-weight: 300; |  | ||||||
| 			margin-bottom: 10px; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	> .post-meta { |  | ||||||
| 		color: @gray; |  | ||||||
| 		font-size: 18px; |  | ||||||
| 		font-style: italic; |  | ||||||
| 		margin-top: 0; |  | ||||||
| 		> a { |  | ||||||
| 			text-decoration: none; |  | ||||||
| 			color: @gray-dark; |  | ||||||
| 			&:hover, |  | ||||||
| 			&:focus { |  | ||||||
| 				color: @brand-primary; |  | ||||||
| 				text-decoration: underline; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	@media only screen and (min-width: 768px) { |  | ||||||
| 		> a { |  | ||||||
| 			> .post-title { |  | ||||||
| 				font-size: 36px; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Sections |  | ||||||
| 
 |  | ||||||
| .section-heading { |  | ||||||
| 	font-size: 36px; |  | ||||||
| 	margin-top: 60px; |  | ||||||
| 	font-weight: 700; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .caption { |  | ||||||
| 	text-align: center; |  | ||||||
| 	font-size: 14px; |  | ||||||
| 	padding: 10px; |  | ||||||
| 	font-style: italic; |  | ||||||
| 	margin: 0; |  | ||||||
| 	display: block; |  | ||||||
| 	border-bottom-right-radius: 5px; |  | ||||||
| 	border-bottom-left-radius: 5px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| footer { |  | ||||||
| 	padding: 50px 0 65px; |  | ||||||
| 	.list-inline { |  | ||||||
| 		margin: 0; |  | ||||||
| 		padding: 0; |  | ||||||
| 	} |  | ||||||
| 	.copyright { |  | ||||||
| 		font-size: 14px; |  | ||||||
| 		text-align: center; |  | ||||||
| 		margin-bottom: 0; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Contact Form Styles |  | ||||||
| 
 |  | ||||||
| .floating-label-form-group { |  | ||||||
| 	font-size: 14px; |  | ||||||
| 	position: relative; |  | ||||||
| 	margin-bottom: 0; |  | ||||||
| 	padding-bottom: 0.5em; |  | ||||||
| 	border-bottom: 1px solid @gray-light; |  | ||||||
| 	input, |  | ||||||
| 	textarea { |  | ||||||
| 		z-index: 1; |  | ||||||
| 		position: relative; |  | ||||||
| 		padding-right: 0; |  | ||||||
| 		padding-left: 0; |  | ||||||
| 		border: none; |  | ||||||
| 		border-radius: 0; |  | ||||||
| 		font-size: 1.5em; |  | ||||||
| 		background: none; |  | ||||||
| 		box-shadow: none !important; |  | ||||||
| 		resize: none; |  | ||||||
| 	} |  | ||||||
| 	label { |  | ||||||
| 		display: block; |  | ||||||
| 		z-index: 0; |  | ||||||
| 		position: relative; |  | ||||||
| 		top: 2em; |  | ||||||
| 		margin: 0; |  | ||||||
| 		font-size: 0.85em; |  | ||||||
| 		line-height: 1.764705882em; |  | ||||||
| 		vertical-align: middle; |  | ||||||
| 		vertical-align: baseline; |  | ||||||
| 		opacity: 0; |  | ||||||
| 		-webkit-transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
| 		-moz-transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
| 		-ms-transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
| 		transition: top 0.3s ease,opacity 0.3s ease; |  | ||||||
| 	} |  | ||||||
| 	&::not(:first-child) { |  | ||||||
| 		padding-left: 14px; |  | ||||||
| 		border-left: 1px solid @gray-light; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .floating-label-form-group-with-value { |  | ||||||
| 	label { |  | ||||||
| 		top: 0; |  | ||||||
| 		opacity: 1; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .floating-label-form-group-with-focus { |  | ||||||
| 	label { |  | ||||||
| 		color: @brand-primary; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| form .row:first-child .floating-label-form-group { |  | ||||||
| 	border-top: 1px solid @gray-light; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Button Styles |  | ||||||
| 
 |  | ||||||
| .btn { |  | ||||||
| 	.sans-serif; |  | ||||||
| 	text-transform: uppercase; |  | ||||||
| 	font-size: 14px; |  | ||||||
| 	font-weight: 800; |  | ||||||
| 	letter-spacing: 1px; |  | ||||||
| 	border-radius: 0; |  | ||||||
| 	padding: 15px 25px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .btn-lg { |  | ||||||
| 	font-size: 16px; |  | ||||||
| 	padding: 25px 35px; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .btn-default { |  | ||||||
| 	&:hover, |  | ||||||
| 	&:focus { |  | ||||||
| 		background-color: @brand-primary; |  | ||||||
| 		border: 1px solid @brand-primary; |  | ||||||
| 		color: white; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // Pager Styling |  | ||||||
| 
 |  | ||||||
| .pager { |  | ||||||
| 
 |  | ||||||
| 	margin: 20px 0 0; |  | ||||||
| 
 |  | ||||||
| 	li { |  | ||||||
| 		> a, |  | ||||||
| 		> span { |  | ||||||
| 			.sans-serif; |  | ||||||
| 			text-transform: uppercase; |  | ||||||
| 			font-size: 14px; |  | ||||||
| 			font-weight: 800; |  | ||||||
| 			letter-spacing: 1px; |  | ||||||
| 			padding: 15px 25px; |  | ||||||
| 			background-color: white; |  | ||||||
| 			border-radius: 0; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		> a:hover, |  | ||||||
| 		> a:focus { |  | ||||||
| 			color: white; |  | ||||||
| 			background-color: @brand-primary; |  | ||||||
| 			border: 1px solid @brand-primary; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	.disabled { |  | ||||||
| 		> a, |  | ||||||
| 		> a:hover, |  | ||||||
| 		> a:focus, |  | ||||||
| 		> span { |  | ||||||
| 			color: @gray; |  | ||||||
| 			background-color: @gray-dark; |  | ||||||
| 			cursor: not-allowed; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // -- Highlight Color Customization |  | ||||||
| 
 |  | ||||||
| ::-moz-selection { |  | ||||||
| 	color: white; |  | ||||||
| 	text-shadow: none; |  | ||||||
| 	background: @brand-primary; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| ::selection { |  | ||||||
| 	color: white; |  | ||||||
| 	text-shadow: none; |  | ||||||
| 	background: @brand-primary; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| img::selection { |  | ||||||
| 	color: white; |  | ||||||
| 	background: transparent; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| img::-moz-selection { |  | ||||||
| 	color: white; |  | ||||||
| 	background: transparent; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| body { |  | ||||||
| 	webkit-tap-highlight-color: @brand-primary; |  | ||||||
| } |  | ||||||
|  | @ -1,22 +0,0 @@ | ||||||
| // Mixins |  | ||||||
| 
 |  | ||||||
| .transition-all() { |  | ||||||
|     -webkit-transition: all 0.5s; |  | ||||||
|     -moz-transition: all 0.5s; |  | ||||||
|     transition: all 0.5s; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .background-cover() { |  | ||||||
|     -webkit-background-size: cover; |  | ||||||
|     -moz-background-size: cover; |  | ||||||
|     background-size: cover; |  | ||||||
|     -o-background-size: cover; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .serif() { |  | ||||||
| 	font-family: 'Lora', 'Times New Roman', serif; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| .sans-serif () { |  | ||||||
| 	font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; |  | ||||||
| } |  | ||||||
|  | @ -1,7 +0,0 @@ | ||||||
| // Variables |  | ||||||
| 
 |  | ||||||
| @brand-primary: #0085A1; |  | ||||||
| @gray-dark: lighten(black, 25%); |  | ||||||
| @gray: lighten(black, 50%); |  | ||||||
| @white-faded: fade(white, 80%); |  | ||||||
| @gray-light: #eee; |  | ||||||