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,12 +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 %}
|
||||||
<div class="section">
|
<link href="{% get_static_prefix %}membership.css" rel="stylesheet" type="text/css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="section">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
|
@ -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="">
|
||||||
|
@ -34,11 +39,12 @@
|
||||||
</div>
|
</div>
|
||||||
<a hrefhelp@digitalglarus.ch<="" p="">
|
<a hrefhelp@digitalglarus.ch<="" p="">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<a hrefhelp@digitalglarus.ch<="" p="">
|
<a hrefhelp@digitalglarus.ch<="" p="">
|
||||||
|
|
||||||
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|
||||||
</body></html>
|
</body>
|
||||||
|
</html>
|
|
@ -1,12 +1,17 @@
|
||||||
<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 %}
|
||||||
<div class="navbar navbar-default navbar-static-top">
|
<link href="{% get_static_prefix %}membership.css" rel="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="navbar navbar-default navbar-static-top">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="navbar-header">
|
<div class="navbar-header">
|
||||||
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-ex-collapse">
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-ex-collapse">
|
||||||
|
@ -28,54 +33,60 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<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>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<footer class="section section-primary">
|
<footer class="section section-primary">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<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>
|
||||||
|
@ -103,7 +115,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</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;
|
|