merge master
This commit is contained in:
commit
c9ee9f6ec3
43 changed files with 1815 additions and 713 deletions
17
Changelog
17
Changelog
|
@ -1,6 +1,21 @@
|
||||||
Next:
|
1.5.4: 2018-03-17
|
||||||
|
* bgfix: [dcl cms] update DCLNavbarPlugin to allow change of brand logo and url
|
||||||
|
1.5.3: 2018-03-16
|
||||||
|
* #4262: [dcl] Bugfix for incorrect template name
|
||||||
|
1.5.2: 2018-03-14
|
||||||
|
* [devuan, ipv6] Add google analytics code for devuanhosting.com, ipv6onlyhosting.{com,net}
|
||||||
|
* #4246: [dcl cms] Enable full width options for DCL plugins
|
||||||
|
* #4247: [dcl cms] Fix alignment issues with the "plain heading" option
|
||||||
|
1.5.1: 2018-03-11
|
||||||
|
* bgfix: [dcl cms] Remove datacenterlight_content placeholder conf so that we can create a cms page without calculator
|
||||||
|
1.5: 2018-03-09
|
||||||
* #3554: [dcl] Remove some more beta access resources (some were left in the earlier release)
|
* #3554: [dcl] Remove some more beta access resources (some were left in the earlier release)
|
||||||
|
* #3452: [hosting] Back button management and cache control for hosting views
|
||||||
|
* #3718: [dcl] downtime page
|
||||||
|
* #4119: [dcl] CMS plugins for dcl pages
|
||||||
|
* #4231: [hosting] add company fiscal number to invoice footer
|
||||||
1.4.1: 2018-02-23
|
1.4.1: 2018-02-23
|
||||||
|
* bgfix: [dcl] fix header style for tos page
|
||||||
* #3798: [dg] Redirect user to digital glarus on clicking logo in the email
|
* #3798: [dg] Redirect user to digital glarus on clicking logo in the email
|
||||||
* #3554: [dcl] Remove beta access resources
|
* #3554: [dcl] Remove beta access resources
|
||||||
* #4166: [glasfaser] heading text not to be blocked by topnav on mobile after navbar menu click
|
* #4166: [glasfaser] heading text not to be blocked by topnav on mobile after navbar menu click
|
||||||
|
|
202
datacenterlight/cms_models.py
Normal file
202
datacenterlight/cms_models.py
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
from djangocms_text_ckeditor.fields import HTMLField
|
||||||
|
from cms.models.pluginmodel import CMSPlugin
|
||||||
|
from django.db import models
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
|
from filer.fields.image import FilerImageField
|
||||||
|
|
||||||
|
# Models for CMS Plugins
|
||||||
|
|
||||||
|
|
||||||
|
class DCLSectionPluginModel(CMSPlugin):
|
||||||
|
heading = models.CharField(
|
||||||
|
blank=True, null=True, max_length=100,
|
||||||
|
help_text='An optional heading for the Section',
|
||||||
|
)
|
||||||
|
content = HTMLField()
|
||||||
|
TEXT_DIRECTIONS = (
|
||||||
|
('left', 'Left'),
|
||||||
|
('right', 'Right')
|
||||||
|
)
|
||||||
|
text_direction = models.CharField(
|
||||||
|
choices=TEXT_DIRECTIONS, max_length=10, default=True,
|
||||||
|
help_text='The alignment of text in the section'
|
||||||
|
)
|
||||||
|
html_id = models.SlugField(
|
||||||
|
blank=True, null=True,
|
||||||
|
help_text=(
|
||||||
|
'An optional html id for the Section. Required to set as target '
|
||||||
|
'of a link on page'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
plain_heading = models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
help_text='Select to keep the heading style simpler.'
|
||||||
|
)
|
||||||
|
center_on_mobile = models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
help_text='Select to center align content on small screens.'
|
||||||
|
)
|
||||||
|
background_gradient = models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
help_text='Select to add a gradient background to the section.'
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_extra_classes(self):
|
||||||
|
extra_classes = self.text_direction
|
||||||
|
if self.center_on_mobile:
|
||||||
|
extra_classes += ' section-sm-center'
|
||||||
|
if self.background_gradient:
|
||||||
|
extra_classes += ' section-gradient'
|
||||||
|
if self.plain_heading:
|
||||||
|
extra_classes += ' split-section-plain'
|
||||||
|
return extra_classes
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '#' + self.html_id if self.html_id else str(self.pk)
|
||||||
|
|
||||||
|
|
||||||
|
class DCLBannerListPluginModel(CMSPlugin):
|
||||||
|
heading = models.CharField(
|
||||||
|
blank=True, null=True, max_length=100,
|
||||||
|
help_text='An optional heading for the Section',
|
||||||
|
)
|
||||||
|
html_id = models.SlugField(
|
||||||
|
blank=True, null=True,
|
||||||
|
help_text=(
|
||||||
|
'An optional html id for the Section. Required to set as target '
|
||||||
|
'of a link on page'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return '#' + self.html_id if self.html_id else str(self.pk)
|
||||||
|
|
||||||
|
|
||||||
|
class DCLBannerItemPluginModel(CMSPlugin):
|
||||||
|
content = HTMLField()
|
||||||
|
banner_text = HTMLField(
|
||||||
|
blank=True, null=True, max_length=100,
|
||||||
|
help_text='Optional text to be shown as banner in other half.',
|
||||||
|
)
|
||||||
|
banner_image = FilerImageField(
|
||||||
|
on_delete=models.CASCADE, null=True, blank=True,
|
||||||
|
help_text='Optional image to be used in the banner in other half.'
|
||||||
|
)
|
||||||
|
TEXT_DIRECTIONS = (
|
||||||
|
('left', 'Left'),
|
||||||
|
('right', 'Right')
|
||||||
|
)
|
||||||
|
text_direction = models.CharField(
|
||||||
|
choices=TEXT_DIRECTIONS, max_length=10, default=True,
|
||||||
|
help_text='The alignment of text in the section'
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_extra_classes(self):
|
||||||
|
extra_classes = ''
|
||||||
|
if self.text_direction == 'left':
|
||||||
|
extra_classes = 'flex-row-rev'
|
||||||
|
return extra_classes
|
||||||
|
|
||||||
|
|
||||||
|
class DCLLinkPluginModel(CMSPlugin):
|
||||||
|
target = models.CharField(
|
||||||
|
max_length=100,
|
||||||
|
help_text='Url or #id to navigate to'
|
||||||
|
)
|
||||||
|
text = models.CharField(
|
||||||
|
max_length=50,
|
||||||
|
help_text='Text for the menu item'
|
||||||
|
)
|
||||||
|
title = models.CharField(
|
||||||
|
blank=True, null=True, max_length=100,
|
||||||
|
help_text=(
|
||||||
|
'Optional title text, that will be shown when a user '
|
||||||
|
'hovers over the link'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
separator = models.BooleanField(
|
||||||
|
default=False,
|
||||||
|
help_text='Select to include a separator after the previous link'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DCLNavbarPluginModel(CMSPlugin):
|
||||||
|
logo_light = FilerImageField(
|
||||||
|
on_delete=models.CASCADE, null=True, blank=True,
|
||||||
|
help_text='Logo to be used on transparent navbar',
|
||||||
|
related_name="dcl_navbar_logo_light",
|
||||||
|
)
|
||||||
|
logo_dark = FilerImageField(
|
||||||
|
on_delete=models.CASCADE, null=True, blank=True,
|
||||||
|
help_text='Logo to be used on white navbar',
|
||||||
|
related_name="dcl_navbar_logo_dark",
|
||||||
|
)
|
||||||
|
logo_url = models.URLField(max_length=300, null=True, blank=True)
|
||||||
|
|
||||||
|
def get_logo_dark(self):
|
||||||
|
# used only if atleast one logo exists
|
||||||
|
return self.logo_dark.url if self.logo_dark else self.logo_light.url
|
||||||
|
|
||||||
|
def get_logo_light(self):
|
||||||
|
# used only if atleast one logo exists
|
||||||
|
return self.logo_light.url if self.logo_light else self.logo_dark.url
|
||||||
|
|
||||||
|
|
||||||
|
class DCLNavbarDropdownPluginModel(CMSPlugin):
|
||||||
|
target = models.CharField(
|
||||||
|
max_length=100, null=True, blank=True,
|
||||||
|
help_text='Optional Url or #id to navigate on click'
|
||||||
|
)
|
||||||
|
text = models.CharField(
|
||||||
|
max_length=50,
|
||||||
|
help_text='Text for the dropdown toggle'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DCLContactPluginModel(CMSPlugin):
|
||||||
|
heading = models.CharField(max_length=100, default="Contact", blank=True)
|
||||||
|
organization_name = models.CharField(
|
||||||
|
max_length=100, default="ungleich GmbH", blank=True
|
||||||
|
)
|
||||||
|
email = models.EmailField(max_length=200, default="info@ungleich.ch")
|
||||||
|
address = models.CharField(
|
||||||
|
max_length=100, default="In der Au 7, Schwanden 8762", blank=True
|
||||||
|
)
|
||||||
|
country = models.CharField(
|
||||||
|
max_length=100, default="Switzerland", blank=True
|
||||||
|
)
|
||||||
|
form_header = models.CharField(
|
||||||
|
max_length=100, default="Send us a message.", blank=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DCLFooterPluginModel(CMSPlugin):
|
||||||
|
copyright_label = models.CharField(
|
||||||
|
max_length=100, default='ungleich GmbH', blank=True,
|
||||||
|
help_text='Name of the company alongside the copyright year'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DCLSectionIconPluginModel(CMSPlugin):
|
||||||
|
fontawesome_icon_name = models.CharField(
|
||||||
|
max_length=30,
|
||||||
|
help_text=mark_safe(
|
||||||
|
'Name of the fontawesome icon to use. '
|
||||||
|
'<a href="https://fontawesome.com/v4.7.0/icons/" target="_blank">'
|
||||||
|
'Refer docs.</a>'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class DCLSectionImagePluginModel(CMSPlugin):
|
||||||
|
image = FilerImageField(
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
help_text=(
|
||||||
|
'Image file to be used in section. Add multiple plugins '
|
||||||
|
'to add more than one image'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
caption = models.CharField(
|
||||||
|
max_length=100, null=True, blank=True,
|
||||||
|
help_text='Optional caption for the image.'
|
||||||
|
)
|
133
datacenterlight/cms_plugins.py
Normal file
133
datacenterlight/cms_plugins.py
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
from cms.plugin_base import CMSPluginBase
|
||||||
|
from cms.plugin_pool import plugin_pool
|
||||||
|
|
||||||
|
from .cms_models import (
|
||||||
|
DCLBannerItemPluginModel, DCLBannerListPluginModel, DCLContactPluginModel,
|
||||||
|
DCLFooterPluginModel, DCLLinkPluginModel, DCLNavbarDropdownPluginModel,
|
||||||
|
DCLSectionIconPluginModel, DCLSectionImagePluginModel,
|
||||||
|
DCLSectionPluginModel, DCLNavbarPluginModel
|
||||||
|
)
|
||||||
|
from .models import VMTemplate
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLSectionPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Section Plugin"
|
||||||
|
model = DCLSectionPluginModel
|
||||||
|
render_template = "datacenterlight/cms/section.html"
|
||||||
|
cache = False
|
||||||
|
allow_children = True
|
||||||
|
child_classes = ['DCLSectionIconPlugin', 'DCLSectionImagePlugin']
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLSectionIconPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Section Icon Plugin"
|
||||||
|
model = DCLSectionIconPluginModel
|
||||||
|
render_template = "datacenterlight/cms/section_icon.html"
|
||||||
|
cache = False
|
||||||
|
require_parent = True
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLSectionImagePlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Section Image Plugin"
|
||||||
|
model = DCLSectionImagePluginModel
|
||||||
|
render_template = "datacenterlight/cms/section_image.html"
|
||||||
|
cache = False
|
||||||
|
require_parent = True
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLCalculatorPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Calculator Plugin"
|
||||||
|
model = DCLSectionPluginModel
|
||||||
|
render_template = "datacenterlight/cms/calculator.html"
|
||||||
|
cache = False
|
||||||
|
|
||||||
|
def render(self, context, instance, placeholder):
|
||||||
|
context = super(DCLCalculatorPlugin, self).render(
|
||||||
|
context, instance, placeholder
|
||||||
|
)
|
||||||
|
context['templates'] = VMTemplate.objects.all()
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLBannerListPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Banner List Plugin"
|
||||||
|
model = DCLBannerListPluginModel
|
||||||
|
render_template = "datacenterlight/cms/banner_list.html"
|
||||||
|
cache = False
|
||||||
|
allow_children = True
|
||||||
|
child_classes = ['DCLBannerItemPlugin']
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLBannerItemPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Banner Item Plugin"
|
||||||
|
model = DCLBannerItemPluginModel
|
||||||
|
render_template = "datacenterlight/cms/banner_item.html"
|
||||||
|
cache = False
|
||||||
|
require_parent = True
|
||||||
|
parent_classes = ['DCLBannerListPlugin']
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLNavbarPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Navbar Plugin"
|
||||||
|
model = DCLNavbarPluginModel
|
||||||
|
render_template = "datacenterlight/cms/navbar.html"
|
||||||
|
cache = False
|
||||||
|
allow_children = True
|
||||||
|
child_classes = ['DCLLinkPlugin', 'DCLNavbarDropdownPlugin']
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLNavbarDropdownPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Navbar Dropdown Plugin"
|
||||||
|
model = DCLNavbarDropdownPluginModel
|
||||||
|
render_template = "datacenterlight/cms/navbar_dropdown.html"
|
||||||
|
cache = False
|
||||||
|
allow_children = True
|
||||||
|
child_classes = ['DCLLinkPlugin']
|
||||||
|
require_parent = True
|
||||||
|
parent_classes = ['DCLNavbarPlugin']
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLLinkPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Link Plugin"
|
||||||
|
model = DCLLinkPluginModel
|
||||||
|
render_template = "datacenterlight/cms/link.html"
|
||||||
|
cache = False
|
||||||
|
require_parent = True
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLContactPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Contact Plugin"
|
||||||
|
model = DCLContactPluginModel
|
||||||
|
render_template = "datacenterlight/cms/contact.html"
|
||||||
|
cache = False
|
||||||
|
|
||||||
|
|
||||||
|
@plugin_pool.register_plugin
|
||||||
|
class DCLFooterPlugin(CMSPluginBase):
|
||||||
|
module = "Datacenterlight"
|
||||||
|
name = "DCL Footer Plugin"
|
||||||
|
model = DCLFooterPluginModel
|
||||||
|
render_template = "datacenterlight/cms/footer.html"
|
||||||
|
cache = False
|
||||||
|
allow_children = True
|
||||||
|
child_classes = ['DCLLinkPlugin']
|
|
@ -7,7 +7,8 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'Fetches the VM templates from OpenNebula and populates the dcl VMTemplate model'
|
help = '''Fetches the VM templates from OpenNebula and populates the dcl
|
||||||
|
VMTemplate model'''
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
try:
|
try:
|
||||||
|
@ -15,7 +16,7 @@ class Command(BaseCommand):
|
||||||
templates = manager.get_templates()
|
templates = manager.get_templates()
|
||||||
dcl_vm_templates = []
|
dcl_vm_templates = []
|
||||||
for template in templates:
|
for template in templates:
|
||||||
template_name = template.name.strip('public-')
|
template_name = template.name.lstrip('public-')
|
||||||
template_id = template.id
|
template_id = template.id
|
||||||
dcl_vm_template = VMTemplate.create(template_name, template_id)
|
dcl_vm_template = VMTemplate.create(template_name, template_id)
|
||||||
dcl_vm_templates.append(dcl_vm_template)
|
dcl_vm_templates.append(dcl_vm_template)
|
||||||
|
@ -26,4 +27,5 @@ class Command(BaseCommand):
|
||||||
for dcl_vm_template in dcl_vm_templates:
|
for dcl_vm_template in dcl_vm_templates:
|
||||||
dcl_vm_template.save()
|
dcl_vm_template.save()
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error('Error connecting to OpenNebula. Error Details: {err}'.format(err=str(e)))
|
logger.error('Error connecting to OpenNebula. Error Details: '
|
||||||
|
'{err}'.format(err=str(e)))
|
||||||
|
|
138
datacenterlight/migrations/0012_dclcalculatorpluginmodel.py
Normal file
138
datacenterlight/migrations/0012_dclcalculatorpluginmodel.py
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2018-03-01 20:41
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import djangocms_text_ckeditor.fields
|
||||||
|
import filer.fields.image
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cms', '0014_auto_20160404_1908'),
|
||||||
|
('datacenterlight', '0011_auto_20180220_1423'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLSectionPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('heading', models.CharField(blank=True, help_text='An optional heading for the Section', max_length=100, null=True)),
|
||||||
|
('content', djangocms_text_ckeditor.fields.HTMLField()),
|
||||||
|
('text_direction', models.CharField(choices=[('left', 'Left'), ('right', 'Right')], default=True, help_text='The alignment of text in the section', max_length=10)),
|
||||||
|
('html_id', models.SlugField(blank=True, help_text='An optional html id for the Section. Required to set as target of a link on page', null=True)),
|
||||||
|
('center_on_mobile', models.BooleanField(default=False, help_text='Select to center align content on small screens.')),
|
||||||
|
('background_gradient', models.BooleanField(default=False, help_text='Select to add a gradient background to the section.')),
|
||||||
|
('plain_heading', models.BooleanField(default=False, help_text='Select to keep the heading style simpler.')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLNavbarDropdownPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('text', models.CharField(help_text='Text for the dropdown toggle', max_length=50)),
|
||||||
|
('target', models.CharField(blank=True, help_text='Optional Url or #id to navigate on click', max_length=100, null=True)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLContactPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('heading', models.CharField(blank=True, default='Contact', max_length=100)),
|
||||||
|
('organization_name', models.CharField(blank=True, default='ungleich GmbH', max_length=100)),
|
||||||
|
('email', models.EmailField(default='info@ungleich.ch', max_length=200)),
|
||||||
|
('address', models.CharField(blank=True, default='In der Au 7, Schwanden 8762', max_length=100)),
|
||||||
|
('country', models.CharField(blank=True, default='Switzerland', max_length=100)),
|
||||||
|
('form_header', models.CharField(blank=True, default='Send us a message.', max_length=100)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLFooterPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('copyright_label', models.CharField(blank=True, default='ungleich GmbH', help_text='Name of the company alongside the copyright year', max_length=100)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLLinkPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('target', models.CharField(help_text='Url or #id to navigate to', max_length=100)),
|
||||||
|
('text', models.CharField(help_text='Text for the menu item', max_length=50)),
|
||||||
|
('title', models.CharField(blank=True, help_text='Optional title text, that will be shown when a user hovers over the link', max_length=100, null=True)),
|
||||||
|
('separator', models.BooleanField(default=False, help_text='Select to include a separator after the previous link')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLSectionIconPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('fontawesome_icon_name', models.CharField(help_text='Name of the fontawesome icon to use. <a href="https://fontawesome.com/v4.7.0/icons/" target="_blank">Refer docs.</a>', max_length=30)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLSectionImagePluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('caption', models.CharField(blank=True, help_text='Optional caption for the image.', max_length=100, null=True)),
|
||||||
|
('image', filer.fields.image.FilerImageField(help_text='Image file to be used in section. Add multiple plugins to add more than one image', on_delete=django.db.models.deletion.CASCADE, to='filer.Image')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLBannerListPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('heading', models.CharField(blank=True, help_text='An optional heading for the Section', max_length=100, null=True)),
|
||||||
|
('html_id', models.SlugField(blank=True, help_text='An optional html id for the Section. Required to set as target of a link on page', null=True)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLBannerItemPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('content', djangocms_text_ckeditor.fields.HTMLField()),
|
||||||
|
('banner_text', djangocms_text_ckeditor.fields.HTMLField(blank=True, help_text='Optional text to be shown as banner in other half.', max_length=100, null=True)),
|
||||||
|
('text_direction', models.CharField(choices=[('left', 'Left'), ('right', 'Right')], default=True, help_text='The alignment of text in the section', max_length=10)),
|
||||||
|
('banner_image', filer.fields.image.FilerImageField(blank=True, help_text='Optional image to be used in the banner in other half.', null=True, on_delete=django.db.models.deletion.CASCADE, to='filer.Image')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
]
|
31
datacenterlight/migrations/0013_dclnavbarpluginmodel.py
Normal file
31
datacenterlight/migrations/0013_dclnavbarpluginmodel.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.9.4 on 2018-03-17 07:19
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import filer.fields.image
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('datacenterlight', '0012_dclcalculatorpluginmodel'),
|
||||||
|
('cms', '0014_auto_20160404_1908'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='DCLNavbarPluginModel',
|
||||||
|
fields=[
|
||||||
|
('cmsplugin_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='cms.CMSPlugin')),
|
||||||
|
('logo_url', models.URLField(blank=True, max_length=300, null=True)),
|
||||||
|
('logo_dark', filer.fields.image.FilerImageField(blank=True, help_text='Logo to be used on white navbar', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl_navbar_logo_dark', to='filer.Image')),
|
||||||
|
('logo_light', filer.fields.image.FilerImageField(blank=True, help_text='Logo to be used on transparent navbar', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl_navbar_logo_light', to='filer.Image')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'abstract': False,
|
||||||
|
},
|
||||||
|
bases=('cms.cmsplugin',),
|
||||||
|
),
|
||||||
|
]
|
|
@ -29,3 +29,6 @@ class ContactUs(models.Model):
|
||||||
email = models.CharField(max_length=250)
|
email = models.CharField(max_length=250)
|
||||||
message = models.TextField()
|
message = models.TextField()
|
||||||
field = models.DateTimeField(auto_now_add=True)
|
field = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
|
@ -1,51 +1,15 @@
|
||||||
.dcl-cms_page-full-width {
|
/* only for cms editing mode */
|
||||||
color: #fff;
|
.section-figure .cms-plugin {
|
||||||
text-align: center;
|
flex-basis: 50%;
|
||||||
background-image: -ms-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
flex-grow: 1;
|
||||||
background-image: -moz-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
|
||||||
background-image: -o-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
|
||||||
background-image: -webkit-gradient(linear, right top, left top, color-stop(50, #29427A), color-stop(100, #4F6699));
|
|
||||||
background-image: -webkit-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
|
||||||
background-image: linear-gradient(to left, #29427A 50%, #4F6699 100%);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dcl-cms_page-header {
|
.split-section-plain .section-figure .cms-plugin {
|
||||||
padding: 150px 0 150px 0;
|
flex-grow: 0;
|
||||||
text-align: center;
|
|
||||||
color: #f8f8f8;
|
|
||||||
background: url(../img/pattern.jpg) no-repeat center center;
|
|
||||||
background-size: cover;
|
|
||||||
position: relative;
|
|
||||||
background-attachment: fixed;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dcl-cms_page-header::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
background: rgba(90, 116, 175, 0.85);
|
|
||||||
}
|
|
||||||
|
|
||||||
.dcl-cms_page-header .container {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
#dcl-cms_page-text {
|
|
||||||
background: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
#dcl-cms_page-text h3 {
|
|
||||||
font-size: 42px;
|
|
||||||
width: 70%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
#dcl-cms_page-text h3 {
|
.section-figure .cms-plugin {
|
||||||
font-size: 30px;
|
flex-basis: 100%;
|
||||||
line-height: 40px;
|
}
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
}
|
186
datacenterlight/static/datacenterlight/css/header-slider.css
Normal file
186
datacenterlight/static/datacenterlight/css/header-slider.css
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
.btn-trans {
|
||||||
|
color: #fff;
|
||||||
|
border: 2px solid #fff;
|
||||||
|
padding: 4px 18px;
|
||||||
|
letter-spacing: 0.6px;
|
||||||
|
background: rgba(0,0,0,0.35);
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-trans:focus,
|
||||||
|
.btn-trans:active,
|
||||||
|
.btn-trans:hover {
|
||||||
|
background: #fff;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider > .carousel .carousel-inner {
|
||||||
|
min-height: 95vh;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider > .carousel .carousel-inner > .next,
|
||||||
|
.header_slider > .carousel .carousel-inner > .prev {
|
||||||
|
bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .carousel-indicators {
|
||||||
|
width: 100%;
|
||||||
|
left: 0;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .carousel-indicators li {
|
||||||
|
margin-right: 25px;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .carousel-indicators li.active {
|
||||||
|
background-color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .carousel-control {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .carousel-control .fa {
|
||||||
|
font-size: 2em;
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
margin-top: -50px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider > .carousel .item {
|
||||||
|
background: rgba(0,0,0,0.5);
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider > .carousel .item .container {
|
||||||
|
overflow: auto;
|
||||||
|
padding: 50px 20px 60px;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-end;
|
||||||
|
/* background: rgba(0,0,0,0.5); */
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .intro-cap {
|
||||||
|
margin: 0;
|
||||||
|
text-align: right;
|
||||||
|
line-height: 1.1;
|
||||||
|
font-size: 23px;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .btn-trans {
|
||||||
|
align-self: flex-end;
|
||||||
|
z-index: 2;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.header_slider .intro-cap,
|
||||||
|
.header_slider .intro_lead {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.header_slider .intro-cap {
|
||||||
|
font-size: 2.5em;
|
||||||
|
}
|
||||||
|
.header_slider .carousel-control {
|
||||||
|
width: 50px;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.header_slider .carousel-control .fa-angle-left {
|
||||||
|
left: 25px;
|
||||||
|
}
|
||||||
|
.header_slider .carousel-control .fa-angle-right {
|
||||||
|
right: 25px;
|
||||||
|
}
|
||||||
|
.header_slider .carousel-control .fa {
|
||||||
|
font-size: 4em;
|
||||||
|
}
|
||||||
|
.header_slider > .carousel .item .container {
|
||||||
|
overflow: auto;
|
||||||
|
padding: 75px 50px;
|
||||||
|
}
|
||||||
|
.header_slider .btn-trans {
|
||||||
|
padding: 8px 15px;
|
||||||
|
min-width: 175px;
|
||||||
|
letter-spacing: 1px;
|
||||||
|
font-size: 1.25em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 992px) {
|
||||||
|
.header_slider .intro-cap {
|
||||||
|
font-size: 3.25em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .intro_lead {
|
||||||
|
color: #fff;
|
||||||
|
font-size: 1.55em;
|
||||||
|
text-align: right;
|
||||||
|
line-height: 1.4;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.header_slider .intro_lead {
|
||||||
|
font-size: 1.1em;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header_slider .carousel-indicators li {
|
||||||
|
margin: 1px 25px;
|
||||||
|
width: 16px;
|
||||||
|
height: 16px;
|
||||||
|
}
|
||||||
|
.header_slider .carousel-indicators li.active {
|
||||||
|
margin: 0 25px;
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg_img {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: -1;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg_vid {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: -1;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-aspect-ratio: 16/9) {
|
||||||
|
.bg_vid > video {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-aspect-ratio: 16/9) {
|
||||||
|
.bg_vid > video {
|
||||||
|
/* width: auto; */
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
}
|
|
@ -542,6 +542,10 @@
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.order_detail_footer small {
|
||||||
|
font-size: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
.dashboard-title-thin {
|
.dashboard-title-thin {
|
||||||
font-weight: 300;
|
font-weight: 300;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
|
|
|
@ -19,17 +19,6 @@ textarea {
|
||||||
* blue dark #29427A
|
* blue dark #29427A
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
.lead {
|
|
||||||
font-size: 18px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
|
||||||
.lead-right {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
box-shadow: 0 1px 4px rgba(0, 0, 0, .6);
|
box-shadow: 0 1px 4px rgba(0, 0, 0, .6);
|
||||||
}
|
}
|
||||||
|
@ -90,6 +79,10 @@ textarea {
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-brand > img {
|
||||||
|
max-height: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
.navbar-default .navbar-nav>li>a{
|
.navbar-default .navbar-nav>li>a{
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
@ -102,14 +95,32 @@ textarea {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-transparent .navbar-nav>li>a {
|
.navbar-transparent .navbar-nav>li a {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-transparent .navbar-nav>li>a:focus,
|
.navbar-transparent .navbar-nav>li a:focus,
|
||||||
.navbar-transparent .navbar-nav>li>a:hover {
|
.navbar-transparent .navbar-nav>li a:active,
|
||||||
|
.navbar-transparent .navbar-nav>li a:hover {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .dcl-link {
|
||||||
|
display: block;
|
||||||
|
padding: 15px;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .dcl-link:focus,
|
||||||
|
.navbar .dcl-link:active,
|
||||||
|
.navbar .dcl-link:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.navbar .dropdown-menu .dcl-link {
|
||||||
|
padding: 1px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-transparent .navbar-nav>li>.on-hover-border {
|
.navbar-transparent .navbar-nav>li>.on-hover-border {
|
||||||
|
@ -195,8 +206,8 @@ textarea {
|
||||||
margin-left: 15px;
|
margin-left: 15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown-menu>li>a:focus,
|
.dropdown-menu>li a:focus,
|
||||||
.dropdown-menu>li>a:hover {
|
.dropdown-menu>li a:hover {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
text-decoration: underline !important;
|
text-decoration: underline !important;
|
||||||
}
|
}
|
||||||
|
@ -237,6 +248,44 @@ textarea {
|
||||||
padding: 5px 10px !important;
|
padding: 5px 10px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* dcl header */
|
||||||
|
.dcl-header {
|
||||||
|
padding: 150px 0 150px 0;
|
||||||
|
text-align: center;
|
||||||
|
color: #f8f8f8;
|
||||||
|
background: url(../img/pattern.jpg) no-repeat center center;
|
||||||
|
background-size: cover;
|
||||||
|
position: relative;
|
||||||
|
background-attachment: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dcl-header::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: rgba(90, 116, 175, 0.85);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dcl-header .container {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dcl-header h1 {
|
||||||
|
font-size: 65px;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media(max-width:767px) {
|
||||||
|
.dcl-header h1 {
|
||||||
|
font-size: 50px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.intro-header {
|
.intro-header {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -332,6 +381,7 @@ textarea {
|
||||||
|
|
||||||
.split-section {
|
.split-section {
|
||||||
padding: 70px 0;
|
padding: 70px 0;
|
||||||
|
border-top: 1px solid #f6f7f8;
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section .icon-section {
|
.split-section .icon-section {
|
||||||
|
@ -348,41 +398,50 @@ textarea {
|
||||||
color: #5A74AF;
|
color: #5A74AF;
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section .split-text .lead {
|
.split-section h2 {
|
||||||
font-size: 21px;
|
font-size: 36px;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-section .split-title-plain h2 {
|
||||||
|
font-size: 40px;
|
||||||
|
font-weight: 300;
|
||||||
|
line-height: 50px;
|
||||||
color: #3a3a3a;
|
color: #3a3a3a;
|
||||||
font-weight: 300 !important;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.new-lead {
|
.split-section .split-title {
|
||||||
font-weight: 300 !important;
|
|
||||||
font-size: 21px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.split-section .split-text .split-title {
|
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-bottom: 25px;
|
margin-bottom: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section .split-text .split-title h2 {
|
.split-section .split-title h2 {
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
line-height: 50px;
|
font-weight: 300;
|
||||||
padding-bottom: 25px;
|
padding-bottom: 25px;
|
||||||
color: #3a3a3a;
|
letter-spacing: 2px;
|
||||||
letter-spacing: 3px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section.left {
|
.section-gradient {
|
||||||
background: -webkit-linear-gradient(#f0f4f7, #fff) no-repeat;
|
background: -webkit-linear-gradient(#f0f4f7, #fff) no-repeat;
|
||||||
background: -o-linear-gradient(#f0f4f7, #fff) no-repeat;
|
background: -o-linear-gradient(#f0f4f7, #fff) no-repeat;
|
||||||
background: linear-gradient(#f0f4f7, #fff) no-repeat;
|
background: linear-gradient(#f0f4f7, #fff) no-repeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section.left .split-description {
|
.split-section.left .split-description {
|
||||||
width: 90%;
|
/* width: 90%; */
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.split-section .split-description .lead {
|
||||||
|
color: #3a3a3a;
|
||||||
|
font-size: 21px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-section .space .split-description .lead {
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.split-section.right .split-description {
|
.split-section.right .split-description {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
margin-left: auto;
|
margin-left: auto;
|
||||||
|
@ -394,53 +453,92 @@ textarea {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section.right .split-text {
|
.split-section.right .split-text ul,
|
||||||
|
.split-section.left .split-text,
|
||||||
|
.split-section.left .space {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-section.right .split-text,
|
||||||
|
.split-section.right .space {
|
||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section.right .split-text ul {
|
.split-section .split-title::before {
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.split-section.left .split-text {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.split-section.right .split-text .split-title h2 {
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.split-section.left .split-text .split-title h2 {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.split-section.right .split-text .split-title::before {
|
|
||||||
content: "";
|
content: "";
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
background: #29427A;
|
background: #29427A;
|
||||||
height: 7px;
|
height: 7px;
|
||||||
width: 70px;
|
width: 70px;
|
||||||
|
left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-section.right .split-title::before {
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.split-section.left .split-text .split-title::before {
|
.split-section.left .split-title::before {
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
background: #29427A;
|
|
||||||
height: 7px;
|
|
||||||
width: 70px;
|
|
||||||
left: 0;
|
left: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section {
|
.section-figure {
|
||||||
padding: 80px 0 !important;
|
display: flex;
|
||||||
background: -webkit-linear-gradient(top, #f0f4f7, #fff) no-repeat;
|
flex-wrap: wrap;
|
||||||
background: linear-gradient(to bottom, #f0f4f7, #fff) no-repeat;
|
justify-content: center;
|
||||||
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .card {
|
.section-figure .section-image {
|
||||||
|
padding: 20px 40px 30px;
|
||||||
|
flex-basis: 50%;
|
||||||
|
flex-grow: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.section-figure .section-image {
|
||||||
|
flex-basis: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-section-plain .section-figure .section-image {
|
||||||
|
flex-grow: 0;
|
||||||
|
padding: 50px 15px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.split-section-plain .section-figure {
|
||||||
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.split-section-plain .split-figure {
|
||||||
|
width: 41.66666667%;
|
||||||
|
}
|
||||||
|
.split-section-plain .split-figure.col-sm-push-6 {
|
||||||
|
left: 58.33333333%;
|
||||||
|
}
|
||||||
|
.split-section-plain .split-text {
|
||||||
|
width: 58.33333333%;
|
||||||
|
}
|
||||||
|
.split-section-plain .split-text.col-sm-pull-6 {
|
||||||
|
right: 41.66666667%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-image img {
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-image-caption {
|
||||||
|
padding-top: 20px;
|
||||||
|
display: inline-block;
|
||||||
|
color: #999 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.price-calc-section .card {
|
||||||
width: 350px;
|
width: 350px;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
|
@ -450,65 +548,33 @@ textarea {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .card .img-beta {
|
.price-calc-section .card .title {
|
||||||
position: absolute;
|
|
||||||
top: 5px;
|
|
||||||
width: 60px;
|
|
||||||
left: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pricing-section .card .title {
|
|
||||||
padding: 15px 40px;
|
padding: 15px 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .card .title h3 {}
|
.price-calc-section .card .price {
|
||||||
|
|
||||||
.pricing-section .card .price {
|
|
||||||
background: #5A74AF;
|
background: #5A74AF;
|
||||||
padding: 22px;
|
padding: 22px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .card .description {
|
.price-calc-section .card .description {
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .card .descriptions {
|
.price-calc-section .card .descriptions {
|
||||||
padding: 10px 30px;
|
padding: 10px 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .card .description p {
|
.price-calc-section .card .description p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .card .btn {
|
.price-calc-section .card .btn {
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pricing-section .text {
|
|
||||||
text-align: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pricing-section .text .section-heading {
|
|
||||||
font-size: 48px;
|
|
||||||
line-height: 50px;
|
|
||||||
padding-bottom: 25px;
|
|
||||||
color: #3a3a3a;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pricing-section .text .section-heading::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
background: #29427A;
|
|
||||||
height: 7px;
|
|
||||||
width: 70px;
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contact-section {
|
.contact-section {
|
||||||
padding: 80px 0;
|
padding: 80px 0;
|
||||||
color: rgba(255, 255, 255, 0.9);
|
color: rgba(255, 255, 255, 0.9);
|
||||||
|
@ -672,43 +738,6 @@ textarea {
|
||||||
|
|
||||||
/*Why DCL*/
|
/*Why DCL*/
|
||||||
|
|
||||||
.full-whydcl-sec {
|
|
||||||
color: #fff;
|
|
||||||
text-align: center;
|
|
||||||
background-image: -ms-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
|
||||||
background-image: -moz-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
|
||||||
background-image: -o-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
|
||||||
background-image: -webkit-gradient(linear, right top, left top, color-stop(50, #29427A), color-stop(100, #4F6699));
|
|
||||||
background-image: -webkit-linear-gradient(right, #29427A 50%, #4F6699 100%);
|
|
||||||
background-image: linear-gradient(to left, #29427A 50%, #4F6699 100%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.whydcl-header {
|
|
||||||
padding: 150px 0 150px 0;
|
|
||||||
text-align: center;
|
|
||||||
color: #f8f8f8;
|
|
||||||
background: url(../img/pattern.jpg) no-repeat center center;
|
|
||||||
background-size: cover;
|
|
||||||
position: relative;
|
|
||||||
background-attachment: fixed;
|
|
||||||
}
|
|
||||||
|
|
||||||
.whydcl-header::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
background: rgba(90, 116, 175, 0.85);
|
|
||||||
}
|
|
||||||
|
|
||||||
.single-heading h2 {
|
|
||||||
font-size: 65px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#tech_stack {
|
#tech_stack {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
}
|
}
|
||||||
|
@ -718,34 +747,9 @@ textarea {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
hr.thick-divider {
|
|
||||||
border-top: 3px solid #eee !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.space {
|
.space {
|
||||||
padding: 50px 0;
|
max-width: 660px;
|
||||||
}
|
margin: auto;
|
||||||
|
|
||||||
tech-sub-sec h2 {
|
|
||||||
font-size: 45px;
|
|
||||||
line-height: 60px;
|
|
||||||
padding-bottom: 25px;
|
|
||||||
color: #3a3a3a;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo-wrap {
|
|
||||||
text-align: center;
|
|
||||||
min-height: 140px;
|
|
||||||
padding: 20px 40px 30px 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btm-space {
|
|
||||||
padding-bottom: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.btm-space-tayga {
|
|
||||||
padding-bottom: 12px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.percent-text {
|
.percent-text {
|
||||||
|
@ -753,19 +757,19 @@ tech-sub-sec h2 {
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tech-sub-sec h2 {
|
|
||||||
font-size: 40px;
|
|
||||||
line-height: 55px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.space-middle {
|
.space-middle {
|
||||||
padding: 45px 0;
|
/* padding: 45px 0; */
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ssdimg {
|
.ssdimg {
|
||||||
vertical-align: middle;
|
margin: 0 15px;
|
||||||
display: inline-block;
|
/* vertical-align: middle; */
|
||||||
|
/* display: inline-block; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.ssdimg img {
|
||||||
|
max-width: 125px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
|
@ -775,60 +779,20 @@ tech-sub-sec h2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
.padding-vertical {
|
.padding-vertical {
|
||||||
padding: 30px 2px;
|
padding: 30px 2px 20px;
|
||||||
}
|
|
||||||
|
|
||||||
.logo-wrap .logo-caption {
|
|
||||||
padding-top: 20px;
|
|
||||||
display: inline-block;
|
|
||||||
color: #999 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.logo-wrap-1 {
|
|
||||||
padding-top: 50px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*Pricing page*/
|
/*Pricing page*/
|
||||||
|
|
||||||
.price-calc-section {
|
.price-calc-section {
|
||||||
padding: 80px 40px !important;
|
|
||||||
background: -webkit-linear-gradient(top, #f0f4f7, #fff) no-repeat;
|
|
||||||
background: linear-gradient(to bottom, #f0f4f7, #fff) no-repeat;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
margin-top: 25px;
|
||||||
|
margin-bottom: 25px;
|
||||||
.price-calc-section .text {
|
|
||||||
width: 50%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price-calc-section .text .section-heading {
|
|
||||||
font-size: 48px;
|
|
||||||
line-height: 48px;
|
|
||||||
padding-bottom: 27px;
|
|
||||||
color: #3a3a3a;
|
|
||||||
letter-spacing: 1px;
|
|
||||||
position: relative;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price-calc-section .text .description {
|
|
||||||
font-size: 20px;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price-calc-section .text .section-heading::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
background: #29427A;
|
|
||||||
height: 7px;
|
|
||||||
width: 70px;
|
|
||||||
right: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-calc-section .card {
|
.price-calc-section .card {
|
||||||
width: 50%;
|
width: 100%;
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23);
|
||||||
|
@ -839,21 +803,6 @@ tech-sub-sec h2 {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-calc-section .landing {
|
|
||||||
width: 100% !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-padding {
|
|
||||||
padding: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price-calc-section .card .img-beta {
|
|
||||||
position: absolute;
|
|
||||||
top: 5px;
|
|
||||||
width: 60px;
|
|
||||||
left: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price-calc-section .card .title {
|
.price-calc-section .card .title {
|
||||||
padding: 15px 40px;
|
padding: 15px 40px;
|
||||||
}
|
}
|
||||||
|
@ -950,8 +899,6 @@ tech-sub-sec h2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*Changed class****.price-calc-section .card .description.input input*/
|
/*Changed class****.price-calc-section .card .description.input input*/
|
||||||
|
|
||||||
.price-calc-section .card .description input {
|
.price-calc-section .card .description input {
|
||||||
|
@ -1000,32 +947,23 @@ tech-sub-sec h2 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (min-width: 576px) and (max-width: 767px) {
|
|
||||||
.logo-wrap, .logo-wrap-1 {
|
|
||||||
width: 50%;
|
|
||||||
padding: 15px 30px !important;
|
|
||||||
min-height: 179px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media(max-width:991px) {
|
@media(max-width:991px) {
|
||||||
.pricing-section .text {
|
.section-sm-center .split-text,
|
||||||
text-align: center;
|
.section-sm-center .space {
|
||||||
|
text-align: center !important;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
}
|
}
|
||||||
.pricing-section .text .section-heading::before {
|
.section-sm-center .split-title::before {
|
||||||
left: 50%;
|
left: 50% !important;
|
||||||
transform: translate(-50%, 0);
|
transform: translate(-50%, 0);
|
||||||
}
|
}
|
||||||
|
.section-sm-center .split-description {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width:767px) {
|
@media(max-width:767px) {
|
||||||
.single-heading h2 {
|
|
||||||
font-size: 50px;
|
|
||||||
}
|
|
||||||
.logo-wrap {
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
.navbar-transparent li a {
|
.navbar-transparent li a {
|
||||||
color: #777 !important;
|
color: #777 !important;
|
||||||
}
|
}
|
||||||
|
@ -1102,7 +1040,7 @@ tech-sub-sec h2 {
|
||||||
background-color: transparent;
|
background-color: transparent;
|
||||||
}
|
}
|
||||||
.split-section {
|
.split-section {
|
||||||
padding: 10px 0;
|
padding: 20px 0;
|
||||||
}
|
}
|
||||||
.split-section .icon-section {
|
.split-section .icon-section {
|
||||||
min-height: 160px;
|
min-height: 160px;
|
||||||
|
@ -1110,11 +1048,14 @@ tech-sub-sec h2 {
|
||||||
.split-section .icon-section i {
|
.split-section .icon-section i {
|
||||||
font-size: 120px;
|
font-size: 120px;
|
||||||
}
|
}
|
||||||
.split-section .split-text .split-title h2 {
|
.split-section h2 {
|
||||||
font-size: 35px;
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
.split-section .split-title-plain h2 {
|
||||||
|
font-size: 30px;
|
||||||
line-height: 35px;
|
line-height: 35px;
|
||||||
}
|
}
|
||||||
.pricing-section .text .section-heading {
|
.split-section .split-title h2 {
|
||||||
font-size: 35px;
|
font-size: 35px;
|
||||||
line-height: 35px;
|
line-height: 35px;
|
||||||
}
|
}
|
||||||
|
@ -1139,7 +1080,7 @@ tech-sub-sec h2 {
|
||||||
}
|
}
|
||||||
.price-calc-section {
|
.price-calc-section {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding: 60px 10px !important;
|
/* padding: 60px 10px !important; */
|
||||||
}
|
}
|
||||||
.price-calc-section .card {
|
.price-calc-section .card {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
|
@ -1172,16 +1113,10 @@ tech-sub-sec h2 {
|
||||||
}
|
}
|
||||||
|
|
||||||
@media(max-width:575px) {
|
@media(max-width:575px) {
|
||||||
.logo-wrap {
|
|
||||||
padding: 30px;
|
|
||||||
}
|
|
||||||
.percent-text {
|
.percent-text {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
font-size: 37px;
|
font-size: 37px;
|
||||||
}
|
}
|
||||||
.pricing-section .card {
|
|
||||||
width: 90%;
|
|
||||||
}
|
|
||||||
.contact-section .card {
|
.contact-section .card {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
|
@ -1210,11 +1145,6 @@ tech-sub-sec h2 {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content-section-a {
|
|
||||||
padding: 50px 0;
|
|
||||||
background-color: #f8f8f8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.section-heading {
|
.section-heading {
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
@ -1237,6 +1167,11 @@ footer {
|
||||||
margin-top: 25px;
|
margin-top: 25px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flex-row .percent-text {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
.flex-row {
|
.flex-row {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -1247,9 +1182,16 @@ footer {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
padding: 0 15px;
|
padding: 0 15px;
|
||||||
}
|
}
|
||||||
.flex-row .percent-text,
|
|
||||||
.flex-row .desc-text {
|
.flex-row .desc-text {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.flex-row .desc-text,
|
||||||
|
.flex-row .percent-text {
|
||||||
|
max-width: 430px;
|
||||||
|
}
|
||||||
|
.flex-row-rev .desc-text {
|
||||||
max-width: 710px;
|
max-width: 710px;
|
||||||
|
text-align: left;
|
||||||
}
|
}
|
||||||
.flex-row-rev .percent-text {
|
.flex-row-rev .percent-text {
|
||||||
order: 2;
|
order: 2;
|
||||||
|
@ -1259,10 +1201,6 @@ footer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.w380 {
|
|
||||||
max-width: 380px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.checkmark {
|
.checkmark {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
|
@ -1279,4 +1217,40 @@ footer {
|
||||||
border-width: 0 3px 3px 0;
|
border-width: 0 3px 3px 0;
|
||||||
/*Rotate the L 45 degrees to turn it into a checkmark*/
|
/*Rotate the L 45 degrees to turn it into a checkmark*/
|
||||||
transform: rotate(45deg);
|
transform: rotate(45deg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
footer .dcl-link-separator {
|
||||||
|
position: relative;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer .dcl-link-separator::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
display: inline-block;
|
||||||
|
top: 9px;
|
||||||
|
bottom: 0;
|
||||||
|
left: -2px;
|
||||||
|
right: 0;
|
||||||
|
width: 2px;
|
||||||
|
height: 2px;
|
||||||
|
border-radius: 100%;
|
||||||
|
background: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* new styles for whydcl section cms plugin (to replace older style) */
|
||||||
|
|
||||||
|
.banner-list {
|
||||||
|
border-top: 2px solid #eee;
|
||||||
|
padding: 50px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-list-heading h2 {
|
||||||
|
font-size: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 767px) {
|
||||||
|
.banner-list-heading h2 {
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -2,32 +2,32 @@
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
<!-- 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">
|
<!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"
|
<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="156.5px" height="40px" viewBox="0 0 156.5 40" enable-background="new 0 0 156.5 40" xml:space="preserve">
|
width="156.5px" height="30.5px" viewBox="0 0 156.5 30.5" enable-background="new 0 0 156.5 30.5" xml:space="preserve">
|
||||||
<g display="none">
|
<g display="none">
|
||||||
<g display="inline">
|
<g display="inline">
|
||||||
<path fill="#231916" d="M32.599,25.896c0-0.429,0.15-0.845,0.453-1.25c0.303-0.408,0.734-0.773,1.296-1.097v-0.092
|
<path fill="#231916" d="M32.599,25.896c0-0.43,0.15-0.846,0.453-1.25c0.303-0.408,0.734-0.773,1.296-1.098v-0.092
|
||||||
c-0.294-0.16-0.554-0.388-0.777-0.674c-0.22-0.289-0.332-0.662-0.332-1.119c0-0.354,0.115-0.712,0.345-1.076
|
c-0.294-0.16-0.554-0.389-0.777-0.674c-0.22-0.289-0.332-0.662-0.332-1.119c0-0.354,0.115-0.712,0.345-1.076
|
||||||
c0.227-0.36,0.55-0.683,0.964-0.962v-0.09c-0.386-0.28-0.711-0.654-0.978-1.12c-0.263-0.464-0.397-1.021-0.397-1.67
|
c0.227-0.36,0.55-0.683,0.964-0.962v-0.09c-0.386-0.28-0.711-0.654-0.978-1.12c-0.263-0.464-0.397-1.021-0.397-1.67
|
||||||
c0-0.606,0.118-1.149,0.354-1.63c0.236-0.48,0.555-0.889,0.954-1.229c0.398-0.34,0.86-0.598,1.385-0.775
|
c0-0.606,0.118-1.149,0.354-1.63c0.236-0.48,0.555-0.889,0.954-1.229c0.398-0.34,0.86-0.598,1.385-0.775
|
||||||
c0.523-0.178,1.081-0.266,1.672-0.266c0.605,0,1.152,0.088,1.64,0.266h4.452v1.662h-2.702c0.222,0.237,0.42,0.528,0.598,0.875
|
c0.523-0.178,1.081-0.266,1.672-0.266c0.605,0,1.152,0.088,1.64,0.266h4.452v1.662h-2.702c0.222,0.237,0.42,0.528,0.598,0.875
|
||||||
c0.178,0.348,0.267,0.735,0.267,1.165c0,0.59-0.111,1.117-0.332,1.572c-0.222,0.459-0.525,0.846-0.91,1.163
|
c0.178,0.348,0.267,0.735,0.267,1.165c0,0.59-0.111,1.117-0.332,1.572c-0.222,0.459-0.525,0.846-0.91,1.163
|
||||||
c-0.384,0.318-0.834,0.558-1.351,0.72c-0.517,0.162-1.071,0.246-1.663,0.246c-0.265,0-0.55-0.031-0.854-0.091
|
c-0.384,0.318-0.834,0.558-1.351,0.72c-0.517,0.162-1.071,0.247-1.663,0.247c-0.265,0-0.55-0.032-0.854-0.092
|
||||||
c-0.302-0.058-0.601-0.147-0.896-0.267c-0.503,0.326-0.753,0.701-0.753,1.131c0,0.398,0.185,0.686,0.553,0.865
|
c-0.302-0.058-0.601-0.147-0.896-0.267c-0.503,0.326-0.753,0.7-0.753,1.131c0,0.397,0.185,0.687,0.553,0.864
|
||||||
c0.369,0.176,0.901,0.266,1.596,0.266h2.303c1.42,0,2.47,0.203,3.159,0.607c0.687,0.406,1.029,1.076,1.029,2.006
|
c0.369,0.177,0.901,0.267,1.596,0.267h2.303c1.42,0,2.47,0.203,3.159,0.606c0.687,0.406,1.029,1.076,1.029,2.007
|
||||||
c0,0.518-0.145,1.004-0.431,1.461c-0.29,0.459-0.699,0.861-1.23,1.209c-0.531,0.348-1.174,0.621-1.929,0.82
|
c0,0.518-0.145,1.004-0.431,1.461c-0.29,0.459-0.699,0.86-1.23,1.209c-0.531,0.348-1.174,0.621-1.929,0.819
|
||||||
c-0.751,0.199-1.594,0.299-2.525,0.299c-1.537,0-2.747-0.25-3.633-0.744C33.042,27.586,32.599,26.857,32.599,25.896z
|
c-0.751,0.199-1.594,0.299-2.525,0.299c-1.537,0-2.747-0.25-3.633-0.743C33.042,27.586,32.599,26.857,32.599,25.896z
|
||||||
M34.458,25.633c0,0.516,0.285,0.932,0.854,1.25s1.393,0.477,2.47,0.477c0.577,0,1.097-0.055,1.562-0.166
|
M34.458,25.633c0,0.516,0.285,0.932,0.854,1.25s1.393,0.477,2.47,0.477c0.577,0,1.097-0.055,1.562-0.166
|
||||||
c0.465-0.11,0.864-0.258,1.197-0.442s0.585-0.396,0.764-0.631c0.177-0.234,0.266-0.486,0.266-0.754
|
c0.465-0.109,0.864-0.258,1.197-0.441s0.585-0.396,0.764-0.631c0.177-0.234,0.266-0.486,0.266-0.754
|
||||||
c0-0.474-0.196-0.785-0.587-0.941c-0.392-0.153-0.979-0.231-1.762-0.231h-1.905c-0.34,0-0.641-0.012-0.907-0.033
|
c0-0.475-0.196-0.785-0.587-0.941c-0.392-0.152-0.979-0.23-1.762-0.23h-1.905c-0.34,0-0.641-0.012-0.907-0.033
|
||||||
c-0.268-0.021-0.519-0.07-0.754-0.145c-0.444,0.25-0.753,0.51-0.932,0.776C34.549,25.057,34.458,25.334,34.458,25.633z
|
c-0.268-0.021-0.519-0.07-0.754-0.145c-0.444,0.25-0.753,0.51-0.932,0.775C34.549,25.057,34.458,25.334,34.458,25.633z
|
||||||
M37.539,19.095c0.621,0,1.152-0.206,1.597-0.62c0.442-0.414,0.665-0.989,0.665-1.727c0-0.71-0.223-1.279-0.665-1.707
|
M37.539,19.095c0.621,0,1.152-0.206,1.597-0.62c0.442-0.414,0.665-0.989,0.665-1.727c0-0.71-0.223-1.279-0.665-1.707
|
||||||
c-0.445-0.428-0.976-0.643-1.597-0.643s-1.152,0.215-1.595,0.643c-0.442,0.428-0.665,0.997-0.665,1.707
|
c-0.445-0.428-0.976-0.643-1.597-0.643s-1.152,0.215-1.595,0.643c-0.442,0.428-0.665,0.997-0.665,1.707
|
||||||
c0,0.738,0.223,1.313,0.665,1.727C36.386,18.889,36.918,19.095,37.539,19.095z"/>
|
c0,0.738,0.223,1.313,0.665,1.727C36.386,18.889,36.918,19.095,37.539,19.095z"/>
|
||||||
</g>
|
</g>
|
||||||
<path display="inline" fill="#231916" d="M15.983,24.24h-1.857l-0.183-1.854h-0.092c-0.551,0.642-1.151,1.154-1.8,1.548
|
<path display="inline" fill="#231916" d="M15.983,24.24h-1.857l-0.183-1.854h-0.092c-0.551,0.642-1.151,1.154-1.8,1.548
|
||||||
c-0.649,0.387-1.401,0.582-2.258,0.582c-1.329,0-2.3-0.384-2.91-1.156c-0.612-0.771-0.917-1.898-0.917-3.381V14.35L3,14.293
|
c-0.649,0.387-1.401,0.582-2.258,0.582c-1.329,0-2.3-0.384-2.91-1.156c-0.612-0.771-0.917-1.897-0.917-3.38V14.35L3,14.293
|
||||||
l5.258-2.023l-0.023,1.529v5.882c0,0.994,0.176,1.724,0.528,2.189c0.351,0.467,0.954,0.7,1.811,0.7
|
l5.258-2.023l-0.023,1.529v5.882c0,0.994,0.176,1.724,0.528,2.189c0.351,0.467,0.954,0.7,1.811,0.7
|
||||||
c0.581,0,1.111-0.143,1.593-0.426c0.48-0.283,0.998-0.762,1.547-1.433v-7.678h2.269V24.24z"/>
|
c0.581,0,1.111-0.144,1.593-0.426c0.48-0.283,0.998-0.763,1.547-1.434v-7.678h2.269V24.24z"/>
|
||||||
<path display="inline" fill="#231916" d="M19.742,13.033h1.856l0.184,1.812h0.091c0.565-0.582,1.176-1.075,1.834-1.479
|
<path display="inline" fill="#231916" d="M19.742,13.033h1.856l0.184,1.812h0.091c0.565-0.582,1.176-1.075,1.834-1.479
|
||||||
c0.655-0.405,1.42-0.607,2.292-0.607c1.313,0,2.278,0.39,2.888,1.168c0.611,0.778,0.917,1.903,0.917,3.37v6.942h-2.271v-6.646
|
c0.655-0.405,1.42-0.607,2.292-0.607c1.313,0,2.278,0.39,2.888,1.168c0.611,0.778,0.917,1.903,0.917,3.37v6.942h-2.271v-6.646
|
||||||
c0-0.976-0.174-1.7-0.525-2.165c-0.352-0.467-0.955-0.701-1.811-0.701c-0.597,0-1.131,0.151-1.605,0.447
|
c0-0.976-0.174-1.7-0.525-2.165c-0.352-0.467-0.955-0.701-1.811-0.701c-0.597,0-1.131,0.151-1.605,0.447
|
||||||
|
@ -36,28 +36,28 @@
|
||||||
c0.533-0.511,1.146-0.902,1.834-1.17c0.687-0.267,1.398-0.4,2.13-0.4c0.826,0,1.555,0.13,2.19,0.39
|
c0.533-0.511,1.146-0.902,1.834-1.17c0.687-0.267,1.398-0.4,2.13-0.4c0.826,0,1.555,0.13,2.19,0.39
|
||||||
c0.633,0.26,1.172,0.621,1.615,1.086c0.443,0.468,0.779,1.025,1.01,1.676c0.229,0.648,0.344,1.362,0.344,2.142
|
c0.633,0.26,1.172,0.621,1.615,1.086c0.443,0.468,0.779,1.025,1.01,1.676c0.229,0.648,0.344,1.362,0.344,2.142
|
||||||
c0,0.229-0.012,0.447-0.035,0.652c-0.022,0.208-0.049,0.38-0.08,0.516h-8.436c0.077,1.1,0.485,1.96,1.229,2.58
|
c0,0.229-0.012,0.447-0.035,0.652c-0.022,0.208-0.049,0.38-0.08,0.516h-8.436c0.077,1.1,0.485,1.96,1.229,2.58
|
||||||
c0.739,0.619,1.675,0.928,2.807,0.928c0.611,0,1.18-0.084,1.708-0.252c0.527-0.166,1.042-0.403,1.546-0.709l0.802,1.443
|
c0.739,0.619,1.675,0.928,2.807,0.928c0.611,0,1.18-0.084,1.708-0.252c0.527-0.166,1.042-0.402,1.546-0.709l0.802,1.443
|
||||||
c-0.578,0.367-1.23,0.676-1.959,0.928c-0.726,0.252-1.525,0.377-2.396,0.377c-0.842,0-1.631-0.131-2.371-0.399
|
c-0.578,0.367-1.23,0.676-1.959,0.928c-0.726,0.252-1.525,0.377-2.396,0.377c-0.842,0-1.631-0.131-2.371-0.398
|
||||||
c-0.742-0.267-1.387-0.65-1.938-1.156c-0.551-0.504-0.982-1.119-1.296-1.846C55.286,20.386,55.129,19.566,55.129,18.65z
|
c-0.742-0.268-1.387-0.65-1.938-1.156c-0.551-0.504-0.982-1.119-1.296-1.846C55.286,20.386,55.129,19.566,55.129,18.65z
|
||||||
M63.909,17.665c0-1.01-0.263-1.781-0.779-2.317c-0.521-0.534-1.262-0.8-2.225-0.8c-0.84,0-1.587,0.266-2.245,0.8
|
M63.909,17.665c0-1.01-0.263-1.781-0.779-2.317c-0.521-0.534-1.262-0.8-2.225-0.8c-0.84,0-1.587,0.266-2.245,0.8
|
||||||
c-0.658,0.536-1.062,1.307-1.214,2.317H63.909z"/>
|
c-0.658,0.536-1.062,1.307-1.214,2.317H63.909z"/>
|
||||||
<path display="inline" fill="#231916" d="M73.475,12.679l0.008,11.793h-2.27v-8.611h-4.256L73.475,12.679z M72.152,10.368
|
<path display="inline" fill="#231916" d="M73.475,12.679l0.008,11.793h-2.27v-8.612h-4.256L73.475,12.679z M72.152,10.368
|
||||||
c-0.488,0-0.894-0.146-1.215-0.435c-0.32-0.291-0.48-0.681-0.48-1.17c0-0.489,0.16-0.882,0.48-1.18
|
c-0.488,0-0.894-0.146-1.215-0.435c-0.32-0.291-0.48-0.681-0.48-1.17c0-0.489,0.16-0.882,0.48-1.18
|
||||||
c0.321-0.298,0.727-0.446,1.215-0.446s0.896,0.148,1.215,0.446c0.32,0.298,0.482,0.691,0.482,1.18c0,0.489-0.162,0.879-0.482,1.17
|
c0.321-0.298,0.727-0.446,1.215-0.446c0.488,0,0.896,0.148,1.215,0.446c0.32,0.298,0.482,0.691,0.482,1.18
|
||||||
C73.049,10.221,72.641,10.368,72.152,10.368z"/>
|
c0,0.489-0.162,0.879-0.482,1.17C73.049,10.221,72.641,10.368,72.152,10.368z"/>
|
||||||
<path display="inline" fill="#231916" d="M76.629,18.878c0-0.932,0.168-1.766,0.504-2.497c0.336-0.735,0.795-1.353,1.375-1.859
|
<path display="inline" fill="#231916" d="M76.629,18.878c0-0.932,0.168-1.766,0.504-2.497c0.336-0.735,0.795-1.353,1.375-1.859
|
||||||
c0.582-0.503,1.25-0.884,2.008-1.145c0.756-0.26,1.562-0.389,2.416-0.389c0.918,0,1.719,0.156,2.406,0.469
|
c0.582-0.503,1.25-0.884,2.008-1.145c0.756-0.26,1.562-0.389,2.416-0.389c0.918,0,1.719,0.156,2.406,0.469
|
||||||
c0.689,0.312,1.262,0.693,1.721,1.135l-1.1,1.443c-0.443-0.367-0.904-0.653-1.379-0.86c-0.471-0.206-0.984-0.309-1.535-0.309
|
c0.689,0.312,1.262,0.693,1.721,1.135l-1.1,1.443c-0.443-0.367-0.904-0.653-1.379-0.86c-0.471-0.206-0.984-0.309-1.535-0.309
|
||||||
c-0.594,0-1.143,0.095-1.65,0.287c-0.502,0.19-0.936,0.462-1.293,0.813c-0.358,0.352-0.639,0.776-0.838,1.272
|
c-0.594,0-1.143,0.095-1.65,0.287c-0.502,0.19-0.936,0.462-1.293,0.813c-0.357,0.352-0.639,0.776-0.838,1.272
|
||||||
c-0.197,0.495-0.297,1.042-0.297,1.638c0,0.595,0.096,1.144,0.287,1.64c0.189,0.496,0.465,0.92,0.824,1.273
|
c-0.197,0.495-0.297,1.042-0.297,1.638c0,0.595,0.096,1.144,0.287,1.64c0.189,0.496,0.465,0.92,0.824,1.273
|
||||||
c0.359,0.35,0.785,0.623,1.273,0.812c0.487,0.188,1.028,0.284,1.627,0.284c0.686,0,1.307-0.129,1.856-0.387
|
c0.359,0.35,0.785,0.623,1.273,0.812c0.486,0.188,1.027,0.283,1.627,0.283c0.686,0,1.307-0.129,1.855-0.387
|
||||||
c0.549-0.263,1.043-0.574,1.488-0.94l0.965,1.467c-0.644,0.551-1.347,0.975-2.111,1.272c-0.764,0.298-1.559,0.445-2.383,0.445
|
c0.549-0.264,1.043-0.574,1.488-0.939l0.965,1.467c-0.645,0.551-1.348,0.975-2.111,1.271c-0.764,0.298-1.559,0.445-2.383,0.445
|
||||||
c-0.871,0-1.687-0.129-2.44-0.39c-0.756-0.26-1.41-0.643-1.961-1.146c-0.55-0.506-0.98-1.121-1.293-1.847
|
c-0.871,0-1.688-0.129-2.439-0.391c-0.756-0.26-1.41-0.643-1.961-1.146c-0.55-0.506-0.98-1.121-1.293-1.847
|
||||||
C76.785,20.641,76.629,19.811,76.629,18.878z"/>
|
C76.785,20.641,76.629,19.811,76.629,18.878z"/>
|
||||||
<path display="inline" fill="#231916" d="M87.4,8.285l4.752-2.356v6.601l-0.139,2.521c0.565-0.58,1.178-1.07,1.836-1.467
|
<path display="inline" fill="#231916" d="M87.4,8.285l4.752-2.356v6.601l-0.139,2.521c0.564-0.58,1.178-1.07,1.836-1.467
|
||||||
c0.655-0.396,1.42-0.595,2.293-0.595c1.312,0,2.274,0.389,2.885,1.168c0.611,0.78,0.918,1.903,0.918,3.371v6.945h-2.271v-6.648
|
c0.654-0.396,1.42-0.595,2.293-0.595c1.312,0,2.273,0.389,2.885,1.168c0.611,0.78,0.918,1.903,0.918,3.371v6.945h-2.271v-6.647
|
||||||
c0-0.978-0.176-1.7-0.526-2.165c-0.353-0.466-0.953-0.7-1.812-0.7c-0.596,0-1.131,0.149-1.604,0.448
|
c0-0.978-0.176-1.7-0.525-2.165c-0.354-0.466-0.953-0.7-1.812-0.7c-0.596,0-1.131,0.149-1.604,0.448
|
||||||
c-0.475,0.298-1.002,0.745-1.582,1.342v7.726h-2.27L89.836,8.189L87.4,8.285z"/>
|
c-0.476,0.298-1.002,0.745-1.582,1.342v7.727H89.88L89.836,8.189L87.4,8.285z"/>
|
||||||
<g display="inline">
|
<g display="inline">
|
||||||
<polygon fill="#010000" points="100.371,3.218 99.607,4.815 109.109,4.855 109.873,3.228 "/>
|
<polygon fill="#010000" points="100.371,3.218 99.607,4.815 109.109,4.855 109.873,3.228 "/>
|
||||||
<polygon fill="#010000" points="99.619,6.703 98.83,8.378 108.346,8.397 109.109,6.74 "/>
|
<polygon fill="#010000" points="99.619,6.703 98.83,8.378 108.346,8.397 109.109,6.74 "/>
|
||||||
|
@ -65,117 +65,120 @@
|
||||||
</g>
|
</g>
|
||||||
<g display="inline">
|
<g display="inline">
|
||||||
<path fill="#231916" d="M49.446,20.596c0,0.754,0.188,1.297,0.566,1.631c0.376,0.33,0.866,0.498,1.472,0.498
|
<path fill="#231916" d="M49.446,20.596c0,0.754,0.188,1.297,0.566,1.631c0.376,0.33,0.866,0.498,1.472,0.498
|
||||||
c0.295,0,0.599-0.037,0.909-0.111s0.658-0.193,1.042-0.355l0.532,1.643c-0.252,0.086-0.492,0.166-0.721,0.242
|
c0.295,0,0.599-0.037,0.909-0.11c0.31-0.074,0.658-0.193,1.042-0.355l0.532,1.644c-0.252,0.086-0.492,0.166-0.721,0.242
|
||||||
c-0.231,0.074-0.461,0.135-0.698,0.187c-0.237,0.055-0.483,0.098-0.741,0.135c-0.26,0.035-0.543,0.058-0.853,0.058
|
c-0.231,0.073-0.461,0.135-0.698,0.187c-0.237,0.055-0.483,0.099-0.741,0.135c-0.26,0.035-0.543,0.058-0.853,0.058
|
||||||
c-1.212,0-2.131-0.349-2.76-1.043c-0.627-0.693-0.941-1.697-0.941-3.014V5.711h-3.544l5.737-4.043"/>
|
c-1.212,0-2.131-0.349-2.76-1.043c-0.627-0.692-0.941-1.696-0.941-3.014V5.711h-3.544l5.737-4.043"/>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
<path fill="#29427A" d="M12.927,23.013v-1.46h-0.045c-0.359,0.569-0.873,1.007-1.539,1.313s-1.374,0.461-2.122,0.461
|
<path fill="#29427A" d="M12.927,23.014v-1.461h-0.045c-0.359,0.569-0.873,1.008-1.539,1.313s-1.374,0.461-2.122,0.461
|
||||||
c-0.839,0-1.587-0.165-2.246-0.494c-0.659-0.329-1.216-0.768-1.673-1.313c-0.457-0.547-0.805-1.18-1.044-1.898
|
c-0.839,0-1.587-0.165-2.246-0.494c-0.659-0.329-1.216-0.769-1.673-1.313c-0.457-0.547-0.805-1.18-1.044-1.897
|
||||||
c-0.24-0.718-0.359-1.467-0.359-2.245s0.124-1.523,0.371-2.234s0.599-1.337,1.055-1.875c0.457-0.539,1.011-0.966,1.662-1.28
|
c-0.24-0.718-0.359-1.467-0.359-2.245c0-0.778,0.124-1.523,0.371-2.234s0.599-1.337,1.055-1.875c0.457-0.539,1.011-0.966,1.662-1.28
|
||||||
c0.651-0.314,1.381-0.472,2.189-0.472c0.823,0,1.52,0.157,2.089,0.472c0.568,0.314,1.011,0.659,1.325,1.033h0.045V6.035h3.683
|
c0.651-0.314,1.381-0.472,2.189-0.472c0.823,0,1.52,0.157,2.089,0.472c0.568,0.314,1.011,0.659,1.325,1.033h0.045V6.035h3.683
|
||||||
v16.978H12.927z M12.792,17.398c0-0.359-0.064-0.711-0.191-1.056c-0.128-0.345-0.307-0.651-0.54-0.921
|
v16.979H12.927z M12.792,17.398c0-0.359-0.064-0.711-0.191-1.056c-0.128-0.345-0.307-0.651-0.54-0.921
|
||||||
c-0.232-0.27-0.513-0.486-0.842-0.651c-0.329-0.164-0.704-0.247-1.123-0.247c-0.434,0-0.816,0.083-1.145,0.247
|
c-0.232-0.27-0.513-0.486-0.842-0.651c-0.329-0.164-0.704-0.247-1.123-0.247c-0.434,0-0.816,0.083-1.145,0.247
|
||||||
c-0.33,0.165-0.606,0.379-0.831,0.64c-0.225,0.263-0.393,0.565-0.505,0.91s-0.168,0.696-0.168,1.056
|
c-0.33,0.165-0.606,0.379-0.831,0.64c-0.225,0.263-0.393,0.565-0.505,0.91c-0.112,0.345-0.168,0.696-0.168,1.056
|
||||||
c0,0.358,0.056,0.715,0.168,1.066s0.281,0.663,0.505,0.932c0.225,0.27,0.501,0.487,0.831,0.651c0.329,0.165,0.711,0.247,1.145,0.247
|
c0,0.358,0.056,0.715,0.168,1.066c0.112,0.351,0.281,0.663,0.505,0.932c0.225,0.27,0.501,0.487,0.831,0.651
|
||||||
c0.419,0,0.793-0.082,1.123-0.247c0.33-0.164,0.61-0.382,0.842-0.651c0.232-0.269,0.412-0.575,0.54-0.921
|
c0.329,0.165,0.711,0.247,1.145,0.247c0.419,0,0.793-0.082,1.123-0.247c0.33-0.164,0.61-0.382,0.842-0.651s0.412-0.575,0.54-0.921
|
||||||
C12.728,18.109,12.792,17.758,12.792,17.398z"/>
|
C12.728,18.109,12.792,17.758,12.792,17.398z"/>
|
||||||
<path fill="#29427A" d="M19.08,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.944,0,1.741,0.116,2.392,0.348
|
<path fill="#29427A" d="M19.08,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.944,0,1.741,0.116,2.392,0.348
|
||||||
c0.651,0.232,1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.187,0.74,0.281,1.62,0.281,2.639v5.637H25.84v-1.19
|
s1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.187,0.74,0.281,1.62,0.281,2.639v5.637H25.84v-1.189h-0.067
|
||||||
h-0.067c-0.285,0.464-0.715,0.823-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.061-1.393-0.18
|
c-0.285,0.464-0.715,0.822-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.062-1.393-0.181
|
||||||
c-0.479-0.12-0.917-0.314-1.313-0.584c-0.397-0.27-0.723-0.629-0.977-1.078c-0.255-0.449-0.382-1.003-0.382-1.662
|
c-0.479-0.119-0.917-0.313-1.313-0.584c-0.397-0.27-0.723-0.629-0.977-1.078c-0.255-0.448-0.382-1.002-0.382-1.662
|
||||||
c0-0.809,0.221-1.459,0.663-1.953s1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539s1.685-0.135,2.493-0.135v-0.18
|
c0-0.809,0.221-1.459,0.663-1.953c0.442-0.494,1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539
|
||||||
c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393c-0.524,0-1.03,0.112-1.516,0.337
|
c0.853-0.09,1.685-0.135,2.493-0.135v-0.18c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393
|
||||||
c-0.487,0.225-0.902,0.494-1.247,0.809L19.08,13.355z M25.84,18.139h-0.472c-0.404,0-0.812,0.02-1.224,0.057
|
c-0.524,0-1.03,0.112-1.516,0.337c-0.487,0.225-0.902,0.494-1.247,0.809L19.08,13.355z M25.84,18.139h-0.472
|
||||||
c-0.412,0.037-0.779,0.108-1.101,0.213c-0.322,0.105-0.588,0.259-0.797,0.461c-0.21,0.202-0.314,0.468-0.314,0.797
|
c-0.404,0-0.812,0.02-1.224,0.057c-0.412,0.037-0.779,0.108-1.101,0.213c-0.322,0.105-0.588,0.259-0.797,0.461
|
||||||
c0,0.21,0.049,0.39,0.146,0.539c0.097,0.15,0.221,0.27,0.371,0.359c0.149,0.09,0.322,0.153,0.517,0.191
|
c-0.21,0.202-0.314,0.468-0.314,0.797c0,0.21,0.049,0.39,0.146,0.539c0.097,0.15,0.221,0.27,0.371,0.358
|
||||||
c0.194,0.037,0.382,0.056,0.562,0.056c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.139z"/>
|
c0.149,0.091,0.322,0.153,0.517,0.191c0.194,0.037,0.382,0.057,0.562,0.057c0.749,0,1.321-0.205,1.718-0.618
|
||||||
|
c0.396-0.412,0.595-0.97,0.595-1.673L25.84,18.139L25.84,18.139z"/>
|
||||||
<path fill="#29427A" d="M36.067,14.568v4.283c0,0.526,0.101,0.921,0.303,1.184c0.202,0.264,0.565,0.395,1.089,0.395
|
<path fill="#29427A" d="M36.067,14.568v4.283c0,0.526,0.101,0.921,0.303,1.184c0.202,0.264,0.565,0.395,1.089,0.395
|
||||||
c0.18,0,0.371-0.015,0.573-0.045c0.202-0.029,0.371-0.074,0.505-0.135l0.045,2.695c-0.255,0.09-0.577,0.169-0.966,0.235
|
c0.18,0,0.371-0.015,0.573-0.045c0.202-0.029,0.371-0.074,0.505-0.135l0.045,2.695c-0.255,0.09-0.577,0.169-0.966,0.234
|
||||||
c-0.389,0.067-0.779,0.102-1.168,0.102c-0.749,0-1.377-0.094-1.886-0.281c-0.509-0.188-0.917-0.458-1.224-0.811
|
c-0.389,0.067-0.779,0.103-1.168,0.103c-0.749,0-1.377-0.095-1.886-0.281c-0.509-0.188-0.917-0.458-1.224-0.812
|
||||||
c-0.307-0.354-0.528-0.773-0.662-1.261c-0.135-0.488-0.202-1.032-0.202-1.633v-4.729h-1.797v-2.74h1.774V8.887h3.616v2.942h2.627
|
s-0.528-0.772-0.662-1.26c-0.135-0.489-0.202-1.033-0.202-1.634v-4.729h-1.797v-2.74h1.774v-2.94h3.616v2.942h2.627v2.74
|
||||||
v2.74H36.067z"/>
|
L36.067,14.568L36.067,14.568z"/>
|
||||||
<path fill="#29427A" d="M40.957,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.943,0,1.741,0.116,2.392,0.348
|
<path fill="#29427A" d="M40.957,13.355c0.659-0.628,1.426-1.1,2.302-1.415s1.771-0.472,2.684-0.472c0.943,0,1.741,0.116,2.392,0.348
|
||||||
c0.651,0.232,1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.188,0.74,0.281,1.62,0.281,2.639v5.637h-3.369v-1.19
|
s1.179,0.591,1.583,1.078c0.404,0.486,0.7,1.101,0.887,1.842c0.188,0.74,0.281,1.62,0.281,2.639v5.637h-3.369v-1.189H47.65
|
||||||
h-0.067c-0.285,0.464-0.715,0.823-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.061-1.392-0.18
|
c-0.285,0.464-0.715,0.822-1.291,1.078c-0.577,0.254-1.202,0.382-1.875,0.382c-0.449,0-0.913-0.062-1.392-0.181
|
||||||
c-0.479-0.12-0.917-0.314-1.314-0.584c-0.397-0.27-0.723-0.629-0.977-1.078s-0.382-1.003-0.382-1.662
|
s-0.917-0.313-1.314-0.584c-0.397-0.27-0.723-0.629-0.977-1.078c-0.254-0.448-0.382-1.002-0.382-1.662
|
||||||
c0-0.809,0.221-1.459,0.663-1.953s1.011-0.876,1.707-1.146s1.471-0.449,2.324-0.539s1.685-0.135,2.493-0.135v-0.18
|
c0-0.809,0.221-1.459,0.663-1.953c0.442-0.494,1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539
|
||||||
c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393c-0.524,0-1.03,0.112-1.516,0.337s-0.902,0.494-1.247,0.809
|
c0.853-0.09,1.685-0.135,2.493-0.135v-0.18c0-0.554-0.195-0.962-0.584-1.225c-0.389-0.262-0.868-0.393-1.437-0.393
|
||||||
L40.957,13.355z M47.717,18.139h-0.471c-0.404,0-0.812,0.02-1.224,0.057c-0.412,0.037-0.779,0.108-1.101,0.213
|
c-0.524,0-1.03,0.112-1.516,0.337c-0.486,0.225-0.902,0.494-1.247,0.809L40.957,13.355z M47.717,18.139h-0.471
|
||||||
c-0.322,0.105-0.587,0.259-0.797,0.461c-0.209,0.202-0.314,0.468-0.314,0.797c0,0.21,0.049,0.39,0.146,0.539
|
c-0.404,0-0.812,0.02-1.224,0.057c-0.412,0.037-0.779,0.108-1.101,0.213c-0.322,0.105-0.587,0.259-0.797,0.461
|
||||||
c0.097,0.15,0.22,0.27,0.37,0.359c0.149,0.09,0.322,0.153,0.517,0.191c0.194,0.037,0.382,0.056,0.562,0.056
|
c-0.209,0.202-0.314,0.468-0.314,0.797c0,0.21,0.049,0.39,0.146,0.539c0.097,0.15,0.22,0.27,0.37,0.358
|
||||||
c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.139z"/>
|
c0.149,0.091,0.322,0.153,0.517,0.191c0.194,0.037,0.382,0.057,0.562,0.057c0.749,0,1.321-0.205,1.718-0.618
|
||||||
|
c0.396-0.412,0.595-0.97,0.595-1.673L47.717,18.139L47.717,18.139z"/>
|
||||||
<path fill="#5A74AF" d="M61.874,15.197c-0.375-0.389-0.768-0.685-1.179-0.887c-0.412-0.202-0.902-0.304-1.471-0.304
|
<path fill="#5A74AF" d="M61.874,15.197c-0.375-0.389-0.768-0.685-1.179-0.887c-0.412-0.202-0.902-0.304-1.471-0.304
|
||||||
c-0.554,0-1.037,0.102-1.449,0.304c-0.412,0.202-0.756,0.479-1.033,0.831s-0.487,0.756-0.629,1.212
|
c-0.554,0-1.037,0.102-1.449,0.304s-0.756,0.479-1.033,0.831c-0.277,0.352-0.487,0.756-0.629,1.212
|
||||||
c-0.142,0.457-0.213,0.933-0.213,1.427s0.082,0.962,0.247,1.403c0.165,0.441,0.396,0.827,0.696,1.156
|
C55.971,16.81,55.9,17.286,55.9,17.78c0,0.494,0.082,0.962,0.247,1.403s0.396,0.827,0.696,1.156c0.3,0.33,0.659,0.588,1.078,0.775
|
||||||
c0.3,0.33,0.659,0.588,1.078,0.775c0.419,0.188,0.891,0.28,1.415,0.28c0.568,0,1.055-0.101,1.459-0.303s0.778-0.498,1.123-0.888
|
s0.891,0.28,1.415,0.28c0.568,0,1.055-0.102,1.459-0.304c0.404-0.202,0.778-0.498,1.123-0.888l1.438,1.438
|
||||||
l1.438,1.438c-0.524,0.584-1.134,1.003-1.831,1.258c-0.696,0.254-1.434,0.382-2.212,0.382c-0.823,0-1.576-0.135-2.257-0.404
|
c-0.524,0.584-1.134,1.004-1.831,1.258c-0.696,0.254-1.434,0.383-2.212,0.383c-0.823,0-1.576-0.135-2.257-0.404
|
||||||
s-1.269-0.647-1.763-1.135c-0.494-0.485-0.876-1.07-1.146-1.751c-0.27-0.682-0.404-1.434-0.404-2.258
|
c-0.681-0.27-1.269-0.646-1.763-1.135c-0.494-0.485-0.876-1.07-1.146-1.751c-0.27-0.682-0.404-1.434-0.404-2.258
|
||||||
c0-0.822,0.135-1.579,0.404-2.268s0.647-1.28,1.134-1.774c0.486-0.494,1.07-0.879,1.751-1.156s1.441-0.416,2.279-0.416
|
c0-0.822,0.135-1.579,0.404-2.268s0.647-1.28,1.134-1.774c0.486-0.494,1.07-0.879,1.751-1.156c0.681-0.277,1.441-0.416,2.279-0.416
|
||||||
c0.779,0,1.523,0.139,2.235,0.416c0.711,0.277,1.329,0.7,1.853,1.269L61.874,15.197z"/>
|
c0.779,0,1.523,0.139,2.235,0.416c0.711,0.277,1.329,0.7,1.853,1.269L61.874,15.197z"/>
|
||||||
<path fill="#5A74AF" d="M66.612,18.432c0,0.464,0.101,0.887,0.304,1.269c0.201,0.382,0.467,0.707,0.797,0.977
|
<path fill="#5A74AF" d="M66.612,18.432c0,0.464,0.101,0.887,0.304,1.269c0.201,0.382,0.467,0.707,0.797,0.977
|
||||||
c0.329,0.27,0.711,0.479,1.145,0.629c0.435,0.15,0.884,0.225,1.348,0.225c0.629,0,1.176-0.146,1.64-0.438
|
c0.329,0.271,0.711,0.479,1.145,0.629c0.435,0.15,0.884,0.226,1.348,0.226c0.629,0,1.176-0.146,1.64-0.438
|
||||||
c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.452-2.695,2.179-4.717,2.179c-0.838,0-1.598-0.143-2.279-0.427
|
c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.451-2.695,2.179-4.717,2.179c-0.838,0-1.598-0.144-2.279-0.427
|
||||||
s-1.258-0.678-1.729-1.179c-0.473-0.502-0.836-1.093-1.09-1.774s-0.382-1.418-0.382-2.212s0.139-1.531,0.416-2.213
|
c-0.681-0.284-1.258-0.678-1.729-1.18c-0.473-0.502-0.836-1.093-1.09-1.774c-0.254-0.681-0.382-1.418-0.382-2.212
|
||||||
c0.276-0.681,0.658-1.271,1.146-1.773c0.486-0.501,1.066-0.895,1.74-1.18c0.674-0.284,1.406-0.426,2.201-0.426
|
s0.139-1.531,0.416-2.213c0.276-0.681,0.658-1.271,1.146-1.773c0.486-0.501,1.066-0.895,1.74-1.18
|
||||||
c0.942,0,1.74,0.165,2.391,0.494c0.652,0.33,1.187,0.76,1.605,1.292c0.42,0.531,0.723,1.13,0.91,1.796
|
c0.674-0.284,1.406-0.426,2.201-0.426c0.942,0,1.74,0.165,2.391,0.494c0.652,0.33,1.187,0.76,1.605,1.292
|
||||||
c0.188,0.667,0.281,1.345,0.281,2.033v0.719H66.612z M72.99,16.814c-0.016-0.449-0.086-0.861-0.213-1.235
|
c0.42,0.531,0.723,1.13,0.91,1.796c0.188,0.667,0.281,1.345,0.281,2.033v0.719h-8.534V18.432z M72.99,16.814
|
||||||
c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.573-0.493-0.954-0.65c-0.383-0.157-0.828-0.236-1.337-0.236
|
c-0.016-0.449-0.086-0.861-0.213-1.235c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.573-0.493-0.954-0.65
|
||||||
c-0.493,0-0.946,0.094-1.358,0.281s-0.76,0.43-1.044,0.729s-0.505,0.633-0.663,0.999c-0.156,0.367-0.235,0.73-0.235,1.09H72.99z"/>
|
c-0.383-0.157-0.828-0.236-1.337-0.236c-0.493,0-0.946,0.094-1.358,0.281c-0.412,0.187-0.76,0.43-1.044,0.729
|
||||||
|
c-0.284,0.299-0.505,0.633-0.663,0.999c-0.156,0.367-0.235,0.73-0.235,1.09H72.99z"/>
|
||||||
<path fill="#5A74AF" d="M77.572,12.368h2.021v1.639h0.046c0.254-0.568,0.695-1.029,1.324-1.381s1.355-0.528,2.178-0.528
|
<path fill="#5A74AF" d="M77.572,12.368h2.021v1.639h0.046c0.254-0.568,0.695-1.029,1.324-1.381s1.355-0.528,2.178-0.528
|
||||||
c0.51,0,1,0.079,1.472,0.236s0.883,0.4,1.235,0.73c0.352,0.329,0.633,0.752,0.842,1.269c0.209,0.516,0.314,1.126,0.314,1.83v6.85
|
c0.51,0,1,0.079,1.473,0.236c0.472,0.157,0.883,0.4,1.234,0.73c0.353,0.329,0.633,0.752,0.842,1.269
|
||||||
h-2.021v-6.288c0-0.494-0.066-0.917-0.201-1.269c-0.135-0.353-0.314-0.637-0.539-0.854c-0.225-0.216-0.483-0.373-0.775-0.471
|
c0.209,0.516,0.314,1.126,0.314,1.83v6.851h-2.021v-6.289c0-0.494-0.065-0.917-0.2-1.269c-0.136-0.353-0.314-0.637-0.539-0.854
|
||||||
s-0.596-0.146-0.91-0.146c-0.418,0-0.808,0.067-1.167,0.202s-0.674,0.349-0.943,0.641c-0.27,0.291-0.479,0.662-0.629,1.111
|
c-0.226-0.216-0.483-0.373-0.775-0.471c-0.292-0.098-0.596-0.146-0.909-0.146c-0.418,0-0.809,0.067-1.168,0.202
|
||||||
s-0.225,0.98-0.225,1.595v5.479h-2.021V12.368z"/>
|
c-0.358,0.135-0.674,0.349-0.943,0.641c-0.27,0.291-0.479,0.662-0.629,1.111c-0.149,0.449-0.225,0.98-0.225,1.595v5.479h-2.021
|
||||||
<path fill="#5A74AF" d="M95.762,14.119h-2.896v4.829c0,0.299,0.008,0.595,0.022,0.887s0.071,0.554,0.169,0.786
|
L77.572,12.368L77.572,12.368z"/>
|
||||||
c0.097,0.232,0.246,0.419,0.449,0.561c0.201,0.144,0.497,0.214,0.887,0.214c0.239,0,0.486-0.022,0.741-0.067
|
<path fill="#5A74AF" d="M95.762,14.119h-2.896v4.829c0,0.299,0.008,0.595,0.022,0.887c0.014,0.292,0.07,0.554,0.168,0.786
|
||||||
s0.486-0.127,0.696-0.247v1.842c-0.24,0.135-0.551,0.229-0.932,0.28c-0.383,0.053-0.678,0.079-0.888,0.079
|
c0.098,0.232,0.246,0.419,0.449,0.561c0.201,0.145,0.497,0.215,0.887,0.215c0.239,0,0.486-0.022,0.741-0.067
|
||||||
c-0.778,0-1.382-0.109-1.808-0.325c-0.427-0.218-0.741-0.498-0.943-0.843s-0.322-0.73-0.359-1.156
|
s0.486-0.127,0.696-0.247v1.842c-0.24,0.135-0.551,0.229-0.932,0.28c-0.383,0.053-0.678,0.079-0.889,0.079
|
||||||
c-0.037-0.427-0.057-0.857-0.057-1.292v-5.547h-2.336v-1.751h2.336V9.381h2.021v2.987h2.896V14.119z"/>
|
c-0.777,0-1.382-0.109-1.808-0.325c-0.427-0.218-0.741-0.498-0.943-0.843c-0.202-0.346-0.321-0.73-0.358-1.156
|
||||||
<path fill="#5A74AF" d="M99.895,18.432c0,0.464,0.102,0.887,0.304,1.269s0.467,0.707,0.797,0.977
|
c-0.037-0.427-0.058-0.857-0.058-1.292V14.12h-2.336v-1.751h2.336V9.381h2.021v2.987h2.896v1.751H95.762z"/>
|
||||||
c0.329,0.27,0.711,0.479,1.146,0.629c0.434,0.15,0.883,0.225,1.348,0.225c0.628,0,1.175-0.146,1.639-0.438
|
<path fill="#5A74AF" d="M99.895,18.432c0,0.464,0.103,0.887,0.305,1.269c0.201,0.382,0.467,0.707,0.797,0.977
|
||||||
c0.464-0.292,0.891-0.678,1.28-1.157l1.527,1.168c-1.123,1.452-2.695,2.179-4.716,2.179c-0.839,0-1.599-0.143-2.28-0.427
|
c0.329,0.271,0.711,0.479,1.146,0.629c0.434,0.15,0.883,0.226,1.348,0.226c0.628,0,1.175-0.146,1.639-0.438s0.891-0.678,1.28-1.157
|
||||||
c-0.681-0.284-1.257-0.678-1.729-1.179c-0.471-0.502-0.834-1.093-1.088-1.774c-0.256-0.682-0.383-1.418-0.383-2.212
|
l1.526,1.168c-1.123,1.451-2.694,2.179-4.715,2.179c-0.84,0-1.6-0.144-2.281-0.427c-0.681-0.284-1.256-0.678-1.729-1.18
|
||||||
s0.139-1.531,0.416-2.213c0.276-0.681,0.658-1.271,1.145-1.773c0.487-0.501,1.067-0.895,1.741-1.18
|
c-0.471-0.502-0.834-1.093-1.088-1.774c-0.256-0.682-0.383-1.418-0.383-2.212s0.139-1.531,0.416-2.213
|
||||||
c0.674-0.284,1.407-0.426,2.201-0.426c0.942,0,1.74,0.165,2.392,0.494c0.65,0.33,1.186,0.76,1.605,1.292
|
c0.275-0.681,0.658-1.271,1.145-1.773c0.487-0.501,1.067-0.895,1.741-1.18c0.674-0.284,1.407-0.426,2.201-0.426
|
||||||
c0.419,0.531,0.723,1.13,0.909,1.796c0.188,0.667,0.281,1.345,0.281,2.033v0.719H99.895z M106.272,16.814
|
c0.942,0,1.739,0.165,2.392,0.494c0.65,0.33,1.186,0.76,1.605,1.292c0.419,0.531,0.723,1.13,0.908,1.796
|
||||||
c-0.016-0.449-0.086-0.861-0.213-1.235c-0.128-0.374-0.318-0.7-0.573-0.978c-0.255-0.276-0.572-0.493-0.954-0.65
|
c0.188,0.667,0.281,1.345,0.281,2.033v0.719h-8.535V18.432z M106.271,16.814c-0.016-0.449-0.086-0.861-0.213-1.235
|
||||||
s-0.828-0.236-1.337-0.236c-0.493,0-0.946,0.094-1.358,0.281c-0.411,0.188-0.76,0.43-1.044,0.729
|
s-0.317-0.7-0.572-0.978c-0.256-0.276-0.572-0.493-0.954-0.65c-0.382-0.157-0.828-0.236-1.337-0.236
|
||||||
c-0.285,0.3-0.506,0.633-0.663,0.999c-0.157,0.367-0.235,0.73-0.235,1.09H106.272z"/>
|
c-0.493,0-0.946,0.094-1.358,0.281c-0.411,0.188-0.76,0.43-1.044,0.729c-0.285,0.3-0.506,0.633-0.663,0.999
|
||||||
<path fill="#5A74AF" d="M110.854,12.368h2.021v1.639h0.045c0.135-0.284,0.314-0.542,0.539-0.774
|
c-0.157,0.367-0.235,0.73-0.235,1.09H106.271z"/>
|
||||||
c0.225-0.232,0.475-0.431,0.752-0.595s0.58-0.295,0.909-0.393c0.33-0.097,0.659-0.146,0.988-0.146c0.33,0,0.629,0.045,0.899,0.135
|
<path fill="#5A74AF" d="M110.854,12.368h2.021v1.639h0.045c0.135-0.284,0.314-0.542,0.539-0.774s0.475-0.431,0.752-0.595
|
||||||
l-0.091,2.178c-0.165-0.045-0.329-0.082-0.494-0.112c-0.165-0.029-0.329-0.045-0.493-0.045c-0.988,0-1.745,0.277-2.269,0.831
|
c0.277-0.164,0.58-0.295,0.909-0.393c0.33-0.097,0.659-0.146,0.987-0.146c0.33,0,0.629,0.045,0.899,0.135l-0.091,2.178
|
||||||
c-0.524,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368z"/>
|
c-0.165-0.045-0.329-0.082-0.494-0.112c-0.165-0.029-0.329-0.045-0.492-0.045c-0.988,0-1.746,0.277-2.27,0.831
|
||||||
<path fill="#5E6060" d="M120.156,5.513h1.368v11.493h-1.368V5.513z"/>
|
c-0.523,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368L110.854,12.368z"/>
|
||||||
<path fill="#5E6060" d="M123.485,7.215c0-0.274,0.099-0.509,0.297-0.707c0.197-0.198,0.433-0.296,0.707-0.296
|
<path fill="#5E6060" d="M120.156,5.513h1.367v11.493h-1.367V5.513z"/>
|
||||||
c0.273,0,0.509,0.099,0.707,0.296c0.197,0.198,0.296,0.433,0.296,0.707c0,0.273-0.099,0.509-0.296,0.707
|
<path fill="#5E6060" d="M123.484,7.215c0-0.274,0.1-0.509,0.298-0.707c0.196-0.198,0.433-0.296,0.706-0.296s0.51,0.099,0.707,0.296
|
||||||
c-0.198,0.198-0.434,0.297-0.707,0.297c-0.274,0-0.51-0.099-0.707-0.297C123.584,7.725,123.485,7.489,123.485,7.215z M123.805,9.799
|
c0.197,0.198,0.297,0.433,0.297,0.707c0,0.273-0.1,0.509-0.297,0.707c-0.197,0.198-0.434,0.297-0.707,0.297s-0.51-0.099-0.706-0.297
|
||||||
h1.368v7.207h-1.368V9.799z"/>
|
C123.584,7.725,123.484,7.489,123.484,7.215z M123.805,9.799h1.368v7.207h-1.368V9.799z"/>
|
||||||
<path fill="#5E6060" d="M134.567,16.944c0,0.548-0.094,1.047-0.281,1.498c-0.188,0.45-0.453,0.841-0.798,1.17
|
<path fill="#5E6060" d="M134.566,16.944c0,0.548-0.094,1.047-0.28,1.498c-0.188,0.45-0.453,0.841-0.798,1.17
|
||||||
s-0.76,0.586-1.246,0.768c-0.487,0.183-1.024,0.273-1.611,0.273c-0.689,0-1.32-0.096-1.894-0.288
|
c-0.346,0.329-0.76,0.586-1.246,0.768c-0.487,0.183-1.024,0.272-1.611,0.272c-0.689,0-1.32-0.096-1.895-0.287
|
||||||
c-0.572-0.193-1.117-0.527-1.634-1.003l0.927-1.156c0.355,0.386,0.74,0.677,1.156,0.874c0.415,0.198,0.887,0.297,1.413,0.297
|
c-0.571-0.193-1.116-0.527-1.633-1.003l0.926-1.156c0.355,0.386,0.74,0.677,1.156,0.874c0.416,0.198,0.887,0.297,1.414,0.297
|
||||||
c0.507,0,0.928-0.074,1.262-0.221c0.335-0.146,0.601-0.337,0.799-0.569c0.197-0.234,0.337-0.5,0.418-0.799s0.121-0.601,0.121-0.904
|
c0.506,0,0.928-0.074,1.262-0.221s0.601-0.337,0.799-0.569c0.197-0.234,0.337-0.5,0.418-0.799s0.121-0.601,0.121-0.904V15.82h-0.045
|
||||||
v-1.064h-0.045c-0.264,0.436-0.621,0.758-1.072,0.966s-0.925,0.312-1.421,0.312c-0.527,0-1.017-0.094-1.468-0.281
|
c-0.264,0.436-0.621,0.758-1.072,0.966s-0.926,0.312-1.421,0.312c-0.527,0-1.017-0.094-1.468-0.281s-0.838-0.446-1.164-0.775
|
||||||
s-0.838-0.446-1.163-0.775c-0.324-0.329-0.577-0.72-0.76-1.171c-0.183-0.45-0.273-0.939-0.273-1.467
|
c-0.323-0.329-0.576-0.72-0.76-1.171c-0.183-0.45-0.272-0.939-0.272-1.467c0-0.527,0.086-1.021,0.259-1.482
|
||||||
c0-0.527,0.086-1.021,0.259-1.482c0.172-0.461,0.418-0.864,0.737-1.208c0.319-0.345,0.704-0.613,1.155-0.806
|
c0.172-0.461,0.418-0.864,0.737-1.208c0.319-0.345,0.704-0.613,1.155-0.806c0.449-0.192,0.955-0.289,1.513-0.289
|
||||||
c0.45-0.192,0.955-0.289,1.513-0.289c0.486,0,0.96,0.106,1.421,0.319s0.823,0.512,1.087,0.896h0.03V9.799h1.368V16.944z
|
c0.485,0,0.96,0.106,1.421,0.319s0.822,0.512,1.087,0.896h0.03V9.799h1.367V16.944L134.566,16.944z M130.828,10.894
|
||||||
M130.828,10.894c-0.365,0-0.694,0.063-0.988,0.19c-0.294,0.126-0.542,0.299-0.745,0.517c-0.202,0.218-0.359,0.481-0.471,0.791
|
c-0.365,0-0.694,0.063-0.988,0.19c-0.294,0.126-0.542,0.299-0.744,0.517c-0.203,0.218-0.359,0.481-0.472,0.791
|
||||||
c-0.112,0.309-0.167,0.646-0.167,1.011c0,0.729,0.213,1.315,0.638,1.756c0.426,0.44,1.004,0.661,1.733,0.661
|
c-0.112,0.309-0.167,0.646-0.167,1.011c0,0.729,0.213,1.315,0.639,1.756c0.426,0.44,1.004,0.661,1.732,0.661
|
||||||
s1.307-0.221,1.733-0.661c0.426-0.44,0.638-1.026,0.638-1.756c0-0.365-0.056-0.702-0.167-1.011s-0.269-0.572-0.471-0.791
|
s1.307-0.221,1.732-0.661c0.426-0.44,0.639-1.026,0.639-1.756c0-0.365-0.057-0.702-0.167-1.011
|
||||||
c-0.203-0.218-0.451-0.39-0.745-0.517C131.522,10.958,131.193,10.894,130.828,10.894z"/>
|
c-0.111-0.309-0.269-0.572-0.472-0.791c-0.203-0.218-0.451-0.39-0.744-0.517C131.521,10.958,131.193,10.894,130.828,10.894z"/>
|
||||||
<path fill="#5E6060" d="M136.29,5.513h1.368v5.397h0.03c0.172-0.385,0.471-0.697,0.896-0.935s0.917-0.357,1.475-0.357
|
<path fill="#5E6060" d="M136.29,5.513h1.368v5.397h0.029c0.172-0.385,0.472-0.697,0.896-0.935c0.425-0.238,0.917-0.357,1.475-0.357
|
||||||
c0.345,0,0.677,0.053,0.996,0.16s0.598,0.271,0.836,0.494c0.238,0.223,0.429,0.509,0.57,0.859s0.213,0.763,0.213,1.239v4.637h-1.368
|
c0.346,0,0.678,0.053,0.996,0.16c0.319,0.107,0.598,0.271,0.836,0.494s0.43,0.509,0.57,0.859c0.141,0.35,0.213,0.763,0.213,1.239
|
||||||
v-4.257c0-0.334-0.046-0.62-0.137-0.858c-0.092-0.238-0.213-0.431-0.365-0.578c-0.152-0.147-0.327-0.253-0.524-0.32
|
v4.637h-1.367V12.75c0-0.334-0.047-0.62-0.138-0.858c-0.092-0.238-0.213-0.431-0.364-0.578c-0.152-0.147-0.328-0.253-0.525-0.32
|
||||||
c-0.198-0.065-0.403-0.099-0.616-0.099c-0.283,0-0.547,0.046-0.79,0.137c-0.243,0.091-0.456,0.236-0.639,0.434
|
c-0.197-0.065-0.402-0.099-0.615-0.099c-0.283,0-0.547,0.046-0.79,0.137c-0.243,0.091-0.456,0.236-0.64,0.434
|
||||||
s-0.324,0.448-0.426,0.752c-0.101,0.304-0.151,0.664-0.151,1.079v3.71h-1.368V5.513z"/>
|
c-0.183,0.198-0.323,0.448-0.426,0.752c-0.101,0.304-0.15,0.664-0.15,1.079v3.71h-1.368V5.513L136.29,5.513z"/>
|
||||||
<path fill="#5E6060" d="M148.604,10.985h-1.961v3.269c0,0.203,0.005,0.402,0.015,0.601c0.01,0.197,0.048,0.375,0.114,0.532
|
<path fill="#5E6060" d="M148.604,10.985h-1.961v3.269c0,0.203,0.006,0.402,0.016,0.601c0.01,0.197,0.048,0.375,0.113,0.532
|
||||||
c0.065,0.157,0.167,0.283,0.304,0.38s0.337,0.145,0.601,0.145c0.162,0,0.329-0.016,0.502-0.046c0.172-0.03,0.329-0.086,0.471-0.167
|
c0.065,0.157,0.168,0.283,0.305,0.38s0.337,0.145,0.602,0.145c0.161,0,0.328-0.016,0.502-0.046c0.172-0.03,0.328-0.086,0.471-0.167
|
||||||
v1.246c-0.162,0.092-0.372,0.154-0.631,0.19c-0.258,0.035-0.458,0.053-0.6,0.053c-0.527,0-0.936-0.073-1.224-0.221
|
v1.246c-0.162,0.092-0.373,0.154-0.631,0.19c-0.258,0.035-0.459,0.053-0.601,0.053c-0.526,0-0.937-0.073-1.224-0.221
|
||||||
c-0.289-0.146-0.502-0.336-0.639-0.569s-0.219-0.494-0.244-0.783c-0.024-0.289-0.037-0.58-0.037-0.874v-3.755h-1.581V9.799h1.581
|
c-0.289-0.146-0.502-0.336-0.639-0.569c-0.138-0.233-0.22-0.494-0.244-0.783c-0.024-0.289-0.037-0.58-0.037-0.874v-3.755h-1.582
|
||||||
V7.778h1.368v2.021h1.961V10.985z"/>
|
V9.799h1.582V7.778h1.367v2.021h1.961V10.985L148.604,10.985z"/>
|
||||||
<path fill="#95BDE5" d="M142.227,20.314c-0.039,0.215-0.129,0.432-0.129,0.432c-0.024,0.059-0.107,0.25-0.125,0.288
|
<path fill="#95BDE5" d="M142.227,20.314c-0.039,0.215-0.129,0.432-0.129,0.432c-0.023,0.059-0.106,0.25-0.125,0.288
|
||||||
c-0.064,0.138-0.097,0.224-0.17,0.38c-0.084,0.178,0,0-0.136,0.268c-1.126,2.234-4.158,4.755-8.376,4.658
|
c-0.063,0.138-0.097,0.224-0.17,0.38c-0.084,0.178,0,0-0.136,0.268c-1.126,2.234-4.158,4.756-8.376,4.658
|
||||||
c-3.922-0.09-6.719-1.806-8.072-4.173c-0.103-0.18-0.262-0.42-0.383-0.684c-0.034-0.074-0.242-0.511-0.265-0.575
|
c-3.922-0.09-6.719-1.806-8.072-4.173c-0.103-0.181-0.262-0.42-0.383-0.685c-0.033-0.073-0.242-0.51-0.266-0.574
|
||||||
c-0.116-0.333-0.2-0.368-0.216-0.594c0,0,0.259,0.528,0.779,1.091c1.227,1.325,3.915,3.426,8.156,3.477
|
c-0.115-0.333-0.199-0.368-0.215-0.594c0,0,0.258,0.528,0.778,1.09c1.228,1.326,3.915,3.427,8.156,3.478
|
||||||
c4.143,0.049,6.907-2.123,8.163-3.477C141.972,20.849,142.227,20.314,142.227,20.314z"/>
|
c4.144,0.05,6.907-2.123,8.163-3.478C141.973,20.85,142.227,20.314,142.227,20.314z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
@ -54,7 +54,7 @@
|
||||||
Nav panel classic
|
Nav panel classic
|
||||||
--------------------------------------------- */
|
--------------------------------------------- */
|
||||||
if (window.matchMedia("(min-width: 767px)").matches) {
|
if (window.matchMedia("(min-width: 767px)").matches) {
|
||||||
$('ul.nav li.dropdown').hover(function() {
|
$('ul.nav .dropdown').hover(function() {
|
||||||
$(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500);
|
$(this).find('.dropdown-menu').stop(true, true).delay(200).fadeIn(500);
|
||||||
}, function() {
|
}, function() {
|
||||||
$(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);
|
$(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% load staticfiles i18n cms_tags sekizai_tags %}
|
{% load static i18n cms_tags sekizai_tags %}
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
@ -22,6 +22,8 @@
|
||||||
<link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet">
|
<link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet">
|
||||||
{% block css_extra %}
|
{% block css_extra %}
|
||||||
{% endblock css_extra %}
|
{% endblock css_extra %}
|
||||||
|
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||||
|
{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||||
|
|
||||||
<!-- External Fonts -->
|
<!-- External Fonts -->
|
||||||
<link href="//fonts.googleapis.com/css?family=Lato:300,400,600,700" rel="stylesheet" type="text/css">
|
<link href="//fonts.googleapis.com/css?family=Lato:300,400,600,700" rel="stylesheet" type="text/css">
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
<div class="flex-row {{ instance.get_extra_classes }}">
|
||||||
|
<div class="percent-text">
|
||||||
|
{% if instance.banner_text %}
|
||||||
|
<div class="text">{{ instance.banner_text }}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if instance.banner_image %}
|
||||||
|
<div class="ssdimg">
|
||||||
|
<img class="img-responsive" src="{{ instance.banner_image.url }}" alt="image">
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="desc-text padding-vertical">
|
||||||
|
<div class="lead">
|
||||||
|
{{ instance.content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,14 @@
|
||||||
|
{% load cms_tags %}
|
||||||
|
|
||||||
|
<div class="banner-list" id="{{ instance.html_id }}">
|
||||||
|
<div class="container">
|
||||||
|
{% if instance.heading %}
|
||||||
|
<div class="banner-list-heading">
|
||||||
|
<h2>{{ instance.heading }}</h2>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% for plugin in instance.child_plugin_instances %}
|
||||||
|
{% render_plugin plugin %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
75
datacenterlight/templates/datacenterlight/cms/base.html
Normal file
75
datacenterlight/templates/datacenterlight/cms/base.html
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
{% load static i18n cms_tags sekizai_tags %}
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="{{LANGUAGE_CODE}}">
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="description" content="Data Center Light by ungleich">
|
||||||
|
<meta name="author" content="ungleich GmbH">
|
||||||
|
<title>{% page_attribute page_title %}</title>
|
||||||
|
|
||||||
|
<!-- Vendor CSS -->
|
||||||
|
<!-- Bootstrap Core CSS -->
|
||||||
|
<link href="{% static 'datacenterlight/css/bootstrap-3.3.7.min.css' %}" rel="stylesheet">
|
||||||
|
<!-- Icon Fonts -->
|
||||||
|
<link href="{% static 'datacenterlight/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
|
||||||
|
<!-- Custom CSS -->
|
||||||
|
<link href="{% static 'datacenterlight/css/common.css' %}" rel="stylesheet">
|
||||||
|
<link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet">
|
||||||
|
<link href="{% static 'datacenterlight/css/header-slider.css' %}" rel="stylesheet">
|
||||||
|
{% if request.toolbar.edit_mode %}
|
||||||
|
<link href="{% static 'datacenterlight/css/cms.css' %}" rel="stylesheet">
|
||||||
|
{% endif %}
|
||||||
|
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||||
|
{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||||
|
|
||||||
|
<!-- External Fonts -->
|
||||||
|
<link href="//fonts.googleapis.com/css?family=Lato:300,400,600,700" rel="stylesheet" type="text/css">
|
||||||
|
|
||||||
|
<link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||||
|
|
||||||
|
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||||
|
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
|
||||||
|
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
|
||||||
|
<!-- Google analytics -->
|
||||||
|
{% include "google_analytics.html" %}
|
||||||
|
<!-- End Google Analytics -->
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
{% cms_toolbar %}
|
||||||
|
|
||||||
|
{% placeholder 'datacenterlight_navbar' %}
|
||||||
|
|
||||||
|
{% placeholder 'Datacenterlight Header' or %}
|
||||||
|
<div class="dcl-header">
|
||||||
|
<div class="container">
|
||||||
|
<h1>{% page_attribute page_title %}</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endplaceholder %}
|
||||||
|
|
||||||
|
{% placeholder 'Datacenterlight Content' %}
|
||||||
|
|
||||||
|
{% placeholder 'datacenterlight_footer'%}
|
||||||
|
|
||||||
|
<!-- jQuery -->
|
||||||
|
<script src="{% static 'datacenterlight/js/jquery-2.2.4.min.js' %}"></script>
|
||||||
|
<!-- Bootstrap Core JavaScript -->
|
||||||
|
<script src="{% static 'datacenterlight/js/bootstrap-3.3.7.min.js' %}"></script>
|
||||||
|
<!-- Bootstrap Validator -->
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script>
|
||||||
|
|
||||||
|
<!-- Custom JS -->
|
||||||
|
<script src="{% static 'datacenterlight/js/main.js' %}"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,29 @@
|
||||||
|
<div class="split-section {{ instance.get_extra_classes }}" id="{{ instance.html_id }}">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-push-6{% endif %}">
|
||||||
|
<div class="split-text">
|
||||||
|
{% if instance.heading %}
|
||||||
|
<div class="{% if not instance.plain_heading %}split-title{% endif %}">
|
||||||
|
<h2>{{ instance.heading }}</h2>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if instance.content %}
|
||||||
|
<div class="split-description">
|
||||||
|
<div class="lead">
|
||||||
|
{{ instance.content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-pull-6{% endif %}">
|
||||||
|
<div class="price-calc-section">
|
||||||
|
<div class="card">
|
||||||
|
{% include "datacenterlight/includes/_calculator_form.html" %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
43
datacenterlight/templates/datacenterlight/cms/contact.html
Normal file
43
datacenterlight/templates/datacenterlight/cms/contact.html
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
<div id="{{ instance.id }}" class="full-contact-section">
|
||||||
|
<div class="intro-header-2 contact-section">
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
{% if instance.contact_text %}
|
||||||
|
<div class="title">
|
||||||
|
<h2>{{ instance.contact_text }}</h2>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="contact-details">
|
||||||
|
{% if instance.organization_name %}
|
||||||
|
<div class="subtitle">
|
||||||
|
<h3>{{ instance.organization_name }}</h3>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="description">
|
||||||
|
{% if instance.email %}
|
||||||
|
<p>{{ instance.email }}</p>
|
||||||
|
{% endif %}
|
||||||
|
{% if instance.address %}
|
||||||
|
<p>{{ instance.address }}</p>
|
||||||
|
{% endif %}
|
||||||
|
{% if instance.country %}
|
||||||
|
<p>{{ instance.country }}</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="social">
|
||||||
|
<a target="_blank" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a>
|
||||||
|
<a target="_blank" href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a>
|
||||||
|
<a target="_blank" href="https://www.facebook.com/ungleich.ch/"><i class="fa fa-facebook"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div id="contact-form" class="contact-form">
|
||||||
|
{% include "datacenterlight/contact_form.html" with form_header=instance.form_header %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
15
datacenterlight/templates/datacenterlight/cms/footer.html
Normal file
15
datacenterlight/templates/datacenterlight/cms/footer.html
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{% load i18n cms_tags %}
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
<ul class="list-inline">
|
||||||
|
{% for plugin in instance.child_plugin_instances %}
|
||||||
|
<li>
|
||||||
|
{% render_plugin plugin %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<p class="copyright text-muted small">
|
||||||
|
Copyright © {{ instance.copyright_label }} {% now "Y" %}. {% trans "All Rights Reserved" %}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
3
datacenterlight/templates/datacenterlight/cms/link.html
Normal file
3
datacenterlight/templates/datacenterlight/cms/link.html
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<a class="dcl-link url {% if instance.separator %}dcl-link-separator{% endif %}" href="{{ instance.target }}" {% if instance.title %}title="{{ instance.title }}"{% endif %}>
|
||||||
|
{{ instance.text }}
|
||||||
|
</a>
|
70
datacenterlight/templates/datacenterlight/cms/navbar.html
Normal file
70
datacenterlight/templates/datacenterlight/cms/navbar.html
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
{% load static i18n custom_tags cms_tags %}
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
|
|
||||||
|
<nav class="navbar navbar-default navbar-fixed-top topnav navbar-transparent">
|
||||||
|
<!-- Brand and toggle get grouped for better mobile display -->
|
||||||
|
<div class="navbar-header">
|
||||||
|
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#dcl-topnav">
|
||||||
|
<span class="sr-only">{% trans "Toggle navigation" %}</span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
<span class="icon-bar"></span>
|
||||||
|
</button>
|
||||||
|
{% url 'datacenterlight:index' as default_logo_url %}
|
||||||
|
{% if instance.logo_dark or instance.logo_light %}
|
||||||
|
<a href="{{ instance.logo_url|default:default_logo_url }}" id="logoBlack" class="navbar-brand topnav"><img src="{{ instance.get_logo_dark }}"></a>
|
||||||
|
<a href="{{ instance.logo_url|default:default_logo_url }}" id="logoWhite" class="navbar-brand topnav"><img src="{{ instance.get_logo_light }}"></a>
|
||||||
|
{% else %}
|
||||||
|
<a href="{{ default_logo_url }}" id="logoBlack" class="navbar-brand topnav"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a>
|
||||||
|
<a href="{{ default_logo_url }}" id="logoWhite" class="navbar-brand topnav"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="collapse navbar-collapse" id="dcl-topnav">
|
||||||
|
<!-- Start Navbar collapse-->
|
||||||
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
{% for plugin in instance.child_plugin_instances %}
|
||||||
|
<li>
|
||||||
|
{% render_plugin plugin %}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
<li>
|
||||||
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
|
<a class="on-hover-border" href="{% change_lang 'de' %}">Deutsch <i class="fa fa-globe" aria-hidden="true"></i></a>
|
||||||
|
{% else %}
|
||||||
|
<a class="on-hover-border" href="{% change_lang 'en-us' %}">English <i class="fa fa-globe" aria-hidden="true"></i></a>
|
||||||
|
{% endif %}
|
||||||
|
</li>
|
||||||
|
{% if not request.user.is_authenticated %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'hosting:login' %}">{% trans "Login" %} <span class="fa fa-sign-in"></span></a>
|
||||||
|
</li>
|
||||||
|
{% else %}
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'hosting:dashboard' %}">{% trans "Dashboard" %}</a>
|
||||||
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% comment %}
|
||||||
|
<!-- to be used when more than one option for language -->
|
||||||
|
<li class="nav-language">
|
||||||
|
<div class="dropdown">
|
||||||
|
<div class="dropdown-toggle select-language" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
|
||||||
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
|
<span>English</span>
|
||||||
|
{% else %}
|
||||||
|
<span>Deutsch</span>
|
||||||
|
{% endif %}
|
||||||
|
<i class="fa fa-globe" aria-hidden="true"></i>
|
||||||
|
</div>
|
||||||
|
<ul class="dropdown-menu drop-language dropdown-menu-right">
|
||||||
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
|
<li><a class="url" href="{% change_lang 'de' %}">Deutsch</a></li>
|
||||||
|
{% else %}
|
||||||
|
<li><a class="url" href="{% change_lang 'en-us' %}">English</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{% endcomment %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
|
@ -0,0 +1,10 @@
|
||||||
|
{% load cms_tags %}
|
||||||
|
|
||||||
|
<div class="dropdown highlights-dropdown">
|
||||||
|
<a class="dropdown-toggle url-init dcl-link" href="{{ instance.url|default:'#' }}" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{{ instance.text }} <span class="caret"></span></a>
|
||||||
|
<ul class="dropdown-menu">
|
||||||
|
{% for plugin in instance.child_plugin_instances %}
|
||||||
|
{% render_plugin plugin %}
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
46
datacenterlight/templates/datacenterlight/cms/section.html
Normal file
46
datacenterlight/templates/datacenterlight/cms/section.html
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
{% load cms_tags %}
|
||||||
|
|
||||||
|
<div class="split-section {{ instance.get_extra_classes }}" id="{{ instance.html_id }}">
|
||||||
|
<div class="container">
|
||||||
|
{% if instance.child_plugin_instances|length %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-push-6{% endif %} split-text">
|
||||||
|
{% if instance.heading %}
|
||||||
|
<div class="{% if not instance.plain_heading %}split-title{% else %}split-title-plain{% endif %}">
|
||||||
|
<h2>{{ instance.heading }}</h2>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if instance.content %}
|
||||||
|
<div class="split-description">
|
||||||
|
<div class="lead">
|
||||||
|
{{ instance.content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-pull-6{% endif %} split-figure">
|
||||||
|
<div class="section-figure">
|
||||||
|
{% for plugin in instance.child_plugin_instances %}
|
||||||
|
{% render_plugin plugin %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="space">
|
||||||
|
{% if instance.heading %}
|
||||||
|
<div class="{% if not instance.plain_heading %}split-title{% else %}split-title-plain{% endif %}">
|
||||||
|
<h2>{{ instance.heading }}</h2>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if instance.content %}
|
||||||
|
<div class="split-description">
|
||||||
|
<div class="lead">
|
||||||
|
{{ instance.content }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,3 @@
|
||||||
|
<div class="icon-section">
|
||||||
|
<i class="fa fa-{{ instance.fontawesome_icon_name }}" aria-hidden="true"></i>
|
||||||
|
</div>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{{ instance.image.url }}" alt="image">
|
||||||
|
{% if instance.caption %}
|
||||||
|
<div class="section-image-caption">{{ instance.caption }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
|
@ -1,26 +0,0 @@
|
||||||
{% extends "datacenterlight/base.html" %}
|
|
||||||
{% load staticfiles cms_tags sekizai_tags %}
|
|
||||||
|
|
||||||
{% block css_extra %}
|
|
||||||
<link href="{% static 'datacenterlight/css/cms.css' %}" media="screen" rel="stylesheet" type="text/css"/>
|
|
||||||
{% endblock css_extra %}
|
|
||||||
|
|
||||||
{% block title %}
|
|
||||||
{% page_attribute page_title %}
|
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
<div class="dcl-cms_page-header">
|
|
||||||
<div class="container">
|
|
||||||
<h1>{% page_attribute page_title %}</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="split-section left" id="dcl-cms_page-text">
|
|
||||||
<div class="space">
|
|
||||||
<div class="container">
|
|
||||||
{% placeholder 'datacenterlight_cms_page_text' %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -13,7 +13,11 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-offset-2 col-sm-10">
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
<div class="subtitle">
|
<div class="subtitle">
|
||||||
<h3>{% trans "Get in touch with us!" %}</h3>
|
{% if form_header %}
|
||||||
|
<h3>{{ form_header }}</h3>
|
||||||
|
{% else %}
|
||||||
|
<h3>{% trans "Get in touch with us!" %}</h3>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
105
datacenterlight/templates/datacenterlight/downtime.html
Normal file
105
datacenterlight/templates/datacenterlight/downtime.html
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<meta name="description" content="">
|
||||||
|
<meta name="author" content="">
|
||||||
|
|
||||||
|
<title>ungleich</title>
|
||||||
|
|
||||||
|
<!-- Custom Fonts -->
|
||||||
|
<link href="//fonts.googleapis.com/css?family=Lato:300,400" rel="stylesheet" type="text/css">
|
||||||
|
<link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" />
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
color: #333;
|
||||||
|
font-family: Lato, sans-serif;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 18px;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
padding-top: 4%;
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 48px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
nav {
|
||||||
|
padding: 20px 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downtime-container {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downtime-msg {
|
||||||
|
text-align: center;
|
||||||
|
font-size: 26px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.downtime-contact {
|
||||||
|
max-width: 300px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-weight: 300;
|
||||||
|
font-size: 22px;
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
p {
|
||||||
|
margin: 15px auto
|
||||||
|
}
|
||||||
|
.xl_p {
|
||||||
|
margin: 15px auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #333;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
a:hover, a:focus, a:active, a:active:focus {
|
||||||
|
color: #4a90e2;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="downtime-container">
|
||||||
|
<nav class="navbar navbar-default topnav navbar-transparent" role="navigation">
|
||||||
|
<div class="container topnav">
|
||||||
|
<div class="navbar-header">
|
||||||
|
<a id="logoWhite" class="navbar-brand topnav" href="https://www.ungleich.ch/"><img src="https://www.ungleich.ch/static/datacenterlight/img/logo_black.svg"></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
|
<h1>You caught us while working!</h1>
|
||||||
|
<div class="downtime-msg">
|
||||||
|
<p class="xl_p">We're doing scheduled maintenance from</p>
|
||||||
|
<p class="xl_p">17:00 21.08.2017 to 23:00 21.08.2017 CEST.</p>
|
||||||
|
</div>
|
||||||
|
<h2>If you need immediate assistance, please contact us at</h2>
|
||||||
|
<div class="downtime-contact">
|
||||||
|
<p><a href="mailto:support@datacenterlight.ch">support@datacenterlight.ch</a></p>
|
||||||
|
<p>+41 044 534 66 22</p>
|
||||||
|
<p><a target="_blank" href="https://twitter.com/datacenterlight">twitter datacenterlight</a></p>
|
||||||
|
<p><a target="_blank" href="https://twitter.com/ungleich">twitter ungleich</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -1,5 +1,5 @@
|
||||||
{% load staticfiles i18n%}
|
{% load staticfiles i18n%}
|
||||||
<form id="order_form" method="POST" action="" data-toggle="validator" role="form">
|
<form id="order_form" method="POST" action="{% url 'datacenterlight:index' %}" data-toggle="validator" role="form">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<h3>{% trans "VM hosting" %} </h3>
|
<h3>{% trans "VM hosting" %} </h3>
|
||||||
|
@ -77,9 +77,6 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<!--<div class="description check-ip">
|
|
||||||
<input type="checkbox" name="ipv6"> Ipv6 Only<br>
|
|
||||||
</div>-->
|
|
||||||
</div>
|
</div>
|
||||||
<input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input>
|
<input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
{% load staticfiles i18n%}
|
{% load i18n %}
|
||||||
{% get_current_language as LANGUAGE_CODE %}
|
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|
|
@ -6,41 +6,31 @@
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<div class="intro-header" id="home">
|
<div class="intro-header" id="home">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
<div class="intro-message">
|
||||||
<div class="row">
|
<h1>Data Center Light</h1>
|
||||||
<div class="col-lg-12">
|
<h3>{% trans "Finally, an affordable VM hosting in Switzerland!" %}</h3>
|
||||||
|
<hr class="intro-divider">
|
||||||
<div class="intro-message">
|
<ul class="list-inline intro-social-buttons">
|
||||||
<h1>Data Center Light</h1>
|
<li>
|
||||||
<h3>{% trans "Finally, an affordable VM hosting in Switzerland!" %}</h3>
|
<a class="btn btn-default btn-lg btn-transparent url" href="#how"><span class="network-name">{% trans "Highlights" %}</span></a>
|
||||||
<hr class="intro-divider">
|
</li>
|
||||||
<ul class="list-inline intro-social-buttons">
|
<li>
|
||||||
<li>
|
<a class="btn btn-primary btn-lg page-scroll url" href="#price"><span class="network-name">{% trans "I want it!" %}</span></a>
|
||||||
<a class="btn btn-default btn-lg btn-transparent url" href="#how"><span class="network-name">{% trans "Highlights" %}</span></a>
|
</li>
|
||||||
</li>
|
</ul>
|
||||||
<li>
|
|
||||||
<a class="btn btn-primary btn-lg page-scroll url" href="#price"><span class="network-name">{% trans "I want it!" %}</span></a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- /.container -->
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- /.intro-header -->
|
<!-- /.intro-header -->
|
||||||
|
|
||||||
<!-- Page Content -->
|
<!-- Page Content -->
|
||||||
<div class="split-section right" id="how">
|
<div class="split-section right" id="how">
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 icon-section">
|
<div class="col-sm-6 icon-section">
|
||||||
<i class="fa fa-cogs" aria-hidden="true"></i>
|
<i class="fa fa-cogs" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
<div class="col-sm-6">
|
||||||
<div class="split-text">
|
<div class="split-text">
|
||||||
<div class="split-title">
|
<div class="split-title">
|
||||||
<h2>{% trans "Highlights" %}</h2>
|
<h2>{% trans "Highlights" %}</h2>
|
||||||
|
@ -65,90 +55,79 @@
|
||||||
<p class="lead">{% trans "Cuts down the costs for you by using FOSS (Free Open Source Software) exclusively, wherefore we can save money from paying licenses." %}</p>
|
<p class="lead">{% trans "Cuts down the costs for you by using FOSS (Free Open Source Software) exclusively, wherefore we can save money from paying licenses." %}</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.container -->
|
|
||||||
<!-- /.option 1 -->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="split-section left" id="your">
|
<div class="split-section left section-gradient" id="your">
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
<div class="col-sm-6">
|
||||||
<div class="split-text">
|
<div class="split-text">
|
||||||
<div class="split-title">
|
<div class="split-title">
|
||||||
<h2>{% trans "Scale out" %}</h2>
|
<h2>{% trans "Scale out" %}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="split-description">
|
<div class="split-description">
|
||||||
<p class="lead">{% trans "We don't use special hardware. We use commodity hardware: we buy computers that you buy. Just many more and put them in a cozy home for computers called data center." %}</p>
|
<p class="lead">{% trans "We don't use special hardware. We use commodity hardware: we buy computers that you buy. Just many more and put them in a cozy home for computers called data center." %}</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 icon-section">
|
<div class="col-sm-6 icon-section">
|
||||||
<i class="fa fa-rocket" aria-hidden="true"></i>
|
<i class="fa fa-rocket" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.container -->
|
|
||||||
<!-- /.option 1 -->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="split-section right" id="our">
|
|
||||||
|
|
||||||
|
<div class="split-section right" id="our">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 icon-section">
|
<div class="col-sm-6 icon-section">
|
||||||
<i class="fa fa-handshake-o" aria-hidden="true"></i>
|
<i class="fa fa-handshake-o" aria-hidden="true"></i>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
<div class="col-sm-6">
|
||||||
<div class="split-text">
|
<div class="split-text">
|
||||||
<div class="split-title">
|
<div class="split-title">
|
||||||
<h2>{% trans "Reliable and light" %}</h2>
|
<h2>{% trans "Reliable and light" %}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="split-description">
|
<div class="split-description">
|
||||||
<p class="lead">{% trans "Our VMs are located in Switzerland, with reliable power supply and fast internet connection. Our VM costs less thanks to our featherlight infrastructure." %}</p>
|
<p class="lead">{% trans "Our VMs are located in Switzerland, with reliable power supply and fast internet connection. Our VM costs less thanks to our featherlight infrastructure." %}</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.container -->
|
|
||||||
<!-- /.option 1 -->
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- /.content-section-b -->
|
<div class="split-section pricing-section section-gradient" id="price">
|
||||||
<div class="content-section-a pricing-section" id="price">
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- Page Features -->
|
<div class="row">
|
||||||
<div class="row text-center">
|
<div class="col-md-6">
|
||||||
<div class="col-xs-12 col-md-6 text">
|
<div class="split-text">
|
||||||
<h2 class="section-heading">{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}</h2>
|
<div class="split-title">
|
||||||
<p class="lead new-lead">{% blocktrans %}Ready in 30 seconds.<br/>Experience the unbeatable speed from Data Center Light.{% endblocktrans %}</p>
|
<h2>{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="split-description">
|
||||||
|
<div class="lead">
|
||||||
|
<p>{% blocktrans %}Ready in 30 seconds.<br/>Experience the unbeatable speed from Data Center Light.{% endblocktrans %}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
<div class="col-xs-12 col-md-6 hero-feature">
|
<div class="price-calc-section">
|
||||||
<div class="price-calc-section no-padding">
|
<div class="card">
|
||||||
<div class="landing card">
|
|
||||||
<div class="caption">
|
|
||||||
{% include "datacenterlight/includes/_calculator_form.html" %}
|
{% include "datacenterlight/includes/_calculator_form.html" %}
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- / contact section -->
|
|
||||||
<div class="full-contact-section">
|
<div class="full-contact-section">
|
||||||
<div class="intro-header-2 contact-section" id="contact">
|
<div class="intro-header-2 contact-section" id="contact">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
@ -179,10 +158,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<!-- /.banner -->
|
<!-- /.banner -->
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -3,149 +3,138 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<!-- Why Data Center Light? -->
|
<!-- Why Data Center Light? -->
|
||||||
<div class="full-whydcl-sec">
|
<div class="dcl-header">
|
||||||
<div class="whydcl-header whydcl-section" id="why_dcl">
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<h1>{% trans "Why Data Center Light?" %}</h1>
|
||||||
<div class="col-sm-12 col-md-12">
|
|
||||||
<div class="single-heading">
|
|
||||||
<h2>{% trans "Why Data Center Light?" %}</h2>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="split-section left" id="tech_stack">
|
|
||||||
<div class="space">
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
|
||||||
<div class="split-text">
|
|
||||||
<div class="split-title">
|
|
||||||
<h2>{% trans "Tech Stack" %}</h2>
|
|
||||||
</div>
|
|
||||||
<div class="split-description">
|
|
||||||
<h3>{% trans "We are seriously open source." %}</h3>
|
|
||||||
<p class="lead">{% blocktrans %} Our full software stack is open source – We don't use anything that isn't open source. <br>Yes, we are that cool. {% endblocktrans %}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive btm-space" src="{% static 'datacenterlight/img/devuan.png' %}" alt="Devuan">
|
|
||||||
<span class="logo-caption">{% trans "Our services run on" %}</span>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
|
|
||||||
<span class="logo-caption">{% trans "Our monitoring" %}</span>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive btm-space" src="{% static 'datacenterlight/img/Ceph_Logo.png' %}" alt="Ceph">
|
|
||||||
<span class="logo-caption">{% trans "Our storage layer" %}</span>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive" src="{% static 'datacenterlight/img/django.png' %}" alt="Django">
|
|
||||||
<span class="logo-caption">{% trans "Our web frontend" %}</span>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive btm-space" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula">
|
|
||||||
<span class="logo-caption">{% trans "Our cloud" %}</span>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist by ungleich">
|
|
||||||
<span class="logo-caption">{% trans "Our configuration management system" %}</span>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive" src="{% static 'datacenterlight/img/python-logo.png' %}" alt="Python">
|
|
||||||
<span class="logo-caption">{% trans "Our awesome juice" %}</span>
|
|
||||||
</div>
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
|
||||||
<img class="img-responsive btm-space-tayga" src="{% static 'datacenterlight/img/tayga.png' %}" alt="Tayga">
|
|
||||||
<span class="logo-caption">{% trans "Our NAT64 gateway" %}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
<div class="split-section left" id="tech_stack">
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<!-- /.container -->
|
|
||||||
<hr class="thick-divider"/><!-- Divider -->
|
|
||||||
<div class=" space">
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-sm-4 col-md-5 ">
|
<div class="col-sm-6 split-text">
|
||||||
<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
|
<div class="split-title">
|
||||||
<img class="img-responsive" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula">
|
<h2>{% trans "Tech Stack" %}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
|
<div class="split-description">
|
||||||
<img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist byu ngleich">
|
<h3>{% trans "We are seriously open source." %}</h3>
|
||||||
</div>
|
<p class="lead">{% blocktrans %} Our full software stack is open source – We don't use anything that isn't open source. <br>Yes, we are that cool. {% endblocktrans %}</p>
|
||||||
<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
|
|
||||||
<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-sm-8 col-md-7 text-right">
|
<div class="col-sm-6 split-figure">
|
||||||
<div class="tech-sub-sec">
|
<div class="section-figure">
|
||||||
<h2>{% trans "We believe in giving back to the FOSS community." %}</h2>
|
<div class="section-image">
|
||||||
<p class="lead new-lead">{% blocktrans %}Data Center Light is the child of free and open source software (FOSS) movement. <br>We grew up with it, live by it, and believe in it.<br> The more we work on our data center,<br> the more we contribute back to the FOSS community.{% endblocktrans %}</p>
|
<img class="img-responsive" src="{% static 'datacenterlight/img/devuan.png' %}" alt="Devuan">
|
||||||
|
<div class="section-image-caption">{% trans "Our services run on" %}</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
|
||||||
|
<div class="section-image-caption">{% trans "Our monitoring" %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/Ceph_Logo.png' %}" alt="Ceph">
|
||||||
|
<div class="section-image-caption">{% trans "Our storage layer" %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/django.png' %}" alt="Django">
|
||||||
|
<div class="section-image-caption">{% trans "Our web frontend" %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula">
|
||||||
|
<div class="section-image-caption">{% trans "Our cloud" %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist by ungleich">
|
||||||
|
<div class="section-image-caption">{% trans "Our configuration management system" %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/python-logo.png' %}" alt="Python">
|
||||||
|
<div class="section-image-caption">{% trans "Our awesome juice" %}</div>
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/tayga.png' %}" alt="Tayga">
|
||||||
|
<div class="section-image-caption">{% trans "Our NAT64 gateway" %}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.container -->
|
|
||||||
<hr class="thick-divider"/><!-- Divider -->
|
<div class="split-section right split-section-plain">
|
||||||
<div class="space">
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="tech-sub-sec">
|
<div class="row">
|
||||||
<h3>{% trans "We bring the future to you." %}</h3>
|
<div class="col-sm-4 col-md-5 split-figure">
|
||||||
|
<div class="section-figure">
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula">
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist byu ngleich">
|
||||||
|
</div>
|
||||||
|
<div class="section-image">
|
||||||
|
<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-8 col-md-7 split-text">
|
||||||
|
<div class="split-title-plain">
|
||||||
|
<h2>{% trans "We believe in giving back to the FOSS community." %}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="split-description">
|
||||||
|
<p class="lead">{% blocktrans %}Data Center Light is the child of free and open source software (FOSS) movement. <br>We grew up with it, live by it, and believe in it.<br> The more we work on our data center,<br> the more we contribute back to the FOSS community.{% endblocktrans %}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="banner-list">
|
||||||
|
<div class="container">
|
||||||
|
<div class="banner-list-heading">
|
||||||
|
<h2>{% trans "We bring the future to you." %}</h3>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-row flex-row-rev">
|
<div class="flex-row flex-row-rev">
|
||||||
<div class="percent-text">
|
<div class="percent-text">
|
||||||
100% <strong>IPv6</strong>
|
100% <strong>IPv6</strong>
|
||||||
</div>
|
</div>
|
||||||
<div class="desc-text padding-vertical">
|
<div class="desc-text padding-vertical">
|
||||||
<p class="lead new-lead">{% blocktrans %}Data Center Light uses the most modern technologies out there.<br>Your VM needs only IPv6. Data Center Light provides<br> transparent two-way IPv6/IPv4 translation.{% endblocktrans %}</p>
|
<p class="lead">{% blocktrans %}Data Center Light uses the most modern technologies out there.<br>Your VM needs only IPv6. Data Center Light provides<br> transparent two-way IPv6/IPv4 translation.{% endblocktrans %}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex-row">
|
<div class="flex-row">
|
||||||
<div class="percent-text">
|
<div class="percent-text">
|
||||||
<span class="space-middle"> 100% <strong>SSD</strong></span> <span class="ssdimg"><img class="img-responsive" src="{% static 'datacenterlight/img/ssd.jpg' %}" alt="SSD"></span>
|
<span class="space-middle"> 100% <strong>SSD</strong></span> <span class="ssdimg"><img class="img-responsive" src="{% static 'datacenterlight/img/ssd.jpg' %}" alt="SSD"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="desc-text padding-vertical w380">
|
<div class="desc-text padding-vertical">
|
||||||
<p class="lead new-lead lead-right">{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}</p>
|
<p class="lead">{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<!-- /.container -->
|
|
||||||
</div>
|
</div>
|
||||||
<!-- /.content-section-b -->
|
|
||||||
<div class="content-section-a pricing-section" id="price">
|
|
||||||
|
|
||||||
|
<div class="split-section section-gradient left" id="price">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<!-- Page Features -->
|
<div class="row">
|
||||||
<div class="row text-center">
|
<div class="col-md-6 split-text">
|
||||||
<div class="col-xs-12 col-md-6 text">
|
<div class="split-title">
|
||||||
<h2 class="section-heading">{% trans "Starting from only 15CHF per month. Try now." %}</h2>
|
<h2>{% trans "Starting from only 15CHF per month. Try now." %}</h2>
|
||||||
<p class="lead new-lead">{% trans "Actions speak louder than words. Let's do it, try our VM now." %}</p>
|
</div>
|
||||||
</div>
|
<div class="split-description">
|
||||||
|
<div class="lead">
|
||||||
<div class="col-xs-12 col-md-6 hero-feature">
|
<p>{% trans "Actions speak louder than words. Let's do it, try our VM now." %}</p>
|
||||||
<div class="price-calc-section no-padding">
|
</div>
|
||||||
<div class="landing card">
|
</div>
|
||||||
<div class="caption">
|
</div>
|
||||||
{% include "datacenterlight/includes/_calculator_form.html" %}
|
<div class="col-md-6">
|
||||||
</div>
|
<div class="price-calc-section">
|
||||||
|
<div class="card">
|
||||||
|
{% include "datacenterlight/includes/_calculator_form.html" %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- End Why Data Center Light? -->
|
<!-- End Why Data Center Light? -->
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -112,37 +112,41 @@ class IndexView(CreateView):
|
||||||
storage_field = forms.IntegerField(validators=[self.validate_storage])
|
storage_field = forms.IntegerField(validators=[self.validate_storage])
|
||||||
template_id = int(request.POST.get('config'))
|
template_id = int(request.POST.get('config'))
|
||||||
template = VMTemplate.objects.filter(
|
template = VMTemplate.objects.filter(
|
||||||
opennebula_vm_template_id=template_id).first()
|
opennebula_vm_template_id=template_id
|
||||||
|
).first()
|
||||||
template_data = VMTemplateSerializer(template).data
|
template_data = VMTemplateSerializer(template).data
|
||||||
|
referer_url = request.META['HTTP_REFERER']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cores = cores_field.clean(cores)
|
cores = cores_field.clean(cores)
|
||||||
except ValidationError as err:
|
except ValidationError as err:
|
||||||
msg = '{} : {}.'.format(cores, str(err))
|
msg = '{} : {}.'.format(cores, str(err))
|
||||||
messages.add_message(self.request, messages.ERROR, msg,
|
messages.add_message(
|
||||||
extra_tags='cores')
|
self.request, messages.ERROR, msg, extra_tags='cores'
|
||||||
return HttpResponseRedirect(
|
)
|
||||||
reverse('datacenterlight:index') + "#order_form")
|
return HttpResponseRedirect(referer_url + "#order_form")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
memory = memory_field.clean(memory)
|
memory = memory_field.clean(memory)
|
||||||
except ValidationError as err:
|
except ValidationError as err:
|
||||||
msg = '{} : {}.'.format(memory, str(err))
|
msg = '{} : {}.'.format(memory, str(err))
|
||||||
messages.add_message(self.request, messages.ERROR, msg,
|
messages.add_message(
|
||||||
extra_tags='memory')
|
self.request, messages.ERROR, msg, extra_tags='memory'
|
||||||
return HttpResponseRedirect(
|
)
|
||||||
reverse('datacenterlight:index') + "#order_form")
|
return HttpResponseRedirect(referer_url + "#order_form")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
storage = storage_field.clean(storage)
|
storage = storage_field.clean(storage)
|
||||||
except ValidationError as err:
|
except ValidationError as err:
|
||||||
msg = '{} : {}.'.format(storage, str(err))
|
msg = '{} : {}.'.format(storage, str(err))
|
||||||
messages.add_message(self.request, messages.ERROR, msg,
|
messages.add_message(
|
||||||
extra_tags='storage')
|
self.request, messages.ERROR, msg, extra_tags='storage'
|
||||||
return HttpResponseRedirect(
|
)
|
||||||
reverse('datacenterlight:index') + "#order_form")
|
return HttpResponseRedirect(referer_url + "#order_form")
|
||||||
amount_to_be_charged = get_vm_price(cpu=cores, memory=memory,
|
|
||||||
disk_size=storage)
|
amount_to_be_charged = get_vm_price(
|
||||||
|
cpu=cores, memory=memory, disk_size=storage
|
||||||
|
)
|
||||||
specs = {
|
specs = {
|
||||||
'cpu': cores,
|
'cpu': cores,
|
||||||
'memory': memory,
|
'memory': memory,
|
||||||
|
@ -161,8 +165,9 @@ class IndexView(CreateView):
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super(IndexView, self).get_context_data(**kwargs)
|
context = super(IndexView, self).get_context_data(**kwargs)
|
||||||
context.update({
|
context.update({
|
||||||
'base_url': "{0}://{1}".format(self.request.scheme,
|
'base_url': "{0}://{1}".format(
|
||||||
self.request.get_host()),
|
self.request.scheme, self.request.get_host()
|
||||||
|
),
|
||||||
'contact_form': ContactForm
|
'contact_form': ContactForm
|
||||||
})
|
})
|
||||||
return context
|
return context
|
||||||
|
@ -231,8 +236,9 @@ class PaymentOrderView(FormView):
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
if 'login_form' in request.POST:
|
if 'login_form' in request.POST:
|
||||||
login_form = HostingUserLoginForm(data=request.POST,
|
login_form = HostingUserLoginForm(
|
||||||
prefix='login_form')
|
data=request.POST, prefix='login_form'
|
||||||
|
)
|
||||||
if login_form.is_valid():
|
if login_form.is_valid():
|
||||||
email = login_form.cleaned_data.get('email')
|
email = login_form.cleaned_data.get('email')
|
||||||
password = login_form.cleaned_data.get('password')
|
password = login_form.cleaned_data.get('password')
|
||||||
|
@ -490,9 +496,11 @@ class OrderConfirmationView(DetailView):
|
||||||
|
|
||||||
response = {
|
response = {
|
||||||
'status': True,
|
'status': True,
|
||||||
'redirect': reverse(
|
'redirect': (
|
||||||
'hosting:virtual_machines') if request.user.is_authenticated() else reverse(
|
reverse('hosting:virtual_machines')
|
||||||
'datacenterlight:index'),
|
if request.user.is_authenticated()
|
||||||
|
else reverse('datacenterlight:index')
|
||||||
|
),
|
||||||
'msg_title': str(_('Thank you for the order.')),
|
'msg_title': str(_('Thank you for the order.')),
|
||||||
'msg_body': str(
|
'msg_body': str(
|
||||||
_('Your VM will be up and running in a few moments.'
|
_('Your VM will be up and running in a few moments.'
|
||||||
|
|
|
@ -227,7 +227,7 @@ CMS_TEMPLATES = (
|
||||||
('blog_ungleich.html', gettext('Blog')),
|
('blog_ungleich.html', gettext('Blog')),
|
||||||
('page.html', gettext('Page')),
|
('page.html', gettext('Page')),
|
||||||
# dcl
|
# dcl
|
||||||
('datacenterlight/cms_page.html', gettext('Data Center Light')),
|
('datacenterlight/cms/base.html', gettext('Data Center Light')),
|
||||||
('ungleich_page/glasfaser_cms_page.html', gettext('Glasfaser')),
|
('ungleich_page/glasfaser_cms_page.html', gettext('Glasfaser')),
|
||||||
('ungleich_page/ungleich_cms_page.html', gettext('ungleich')),
|
('ungleich_page/ungleich_cms_page.html', gettext('ungleich')),
|
||||||
)
|
)
|
||||||
|
@ -333,6 +333,26 @@ CMS_PLACEHOLDER_CONF = {
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
'datacenterlight_navbar': {
|
||||||
|
'name': _('Datacenterlight Navbar'),
|
||||||
|
'plugins': ['DCLNavbarPlugin'],
|
||||||
|
'default_plugins': [
|
||||||
|
{
|
||||||
|
'plugin_type': 'DCLNavbarPlugin',
|
||||||
|
'values': {},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'datacenterlight_footer': {
|
||||||
|
'name': _('Datacenterlight Footer'),
|
||||||
|
'plugins': ['DCLFooterPlugin'],
|
||||||
|
'default_plugins': [
|
||||||
|
{
|
||||||
|
'plugin_type': 'DCLFooterPlugin',
|
||||||
|
'values': {},
|
||||||
|
},
|
||||||
|
]
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
CMS_PERMISSION = True
|
CMS_PERMISSION = True
|
||||||
|
@ -591,7 +611,10 @@ GOOGLE_ANALYTICS_PROPERTY_IDS = {
|
||||||
'node-hosting.ch': 'UA-62285904-7',
|
'node-hosting.ch': 'UA-62285904-7',
|
||||||
'datacenterlight.ch': 'UA-62285904-8',
|
'datacenterlight.ch': 'UA-62285904-8',
|
||||||
'devuanhosting.ch': 'UA-62285904-9',
|
'devuanhosting.ch': 'UA-62285904-9',
|
||||||
|
'devuanhosting.com': 'UA-62285904-9',
|
||||||
'ipv6onlyhosting.ch': 'UA-62285904-10',
|
'ipv6onlyhosting.ch': 'UA-62285904-10',
|
||||||
|
'ipv6onlyhosting.net': 'UA-62285904-10',
|
||||||
|
'ipv6onlyhosting.com': 'UA-62285904-10',
|
||||||
'127.0.0.1:8000': 'localhost',
|
'127.0.0.1:8000': 'localhost',
|
||||||
'dynamicweb-development.ungleich.ch': 'development',
|
'dynamicweb-development.ungleich.ch': 'development',
|
||||||
'dynamicweb-staging.ungleich.ch': 'staging'
|
'dynamicweb-staging.ungleich.ch': 'staging'
|
||||||
|
@ -610,10 +633,9 @@ DCL_ERROR_EMAILS_TO = env('DCL_ERROR_EMAILS_TO')
|
||||||
|
|
||||||
DCL_ERROR_EMAILS_TO_LIST = []
|
DCL_ERROR_EMAILS_TO_LIST = []
|
||||||
if DCL_ERROR_EMAILS_TO is not None:
|
if DCL_ERROR_EMAILS_TO is not None:
|
||||||
DCL_ERROR_EMAILS_TO_LIST = [x.strip() for x in
|
DCL_ERROR_EMAILS_TO_LIST = [
|
||||||
DCL_ERROR_EMAILS_TO.split(
|
x.strip() for x in DCL_ERROR_EMAILS_TO.split(',')
|
||||||
',')] \
|
] if "," in DCL_ERROR_EMAILS_TO else [DCL_ERROR_EMAILS_TO.strip()]
|
||||||
if "," in DCL_ERROR_EMAILS_TO else [DCL_ERROR_EMAILS_TO.strip()]
|
|
||||||
|
|
||||||
if 'info@ungleich.ch' not in DCL_ERROR_EMAILS_TO_LIST:
|
if 'info@ungleich.ch' not in DCL_ERROR_EMAILS_TO_LIST:
|
||||||
DCL_ERROR_EMAILS_TO_LIST.append('info@ungleich.ch')
|
DCL_ERROR_EMAILS_TO_LIST.append('info@ungleich.ch')
|
||||||
|
|
|
@ -26,6 +26,7 @@ ALLOWED_HOSTS = [
|
||||||
".django-hosting.ch",
|
".django-hosting.ch",
|
||||||
".node-hosting.ch",
|
".node-hosting.ch",
|
||||||
".devuanhosting.ch",
|
".devuanhosting.ch",
|
||||||
|
".devuanhosting.com",
|
||||||
".digitalezukunft.ch",
|
".digitalezukunft.ch",
|
||||||
".ipv6onlyhosting.ch",
|
".ipv6onlyhosting.ch",
|
||||||
".ipv6onlyhosting.com",
|
".ipv6onlyhosting.com",
|
||||||
|
|
|
@ -64,13 +64,6 @@
|
||||||
padding: 0 !important;
|
padding: 0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.price-calc-section .card .img-beta {
|
|
||||||
position: absolute;
|
|
||||||
top: 5px;
|
|
||||||
width: 60px;
|
|
||||||
left: 3px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.price-calc-section .card .title {
|
.price-calc-section .card .title {
|
||||||
padding: 15px 40px;
|
padding: 15px 40px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,7 +156,7 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="order_detail_footer">
|
<div class="order_detail_footer">
|
||||||
<strong>ungleich glarus ag</strong> Bahnhofstrasse 1, 8783 Linthal, Switzerland<br>
|
<strong>ungleich glarus ag</strong> Bahnhofstrasse 1, 8783 Linthal, Switzerland<br>
|
||||||
www.datacenterlight.ch | info@datacenterlight.ch
|
www.datacenterlight.ch | info@datacenterlight.ch | <small>CHE-156.970.649 MWST</small>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -12,13 +12,14 @@ from django.contrib.auth.tokens import default_token_generator
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from django.core.files.base import ContentFile
|
from django.core.files.base import ContentFile
|
||||||
from django.core.urlresolvers import reverse_lazy, reverse
|
from django.core.urlresolvers import reverse_lazy, reverse
|
||||||
|
|
||||||
from django.http import Http404, HttpResponseRedirect, HttpResponse
|
from django.http import Http404, HttpResponseRedirect, HttpResponse
|
||||||
from django.shortcuts import redirect, render
|
from django.shortcuts import redirect, render
|
||||||
from django.utils.http import urlsafe_base64_decode
|
from django.utils.http import urlsafe_base64_decode
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import get_language, ugettext_lazy as _
|
from django.utils.translation import get_language, ugettext_lazy as _
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
|
from django.utils.decorators import method_decorator
|
||||||
|
from django.views.decorators.cache import never_cache
|
||||||
from django.views.generic import (
|
from django.views.generic import (
|
||||||
View, CreateView, FormView, ListView, DetailView, DeleteView,
|
View, CreateView, FormView, ListView, DetailView, DeleteView,
|
||||||
TemplateView, UpdateView
|
TemplateView, UpdateView
|
||||||
|
@ -29,11 +30,14 @@ from stored_messages.api import mark_read
|
||||||
from stored_messages.models import Message
|
from stored_messages.models import Message
|
||||||
from stored_messages.settings import stored_messages_settings
|
from stored_messages.settings import stored_messages_settings
|
||||||
|
|
||||||
|
from datacenterlight.models import VMTemplate
|
||||||
from datacenterlight.tasks import create_vm_task
|
from datacenterlight.tasks import create_vm_task
|
||||||
from membership.models import CustomUser, StripeCustomer
|
from membership.models import CustomUser, StripeCustomer
|
||||||
from opennebula_api.models import OpenNebulaManager
|
from opennebula_api.models import OpenNebulaManager
|
||||||
from opennebula_api.serializers import VirtualMachineSerializer, \
|
from opennebula_api.serializers import (
|
||||||
VirtualMachineTemplateSerializer, VMTemplateSerializer
|
VirtualMachineSerializer, VirtualMachineTemplateSerializer,
|
||||||
|
VMTemplateSerializer
|
||||||
|
)
|
||||||
from utils.forms import (
|
from utils.forms import (
|
||||||
BillingAddressForm, PasswordResetRequestForm, UserBillingAddressForm,
|
BillingAddressForm, PasswordResetRequestForm, UserBillingAddressForm,
|
||||||
ResendActivationEmailForm
|
ResendActivationEmailForm
|
||||||
|
@ -46,19 +50,21 @@ from utils.views import (
|
||||||
PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin,
|
PasswordResetViewMixin, PasswordResetConfirmViewMixin, LoginViewMixin,
|
||||||
ResendActivationLinkViewMixin
|
ResendActivationLinkViewMixin
|
||||||
)
|
)
|
||||||
from .forms import HostingUserSignupForm, HostingUserLoginForm, \
|
from .forms import (
|
||||||
UserHostingKeyForm, generate_ssh_key_name
|
HostingUserSignupForm, HostingUserLoginForm, UserHostingKeyForm,
|
||||||
|
generate_ssh_key_name
|
||||||
|
)
|
||||||
from .mixins import ProcessVMSelectionMixin
|
from .mixins import ProcessVMSelectionMixin
|
||||||
from .models import (
|
from .models import (
|
||||||
HostingOrder, HostingBill, HostingPlan, UserHostingKey, VMDetail
|
HostingOrder, HostingBill, HostingPlan, UserHostingKey, VMDetail
|
||||||
)
|
)
|
||||||
from datacenterlight.models import VMTemplate
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONNECTION_ERROR = "Your VMs cannot be displayed at the moment due to a \
|
CONNECTION_ERROR = "Your VMs cannot be displayed at the moment due to a \
|
||||||
backend connection error. please try again in a few \
|
backend connection error. please try again in a few \
|
||||||
minutes."
|
minutes."
|
||||||
|
decorators = [never_cache]
|
||||||
|
|
||||||
|
|
||||||
class DashboardView(LoginRequiredMixin, View):
|
class DashboardView(LoginRequiredMixin, View):
|
||||||
|
@ -69,6 +75,7 @@ class DashboardView(LoginRequiredMixin, View):
|
||||||
context = {}
|
context = {}
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
context = self.get_context_data()
|
context = self.get_context_data()
|
||||||
return render(request, self.template_name, context)
|
return render(request, self.template_name, context)
|
||||||
|
@ -200,9 +207,9 @@ class IndexView(View):
|
||||||
}
|
}
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
context = self.get_context_data()
|
context = self.get_context_data()
|
||||||
|
|
||||||
return render(request, self.template_name, context)
|
return render(request, self.template_name, context)
|
||||||
|
|
||||||
|
|
||||||
|
@ -216,7 +223,7 @@ class SignupView(CreateView):
|
||||||
template_name = 'hosting/signup.html'
|
template_name = 'hosting/signup.html'
|
||||||
form_class = HostingUserSignupForm
|
form_class = HostingUserSignupForm
|
||||||
model = CustomUser
|
model = CustomUser
|
||||||
success_url = reverse_lazy('hosting:ssh_keys')
|
success_url = reverse_lazy('hosting:dashboard')
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
next_url = self.request.session.get(
|
next_url = self.request.session.get(
|
||||||
|
@ -234,6 +241,12 @@ class SignupView(CreateView):
|
||||||
|
|
||||||
return HttpResponseRedirect(reverse_lazy('hosting:signup-validate'))
|
return HttpResponseRedirect(reverse_lazy('hosting:signup-validate'))
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
if self.request.user.is_authenticated():
|
||||||
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
|
return super(SignupView, self).get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class SignupValidateView(TemplateView):
|
class SignupValidateView(TemplateView):
|
||||||
template_name = "hosting/signup_validate.html"
|
template_name = "hosting/signup_validate.html"
|
||||||
|
@ -305,6 +318,12 @@ class SignupValidatedView(SignupValidateView):
|
||||||
context['section_title'] = section_title
|
context['section_title'] = section_title
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
if self.request.user.is_authenticated():
|
||||||
|
return HttpResponseRedirect(reverse_lazy('hosting:dashboard'))
|
||||||
|
return super(SignupValidatedView, self).get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class ResendActivationEmailView(ResendActivationLinkViewMixin):
|
class ResendActivationEmailView(ResendActivationLinkViewMixin):
|
||||||
template_name = 'hosting/resend_activation_link.html'
|
template_name = 'hosting/resend_activation_link.html'
|
||||||
|
@ -439,6 +458,7 @@ class SSHKeyListView(LoginRequiredMixin, ListView):
|
||||||
self.queryset = UserHostingKey.objects.filter(user=user)
|
self.queryset = UserHostingKey.objects.filter(user=user)
|
||||||
return super(SSHKeyListView, self).get_queryset()
|
return super(SSHKeyListView, self).get_queryset()
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def render_to_response(self, context, **response_kwargs):
|
def render_to_response(self, context, **response_kwargs):
|
||||||
if not self.queryset:
|
if not self.queryset:
|
||||||
return HttpResponseRedirect(reverse('hosting:choice_ssh_keys'))
|
return HttpResponseRedirect(reverse('hosting:choice_ssh_keys'))
|
||||||
|
@ -450,10 +470,12 @@ class SSHKeyChoiceView(LoginRequiredMixin, View):
|
||||||
template_name = "hosting/choice_ssh_keys.html"
|
template_name = "hosting/choice_ssh_keys.html"
|
||||||
login_url = reverse_lazy('hosting:login')
|
login_url = reverse_lazy('hosting:login')
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
context = {}
|
context = {}
|
||||||
return render(request, self.template_name, context)
|
return render(request, self.template_name, context)
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
name = generate_ssh_key_name()
|
name = generate_ssh_key_name()
|
||||||
private_key, public_key = UserHostingKey.generate_keys()
|
private_key, public_key = UserHostingKey.generate_keys()
|
||||||
|
@ -523,6 +545,11 @@ class SSHKeyCreateView(LoginRequiredMixin, FormView):
|
||||||
manager.manage_public_key([{'value': public_key, 'state': True}])
|
manager.manage_public_key([{'value': public_key, 'state': True}])
|
||||||
return HttpResponseRedirect(self.success_url)
|
return HttpResponseRedirect(self.success_url)
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
return render(request, self.template_name)
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
form = self.get_form()
|
form = self.get_form()
|
||||||
required = 'add_ssh' in self.request.POST
|
required = 'add_ssh' in self.request.POST
|
||||||
|
@ -568,6 +595,11 @@ class SettingsView(LoginRequiredMixin, FormView):
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
return render(request, self.template_name)
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
form = self.get_form()
|
form = self.get_form()
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
|
@ -630,11 +662,13 @@ class PaymentVMView(LoginRequiredMixin, FormView):
|
||||||
|
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
if 'next' in request.session:
|
if 'next' in request.session:
|
||||||
del request.session['next']
|
del request.session['next']
|
||||||
return self.render_to_response(self.get_context_data())
|
return self.render_to_response(self.get_context_data())
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
form = self.get_form()
|
form = self.get_form()
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
|
@ -663,8 +697,7 @@ class PaymentVMView(LoginRequiredMixin, FormView):
|
||||||
return self.form_invalid(form)
|
return self.form_invalid(form)
|
||||||
|
|
||||||
|
|
||||||
class OrdersHostingDetailView(LoginRequiredMixin,
|
class OrdersHostingDetailView(LoginRequiredMixin, DetailView):
|
||||||
DetailView):
|
|
||||||
template_name = "hosting/order_detail.html"
|
template_name = "hosting/order_detail.html"
|
||||||
context_object_name = "order"
|
context_object_name = "order"
|
||||||
login_url = reverse_lazy('hosting:login')
|
login_url = reverse_lazy('hosting:login')
|
||||||
|
@ -763,6 +796,7 @@ class OrdersHostingDetailView(LoginRequiredMixin,
|
||||||
context['vm'] = self.request.session.get('specs')
|
context['vm'] = self.request.session.get('specs')
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
if not self.kwargs.get('pk'):
|
if not self.kwargs.get('pk'):
|
||||||
if 'specs' not in self.request.session:
|
if 'specs' not in self.request.session:
|
||||||
|
@ -784,6 +818,7 @@ class OrdersHostingDetailView(LoginRequiredMixin,
|
||||||
)
|
)
|
||||||
return self.render_to_response(context)
|
return self.render_to_response(context)
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
template = request.session.get('template')
|
template = request.session.get('template')
|
||||||
specs = request.session.get('specs')
|
specs = request.session.get('specs')
|
||||||
|
@ -890,6 +925,10 @@ class OrdersHostingListView(LoginRequiredMixin, ListView):
|
||||||
self.queryset = HostingOrder.objects.filter(customer__user=user)
|
self.queryset = HostingOrder.objects.filter(customer__user=user)
|
||||||
return super(OrdersHostingListView, self).get_queryset()
|
return super(OrdersHostingListView, self).get_queryset()
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
return super(OrdersHostingListView, self).get(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class OrdersHostingDeleteView(LoginRequiredMixin, DeleteView):
|
class OrdersHostingDeleteView(LoginRequiredMixin, DeleteView):
|
||||||
login_url = reverse_lazy('hosting:login')
|
login_url = reverse_lazy('hosting:login')
|
||||||
|
@ -951,10 +990,12 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
|
||||||
if (value > 2000) or (value < 10):
|
if (value > 2000) or (value < 10):
|
||||||
raise ValidationError(_('Invalid storage size'))
|
raise ValidationError(_('Invalid storage size'))
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
context = {'templates': VMTemplate.objects.all()}
|
context = {'templates': VMTemplate.objects.all()}
|
||||||
return render(request, self.template_name, context)
|
return render(request, self.template_name, context)
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
cores = request.POST.get('cpu')
|
cores = request.POST.get('cpu')
|
||||||
cores_field = forms.IntegerField(validators=[self.validate_cores])
|
cores_field = forms.IntegerField(validators=[self.validate_cores])
|
||||||
|
@ -1042,6 +1083,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
|
||||||
final_url = reverse('hosting:virtual_machines')
|
final_url = reverse('hosting:virtual_machines')
|
||||||
return final_url
|
return final_url
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
vm = self.get_object()
|
vm = self.get_object()
|
||||||
if vm is None:
|
if vm is None:
|
||||||
|
@ -1076,6 +1118,7 @@ class VirtualMachineView(LoginRequiredMixin, View):
|
||||||
|
|
||||||
return render(request, self.template_name, context)
|
return render(request, self.template_name, context)
|
||||||
|
|
||||||
|
@method_decorator(decorators)
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
response = {'status': False}
|
response = {'status': False}
|
||||||
admin_email_body = {}
|
admin_email_body = {}
|
||||||
|
|
|
@ -36,7 +36,7 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
|
||||||
return int(obj.template.memory) / 1024
|
return int(obj.template.memory) / 1024
|
||||||
|
|
||||||
def get_name(self, obj):
|
def get_name(self, obj):
|
||||||
return obj.name.strip('public-')
|
return obj.name.lstrip('public-')
|
||||||
|
|
||||||
|
|
||||||
class VirtualMachineSerializer(serializers.Serializer):
|
class VirtualMachineSerializer(serializers.Serializer):
|
||||||
|
@ -133,7 +133,7 @@ class VirtualMachineSerializer(serializers.Serializer):
|
||||||
def get_configuration(self, obj):
|
def get_configuration(self, obj):
|
||||||
template_id = obj.template.template_id
|
template_id = obj.template.template_id
|
||||||
template = OpenNebulaManager().get_template(template_id)
|
template = OpenNebulaManager().get_template(template_id)
|
||||||
return template.name.strip('public-')
|
return template.name.lstrip('public-')
|
||||||
|
|
||||||
def get_ipv4(self, obj):
|
def get_ipv4(self, obj):
|
||||||
"""
|
"""
|
||||||
|
@ -162,7 +162,7 @@ class VirtualMachineSerializer(serializers.Serializer):
|
||||||
return '-'
|
return '-'
|
||||||
|
|
||||||
def get_name(self, obj):
|
def get_name(self, obj):
|
||||||
return obj.name.strip('public-')
|
return obj.name.lstrip('public-')
|
||||||
|
|
||||||
|
|
||||||
class VMTemplateSerializer(serializers.Serializer):
|
class VMTemplateSerializer(serializers.Serializer):
|
||||||
|
|
|
@ -145,5 +145,7 @@ class VirtualMachineSerializerTestCase(TestCase):
|
||||||
|
|
||||||
for vm in self.manager.get_vms():
|
for vm in self.manager.get_vms():
|
||||||
serialized = VirtualMachineSerializer(vm)
|
serialized = VirtualMachineSerializer(vm)
|
||||||
self.assertEqual(serialized.data.get('name'), vm.name.strip('public-'))
|
self.assertEqual(
|
||||||
|
serialized.data.get('name'), vm.name.lstrip('public-')
|
||||||
|
)
|
||||||
break
|
break
|
||||||
|
|
|
@ -1,20 +1,18 @@
|
||||||
{% load cms_tags custom_tags %}
|
{% load cms_tags custom_tags %}
|
||||||
<section id="{{section_id}}" class="products-section {% if product_instance.section_class %}{{ product_instance.section_class }}{% else %}bg-light-gray{% endif %}">
|
<section id="{{section_id}}" class="products-section {% if product_instance.section_class %}{{ product_instance.section_class }}{% else %}bg-light-gray{% endif %}">
|
||||||
<div id="portfolio">
|
<div id="portfolio">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="text-center wow fadeInDown section-heading-contain">
|
||||||
<div class="col-lg-12 text-center wow fadeInDown" style="visibility: visible; animation-name: fadeInDown;">
|
<h2 class="section-heading">{{ product_instance.title }}</h2>
|
||||||
<h2 class="section-heading">{{ product_instance.title }}</h2>
|
{{ product_instance.sub_title }}
|
||||||
{{ product_instance.sub_title }}
|
</div>
|
||||||
</div>
|
<div class="row">
|
||||||
</div>
|
{% for plugin in product_instance.child_plugin_instances %}
|
||||||
<div class="row">
|
<div class="col-md-4 col-sm-6 portfolio-item wow fadeInUp" data-wow-delay="{{ forloop.counter|multiply:0.25 }}s" style="visibility: visible; animation-delay: {{ forloop.counter|multiply:0.25 }}s; animation-name: fadeInUp;">
|
||||||
{% for plugin in product_instance.child_plugin_instances %}
|
{% render_plugin plugin %}
|
||||||
<div class="col-md-4 col-sm-6 portfolio-item wow fadeInUp" data-wow-delay="{{ forloop.counter|multiply:0.25 }}s" style="visibility: visible; animation-delay: {{ forloop.counter|multiply:0.25 }}s; animation-name: fadeInUp;">
|
</div>
|
||||||
{% render_plugin plugin %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</section>
|
||||||
</section>
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ from django.utils.encoding import force_bytes
|
||||||
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
|
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from django.views.generic import FormView, CreateView
|
from django.views.generic import FormView, CreateView
|
||||||
|
from django.views.decorators.cache import cache_control
|
||||||
|
|
||||||
from membership.models import CustomUser
|
from membership.models import CustomUser
|
||||||
from .forms import SetPasswordForm
|
from .forms import SetPasswordForm
|
||||||
|
@ -57,6 +58,7 @@ class LoginViewMixin(FormView):
|
||||||
|
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
|
|
||||||
|
@cache_control(no_cache=True, must_revalidate=True, no_store=True)
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
if self.request.user.is_authenticated():
|
if self.request.user.is_authenticated():
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
|
|
Loading…
Reference in a new issue