Attempt to merge master into task/3747/multiple_cards_support
6
.gitignore
vendored
|
@ -37,3 +37,9 @@ secret-key
|
|||
*.mo
|
||||
*.log
|
||||
*.sql
|
||||
|
||||
/utils/optimize/
|
||||
|
||||
# to keep empty dirs
|
||||
!.gitkeep
|
||||
*.orig
|
||||
|
|
|
@ -4,11 +4,12 @@ python:
|
|||
# - "3.6"
|
||||
|
||||
env:
|
||||
- DJANGO_SECRET_KEY=0 OPENNEBULA_USERNAME='test' OPENNEBULA_PASSWORD='test' OPENNEBULA_PROTOCOL='http' OPENNEBULA_DOMAIN='test_domain' OPENNEBULA_PORT='2633' OPENNEBULA_ENDPOINT='/RPC2' DCL_TEXT='Data Center Light' CELERY_MAX_RETRIES=0
|
||||
- DJANGO_SECRET_KEY=0 OPENNEBULA_USERNAME='test' OPENNEBULA_PASSWORD='test' OPENNEBULA_PROTOCOL='http' OPENNEBULA_DOMAIN='test_domain' OPENNEBULA_PORT='2633' OPENNEBULA_ENDPOINT='/RPC2' DCL_TEXT='Data Center Light' CELERY_MAX_RETRIES=0 UNGLEICH_SITE_CONFIGS='{"localhost":{"MULTISITE_CMS_URL":"dynamicweb.urls"}}'
|
||||
# install dependencies
|
||||
install: "pip install -r requirements.txt"
|
||||
script:
|
||||
- flake8
|
||||
- python manage.py compilemessages
|
||||
- python manage.py test -v 3
|
||||
# - coverage run --source='.' manage.py test dynamicweb -v 3
|
||||
# - coverage report
|
||||
|
|
108
Changelog
|
@ -1,10 +1,112 @@
|
|||
Next release:
|
||||
1.9: 2018-05-16
|
||||
* #4559: [cms] enable discount on cms calculator
|
||||
1.8: 2018-05-01
|
||||
* #4527: [hosting] cms calculator on non-cms pages for the hosting app
|
||||
* bgfix: [dcl] navbar dropdown target fix
|
||||
* bgfix: [hosting] login/signup pages footer link fix
|
||||
1.7.2: 2018-04-30
|
||||
* bgfix: [cms] add favicon extension to ungleich cms pages
|
||||
* #4474: [cms] reduce heading slider side padding
|
||||
1.7.1: 2018-04-21
|
||||
* #4481: [blog] fix de blog pages 500 error
|
||||
* #4370: [comic] new url /comic to show only comic blogs
|
||||
1.7: 2018-04-20
|
||||
* bgfix: [all] Make /blog available on all domains
|
||||
* #4367: [dcl] email logo resolution fix
|
||||
* #4376: [cms] dcl promo section plugin link color changed to brighter shade
|
||||
* #4379: [dcl] pricing without VAT
|
||||
* bgfix: [blog] fix top menu items to show only one item
|
||||
* #4297: [cms] favicon as a page attribute for dcl template
|
||||
1.6.5: 2018-04-08
|
||||
* #4396: [ungleich] add favicon to ungleich blog
|
||||
* #4327: [dcl] fix navbar logo repeat
|
||||
* bgfix: [hosting] fix broken footer links
|
||||
* bgfix: [dcl] remove ghost migrations from squashed migration
|
||||
* bgfix: [cms] redirect multi-tenant urls to /cms also
|
||||
1.6.4: 2018-04-06
|
||||
* #4362: [cms] Fix the need of dummy home page for different CMS-based sites
|
||||
1.6.3: 2018-04-05
|
||||
* #4377: [cms] header btn external link fix
|
||||
* #4378: [dcl cms] update CMS Integration to have different content for different domains
|
||||
1.6.2: 2018-04-01
|
||||
* bgfix: [dcl] Fix user activation email style; add/correct some DE text
|
||||
* #4373: [dcl] update footer menu for pw reset/login/signup/activation request pages
|
||||
1.6.1: 2018-03-28
|
||||
* bgfix: fix header slider interval issue
|
||||
* #4315: [cms] navbar consistency from cms page to static page
|
||||
* #4313: [hosting] footer style fix
|
||||
1.6: 2018-03-25
|
||||
* #4266: [dcl cms] add promotional section plugin
|
||||
* #3842: [dcl, hosting] change number formatting for all the numbers from german to english locale
|
||||
1.5.5: 2018-03-22
|
||||
* #4278: [dcl cms] edit options for cms navbar and header plugins
|
||||
* bgfix: [dcl cms] fix link plugin issues and section image alignment
|
||||
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)
|
||||
* #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
|
||||
* bgfix: [dcl] fix header style for tos page
|
||||
* #3798: [dg] Redirect user to digital glarus on clicking logo in the email
|
||||
* #3554: [dcl] Remove beta access resources
|
||||
* #4166: [glasfaser] heading text not to be blocked by topnav on mobile after navbar menu click
|
||||
* bgfix: [hosting] Change sdd_size to ssd_size in VirtualMachineSerializer
|
||||
* bgfix: [dg] fix error on /digitalglarus/supporters/
|
||||
* #4166: [dcl] Fix scroll on top menu click
|
||||
* #4150: [ungleich] mobile font alignment
|
||||
* #3713: [dcl] clean up css
|
||||
* bgfix: [glasfaser] mobile top navigation toggle button fixed
|
||||
1.4: 2018-02-22
|
||||
* #4104: [cms, nuglarus] Multisite and access control of cms pages per user
|
||||
1.3.3: 2018-02-21
|
||||
* Add ALLOWED_HOST nüglarus.ch IDN
|
||||
* #4105: [cms] Add cms footer plugin
|
||||
* #4049: [blog] Replace header background image
|
||||
* #3670: [hosting] Shorten ssh key name
|
||||
* #4046: [hosting] Add sdd_size, hdd_size to VirtualMachineSerializer (No visual change)
|
||||
* bgfix: [hosting] increase invoice pdf resolution
|
||||
1.3.2: 2018-01-16
|
||||
* #4000: [all] Replace all ungleich.com with ungleich.ch
|
||||
* #4067: [ungleich] mobile navbar toggle fix
|
||||
* #4103: [dcl] Add "Terms of Service" item to the footer
|
||||
1.3.1: 2017-12-31
|
||||
* feature: [all] Load email configurations host, port and use_tls from env
|
||||
* bugfix: [all] Use ungleich's smtp as relayhost for sending emails
|
||||
1.3: 2017-12-27
|
||||
* #3911: [dcl] Integrate resend activation link into dcl landing payment page
|
||||
* #3972: [hosting] Add ungleich company info to invoice footer
|
||||
* #3974: [hosting] Improve invoice number: Show 404 for invoice resources that do not belong to the user
|
||||
* #3961: [ungleich] Add video cover to the header on ungleich.ch landing page and add corresponding cms plugin
|
||||
* #3774: [hosting] Update Stripe subscription on vm delete
|
||||
* [ungleich] Update text on landing page
|
||||
* #3601: [dcl, hosting] Change minimum required RAM from 2GB to 1GB
|
||||
* #3973: [dcl] Update datacenterlight and glasfaser contact address to Linthal and company name to "ungleich glarus ag"
|
||||
* #3993: [dg] Fix new user membership payment by setting cardholder_name field for UserBillingAddressForm
|
||||
* #3799: [dg] Make digital glarus billing work as monthly subscription
|
||||
* #3994: [dg] Add a line on signup for clarifying dcl users can login without new signup
|
||||
1.2.13: 2017-12-09
|
||||
* [cms] Introduce UngleichHeaderBackgroundImageAndTextSliderPlugin that allows to have scrolling images and texts
|
||||
* [cms] Remove <p> tag for ungleich cms customer item template
|
||||
1.2.12: 2017-12-09
|
||||
* #3594: [digitalglarus] Remove white scroll bar on the right in mobile
|
||||
* #3905: [ungleich] Update ungleich.ch header into a slider
|
||||
* #3968: [ungleich] Fix navbar logo alignment
|
||||
* [all] Enable logging custom modules
|
||||
1.2.11: 2017-11-30
|
||||
* [all] TravisCI: Test against python 3.4.2 only
|
||||
* [ungleich] Remove data-replaced image in ungleich CMS services item
|
||||
plugin template
|
||||
* [ungleich] Remove data-replaced image in ungleich CMS services item plugin template
|
||||
1.2.10: 2017-11-26
|
||||
* #3843: [ungleich] Add generic ungleich CMS template
|
||||
* #3672: [all] Clean existing automated tests
|
||||
|
|
|
@ -1,9 +1,19 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from .models import BetaAccess, BetaAccessVMType, BetaAccessVM
|
||||
# Register your models here.
|
||||
from cms.admin.placeholderadmin import PlaceholderAdminMixin
|
||||
from cms.extensions import PageExtensionAdmin
|
||||
from .cms_models import CMSIntegration, CMSFaviconExtension
|
||||
from .models import VMPricing, VMTemplate
|
||||
|
||||
|
||||
admin.site.register(BetaAccess)
|
||||
admin.site.register(BetaAccessVMType)
|
||||
admin.site.register(BetaAccessVM)
|
||||
class CMSIntegrationAdmin(PlaceholderAdminMixin, admin.ModelAdmin):
|
||||
list_display = ('name', 'domain')
|
||||
|
||||
|
||||
class CMSFaviconExtensionAdmin(PageExtensionAdmin):
|
||||
pass
|
||||
|
||||
|
||||
admin.site.register(CMSIntegration, CMSIntegrationAdmin)
|
||||
admin.site.register(CMSFaviconExtension, CMSFaviconExtensionAdmin)
|
||||
admin.site.register(VMPricing)
|
||||
admin.site.register(VMTemplate)
|
||||
|
|
305
datacenterlight/cms_models.py
Normal file
|
@ -0,0 +1,305 @@
|
|||
from cms.extensions import PageExtension
|
||||
from cms.extensions.extension_pool import extension_pool
|
||||
from cms.models.fields import PlaceholderField
|
||||
from cms.models.pluginmodel import CMSPlugin
|
||||
from django.contrib.sites.models import Site
|
||||
from django.db import models
|
||||
from django.utils.safestring import mark_safe
|
||||
from djangocms_text_ckeditor.fields import HTMLField
|
||||
from filer.fields.file import FilerFileField
|
||||
from filer.fields.image import FilerImageField
|
||||
|
||||
from datacenterlight.models import VMPricing, VMTemplate
|
||||
|
||||
|
||||
class CMSIntegration(models.Model):
|
||||
name = models.CharField(
|
||||
max_length=100, default='default',
|
||||
help_text=(
|
||||
'A unique name for the Integration. This name will be used to '
|
||||
'fetch the Integration into pages'
|
||||
)
|
||||
)
|
||||
footer_placeholder = PlaceholderField(
|
||||
'datacenterlight_footer', related_name='dcl-footer-placeholder+'
|
||||
)
|
||||
navbar_placeholder = PlaceholderField(
|
||||
'datacenterlight_navbar', related_name='dcl-navbar-placeholder+'
|
||||
)
|
||||
calculator_placeholder = PlaceholderField(
|
||||
'datacenterlight_calculator',
|
||||
related_name='dcl-calculator-placeholder+'
|
||||
)
|
||||
domain = models.ForeignKey(Site, null=True, blank=True)
|
||||
|
||||
class Meta:
|
||||
unique_together = ('name', 'domain')
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
class CMSFaviconExtension(PageExtension):
|
||||
favicon = FilerFileField(related_name="cms_favicon_image")
|
||||
|
||||
|
||||
extension_pool.register(CMSFaviconExtension)
|
||||
|
||||
|
||||
# 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)
|
||||
language_dropdown = models.BooleanField(
|
||||
default=True,
|
||||
help_text='Select to include the language selection dropdown.'
|
||||
)
|
||||
|
||||
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 glarus ag", 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 glarus ag', 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.'
|
||||
)
|
||||
|
||||
|
||||
class DCLSectionPromoPluginModel(CMSPlugin):
|
||||
background_image = FilerImageField(
|
||||
on_delete=models.CASCADE, null=True, blank=True,
|
||||
help_text=('Optional background image for the Promo Section'),
|
||||
related_name="dcl_section_promo_promo",
|
||||
)
|
||||
heading = models.CharField(
|
||||
blank=True, null=True, max_length=100,
|
||||
help_text='An optional heading for the Promo Section',
|
||||
)
|
||||
subheading = models.CharField(
|
||||
blank=True, null=True, max_length=200,
|
||||
help_text='An optional subheading for the Promo Section',
|
||||
)
|
||||
content = HTMLField()
|
||||
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.'
|
||||
)
|
||||
text_center = models.BooleanField(
|
||||
default=False,
|
||||
help_text='Select to center align content on small screens.'
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return '#' + self.html_id if self.html_id else str(self.pk)
|
||||
|
||||
def get_extra_classes(self):
|
||||
extra_classes = ''
|
||||
if self.text_center:
|
||||
extra_classes += ' text-center'
|
||||
if self.plain_heading:
|
||||
extra_classes += ' promo-section-plain'
|
||||
if self.background_image:
|
||||
extra_classes += ' promo-with-bg'
|
||||
return extra_classes
|
||||
|
||||
|
||||
class DCLCalculatorPluginModel(CMSPlugin):
|
||||
pricing = models.ForeignKey(
|
||||
VMPricing,
|
||||
related_name="dcl_custom_pricing_vm_pricing",
|
||||
help_text='Choose a pricing that will be associated with this '
|
||||
'Calculator'
|
||||
)
|
||||
vm_type = models.CharField(
|
||||
max_length=50, choices=VMTemplate.VM_TYPE_CHOICES,
|
||||
default=VMTemplate.PUBLIC
|
||||
)
|
170
datacenterlight/cms_plugins.py
Normal file
|
@ -0,0 +1,170 @@
|
|||
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,
|
||||
DCLSectionPromoPluginModel, DCLCalculatorPluginModel
|
||||
)
|
||||
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',
|
||||
'DCLSectionPromoPlugin', 'UngleichHTMLPlugin', 'DCLCalculatorPlugin'
|
||||
]
|
||||
|
||||
def render(self, context, instance, placeholder):
|
||||
context = super(DCLSectionPlugin, self).render(
|
||||
context, instance, placeholder
|
||||
)
|
||||
context['children_to_side'] = []
|
||||
context['children_to_content'] = []
|
||||
context['children_calculator'] = []
|
||||
if instance.child_plugin_instances is not None:
|
||||
right_children = [
|
||||
'DCLSectionImagePluginModel',
|
||||
'DCLSectionIconPluginModel',
|
||||
]
|
||||
for child in instance.child_plugin_instances:
|
||||
if child.__class__.__name__ in right_children:
|
||||
context['children_to_side'].append(child)
|
||||
elif child.plugin_type == 'DCLCalculatorPlugin':
|
||||
context['children_calculator'].append(child)
|
||||
else:
|
||||
context['children_to_content'].append(child)
|
||||
return context
|
||||
|
||||
|
||||
@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 DCLSectionPromoPlugin(CMSPluginBase):
|
||||
module = "Datacenterlight"
|
||||
name = "DCL Section Promo Plugin"
|
||||
model = DCLSectionPromoPluginModel
|
||||
render_template = "datacenterlight/cms/section_promo.html"
|
||||
cache = False
|
||||
|
||||
|
||||
@plugin_pool.register_plugin
|
||||
class DCLCalculatorPlugin(CMSPluginBase):
|
||||
module = "Datacenterlight"
|
||||
name = "DCL Calculator Plugin"
|
||||
model = DCLCalculatorPluginModel
|
||||
render_template = "datacenterlight/cms/calculator.html"
|
||||
cache = False
|
||||
require_parent = True
|
||||
|
||||
def render(self, context, instance, placeholder):
|
||||
context = super(DCLCalculatorPlugin, self).render(
|
||||
context, instance, placeholder
|
||||
)
|
||||
context['templates'] = VMTemplate.objects.filter(
|
||||
vm_type=instance.vm_type
|
||||
)
|
||||
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']
|
24
datacenterlight/cms_toolbar.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
from cms.extensions.toolbar import ExtensionToolbar
|
||||
from cms.toolbar_pool import toolbar_pool
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from .cms_models import CMSFaviconExtension
|
||||
|
||||
|
||||
@toolbar_pool.register
|
||||
class CMSFaviconExtensionToolbar(ExtensionToolbar):
|
||||
# defineds the model for the current toolbar
|
||||
model = CMSFaviconExtension
|
||||
|
||||
def populate(self):
|
||||
# setup the extension toolbar with permissions and sanity checks
|
||||
current_page_menu = self._setup_extension_toolbar()
|
||||
# if it's all ok
|
||||
if current_page_menu:
|
||||
# retrieves the instance of the current extension (if any) and the toolbar item url
|
||||
page_extension, url = self.get_page_extension_admin()
|
||||
if url:
|
||||
# adds a toolbar item
|
||||
current_page_menu.add_modal_item(
|
||||
_('CMS Favicon'), url=url, disabled=not self.toolbar.edit_mode
|
||||
)
|
|
@ -1,26 +1,9 @@
|
|||
from django import forms
|
||||
|
||||
from .models import BetaAccess, ContactUs
|
||||
|
||||
|
||||
class BetaAccessForm(forms.ModelForm):
|
||||
email = forms.CharField(widget=forms.EmailInput())
|
||||
|
||||
class Meta:
|
||||
fields = ['name', 'email']
|
||||
model = BetaAccess
|
||||
from .models import ContactUs
|
||||
|
||||
|
||||
class ContactForm(forms.ModelForm):
|
||||
|
||||
class Meta:
|
||||
fields = ['name', 'email', 'message']
|
||||
model = ContactUs
|
||||
|
||||
|
||||
# class BetaAccessVMForm(forms.ModelForm):
|
||||
# type = forms.CharField(widget=forms.EmailInput())
|
||||
|
||||
# class Meta:
|
||||
# fields = ['email']
|
||||
# model = BetaAccessVM
|
||||
|
|
|
@ -8,65 +8,35 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-11-27 07:36+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2018-05-12 21:43+0530\n"
|
||||
"PO-Revision-Date: 2018-03-30 23:22+0000\n"
|
||||
"Last-Translator: b'Anonymous User <coder.purple+25@gmail.com>'\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Translated-Using: django-rosetta 0.8.1\n"
|
||||
|
||||
msgid "CMS Favicon"
|
||||
msgstr ""
|
||||
|
||||
#, python-format
|
||||
msgid "Your New VM %(vm_name)s at Data Center Light"
|
||||
msgstr "Deine neue VM %(vm_name)s bei Data Center Light"
|
||||
|
||||
msgid "Enter name"
|
||||
msgstr "Name"
|
||||
msgid "All Rights Reserved"
|
||||
msgstr "Alle Rechte vorbehalten"
|
||||
|
||||
msgid "Enter email"
|
||||
msgstr "E-Mail-Adresse"
|
||||
msgid "Toggle navigation"
|
||||
msgstr "Umschalten"
|
||||
|
||||
msgid "Request Beta Access"
|
||||
msgstr "Beantrage Beta-Zugang"
|
||||
msgid "Login"
|
||||
msgstr "Anmelden"
|
||||
|
||||
msgid "Request Sent"
|
||||
msgstr "Anfrage verschickt"
|
||||
|
||||
msgid ""
|
||||
"Thank you for your subscription! You will receive a confirmation mail from "
|
||||
"our team"
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
"Vielen dank für Ihre Anmeldung. Sie erhalten in kürze eine Bestätigungsmail "
|
||||
"von unserem Team"
|
||||
|
||||
msgid "VM hosting"
|
||||
msgstr ""
|
||||
|
||||
msgid "month"
|
||||
msgstr "Monat"
|
||||
|
||||
msgid "VAT included"
|
||||
msgstr "MwSt. inklusive"
|
||||
|
||||
msgid "Hosted in Switzerland"
|
||||
msgstr "Standort: Schweiz"
|
||||
|
||||
msgid "Please enter a value in range 1 - 48."
|
||||
msgstr "Bitte gib einen Wert von 1 bis 48 ein."
|
||||
|
||||
msgid "Please enter a value in range 2 - 200."
|
||||
msgstr "Bitte gib einen Wert von 2 bis 200 ein."
|
||||
|
||||
msgid "Please enter a value in range 10 - 2000."
|
||||
msgstr "Bitte gib einen Wert von 10 bis 200 ein."
|
||||
|
||||
msgid "GB Storage (SSD)"
|
||||
msgstr "GB Storage (SSD)"
|
||||
|
||||
msgid "Continue"
|
||||
msgstr "Weiter"
|
||||
|
||||
msgid "Thank you for contacting us."
|
||||
msgstr "Nachricht gesendet."
|
||||
|
@ -100,32 +70,6 @@ msgstr ""
|
|||
msgid "SUBMIT"
|
||||
msgstr "ABSENDEN"
|
||||
|
||||
msgid "Your Data Center Light Team"
|
||||
msgstr "Dein Data Center Light Team"
|
||||
|
||||
msgid "Thank you for your request."
|
||||
msgstr "Vielen Dank für Deine Anfrage."
|
||||
|
||||
msgid "You are one step away from being our beta tester!"
|
||||
msgstr ""
|
||||
"Sie sind nur noch einen Schritt davon entfernt, unser Beta-Tester zu werden!"
|
||||
|
||||
msgid ""
|
||||
"Currently we are running our tests to make sure everything runs perfectly."
|
||||
msgstr ""
|
||||
"Momentan testen wir die Beta-Umgebung um sie für Ihren Gebrauch "
|
||||
"sicherzustellen."
|
||||
|
||||
msgid ""
|
||||
"In the meantime, we would like to ask you a little patience<br/> until our "
|
||||
"team contacts you with beta access."
|
||||
msgstr ""
|
||||
"Wir werden dann sobald als möglich Ihren Beta-Zugang erstellen und Sie "
|
||||
"daraufhin kontaktieren.Bis dahin bitten wir Sie um etwas Geduld."
|
||||
|
||||
msgid "Thank you!"
|
||||
msgstr "Vielen Dank!"
|
||||
|
||||
msgid "Data Center Light Account Activation"
|
||||
msgstr "Data Center Light Account Aktivierung"
|
||||
|
||||
|
@ -136,7 +80,7 @@ msgid ""
|
|||
"#4382c8; font-weight: 400;\">here</a>."
|
||||
msgstr ""
|
||||
"Klicke <a href=\"%(base_url)s%(activation_link)s\"style=\"text-decoration: "
|
||||
"none; color: #4382c8; font-weight: 400;\">here</a> um deinen Data Center "
|
||||
"none; color: #4382c8; font-weight: 400;\">hier</a> um deinen Data Center "
|
||||
"Light Account zu aktivieren."
|
||||
|
||||
msgid ""
|
||||
|
@ -156,14 +100,26 @@ msgstr "Deine E-Mail-Adresse"
|
|||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
msgid "You can reset your password here"
|
||||
msgstr "Du kannst dein Passwort hier zurück setzen"
|
||||
#, python-format
|
||||
msgid ""
|
||||
"You can reset your password <a href=\"%(base_url)s%(reset_password_url)s\" "
|
||||
"style=\"text-decoration: none; color: #4382c8; font-weight: 400;\">here</a>."
|
||||
msgstr ""
|
||||
"Du kannst dein Passwort <a href=\"%(base_url)s%(reset_password_url)s\" style="
|
||||
"\"text-decoration: none; color: #4382c8; font-weight: 400;\">hier</a> "
|
||||
"zurücksetzen."
|
||||
|
||||
msgid "Your Data Center Light Team"
|
||||
msgstr "Dein Data Center Light Team"
|
||||
|
||||
msgid ""
|
||||
"You can copy and paste the following link into the address bar of your "
|
||||
"browser to activate your Data Center Light account."
|
||||
msgstr "Kopiere den folgenden Link in die Adressleiste deines Browsers."
|
||||
|
||||
msgid "You can reset your password here"
|
||||
msgstr "Du kannst dein Passwort hier zurücksetzen"
|
||||
|
||||
msgid "Welcome to Data Center Light!"
|
||||
msgstr "Willkommen beim Data Center Light!"
|
||||
|
||||
|
@ -178,45 +134,51 @@ msgstr "Unser Angebot beginnt bei 15 CHF pro Monat. Probier's jetzt aus!"
|
|||
msgid "ORDER VM"
|
||||
msgstr "VM BESTELLEN"
|
||||
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
msgid "Highlights"
|
||||
msgid "VM hosting"
|
||||
msgstr ""
|
||||
|
||||
msgid "Scale out"
|
||||
msgstr "Skalierung"
|
||||
msgid "month"
|
||||
msgstr "Monat"
|
||||
|
||||
msgid "Reliable and light"
|
||||
msgstr "Zuverlässig und leicht"
|
||||
msgid "VAT included"
|
||||
msgstr "MwSt. inklusive"
|
||||
|
||||
msgid "Pricing"
|
||||
msgstr "Preise"
|
||||
msgid "You save"
|
||||
msgstr "Du sparst"
|
||||
|
||||
msgid "Order VM"
|
||||
msgstr "VM bestellen"
|
||||
msgid "Hosted in Switzerland"
|
||||
msgstr "Standort: Schweiz"
|
||||
|
||||
msgid "Please enter a value in range 1 - 48."
|
||||
msgstr "Bitte gib einen Wert von 1 bis 48 ein."
|
||||
|
||||
msgid "Please enter a value in range 1 - 200."
|
||||
msgstr "Bitte gib einen Wert von 1 bis 200 ein."
|
||||
|
||||
msgid "Please enter a value in range 10 - 2000."
|
||||
msgstr "Bitte gib einen Wert von 10 bis 2000 ein."
|
||||
|
||||
msgid "GB Storage (SSD)"
|
||||
msgstr "GB Storage (SSD)"
|
||||
|
||||
msgid "Continue"
|
||||
msgstr "Weiter"
|
||||
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
msgid "Contact"
|
||||
msgstr "Kontakt"
|
||||
|
||||
msgid "All Rights Reserved"
|
||||
msgstr "Alle Rechte vorbehalten"
|
||||
|
||||
msgid "Toggle navigation"
|
||||
msgstr "Umschalten"
|
||||
|
||||
msgid "Why Data Center Light?"
|
||||
msgstr "Warum Data Center Light?"
|
||||
|
||||
msgid "Login"
|
||||
msgstr "Anmelden"
|
||||
|
||||
msgid "Dashboard"
|
||||
msgstr ""
|
||||
msgid "Terms of Service"
|
||||
msgstr "Nutzungsbedingungen"
|
||||
|
||||
msgid "Finally, an affordable VM hosting in Switzerland!"
|
||||
msgstr "Endlich: bezahlbares VM Hosting in der Schweiz"
|
||||
|
||||
msgid "Highlights"
|
||||
msgstr ""
|
||||
|
||||
msgid "I want it!"
|
||||
msgstr "Das will ich haben!"
|
||||
|
||||
|
@ -247,6 +209,9 @@ msgstr ""
|
|||
"mit FOSS (Free Open Source Software) arbeitet und wir daher auf "
|
||||
"Lizenzgebühren verzichten können.
"
|
||||
|
||||
msgid "Scale out"
|
||||
msgstr "Skalierung"
|
||||
|
||||
msgid ""
|
||||
"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 "
|
||||
|
@ -256,6 +221,9 @@ msgstr ""
|
|||
"erschwingliche Systeme. Bei grösserer Auslastung werden mehr "
|
||||
"Standardkomponenten hinzugekauft und skalieren so das Datencenter."
|
||||
|
||||
msgid "Reliable and light"
|
||||
msgstr "Zuverlässig und leicht"
|
||||
|
||||
msgid ""
|
||||
"Our VMs are located in Switzerland, with reliable power supply and fast "
|
||||
"internet connection. Our VM costs less thanks to our featherlight "
|
||||
|
@ -316,6 +284,9 @@ msgstr ""
|
|||
msgid "Forgot password?"
|
||||
msgstr "Passwort vergessen?"
|
||||
|
||||
msgid "Resend activation link"
|
||||
msgstr "Aktivierungslink noch einmal senden"
|
||||
|
||||
msgid "Sign up"
|
||||
msgstr "Registrieren"
|
||||
|
||||
|
@ -343,23 +314,21 @@ msgstr "Gesamt"
|
|||
msgid "including VAT"
|
||||
msgstr "inkl. Mehrwertsteuer"
|
||||
|
||||
msgid "excluding VAT"
|
||||
msgstr "exkl. Mehrwertsteuer"
|
||||
|
||||
msgid "Month"
|
||||
msgstr "Monat"
|
||||
|
||||
msgid "Discount"
|
||||
msgstr "Rabatt"
|
||||
|
||||
msgid "Will be applied at checkout"
|
||||
msgstr "wird an der Kasse angewendet"
|
||||
|
||||
msgid "Credit Card"
|
||||
msgstr "Kreditkarte"
|
||||
|
||||
msgid ""
|
||||
"Please select one of the cards that you used before or fill in your credit "
|
||||
"card information below. We are using <a href=\"https://stripe.com\" target="
|
||||
"\"_blank\">Stripe</a> for payment and do not store your information in our "
|
||||
"database."
|
||||
msgstr ""
|
||||
"Bitte wähle Seine der Karten aus, die du zuvor verwendet hast, oder gib "
|
||||
"deine Kreditkartendaten unten ein. Wir verwenden <a href=\"https://stripe.com"
|
||||
"\" target=\"_blank\">Stripe</a> als Zahlungdiensleister und speichern deine "
|
||||
"Daten nicht in unserer Datenbank."
|
||||
|
||||
msgid ""
|
||||
"Please fill in your credit card information below. We are using <a href="
|
||||
"\"https://stripe.com\" target=\"_blank\">Stripe</a> for payment and do not "
|
||||
|
@ -369,17 +338,31 @@ msgstr ""
|
|||
"\"https://stripe.com\" target=\"_blank\">Stripe</a> für die Bezahlung und "
|
||||
"speichern keine Informationen in unserer Datenbank."
|
||||
|
||||
msgid "Last"
|
||||
msgstr "Vor"
|
||||
msgid ""
|
||||
"You are not making any payment yet. After submitting your card information, "
|
||||
"you will be taken to the Confirm Order Page."
|
||||
msgstr ""
|
||||
"Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst ausgelöst, "
|
||||
"nachdem Du die Bestellung auf der nächsten Seite bestätigt hast."
|
||||
|
||||
msgid "Type"
|
||||
msgid "Card Number"
|
||||
msgstr "Kreditkartennummer"
|
||||
|
||||
msgid "Expiry Date"
|
||||
msgstr "Ablaufdatum"
|
||||
|
||||
msgid "CVC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Card Type"
|
||||
msgstr "Kartentyp"
|
||||
|
||||
msgid "SELECT"
|
||||
msgstr "Auswählen"
|
||||
|
||||
msgid "Use another card"
|
||||
msgstr "Benutze eine andere Kreditkarte"
|
||||
msgid ""
|
||||
"You are not making any payment yet. After placing your order, you will be "
|
||||
"taken to the Submit Payment Page."
|
||||
msgstr ""
|
||||
"Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst ausgelöst, "
|
||||
"nachdem Du die Bestellung auf der nächsten Seite bestätigt hast."
|
||||
|
||||
msgid "Processing"
|
||||
msgstr "Weiter"
|
||||
|
@ -387,25 +370,63 @@ msgstr "Weiter"
|
|||
msgid "Enter your credit card number"
|
||||
msgstr "Deine Kreditkartennummer"
|
||||
|
||||
#, python-format
|
||||
msgid "%(page_header_text)s"
|
||||
msgstr ""
|
||||
|
||||
msgid "Date"
|
||||
msgstr "Datum"
|
||||
|
||||
msgid "Billed to"
|
||||
msgstr "Rechnungsadresse"
|
||||
|
||||
msgid "Payment method"
|
||||
msgstr "Bezahlmethode"
|
||||
|
||||
msgid "ending in"
|
||||
msgstr "endend in"
|
||||
|
||||
msgid "Order summary"
|
||||
msgstr "Bestellungsübersicht"
|
||||
|
||||
msgid "Product"
|
||||
msgstr "Produkt"
|
||||
|
||||
msgid "Subtotal"
|
||||
msgstr "Zwischensumme"
|
||||
|
||||
msgid "VAT"
|
||||
msgstr "Mehrwertsteuer"
|
||||
|
||||
#, python-format
|
||||
msgid ""
|
||||
"By clicking \"Place order\" this plan will charge your credit card account "
|
||||
"with the fee of %(vm_price)sCHF/month"
|
||||
"with %(vm_total_price)s CHF/month"
|
||||
msgstr ""
|
||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit %(vm_price)sCHF "
|
||||
"pro Monat belastet"
|
||||
"Wenn Du \"bestellen\" auswählst, wird Deine Kreditkarte mit "
|
||||
"%(vm_total_price)s CHF pro Monat belastet"
|
||||
|
||||
msgid "Place order"
|
||||
msgstr "Bestellen"
|
||||
|
||||
msgid "Thank you for order! Our team will contact you via email"
|
||||
msgstr ""
|
||||
"Vielen Dank für die Bestellung. Unser Team setzt sich sobald wie möglich mit "
|
||||
"Dir via E-Mail in Verbindung."
|
||||
msgid "Processing..."
|
||||
msgstr "Abarbeitung..."
|
||||
|
||||
msgid "as soon as possible!"
|
||||
msgid "Hold tight, we are processing your request"
|
||||
msgstr "Bitte warten - wir verarbeiten Deine Anfrage gerade"
|
||||
|
||||
msgid "OK"
|
||||
msgstr ""
|
||||
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
msgid "Some problem encountered. Please try again later."
|
||||
msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal."
|
||||
|
||||
msgid "Why Data Center Light?"
|
||||
msgstr "Warum Data Center Light?"
|
||||
|
||||
msgid "Tech Stack"
|
||||
msgstr "Tech Stack"
|
||||
|
||||
|
@ -420,7 +441,7 @@ msgstr ""
|
|||
"nicht Open-Source ist.<br/>Yep, so cool sind wir."
|
||||
|
||||
msgid "Our services run on"
|
||||
msgstr "Unsere Dienste läuft auf"
|
||||
msgstr "Unsere Dienste läufen auf"
|
||||
|
||||
msgid "Our monitoring"
|
||||
msgstr "Unser Monitoring"
|
||||
|
@ -492,10 +513,7 @@ msgid "Invalid storage size"
|
|||
msgstr "Ungültige Speicher-Grösse"
|
||||
|
||||
#, python-brace-format
|
||||
msgid "{user} does not have permission to access the card"
|
||||
msgstr ""
|
||||
|
||||
msgid "An error occurred. Details: {}"
|
||||
msgid "Incorrect pricing name. Please contact support{support_email}"
|
||||
msgstr ""
|
||||
|
||||
msgid "Confirm Order"
|
||||
|
@ -521,61 +539,66 @@ msgstr ""
|
|||
"Deine VM ist gleich bereit. Wir senden Dir eine Bestätigungsemail, sobald Du "
|
||||
"auf sie zugreifen kannst."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You are not making any payment yet. After submitting your card "
|
||||
#~ "information, you will be taken to the Confirm Order Page."
|
||||
#~ msgstr ""
|
||||
#~ "Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst "
|
||||
#~ "ausgelöst, nachdem Du die Bestellung auf der nächsten Seite bestätigt "
|
||||
#~ "hast."
|
||||
#~ msgid "Pricing"
|
||||
#~ msgstr "Preise"
|
||||
|
||||
#~ msgid "Card Number"
|
||||
#~ msgstr "Kreditkartennummer"
|
||||
#~ msgid "Order VM"
|
||||
#~ msgstr "VM bestellen"
|
||||
|
||||
#~ msgid "Expiry Date"
|
||||
#~ msgstr "Ablaufdatum"
|
||||
#~ msgid "Enter name"
|
||||
#~ msgstr "Name"
|
||||
|
||||
#~ msgid "Card Type"
|
||||
#~ msgstr "Kartentyp"
|
||||
#~ msgid "Enter email"
|
||||
#~ msgstr "E-Mail-Adresse"
|
||||
|
||||
#~ msgid "Request Beta Access"
|
||||
#~ msgstr "Beantrage Beta-Zugang"
|
||||
|
||||
#~ msgid "Request Sent"
|
||||
#~ msgstr "Anfrage verschickt"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "You are not making any payment yet. After placing your order, you will be "
|
||||
#~ "taken to the Submit Payment Page."
|
||||
#~ "Thank you for your subscription! You will receive a confirmation mail "
|
||||
#~ "from our team"
|
||||
#~ msgstr ""
|
||||
#~ "Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst "
|
||||
#~ "ausgelöst, nachdem Du die Bestellung auf der nächsten Seite bestätigt "
|
||||
#~ "hast."
|
||||
#~ "Vielen dank für Ihre Anmeldung. Sie erhalten in kürze eine "
|
||||
#~ "Bestätigungsmail von unserem Team"
|
||||
|
||||
#~ msgid "Thank you for your request."
|
||||
#~ msgstr "Vielen Dank für Deine Anfrage."
|
||||
|
||||
#~ msgid "You are one step away from being our beta tester!"
|
||||
#~ msgstr ""
|
||||
#~ "Sie sind nur noch einen Schritt davon entfernt, unser Beta-Tester zu "
|
||||
#~ "werden!"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Currently we are running our tests to make sure everything runs perfectly."
|
||||
#~ msgstr ""
|
||||
#~ "Momentan testen wir die Beta-Umgebung um sie für Ihren Gebrauch "
|
||||
#~ "sicherzustellen."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "In the meantime, we would like to ask you a little patience<br/> until "
|
||||
#~ "our team contacts you with beta access."
|
||||
#~ msgstr ""
|
||||
#~ "Wir werden dann sobald als möglich Ihren Beta-Zugang erstellen und Sie "
|
||||
#~ "daraufhin kontaktieren.Bis dahin bitten wir Sie um etwas Geduld."
|
||||
|
||||
#~ msgid "Thank you!"
|
||||
#~ msgstr "Vielen Dank!"
|
||||
|
||||
#~ msgid "Thank you for order! Our team will contact you via email"
|
||||
#~ msgstr ""
|
||||
#~ "Vielen Dank für die Bestellung. Unser Team setzt sich sobald wie möglich "
|
||||
#~ "mit Dir via E-Mail in Verbindung."
|
||||
|
||||
#~ msgid "Affordable VM hosting based in Switzerland"
|
||||
#~ msgstr "Bezahlbares VM Hosting in der Schweiz"
|
||||
|
||||
#~ msgid "Processing..."
|
||||
#~ msgstr "Abarbeitung..."
|
||||
|
||||
#~ msgid "Hold tight, we are processing your request"
|
||||
#~ msgstr "Bitte warten - wir verbeiten Deine Anfrage gerade"
|
||||
|
||||
#~ msgid "Some problem encountered. Please try again later."
|
||||
#~ msgstr "Ein Problem ist aufgetreten. Bitte versuche es später noch einmal."
|
||||
|
||||
#~ msgid "Submit"
|
||||
#~ msgstr "Absenden"
|
||||
|
||||
#~ msgid "Date"
|
||||
#~ msgstr "Datum"
|
||||
|
||||
#~ msgid "Billed To:"
|
||||
#~ msgstr "Rechnungsadresse"
|
||||
|
||||
#~ msgid "Payment Method:"
|
||||
#~ msgstr "Bezahlmethode"
|
||||
|
||||
#~ msgid "ending in"
|
||||
#~ msgstr "endend in"
|
||||
|
||||
#~ msgid "Order summary"
|
||||
#~ msgstr "Bestellungsübersicht"
|
||||
|
||||
#~ msgid "We are cutting down the costs significantly!"
|
||||
#~ msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen"
|
||||
|
||||
|
|
21
datacenterlight/management/commands/cmsintegrate.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
from datacenterlight.cms_models import CMSIntegration
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = '''Creates cms integration objects for datacenterlight'''
|
||||
|
||||
def handle(self, *args, **options):
|
||||
self.create_cms_integration()
|
||||
|
||||
def create_cms_integration(self, site=None):
|
||||
obj, created = CMSIntegration.objects.get_or_create(
|
||||
name='default', domain=site
|
||||
)
|
||||
domain_name = site.domain if site else 'All Sites'
|
||||
if created:
|
||||
print('created the default CMSIntegration object for', domain_name)
|
||||
else:
|
||||
print(
|
||||
'default CMSIntegration object already exists for', domain_name
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
|
||||
from datacenterlight.models import VMPricing
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = '''Creates default VMPricing object'''
|
||||
DEFAULT_VMPRICING_NAME = 'default'
|
||||
|
||||
def handle(self, *args, **options):
|
||||
self.create_default_vm_pricing()
|
||||
|
||||
def create_default_vm_pricing(self):
|
||||
obj, created = VMPricing.objects.get_or_create(
|
||||
name=self.DEFAULT_VMPRICING_NAME,
|
||||
defaults={
|
||||
"vat_inclusive": True,
|
||||
"cores_unit_price": 5,
|
||||
"ram_unit_price": 2,
|
||||
"ssd_unit_price": 0.6,
|
||||
"hdd_unit_price": 0.01
|
||||
}
|
||||
)
|
||||
|
||||
if created:
|
||||
print(
|
||||
'Successfully created {} VMPricing object'.format(
|
||||
self.DEFAULT_VMPRICING_NAME
|
||||
)
|
||||
)
|
||||
else:
|
||||
print(
|
||||
'{} VMPricing exists already.'.format(
|
||||
self.DEFAULT_VMPRICING_NAME
|
||||
)
|
||||
)
|
|
@ -7,18 +7,31 @@ logger = logging.getLogger(__name__)
|
|||
|
||||
|
||||
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 get_templates(self, manager, prefix):
|
||||
templates = manager.get_templates('%s-' % prefix)
|
||||
dcl_vm_templates = []
|
||||
for template in templates:
|
||||
template_name = template.name.lstrip('%s-' % prefix)
|
||||
template_id = template.id
|
||||
dcl_vm_template = VMTemplate.create(
|
||||
template_name, template_id, prefix
|
||||
)
|
||||
dcl_vm_templates.append(dcl_vm_template)
|
||||
return dcl_vm_templates
|
||||
|
||||
def handle(self, *args, **options):
|
||||
try:
|
||||
manager = OpenNebulaManager()
|
||||
templates = manager.get_templates()
|
||||
dcl_vm_templates = []
|
||||
for template in templates:
|
||||
template_name = template.name.strip('public-')
|
||||
template_id = template.id
|
||||
dcl_vm_template = VMTemplate.create(template_name, template_id)
|
||||
dcl_vm_templates.append(dcl_vm_template)
|
||||
dcl_vm_templates.extend(
|
||||
self.get_templates(manager, VMTemplate.PUBLIC)
|
||||
)
|
||||
dcl_vm_templates.extend(
|
||||
self.get_templates(manager, VMTemplate.IPV6)
|
||||
)
|
||||
|
||||
old_vm_templates = VMTemplate.objects.all()
|
||||
old_vm_templates.delete()
|
||||
|
@ -26,4 +39,5 @@ class Command(BaseCommand):
|
|||
for dcl_vm_template in dcl_vm_templates:
|
||||
dcl_vm_template.save()
|
||||
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)))
|
||||
|
|
32
datacenterlight/migrations/0011_auto_20180220_1423.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-02-20 14:23
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0010_merge'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='betaaccessvm',
|
||||
name='access',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='betaaccessvm',
|
||||
name='type',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='BetaAccess',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='BetaAccessVM',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='BetaAccessVMType',
|
||||
),
|
||||
]
|
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
|
@ -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',),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-03-19 20:46
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0013_dclnavbarpluginmodel'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dclnavbarpluginmodel',
|
||||
name='language_dropdown',
|
||||
field=models.BooleanField(
|
||||
default=True, help_text='Select to include the language selection dropdown.'),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,43 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-03-21 19:09
|
||||
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', '0013_dclnavbarpluginmodel'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DCLSectionPromoPluginModel',
|
||||
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 Promo Section', max_length=100, null=True)),
|
||||
('subheading', models.CharField(
|
||||
blank=True, help_text='An optional subheading for the Promo Section', max_length=200, null=True)),
|
||||
('content', djangocms_text_ckeditor.fields.HTMLField()),
|
||||
('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)),
|
||||
('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_image', filer.fields.image.FilerImageField(blank=True, help_text='Optional background image for the Promo Section',
|
||||
null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl_section_promo_promo', to='filer.Image')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=('cms.cmsplugin',),
|
||||
),
|
||||
]
|
21
datacenterlight/migrations/0015_auto_20180323_0011.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-03-22 19:22
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0014_dclsectionpromopluginmodel'),
|
||||
('datacenterlight', '0014_dclnavbarpluginmodel_language_dropdown'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='dclsectionpromopluginmodel',
|
||||
old_name='center_on_mobile',
|
||||
new_name='text_center',
|
||||
),
|
||||
]
|
31
datacenterlight/migrations/0016_cmsintegration.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-03-27 15:31
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import cms.models.fields
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0015_auto_20180323_0011'),
|
||||
('cms', '0014_auto_20160404_1908'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CMSIntegration',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True,
|
||||
primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('navbar_placeholder', cms.models.fields.PlaceholderField(editable=False, null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE, slotname='datacenterlight_navbar', to='cms.Placeholder')),
|
||||
('footer_placeholder', cms.models.fields.PlaceholderField(editable=False, null=True,
|
||||
on_delete=django.db.models.deletion.CASCADE, slotname='datacenterlight_footer', to='cms.Placeholder')),
|
||||
('name', models.CharField(default='default',
|
||||
help_text='A unique name for the Integration. This name will be used to fetch the Integration into pages', max_length=100, unique=True)),
|
||||
],
|
||||
),
|
||||
]
|
27
datacenterlight/migrations/0017_auto_20180329_0056.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-03-28 19:26
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import cms.models.fields
|
||||
from django.db import migrations
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0016_cmsintegration'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='cmsintegration',
|
||||
name='footer_placeholder',
|
||||
field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl-footer-placeholder+', slotname='datacenterlight_footer', to='cms.Placeholder'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cmsintegration',
|
||||
name='navbar_placeholder',
|
||||
field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='dcl-navbar-placeholder+', slotname='datacenterlight_navbar', to='cms.Placeholder'),
|
||||
),
|
||||
]
|
41
datacenterlight/migrations/0018_auto_20180403_1930.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-04-03 17:08
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0017_auto_20180329_0056'),
|
||||
('sites', '0002_alter_domain_unique'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='dclcontactpluginmodel',
|
||||
name='organization_name',
|
||||
field=models.CharField(blank=True, default='ungleich glarus ag', max_length=100),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='dclfooterpluginmodel',
|
||||
name='copyright_label',
|
||||
field=models.CharField(blank=True, default='ungleich glarus ag', help_text='Name of the company alongside the copyright year', max_length=100),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='cmsintegration',
|
||||
name='domain',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='cmsintegration',
|
||||
name='name',
|
||||
field=models.CharField(default='default', help_text='A unique name for the Integration. This name will be used to fetch the Integration into pages', max_length=100),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='cmsintegration',
|
||||
unique_together=set([('name', 'domain')]),
|
||||
),
|
||||
]
|
45
datacenterlight/migrations/0019_auto_20180415_2236.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-04-15 22:36
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('cms', '0014_auto_20160404_1908'),
|
||||
('datacenterlight', '0018_auto_20180403_1930'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DCLCustomPricingModel',
|
||||
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')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
bases=('cms.cmsplugin',),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='VMPricing',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=255, unique=True)),
|
||||
('vat_inclusive', models.BooleanField(default=True)),
|
||||
('vat_percentage', models.DecimalField(blank=True, decimal_places=5, default=0, max_digits=7)),
|
||||
('cores_unit_price', models.DecimalField(decimal_places=5, default=0, max_digits=7)),
|
||||
('ram_unit_price', models.DecimalField(decimal_places=5, default=0, max_digits=7)),
|
||||
('ssd_unit_price', models.DecimalField(decimal_places=5, default=0, max_digits=7)),
|
||||
('hdd_unit_price', models.DecimalField(decimal_places=6, default=0, max_digits=7)),
|
||||
],
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dclcustompricingmodel',
|
||||
name='pricing',
|
||||
field=models.ForeignKey(help_text='Choose a pricing that will be associated with this Calculator', on_delete=django.db.models.deletion.CASCADE, related_name='dcl_custom_pricing_vm_pricing', to='datacenterlight.VMPricing'),
|
||||
),
|
||||
]
|
29
datacenterlight/migrations/0019_cmsfaviconextension.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-04-12 03:16
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
import filer.fields.file
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0018_auto_20180403_1930'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='CMSFaviconExtension',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('extended_object', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to='cms.Page')),
|
||||
('favicon', filer.fields.file.FilerFileField(on_delete=django.db.models.deletion.CASCADE, related_name='cms_favicon_image', to='filer.File')),
|
||||
('public_extension', models.OneToOneField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='draft_extension', to='datacenterlight.CMSFaviconExtension')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
16
datacenterlight/migrations/0020_merge.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-04-20 15:04
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0019_auto_20180415_2236'),
|
||||
('datacenterlight', '0019_cmsfaviconextension'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
]
|
|
@ -0,0 +1,28 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-04-25 09:20
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import cms.models.fields
|
||||
from django.db import migrations
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0020_merge'),
|
||||
('cms', '0014_auto_20160404_1908'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='cmsintegration',
|
||||
name='calculator_placeholder',
|
||||
field=cms.models.fields.PlaceholderField(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name='dcl-calculator-placeholder+', slotname='datacenterlight_calculator', to='cms.Placeholder'),
|
||||
),
|
||||
migrations.RenameModel(
|
||||
old_name='DCLCustomPricingModel',
|
||||
new_name='DCLCalculatorPluginModel',
|
||||
),
|
||||
]
|
26
datacenterlight/migrations/0022_auto_20180506_1950.py
Normal file
|
@ -0,0 +1,26 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-05-07 02:19
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0021_cmsintegration_calculator_placeholder'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='vmpricing',
|
||||
name='discount_amount',
|
||||
field=models.DecimalField(
|
||||
decimal_places=2, default=0, max_digits=6),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='vmpricing',
|
||||
name='discount_name',
|
||||
field=models.CharField(blank=True, max_length=255, null=True),
|
||||
),
|
||||
]
|
25
datacenterlight/migrations/0023_auto_20180524_0349.py
Normal file
|
@ -0,0 +1,25 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2018-05-23 22:19
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('datacenterlight', '0022_auto_20180506_1950'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dclcalculatorpluginmodel',
|
||||
name='vm_type',
|
||||
field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='vmtemplate',
|
||||
name='vm_type',
|
||||
field=models.CharField(choices=[('public', 'Public'), ('ipv6only', 'Ipv6Only')], default='public', max_length=50),
|
||||
),
|
||||
]
|
|
@ -1,67 +1,103 @@
|
|||
import logging
|
||||
|
||||
from django.db import models
|
||||
|
||||
|
||||
class BetaAccessVMType(models.Model):
|
||||
ssd = models.IntegerField()
|
||||
ram = models.IntegerField()
|
||||
cpu = models.IntegerField()
|
||||
price = models.FloatField()
|
||||
|
||||
def __str__(self):
|
||||
return "ID: %s - SSD %s - RAM %s - CPU %s - Price %s " % \
|
||||
(self.id, str(self.ssd), self.ram, self.cpu, self.price)
|
||||
|
||||
|
||||
class BetaAccess(models.Model):
|
||||
email = models.CharField(max_length=250)
|
||||
name = models.CharField(max_length=250)
|
||||
|
||||
# vm = models.ForeignKey(BetaAccessVM)
|
||||
|
||||
def __str__(self):
|
||||
vms = self.betaaccessvm_set.all()
|
||||
rep = "Email: %s " % self.email
|
||||
for vm in vms:
|
||||
rep += "(vm:%s - amount:%s) - " % (vm.type.id, vm.amount)
|
||||
return rep
|
||||
|
||||
|
||||
class BetaAccessVM(models.Model):
|
||||
type = models.ForeignKey(BetaAccessVMType)
|
||||
access = models.ForeignKey(BetaAccess)
|
||||
amount = models.IntegerField()
|
||||
|
||||
@classmethod
|
||||
def create(cls, data):
|
||||
VM_KEY_ID = 0
|
||||
VM_AMOUNT = 1
|
||||
ZERO = 0
|
||||
email = data.get('email')
|
||||
beta_access = BetaAccess.objects.create(email=email)
|
||||
vm_data = [(key, value) for key, value in data.items() if 'vm' in key]
|
||||
created_vms = []
|
||||
for vm in vm_data:
|
||||
if int(vm[VM_AMOUNT]) == ZERO:
|
||||
continue
|
||||
vm_id = vm[VM_KEY_ID].split('-').pop()
|
||||
vm_type = BetaAccessVMType.objects.get(id=vm_id)
|
||||
created_vms.append(cls.objects.create(access=beta_access,
|
||||
amount=vm[VM_AMOUNT], type=vm_type))
|
||||
|
||||
return created_vms
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class VMTemplate(models.Model):
|
||||
PUBLIC = 'public'
|
||||
IPV6 = 'ipv6only'
|
||||
VM_TYPE_CHOICES = (
|
||||
(PUBLIC, PUBLIC.title()),
|
||||
(IPV6, IPV6.title()),
|
||||
)
|
||||
name = models.CharField(max_length=50)
|
||||
opennebula_vm_template_id = models.IntegerField()
|
||||
vm_type = models.CharField(
|
||||
max_length=50, choices=VM_TYPE_CHOICES, default=PUBLIC
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
return '%s - %s - %s' % (
|
||||
self.opennebula_vm_template_id, self.vm_type, self.name
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def create(cls, name, opennebula_vm_template_id):
|
||||
def create(cls, name, opennebula_vm_template_id, vm_type):
|
||||
vm_template = cls(
|
||||
name=name, opennebula_vm_template_id=opennebula_vm_template_id)
|
||||
name=name, opennebula_vm_template_id=opennebula_vm_template_id,
|
||||
vm_type=vm_type
|
||||
)
|
||||
return vm_template
|
||||
|
||||
|
||||
class VMPricing(models.Model):
|
||||
name = models.CharField(max_length=255, unique=True)
|
||||
vat_inclusive = models.BooleanField(default=True)
|
||||
vat_percentage = models.DecimalField(
|
||||
max_digits=7, decimal_places=5, blank=True, default=0
|
||||
)
|
||||
cores_unit_price = models.DecimalField(
|
||||
max_digits=7, decimal_places=5, default=0
|
||||
)
|
||||
ram_unit_price = models.DecimalField(
|
||||
max_digits=7, decimal_places=5, default=0
|
||||
)
|
||||
ssd_unit_price = models.DecimalField(
|
||||
max_digits=7, decimal_places=5, default=0
|
||||
)
|
||||
hdd_unit_price = models.DecimalField(
|
||||
max_digits=7, decimal_places=6, default=0
|
||||
)
|
||||
discount_name = models.CharField(max_length=255, null=True, blank=True)
|
||||
discount_amount = models.DecimalField(
|
||||
max_digits=6, decimal_places=2, default=0
|
||||
)
|
||||
|
||||
def __str__(self):
|
||||
display_str = self.name + ' => ' + ' - '.join([
|
||||
'{}/Core'.format(self.cores_unit_price.normalize()),
|
||||
'{}/GB RAM'.format(self.ram_unit_price.normalize()),
|
||||
'{}/GB SSD'.format(self.ssd_unit_price.normalize()),
|
||||
'{}/GB HDD'.format(self.hdd_unit_price.normalize()),
|
||||
'{}% VAT'.format(self.vat_percentage.normalize())
|
||||
if not self.vat_inclusive else 'VAT-Incl',
|
||||
])
|
||||
if self.discount_amount:
|
||||
display_str = ' - '.join([
|
||||
display_str,
|
||||
'{} {}'.format(
|
||||
self.discount_amount,
|
||||
self.discount_name if self.discount_name else 'Discount'
|
||||
)
|
||||
])
|
||||
return display_str
|
||||
|
||||
@classmethod
|
||||
def get_vm_pricing_by_name(cls, name):
|
||||
try:
|
||||
pricing = VMPricing.objects.get(name=name)
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
"Error getting VMPricing with name {name}. "
|
||||
"Details: {details}. Attempting to return default"
|
||||
"pricing.".format(name=name, details=str(e))
|
||||
)
|
||||
pricing = VMPricing.get_default_pricing()
|
||||
return pricing
|
||||
|
||||
@classmethod
|
||||
def get_default_pricing(cls):
|
||||
""" Returns the default pricing or None """
|
||||
try:
|
||||
default_pricing = VMPricing.objects.get(name='default')
|
||||
except Exception as e:
|
||||
logger.error(str(e))
|
||||
default_pricing = None
|
||||
return default_pricing
|
||||
|
||||
|
||||
class StripePlan(models.Model):
|
||||
"""
|
||||
A model to store Data Center Light's created Stripe plans
|
||||
|
@ -79,3 +115,6 @@ class ContactUs(models.Model):
|
|||
email = models.CharField(max_length=250)
|
||||
message = models.TextField()
|
||||
field = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
|
6
datacenterlight/static/datacenterlight/css/bootstrap-3.3.7.min.css
vendored
Normal file
6584
datacenterlight/static/datacenterlight/css/bootstrap.css
vendored
|
@ -1,47 +1,15 @@
|
|||
.dcl-cms_page-full-width {
|
||||
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%);
|
||||
/* only for cms editing mode */
|
||||
.section-figure .cms-plugin {
|
||||
flex-basis: 50%;
|
||||
flex-grow: 1;
|
||||
}
|
||||
|
||||
.dcl-cms_page-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-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-text {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#dcl-cms_page-text h3 {
|
||||
font-size: 42px;
|
||||
width: 70%;
|
||||
.split-section-plain .section-figure .cms-plugin {
|
||||
flex-grow: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
#dcl-cms_page-text h3 {
|
||||
font-size: 30px;
|
||||
line-height: 40px;
|
||||
width: 100%;
|
||||
.section-figure .cms-plugin {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
161
datacenterlight/static/datacenterlight/css/common.css
Normal file
|
@ -0,0 +1,161 @@
|
|||
body,
|
||||
html {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
body,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
font-family: 'Lato', sans-serif;
|
||||
}
|
||||
|
||||
|
||||
/* bootstrap danger color override from #a94442 */
|
||||
|
||||
.text-danger,
|
||||
.has-error .help-block,
|
||||
.has-error .control-label,
|
||||
.has-error .radio,
|
||||
.has-error .checkbox,
|
||||
.has-error .radio-inline,
|
||||
.has-error .checkbox-inline,
|
||||
.has-error.radio label,
|
||||
.has-error.checkbox label,
|
||||
.has-error.radio-inline label,
|
||||
.has-error.checkbox-inline label,
|
||||
.has-error .form-control-feedback,
|
||||
.alert-danger,
|
||||
.list-group-item-danger,
|
||||
a.list-group-item-danger,
|
||||
a.list-group-item-danger:hover,
|
||||
a.list-group-item-danger:focus,
|
||||
.panel-danger>.panel-heading {
|
||||
color: #eb4d5c;
|
||||
}
|
||||
|
||||
.alert-danger {
|
||||
background: rgba(235, 204, 209, 0.2);
|
||||
}
|
||||
|
||||
.has-error .form-control,
|
||||
.has-error .form-control:focus,
|
||||
.has-error .form-control:active,
|
||||
.has-error .input-group-addon {
|
||||
color: #eb4d5c;
|
||||
border-color: #eb4d5c;
|
||||
}
|
||||
|
||||
a.list-group-item-danger.active,
|
||||
a.list-group-item-danger.active:hover,
|
||||
a.list-group-item-danger.active:focus {
|
||||
background-color: #eb4d5c;
|
||||
border-color: #eb4d5c;
|
||||
}
|
||||
|
||||
.panel-danger>.panel-heading .badge {
|
||||
background-color: #eb4d5c;
|
||||
}
|
||||
|
||||
.topnav {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.navbar-default {
|
||||
background: #fff;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.navbar-brand > img {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
#logoWhite,
|
||||
.navbar-transparent #logoBlack {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#logoBlack,
|
||||
.navbar-transparent #logoWhite {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.navbar-right {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.navbar-brand {
|
||||
padding-right: 15px;
|
||||
padding-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
|
||||
p.copyright {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
footer {
|
||||
font-weight: 300;
|
||||
padding: 25px 0;
|
||||
background-color: #f8f8f8;
|
||||
}
|
||||
|
||||
footer .list-inline {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
footer a {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
.mb-0 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.thin-hr {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
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-fluid {
|
||||
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-fluid {
|
||||
overflow: auto;
|
||||
padding: 75px;
|
||||
}
|
||||
.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%;
|
||||
}
|
||||
}
|
616
datacenterlight/static/datacenterlight/css/hosting.css
Normal file
|
@ -0,0 +1,616 @@
|
|||
.navbar-transparent #logoWhite {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar-transparent #logoBlack {
|
||||
display: block;
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
.topnav .navbar-fixed-top .navbar-collapse {
|
||||
max-height: 740px;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-header {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.navbar-right .highlights-dropdown .dropdown-menu {
|
||||
left: 0 !important;
|
||||
min-width: 155px;
|
||||
margin-left: 15px;
|
||||
padding: 0 5px 8px !important;
|
||||
}
|
||||
|
||||
@media(min-width: 768px) {
|
||||
.navbar-default .navbar-nav>li a,
|
||||
.navbar-right .highlights-dropdown .dropdown-menu>li a {
|
||||
font-weight: 300;
|
||||
}
|
||||
.navbar-right .highlights-dropdown .dropdown-menu {
|
||||
border-width: 0 0 1px 0;
|
||||
border-color: #e7e7e7;
|
||||
box-shadow: -8px 14px 20px -5px rgba(77, 77, 77, 0.5);
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-right .highlights-dropdown .dropdown-menu>li a {
|
||||
font-size: 13px;
|
||||
font-family: 'Lato', sans-serif;
|
||||
padding: 1px 10px 1px 18px !important;
|
||||
background: transparent;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.navbar-right .highlights-dropdown .dropdown-menu>li a:hover,
|
||||
.navbar-right .highlights-dropdown .dropdown-menu>li a:focus,
|
||||
.navbar-right .highlights-dropdown .dropdown-menu>li a:active {
|
||||
background: transparent;
|
||||
text-decoration: underline !important;
|
||||
}
|
||||
|
||||
.un-icon {
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
opacity: 0.5;
|
||||
margin-top: -1px;
|
||||
}
|
||||
|
||||
|
||||
/***** DCL payment page **********/
|
||||
|
||||
.dcl-order-container {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.dcl-place-order-text {
|
||||
color: #808080;
|
||||
}
|
||||
|
||||
.card-warning-content {
|
||||
font-weight: 300;
|
||||
border: 1px solid #a1a1a1;
|
||||
border-radius: 3px;
|
||||
padding: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.card-warning-error {
|
||||
border: 1px solid #EB4D5C;
|
||||
color: #EB4D5C;
|
||||
}
|
||||
|
||||
.card-warning-addtional-margin {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
.card-cvc-element label {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.card-element {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.card-element label {
|
||||
width: 100%;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.my-input {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.card-cvc-element .my-input {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#card-errors {
|
||||
clear: both;
|
||||
padding: 0 0 10px;
|
||||
color: #eb4d5c;
|
||||
}
|
||||
|
||||
.credit-card-goup {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.card-expiry-element {
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.card-cvc-element {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#billing-form .form-control {
|
||||
box-shadow: none !important;
|
||||
font-weight: 400;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
.dcl-order-container {
|
||||
width: 990px;
|
||||
padding: 0 15px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
.footer-vm p.copyright {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-nav>.open>a,
|
||||
.navbar-default .navbar-nav>.open>a:focus,
|
||||
.navbar-default .navbar-nav>.open>a:hover,
|
||||
.navbar-default .navbar-nav>.active>a,
|
||||
.navbar-default .navbar-nav>.active>a:focus,
|
||||
.navbar-default .navbar-nav>.active>a:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.navbar-default .navbar-nav .open .dropdown-menu>.active a,
|
||||
.navbar-default .navbar-nav .open .dropdown-menu>.active a:focus,
|
||||
.navbar-default .navbar-nav .open .dropdown-menu>.active a:hover {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* bootstrap input box-shadow disable */
|
||||
|
||||
.has-error .form-control:focus,
|
||||
.has-error .form-control:active,
|
||||
.has-success .form-control:focus,
|
||||
.has-success .form-control:active {
|
||||
box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
|
||||
.content-dashboard {
|
||||
min-height: calc(100vh - 96px);
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
max-width: 1120px;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.content-dashboard {
|
||||
padding: 0 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 575px) {
|
||||
select {
|
||||
width: 280px;
|
||||
}
|
||||
}
|
||||
|
||||
.btn:focus,
|
||||
.btn:active:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/***********Styles for Model********************/
|
||||
|
||||
.modal-content {
|
||||
border-radius: 0px;
|
||||
font-family: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
width: 100%;
|
||||
float: left;
|
||||
border-radius: 0;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.modal-header {
|
||||
min-height: 30px;
|
||||
border-bottom: 0px solid #e5e5e5;
|
||||
padding: 0px 15px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.modal-header .close {
|
||||
font-size: 75px;
|
||||
font-weight: 300;
|
||||
margin-top: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 11px;
|
||||
z-index: 10;
|
||||
line-height: 60px;
|
||||
}
|
||||
|
||||
.modal-header .close span {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.modal-header .close:focus {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
.modal-body {
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
float: left;
|
||||
padding: 0px 30px 15px 30px;
|
||||
}
|
||||
|
||||
.modal-body .modal-icon i {
|
||||
font-size: 80px;
|
||||
font-weight: 100;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.modal-body .modal-icon {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.modal-title {
|
||||
margin: 0;
|
||||
line-height: 1.42857143;
|
||||
font-size: 25px;
|
||||
padding: 0;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.modal-text {
|
||||
padding-top: 5px;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.modal-text p:not(:last-of-type) {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.modal-title+.modal-footer {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.modal-footer {
|
||||
border-top: 0px solid #e5e5e5;
|
||||
width: 100%;
|
||||
float: left;
|
||||
text-align: center;
|
||||
padding: 15px 15px;
|
||||
}
|
||||
|
||||
.modal {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.modal-dialog {
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
vertical-align: middle;
|
||||
width: 40%;
|
||||
margin: 15px auto;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) and (max-width: 991px) {
|
||||
.modal-dialog {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.modal-dialog {
|
||||
width: 95%;
|
||||
}
|
||||
}
|
||||
|
||||
@media(min-width: 576px) {
|
||||
.modal:before {
|
||||
content: '';
|
||||
display: inline-block;
|
||||
height: 100%;
|
||||
vertical-align: middle;
|
||||
margin-right: -4px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========= */
|
||||
|
||||
.btn-wide {
|
||||
min-width: 100px;
|
||||
}
|
||||
|
||||
.choice-btn {
|
||||
min-width: 110px;
|
||||
background-color: #3C5480;
|
||||
color: #fff;
|
||||
border: 2px solid #3C5480;
|
||||
padding: 4px 10px;
|
||||
transition: 0.3s all ease-out;
|
||||
}
|
||||
|
||||
.choice-btn:focus,
|
||||
.choice-btn:hover,
|
||||
.choice-btn:active {
|
||||
color: #3C5480;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.choice-btn {
|
||||
margin-top: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
.payment-container {
|
||||
padding-top: 70px;
|
||||
padding-bottom: 11%;
|
||||
}
|
||||
|
||||
.last-p {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.dcl-payment-section {
|
||||
max-width: 391px;
|
||||
margin: 0 auto 30px;
|
||||
padding: 0 10px 30px;
|
||||
border-bottom: 1px solid #edebeb;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.dcl-payment-section hr {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.dcl-payment-section .top-hr {
|
||||
margin-left: -10px;
|
||||
}
|
||||
|
||||
.dcl-payment-section h3 {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.dcl-payment-section p {
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
.dcl-payment-section .card-warning-content {
|
||||
padding: 8px 10px;
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.dcl-payment-order strong {
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.dcl-payment-order p {
|
||||
font-weight: 300;
|
||||
}
|
||||
|
||||
.dcl-payment-section .form-group {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.dcl-payment-section .form-control {
|
||||
box-shadow: none;
|
||||
padding: 6px 12px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
.dcl-payment-user {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.dcl-payment-user h4 {
|
||||
font-weight: 600;
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.dcl-payment-grid {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.dcl-payment-box {
|
||||
width: 50%;
|
||||
position: relative;
|
||||
padding: 0 30px;
|
||||
}
|
||||
.dcl-payment-box:nth-child(2) {
|
||||
order: 1;
|
||||
}
|
||||
.dcl-payment-box:nth-child(4) {
|
||||
order: 2;
|
||||
}
|
||||
.dcl-payment-section {
|
||||
padding-top: 15px;
|
||||
padding-bottom: 15px;
|
||||
margin-bottom: 0;
|
||||
border-bottom-width: 5px;
|
||||
}
|
||||
.dcl-payment-box:nth-child(2n) .dcl-payment-section {
|
||||
border-bottom: none;
|
||||
}
|
||||
.dcl-payment-box:nth-child(1):after,
|
||||
.dcl-payment-box:nth-child(2):after {
|
||||
content: ' ';
|
||||
display: block;
|
||||
background: #eee;
|
||||
width: 1px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
z-index: 2;
|
||||
top: 20px;
|
||||
bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
#virtual_machine_create_form {
|
||||
padding: 15px 0;
|
||||
}
|
||||
|
||||
.btn-vm-contact {
|
||||
color: #fff;
|
||||
background: #A3C0E2;
|
||||
border: 2px solid #A3C0E2;
|
||||
padding: 5px 25px;
|
||||
font-size: 12px;
|
||||
letter-spacing: 1.3px;
|
||||
}
|
||||
|
||||
.btn-vm-contact:hover,
|
||||
.btn-vm-contact:focus {
|
||||
background: #fff;
|
||||
color: #a3c0e2;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* hosting-order */
|
||||
|
||||
.order-detail-container {
|
||||
max-width: 600px;
|
||||
margin: 100px auto 40px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 30px 30px 20px;
|
||||
color: #595959;
|
||||
}
|
||||
|
||||
.order-detail-container .dashboard-title-thin {
|
||||
margin-top: 0;
|
||||
margin-left: -3px;
|
||||
}
|
||||
|
||||
.order-detail-container .dashboard-title-thin .un-icon {
|
||||
margin-top: -6px;
|
||||
}
|
||||
|
||||
.order-detail-container .dashboard-container-head {
|
||||
position: relative;
|
||||
padding: 0;
|
||||
margin-bottom: 38px;
|
||||
}
|
||||
|
||||
.order-detail-container .order-details {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.order-detail-container h4 {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.order-detail-container p {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.order-detail-container hr {
|
||||
margin: 15px 0;
|
||||
}
|
||||
|
||||
.order-detail-container .thin-hr {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.order-detail-container .subtotal-price {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.order-detail-container .subtotal-price .text-primary {
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
.order-detail-container .total-price {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
.order-detail-container {
|
||||
padding: 15px;
|
||||
}
|
||||
.order-confirm-btn {
|
||||
text-align: center;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.order-detail-container .dashboard-container-options {
|
||||
position: absolute;
|
||||
top: 4px;
|
||||
right: -4px;
|
||||
}
|
||||
.order-detail-container .dashboard-container-options .svg-img {
|
||||
height: 16px;
|
||||
width: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
.order_detail_footer {
|
||||
font-size: 9px;
|
||||
letter-spacing: 1px;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
.order_detail_footer strong {
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.order_detail_footer small {
|
||||
font-size: 8px;
|
||||
}
|
||||
|
||||
.dashboard-title-thin {
|
||||
font-weight: 300;
|
||||
font-size: 32px;
|
||||
}
|
||||
|
||||
.dashboard-title-thin .un-icon {
|
||||
height: 34px;
|
||||
margin-right: 5px;
|
||||
margin-top: -2px;
|
||||
width: 34px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
@media (max-width:767px) {
|
||||
.dashboard-title-thin {
|
||||
font-size: 22px;
|
||||
}
|
||||
.dashboard-title-thin .un-icon {
|
||||
height: 22px;
|
||||
width: 22px;
|
||||
margin-top: -3px;
|
||||
}
|
||||
}
|
||||
|
||||
.locale_date {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.locale_date.done {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.btn-vm-back {
|
||||
color: #fff;
|
||||
background: #C4CEDA;
|
||||
border: 2px solid #C4CEDA;
|
||||
padding: 5px 25px;
|
||||
font-size: 12px;
|
||||
letter-spacing: 1.3px;
|
||||
}
|
||||
|
||||
.btn-vm-back:hover,
|
||||
.btn-vm-back:focus {
|
||||
color: #fff;
|
||||
background: #8da4c0;
|
||||
border-color: #8da4c0;
|
||||
}
|
Before Width: | Height: | Size: 9 KiB |
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 5.8 KiB |
|
@ -2,32 +2,32 @@
|
|||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="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="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
|
||||
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
|
||||
<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.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-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.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.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
|
||||
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,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
|
||||
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.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.7-0.753,1.131c0,0.397,0.185,0.687,0.553,0.864
|
||||
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.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.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
|
||||
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-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
|
||||
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
|
||||
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.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.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
|
||||
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"/>
|
||||
</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
|
||||
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
|
||||
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
|
||||
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
|
||||
|
@ -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.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.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
|
||||
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.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
|
||||
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.398
|
||||
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
|
||||
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
|
||||
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
|
||||
C73.049,10.221,72.641,10.368,72.152,10.368z"/>
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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
|
||||
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.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.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"/>
|
||||
<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
|
||||
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-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
|
||||
c-0.475,0.298-1.002,0.745-1.582,1.342v7.726h-2.27L89.836,8.189L87.4,8.285z"/>
|
||||
<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.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.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.476,0.298-1.002,0.745-1.582,1.342v7.727H89.88L89.836,8.189L87.4,8.285z"/>
|
||||
<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="99.619,6.703 98.83,8.378 108.346,8.397 109.109,6.74 "/>
|
||||
|
@ -65,117 +65,120 @@
|
|||
</g>
|
||||
<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
|
||||
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
|
||||
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-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"/>
|
||||
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.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.692-0.941-1.696-0.941-3.014V5.711h-3.544l5.737-4.043"/>
|
||||
</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
|
||||
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.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
|
||||
<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.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.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
|
||||
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.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
|
||||
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.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
|
||||
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.066c0.112,0.351,0.281,0.663,0.505,0.932c0.225,0.27,0.501,0.487,0.831,0.651
|
||||
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"/>
|
||||
<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
|
||||
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.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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
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"/>
|
||||
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
|
||||
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.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.953c0.442-0.494,1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539
|
||||
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.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.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
|
||||
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.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
|
||||
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
|
||||
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.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
|
||||
v2.74H36.067z"/>
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.139z"/>
|
||||
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
|
||||
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
|
||||
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.953c0.442-0.494,1.011-0.876,1.707-1.146c0.696-0.27,1.471-0.449,2.324-0.539
|
||||
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.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.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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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"/>
|
||||
<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.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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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.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"/>
|
||||
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.451-2.695,2.179-4.717,2.179c-0.838,0-1.598-0.144-2.279-0.427
|
||||
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
|
||||
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.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.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.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.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
|
||||
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
|
||||
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
|
||||
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
|
||||
s-0.225,0.98-0.225,1.595v5.479h-2.021V12.368z"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
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
|
||||
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"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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"/>
|
||||
<path fill="#5A74AF" d="M110.854,12.368h2.021v1.639h0.045c0.135-0.284,0.314-0.542,0.539-0.774
|
||||
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
|
||||
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
|
||||
c-0.524,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368z"/>
|
||||
<path fill="#5E6060" d="M120.156,5.513h1.368v11.493h-1.368V5.513z"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
h1.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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
c-0.203-0.218-0.451-0.39-0.745-0.517C131.522,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
|
||||
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
|
||||
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
|
||||
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
|
||||
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"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
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
|
||||
V7.778h1.368v2.021h1.961V10.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
|
||||
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-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-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
|
||||
c4.143,0.049,6.907-2.123,8.163-3.477C141.972,20.849,142.227,20.314,142.227,20.314z"/>
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
L77.572,12.368L77.572,12.368z"/>
|
||||
<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
|
||||
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
|
||||
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.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
|
||||
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"/>
|
||||
<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.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
|
||||
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
|
||||
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.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.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
|
||||
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.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.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
|
||||
c-0.157,0.367-0.235,0.73-0.235,1.09H106.271z"/>
|
||||
<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
|
||||
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.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
|
||||
c-0.523,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368L110.854,12.368z"/>
|
||||
<path fill="#5E6060" d="M120.156,5.513h1.367v11.493h-1.367V5.513z"/>
|
||||
<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
|
||||
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
|
||||
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.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
|
||||
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.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.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
|
||||
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
|
||||
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.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.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
|
||||
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.639,1.756c0.426,0.44,1.004,0.661,1.732,0.661
|
||||
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.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.029c0.172-0.385,0.472-0.697,0.896-0.935c0.425-0.238,0.917-0.357,1.475-0.357
|
||||
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
|
||||
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.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
|
||||
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.006,0.402,0.016,0.601c0.01,0.197,0.048,0.375,0.113,0.532
|
||||
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.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.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
|
||||
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.023,0.059-0.106,0.25-0.125,0.288
|
||||
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.181-0.262-0.42-0.383-0.685c-0.033-0.073-0.242-0.51-0.266-0.574
|
||||
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.144,0.05,6.907-2.123,8.163-3.478C141.973,20.85,142.227,20.314,142.227,20.314z"/>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
@ -1,55 +0,0 @@
|
|||
(function($){
|
||||
'use strict'; // Start of use strict
|
||||
|
||||
|
||||
|
||||
$(document).ready(function(){
|
||||
verifiedUrl();
|
||||
init_options_interested();
|
||||
init_nav();
|
||||
change_values();
|
||||
});
|
||||
|
||||
function verifiedUrl(){
|
||||
if(window.location.href.indexOf('#success') > -1){
|
||||
form_success();
|
||||
}
|
||||
}
|
||||
|
||||
function init_options_interested(){
|
||||
$('.row-vms').click(function(){
|
||||
$('.row-vms').removeClass('row-vms__active');
|
||||
$(this).addClass('row-vms__active');
|
||||
var number = $('.row-vms__active input').val();
|
||||
var price = $('.row-vms__active input').data('price');
|
||||
_calculate(number, price);
|
||||
});
|
||||
}
|
||||
|
||||
function init_nav(){
|
||||
|
||||
$('.nav-local').click(function(){
|
||||
$('html, body').animate({
|
||||
scrollTop: $('#'+$(this).data('href')).offset().top
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function change_values(){
|
||||
$('.number-vms').keyup(function () {
|
||||
var number = $(this).val();
|
||||
var price = $(this).data('price');
|
||||
_calculate(number, price);
|
||||
});
|
||||
|
||||
}
|
||||
function form_success(){
|
||||
$('#sucessModal').modal('show');
|
||||
}
|
||||
function _calculate(numbers, price){
|
||||
$('#valueTotal').text(numbers*price*31);
|
||||
}
|
||||
|
||||
|
||||
})(jQuery); // End of use strict
|
7
datacenterlight/static/datacenterlight/js/bootstrap-3.3.7.min.js
vendored
Normal file
2317
datacenterlight/static/datacenterlight/js/bootstrap.js
vendored
4
datacenterlight/static/datacenterlight/js/jquery-2.2.4.min.js
vendored
Normal file
|
@ -16,7 +16,7 @@
|
|||
'ram': {
|
||||
'id': 'ramValue',
|
||||
'value': 2,
|
||||
'min': 2,
|
||||
'min': 1,
|
||||
'max': 200,
|
||||
'interval': 1
|
||||
},
|
||||
|
@ -54,7 +54,7 @@
|
|||
Nav panel classic
|
||||
--------------------------------------------- */
|
||||
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);
|
||||
}, function() {
|
||||
$(this).find('.dropdown-menu').stop(true, true).delay(200).fadeOut(500);
|
||||
|
@ -85,6 +85,8 @@
|
|||
}
|
||||
}
|
||||
|
||||
_navScroll();
|
||||
|
||||
function _initNavUrl() {
|
||||
$('.url-init').each(function(idx, el) {
|
||||
var $this = $(el);
|
||||
|
@ -102,17 +104,33 @@
|
|||
});
|
||||
$('.url').click(function(event) {
|
||||
event.preventDefault();
|
||||
var href = $(this).attr('href');
|
||||
var $this = $(this);
|
||||
var href = $this.attr('href');
|
||||
$('.navbar-collapse').removeClass('in');
|
||||
$('.navbar-collapse').addClass('collapsing');
|
||||
if ($(href).length) {
|
||||
$('html, body').animate({
|
||||
scrollTop: $(href).offset().top
|
||||
}, 1000);
|
||||
if (href[0] === "#") {
|
||||
scrollToElement(href);
|
||||
} else if (href) {
|
||||
var path = $(this).prop('href').split('#');
|
||||
var currentPath = window.location.origin + window.location.pathname;
|
||||
if (currentPath == path[0] && path[1]) {
|
||||
scrollToElement('#' + path[1]);
|
||||
} else {
|
||||
window.location = href;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function scrollToElement(el) {
|
||||
var $el = $(el);
|
||||
if ($el.length) {
|
||||
$('html, body').animate({
|
||||
scrollTop: $el.offset().top - 50
|
||||
}, 1000);
|
||||
}
|
||||
}
|
||||
|
||||
function verifiedUrl() {
|
||||
if (window.location.href.indexOf('#success') > -1) {
|
||||
form_success();
|
||||
|
@ -153,7 +171,22 @@
|
|||
}
|
||||
|
||||
function _calcPricing() {
|
||||
var total = (cardPricing['cpu'].value * 5) + (2 * cardPricing['ram'].value) + (0.6 * cardPricing['storage'].value);
|
||||
if(typeof window.coresUnitPrice === 'undefined'){
|
||||
window.coresUnitPrice = 5;
|
||||
}
|
||||
if(typeof window.ramUnitPrice === 'undefined'){
|
||||
window.ramUnitPrice = 2;
|
||||
}
|
||||
if(typeof window.ssdUnitPrice === 'undefined'){
|
||||
window.ssdUnitPrice = 0.6;
|
||||
}
|
||||
if(typeof window.discountAmount === 'undefined'){
|
||||
window.discountAmount = 0;
|
||||
}
|
||||
var total = (cardPricing['cpu'].value * window.coresUnitPrice) +
|
||||
(cardPricing['ram'].value * window.ramUnitPrice) +
|
||||
(cardPricing['storage'].value * window.ssdUnitPrice) -
|
||||
window.discountAmount;
|
||||
total = parseFloat(total.toFixed(2));
|
||||
$("#total").text(total);
|
||||
}
|
||||
|
|
|
@ -1,181 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="156.5px" height="40px" viewBox="0 0 156.5 40" enable-background="new 0 0 156.5 40" xml:space="preserve">
|
||||
<g display="none">
|
||||
<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
|
||||
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
|
||||
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.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
|
||||
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.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
|
||||
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,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
|
||||
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
|
||||
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-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
|
||||
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
|
||||
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
|
||||
c0,0.738,0.223,1.313,0.665,1.727C36.386,18.889,36.918,19.095,37.539,19.095z"/>
|
||||
</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
|
||||
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
|
||||
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"/>
|
||||
<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-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
|
||||
c-0.473,0.299-1.002,0.744-1.582,1.343v7.721h-2.268V13.033z"/>
|
||||
<path display="inline" fill="#231916" d="M55.129,18.65c0-0.917,0.162-1.74,0.482-2.465c0.321-0.725,0.748-1.345,1.284-1.856
|
||||
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,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
|
||||
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.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
|
||||
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"/>
|
||||
<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
|
||||
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
|
||||
C73.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
|
||||
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
|
||||
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.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.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
|
||||
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
|
||||
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
|
||||
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-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
|
||||
c-0.475,0.298-1.002,0.745-1.582,1.342v7.726h-2.27L89.836,8.189L87.4,8.285z"/>
|
||||
<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="99.619,6.703 98.83,8.378 108.346,8.397 109.109,6.74 "/>
|
||||
<polygon fill="#010000" points="101.475,10.278 105.832,1 107.512,1.024 103.203,10.281 "/>
|
||||
</g>
|
||||
<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
|
||||
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
|
||||
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-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"/>
|
||||
</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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
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"/>
|
||||
<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
|
||||
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.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
|
||||
v2.74H36.067z"/>
|
||||
<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
|
||||
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.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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
c0.749,0,1.321-0.205,1.718-0.617c0.396-0.412,0.595-0.97,0.595-1.673V18.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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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.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"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
s-0.225,0.98-0.225,1.595v5.479h-2.021V12.368z"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
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
|
||||
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"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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"/>
|
||||
<path fill="#5A74AF" d="M110.854,12.368h2.021v1.639h0.045c0.135-0.284,0.314-0.542,0.539-0.774
|
||||
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
|
||||
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
|
||||
c-0.524,0.554-0.786,1.415-0.786,2.583v5.345h-2.021V12.368z"/>
|
||||
<path fill="#5E6060" d="M120.156,5.513h1.368v11.493h-1.368V5.513z"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
h1.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
|
||||
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.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
|
||||
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
|
||||
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
|
||||
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
|
||||
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.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
|
||||
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.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
|
||||
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
|
||||
c-0.203-0.218-0.451-0.39-0.745-0.517C131.522,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
|
||||
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
|
||||
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
|
||||
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
|
||||
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"/>
|
||||
<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
|
||||
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
|
||||
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
|
||||
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
|
||||
V7.778h1.368v2.021h1.961V10.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
|
||||
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-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-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
|
||||
c4.143,0.049,6.907-2.123,8.163-3.477C141.972,20.849,142.227,20.314,142.227,20.314z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 18 KiB |
|
@ -20,6 +20,8 @@ from utils.mailer import BaseEmail
|
|||
from utils.models import BillingAddress
|
||||
from utils.stripe_utils import StripeUtils
|
||||
|
||||
from .models import VMPricing
|
||||
|
||||
logger = get_task_logger(__name__)
|
||||
|
||||
|
||||
|
@ -57,7 +59,8 @@ def create_vm_task(self, vm_template_id, user, specs, template,
|
|||
"Running create_vm_task on {}".format(current_task.request.hostname))
|
||||
vm_id = None
|
||||
try:
|
||||
final_price = specs.get('price')
|
||||
final_price = (specs.get('total_price') if 'total_price' in specs
|
||||
else specs.get('price'))
|
||||
billing_address = BillingAddress(
|
||||
cardholder_name=billing_address_data['cardholder_name'],
|
||||
street_address=billing_address_data['street_address'],
|
||||
|
@ -95,17 +98,22 @@ def create_vm_task(self, vm_template_id, user, specs, template,
|
|||
if vm_id is None:
|
||||
raise Exception("Could not create VM")
|
||||
|
||||
vm_pricing = VMPricing.get_vm_pricing_by_name(
|
||||
name=specs['pricing_name']
|
||||
) if 'pricing_name' in specs else VMPricing.get_default_pricing()
|
||||
# Create a Hosting Order
|
||||
order = HostingOrder.create(
|
||||
price=final_price,
|
||||
vm_id=vm_id,
|
||||
customer=customer,
|
||||
billing_address=billing_address
|
||||
billing_address=billing_address,
|
||||
vm_pricing=vm_pricing
|
||||
)
|
||||
|
||||
# Create a Hosting Bill
|
||||
HostingBill.create(
|
||||
customer=customer, billing_address=billing_address)
|
||||
customer=customer, billing_address=billing_address
|
||||
)
|
||||
|
||||
# Create Billing Address for User if he does not have one
|
||||
if not customer.user.billing_addresses.count():
|
||||
|
@ -135,12 +143,16 @@ def create_vm_task(self, vm_template_id, user, specs, template,
|
|||
'cores': specs.get('cpu'),
|
||||
'memory': specs.get('memory'),
|
||||
'storage': specs.get('disk_size'),
|
||||
'price': specs.get('price'),
|
||||
'price': final_price,
|
||||
'template': template.get('name'),
|
||||
'vm_name': vm.get('name'),
|
||||
'vm_id': vm['vm_id'],
|
||||
'order_id': order.id
|
||||
}
|
||||
if 'pricing_name' in specs:
|
||||
context['pricing'] = str(VMPricing.get_vm_pricing_by_name(
|
||||
name=specs['pricing_name']
|
||||
))
|
||||
email_data = {
|
||||
'subject': settings.DCL_TEXT + " Order from %s" % context['email'],
|
||||
'from_email': settings.DCL_SUPPORT_FROM_ADDRESS,
|
||||
|
|
|
@ -1,33 +1,34 @@
|
|||
{% load staticfiles i18n cms_tags sekizai_tags %}
|
||||
{% load static i18n cms_tags sekizai_tags %}
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{LANGUAGE_CODE}}">
|
||||
|
||||
<head>
|
||||
<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">
|
||||
{% cms_toolbar %}
|
||||
<title>Data Center Light -
|
||||
{% block title %}VM hosting made in Switzerland{% endblock %}</title>
|
||||
<meta name="author" content="ungleich glarus ag">
|
||||
<title>Data Center Light - {% block title %}VM hosting made in Switzerland{% endblock %}</title>
|
||||
|
||||
<!-- Vendor CSS -->
|
||||
<!-- Bootstrap Core CSS -->
|
||||
<link href="{% static 'datacenterlight/css/bootstrap.min.css' %}" rel="stylesheet">
|
||||
|
||||
<!-- Custom Fonts -->
|
||||
<!--Import Google Icon Font-->
|
||||
<link href="//fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||
<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">
|
||||
<link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
|
||||
<link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon" />
|
||||
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.css" rel="stylesheet">
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link href="{% static 'datacenterlight/css/common.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet">
|
||||
{% block css_extra %}
|
||||
{% endblock css_extra %}
|
||||
{% 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:// -->
|
||||
|
@ -35,39 +36,32 @@
|
|||
<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]-->
|
||||
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||
{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||
|
||||
<!-- Google analytics -->
|
||||
{% include "google_analytics.html" %}
|
||||
<!-- End Google Analytics -->
|
||||
</head>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<body>
|
||||
<!-- Navigation -->
|
||||
{% block navbar %}
|
||||
{% include "datacenterlight/includes/_navbar.html" %}
|
||||
{% endblock navbar %}
|
||||
|
||||
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
|
||||
{% include "datacenterlight/includes/_footer.html" %}
|
||||
<!-- Footer -->
|
||||
|
||||
<!-- jQuery -->
|
||||
<script src="{% static 'datacenterlight/js/jquery.js' %}"></script>
|
||||
|
||||
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script>
|
||||
|
||||
<script src="{% static 'datacenterlight/js/jquery-2.2.4.min.js' %}"></script>
|
||||
<!-- Bootstrap Core JavaScript -->
|
||||
<script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script>
|
||||
<script src="{% static 'datacenterlight/js/main.js' %}"></script>
|
||||
<!-- Load form js -->
|
||||
<script src="{% static 'datacenterlight/js/form.js' %}"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
|
||||
<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>
|
||||
</body>
|
||||
|
||||
<!-- Custom JS -->
|
||||
<script src="{% static 'datacenterlight/js/main.js' %}"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
94
datacenterlight/templates/datacenterlight/base_hosting.html
Normal file
|
@ -0,0 +1,94 @@
|
|||
{% load staticfiles 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 glarus ag">
|
||||
|
||||
<title>Data Center Light - {% block title %}VM hosting made in Switzerland{% endblock %}</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">
|
||||
<link href="//fonts.googleapis.com/css?family=Lato:300,400,600,700" rel="stylesheet" type="text/css">
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link href="{% static 'datacenterlight/css/common.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'datacenterlight/css/hosting.css' %}" rel="stylesheet">
|
||||
{% if request.toolbar.edit_mode %}
|
||||
<link href="{% static 'datacenterlight/css/cms.css' %}" rel="stylesheet">
|
||||
{% endif %}
|
||||
{% block css_extra %}
|
||||
{% endblock css_extra %}
|
||||
|
||||
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||
{% render_block "js" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||
|
||||
<!-- External Fonts -->
|
||||
|
||||
<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 %}
|
||||
|
||||
{% render_placeholder cms_integration.navbar_placeholder %}
|
||||
|
||||
<div class="{% if request.user.is_authenticated %}content-dashboard{% endif %}">
|
||||
{% block content %}
|
||||
{% endblock %}
|
||||
</div>
|
||||
|
||||
{% render_placeholder cms_integration.footer_placeholder %}
|
||||
|
||||
|
||||
<!-- Moment -->
|
||||
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
|
||||
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment-with-locales.js"></script>
|
||||
<!-- 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>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script>
|
||||
<!-- Copy Clipboard (not required for dcl, but dependency in virtual_machine_detail.js) -->
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.5.10/clipboard.min.js"></script>
|
||||
|
||||
<!-- Custom JS -->
|
||||
<script src="{% static 'hosting/js/virtual_machine_detail.js' %}"></script>
|
||||
<script src="{% static 'hosting/js/createvm.js' %}"></script>
|
||||
<script src="{% static 'hosting/js/initial.js' %}"></script>
|
||||
{% block js_extra %}
|
||||
{% comment %}
|
||||
this block is above some files, because on stripe error scripts below the stripe
|
||||
script are not properly executed.
|
||||
{% endcomment %}
|
||||
{% endblock js_extra %}
|
||||
|
||||
<!-- Stripe Lib -->
|
||||
<script src="https://js.stripe.com/v3/"></script>
|
||||
<script src="https://js.stripe.com/v2/"></script>
|
||||
|
||||
<!-- Proccess payment lib -->
|
||||
<script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,27 +0,0 @@
|
|||
{% load i18n %}
|
||||
|
||||
<form novalidate id ="beta_access" class="form-beta" method="POST" action="{% url 'datacenterlight:beta_access'%}">
|
||||
{% csrf_token %}
|
||||
{{ form.non_field_errors }}
|
||||
<div>
|
||||
{% for message in messages %}
|
||||
<strong>{{ message }}</strong>
|
||||
{% endfor %}
|
||||
</div>
|
||||
<div class="inputs">
|
||||
<div class="form-group">
|
||||
<input type="text" name="name" class="form-control" id="name" placeholder="{% trans 'Enter name' %}">
|
||||
<span style="color: white">{{ form.name.errors|striptags}}</span>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<input type="email" name="email" class="form-control" id="email" placeholder="{% trans 'Enter email' %}">
|
||||
<span style="color: white">{{ form.email.errors|striptags}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-default btn-transparent btn-lg">{% trans "Request Beta Access" %}</button>
|
||||
</form>
|
||||
<script>
|
||||
$('#beta_access').ajaxForm({
|
||||
target: '#beta_access_form', success: function(response) { }
|
||||
});
|
||||
</script>
|
|
@ -1,47 +0,0 @@
|
|||
|
||||
{% load i18n %}
|
||||
|
||||
<div class="modal fade bs-example-modal-sm" style="color:black;" id="successModal" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="modal-icon"><i class="checkmark" aria-hidden="true"></i></div>
|
||||
<h4 class="modal-title">{% trans "Request Sent" %}</h4>
|
||||
<p class="modal-text">{% trans "Thank you for your subscription! You will receive a confirmation mail from our team" %}</p>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div>
|
||||
</div><!-- /.modal -->
|
||||
<script>
|
||||
// Show modal
|
||||
$('#successModal').modal('show');
|
||||
// close the modal after 3 seconds
|
||||
setTimeout(function() {
|
||||
$('#successModal').modal('hide');
|
||||
}, 5000);
|
||||
</script>
|
||||
<style>
|
||||
.vertical-alignment-helper {
|
||||
display:table;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
pointer-events:none; /* This makes sure that we can still click outside of the modal to close it */
|
||||
}
|
||||
.vertical-align-center {
|
||||
/* To center vertically */
|
||||
display: table-cell;
|
||||
vertical-align: middle;
|
||||
pointer-events:none;
|
||||
}
|
||||
.modal-content {
|
||||
/* Bootstrap sets the size of the modal in the modal-dialog class, we need to inherit it */
|
||||
width:inherit;
|
||||
height:inherit;
|
||||
/* To center horizontally */
|
||||
margin: 0 auto;
|
||||
pointer-events: all;
|
||||
}
|
||||
</style>
|
|
@ -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>
|
80
datacenterlight/templates/datacenterlight/cms/base.html
Normal file
|
@ -0,0 +1,80 @@
|
|||
{% 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="{% page_attribute 'meta_description' %}">
|
||||
<meta name="author" content="ungleich glarus ag">
|
||||
<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">
|
||||
|
||||
{% if request.current_page.cmsfaviconextension %}
|
||||
<link rel="shortcut icon" href="{% static request.current_page.cmsfaviconextension.favicon.url %}" type="image/x-icon">
|
||||
{% else %}
|
||||
<link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon">
|
||||
{% endif %}
|
||||
|
||||
<!-- 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 %}
|
||||
|
||||
{% url 'datacenterlight:index' as calculator_form_url %}
|
||||
{% 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,5 @@
|
|||
<div class="price-calc-section">
|
||||
<div class="card">
|
||||
{% include "datacenterlight/includes/_calculator_form.html" with vm_pricing=instance.pricing %}
|
||||
</div>
|
||||
</div>
|
43
datacenterlight/templates/datacenterlight/cms/contact.html
Normal file
|
@ -0,0 +1,43 @@
|
|||
<div id="contact" class="full-contact-section">
|
||||
<div class="intro-header-2 contact-section">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{% if instance.heading%}
|
||||
<div class="title">
|
||||
<h2>{{ instance.heading}}</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
|
@ -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>
|
|
@ -0,0 +1,21 @@
|
|||
{% load cms_tags %}
|
||||
|
||||
{% 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 %}
|
||||
{% if children_to_content|length %}
|
||||
<div class="split-subsection">
|
||||
{% for plugin in children_to_content %}
|
||||
{% render_plugin plugin %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
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>
|
71
datacenterlight/templates/datacenterlight/cms/navbar.html
Normal file
|
@ -0,0 +1,71 @@
|
|||
{% 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>
|
||||
{% if instance.logo_dark or instance.logo_light %}
|
||||
<a href="{{ instance.logo_url|default:'/' }}" id="logoBlack" class="navbar-brand"><img src="{{ instance.get_logo_dark }}"></a>
|
||||
<a href="{{ instance.logo_url|default:'/' }}" id="logoWhite" class="navbar-brand"><img src="{{ instance.get_logo_light }}"></a>
|
||||
{% else %}
|
||||
<a href="/" id="logoBlack" class="navbar-brand"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a>
|
||||
<a href="/" id="logoWhite" class="navbar-brand"><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 %}
|
||||
{% if instance.language_dropdown %}
|
||||
<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>
|
||||
{% endif %}
|
||||
{% 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.target|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>
|
31
datacenterlight/templates/datacenterlight/cms/section.html
Normal file
|
@ -0,0 +1,31 @@
|
|||
{% load cms_tags %}
|
||||
|
||||
<section class="split-section {{ instance.get_extra_classes }}" id="{{ instance.html_id }}">
|
||||
<div class="container">
|
||||
{% if children_to_side|length or children_calculator|length %}
|
||||
<div class="row">
|
||||
<div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-push-6{% endif %} split-text">
|
||||
{% include "datacenterlight/cms/includes/_section_split_content.html" %}
|
||||
</div>
|
||||
<div class="col-sm-6 {% if instance.text_direction == 'right' %}col-sm-pull-6{% endif %} split-figure">
|
||||
{% if children_calculator|length %}
|
||||
{% for plugin in children_calculator %}
|
||||
{% render_plugin plugin %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
{% if children_to_side %}
|
||||
<div class="section-figure">
|
||||
{% for plugin in children_to_side %}
|
||||
{% render_plugin plugin %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="space">
|
||||
{% include "datacenterlight/cms/includes/_section_split_content.html" %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
|
@ -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>
|
|
@ -0,0 +1,15 @@
|
|||
{% load custom_tags %}
|
||||
|
||||
<section class="promo-section {{instance.get_extra_classes}}" {% if instance.background_image %}style="background-image:url({{ instance.background_image.url }})"{% endif %}>
|
||||
<div class="container">
|
||||
{% if instance.heading %}
|
||||
<h3>{{instance.heading|escaped_line_break|linebreaksbr}}</h3>
|
||||
{% endif %}
|
||||
{% if instance.subheading %}
|
||||
<h4>{{instance.subheading}}</h4>
|
||||
{% endif %}
|
||||
{% if instance.content %}
|
||||
<p>{{instance.content}}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</section>
|
|
@ -1,35 +0,0 @@
|
|||
{% extends "datacenterlight/base.html" %}
|
||||
{% load staticfiles cms_tags sekizai_tags %}
|
||||
{% block title %}
|
||||
{% page_attribute page_title %}
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% addtoblock "css" %}
|
||||
<link href="{% static 'datacenterlight/css/cms.css' %}" media="screen" rel="stylesheet" type="text/css"/>
|
||||
{% endaddtoblock %}
|
||||
<div class="dcl-cms_page-full-width">
|
||||
<div class="dcl-cms_page-header">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="single-heading">
|
||||
<h2>{% page_attribute page_title %}</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="split-section left" id="dcl-cms_page-text">
|
||||
<div class="space">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
{% placeholder 'datacenterlight_cms_page_text' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -13,16 +13,21 @@
|
|||
<div class="row">
|
||||
<div class="col-sm-offset-2 col-sm-10">
|
||||
<div class="subtitle">
|
||||
{% if form_header %}
|
||||
<h3>{{ form_header }}</h3>
|
||||
{% else %}
|
||||
<h3>{% trans "Get in touch with us!" %}</h3>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<form class="form-horizontal ajax-form" method="POST" action="{% url 'datacenterlight:contact_us' %}" data-toggle="validator" data-response="#contact-form">
|
||||
<form class="form-horizontal ajax-form" method="POST" action="{% url 'datacenterlight:contact_us' %}" data-toggle="validator" data-response="#contact-form" role="form">
|
||||
{% csrf_token %}
|
||||
<div class="form-group">
|
||||
<label class="control-label col-sm-2" for="name">{% trans "Name" %}</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="text" name="name" class="form-control" data-minlength="3" data-error="{% trans 'Please enter your name.' %}" required>
|
||||
<div class="help-block with-errors"></div>
|
||||
{{contact_form.name.errors}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -30,6 +35,7 @@
|
|||
<label class="control-label col-sm-2" for="email">{% trans "Email" %}</label>
|
||||
<div class="col-sm-10">
|
||||
<input name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" data-error="{% trans 'Please enter a valid email address.' %}" required>
|
||||
<div class="help-block with-errors"></div>
|
||||
{{contact_form.email.errors}}
|
||||
</div>
|
||||
</div>
|
||||
|
@ -37,6 +43,7 @@
|
|||
<label class="control-label col-sm-2" for="message">{% trans "Message" %}</label>
|
||||
<div class="col-sm-10">
|
||||
<textarea class="form-control" name="message" id="message" rows="6" required></textarea>
|
||||
<div class="help-block with-errors"></div>
|
||||
{{contact_form.message.errors}}
|
||||
</div>
|
||||
</div>
|
||||
|
|
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,176 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
{% load i18n %}
|
||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{dcl_text}}</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff"
|
||||
style="font-family: 'Lato', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width: 480px) {
|
||||
table[class*="container-for-gmail-android"] {
|
||||
min-width: 290px !important; width: 100% !important;
|
||||
}
|
||||
img[class="force-width-gmail"] {
|
||||
display: none !important; width: 0 !important; height: 0 !important;
|
||||
}
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-left"] {
|
||||
width: 160px !important; padding-left: 0 !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-right"] {
|
||||
width: 160px !important; padding-right: 0 !important;
|
||||
}
|
||||
td[class="header-lg"] {
|
||||
font-size: 24px !important; padding-bottom: 5px !important;
|
||||
}
|
||||
td[class="content-padding"] {
|
||||
padding: 5px 0 5px !important;
|
||||
}
|
||||
td[class="button"] {
|
||||
padding: 5px 5px 30px !important;
|
||||
}
|
||||
td[class*="free-text"] {
|
||||
padding: 10px 18px 30px !important;
|
||||
}
|
||||
td[class~="mobile-hide-img"] {
|
||||
display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
|
||||
}
|
||||
td[class~="item"] {
|
||||
width: 140px !important; vertical-align: top !important;
|
||||
}
|
||||
td[class~="quantity"] {
|
||||
width: 50px !important;
|
||||
}
|
||||
td[class~="price"] {
|
||||
width: 90px !important;
|
||||
}
|
||||
td[class="item-table"] {
|
||||
padding: 30px 20px !important;
|
||||
}
|
||||
td[class="mini-container-left"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
td[class="mini-container-right"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<table align="center" cellpadding="0" cellspacing="0"
|
||||
class="container-for-gmail-android" width="100%"
|
||||
style="border-collapse: collapse !important; min-width: 600px; font-family: 'Lato', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td align="left" valign="top" width="100%"
|
||||
style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;"
|
||||
bgcolor="#ffffff">
|
||||
<center style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="100%"
|
||||
bgcolor="#ffffff"
|
||||
background="{{base_url}}{% static 'datacenterlight/img/dcl-email-bg.jpg' %}"
|
||||
style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important; background: transparent;">
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td width="100%" height="80" valign="top"
|
||||
style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff"
|
||||
align="center">
|
||||
<!--[if gte mso 9]>
|
||||
<v:rect xmlns:v="urn:schemas-microsoft-com:vml"
|
||||
fill="true" stroke="false"
|
||||
style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
|
||||
<v:fill type="tile"
|
||||
src="{{base_url}}{% static 'datacenterlight/img/dcl-email-bg.jpg' %}"
|
||||
color="#ffffff"/>
|
||||
<v:textbox inset="0,0,0,0">
|
||||
<![endif]-->
|
||||
<center style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<table cellpadding="0" cellspacing="0"
|
||||
width="600" class="w320"
|
||||
style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td class="pull-left mobile-header-padding-left"
|
||||
style="vertical-align: middle; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;"
|
||||
align="left" valign="middle">
|
||||
<a href="{{base_url}}"
|
||||
style="font-family: 'Lato', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img
|
||||
width="137"
|
||||
src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}"
|
||||
alt="logo"
|
||||
style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Lato', 'sans-serif' !important; border: none;"></a>
|
||||
</td>
|
||||
<td class="pull-right mobile-header-padding-right"
|
||||
style="color: #4d4d4d; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;"
|
||||
align="right">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
<!--[if gte mso 9]>
|
||||
</v:textbox>
|
||||
</v:rect>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%"
|
||||
style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;"
|
||||
class="content-padding" bgcolor="#f7f7f7">
|
||||
<center style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320"
|
||||
style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td class="header-lg"
|
||||
style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;"
|
||||
align="center">
|
||||
{% block email_head %}
|
||||
{% endblock %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td class="free-text"
|
||||
style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;"
|
||||
align="center">
|
||||
<p>
|
||||
{% block email_body %}
|
||||
{% endblock %}
|
||||
</p></td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td class="button"
|
||||
style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;"
|
||||
align="center">
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%"
|
||||
style="height: 100px; border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;"
|
||||
bgcolor="#ffffff">
|
||||
<center style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320"
|
||||
style="border-collapse: collapse !important; font-family: 'Lato', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Lato', 'sans-serif' !important;">
|
||||
<td style="border-collapse: collapse; font-family: 'Lato', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;"
|
||||
align="left">{% trans 'Your Data Center Light Team' %}
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
{% load i18n %}
|
||||
{% block email_head %}
|
||||
{% endblock %}
|
||||
{% block email_body %}
|
||||
{% endblock %}
|
||||
{% trans 'Your Data Center Light Team' %}
|
|
@ -1,129 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
{% load i18n%}
|
||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Oxygen Invoice</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width: 480px) {
|
||||
table[class*="container-for-gmail-android"] {
|
||||
min-width: 290px !important; width: 100% !important;
|
||||
}
|
||||
img[class="force-width-gmail"] {
|
||||
display: none !important; width: 0 !important; height: 0 !important;
|
||||
}
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-left"] {
|
||||
width: 160px !important; padding-left: 0 !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-right"] {
|
||||
width: 160px !important; padding-right: 0 !important;
|
||||
}
|
||||
td[class="header-lg"] {
|
||||
font-size: 24px !important; padding-bottom: 5px !important;
|
||||
}
|
||||
td[class="content-padding"] {
|
||||
padding: 5px 0 5px !important;
|
||||
}
|
||||
td[class="button"] {
|
||||
padding: 5px 5px 30px !important;
|
||||
}
|
||||
td[class*="free-text"] {
|
||||
padding: 10px 18px 30px !important;
|
||||
}
|
||||
td[class~="mobile-hide-img"] {
|
||||
display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
|
||||
}
|
||||
td[class~="item"] {
|
||||
width: 140px !important; vertical-align: top !important;
|
||||
}
|
||||
td[class~="quantity"] {
|
||||
width: 50px !important;
|
||||
}
|
||||
td[class~="price"] {
|
||||
width: 90px !important;
|
||||
}
|
||||
td[class="item-table"] {
|
||||
padding: 30px 20px !important;
|
||||
}
|
||||
td[class="mini-container-left"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
td[class="mini-container-right"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
|
||||
<!--[if gte mso 9]>
|
||||
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
|
||||
<v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
|
||||
<v:textbox inset="0,0,0,0">
|
||||
<![endif]-->
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;" align="left" valign="middle">
|
||||
<a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
|
||||
</td>
|
||||
<td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
<!--[if gte mso 9]>
|
||||
</v:textbox>
|
||||
</v:rect>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;" align="center">
|
||||
{% trans "Thank you for your request." %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;" align="center">
|
||||
<p>{% trans "You are one step away from being our beta tester!" %} <br/><br/>
|
||||
{% trans "Currently we are running our tests to make sure everything runs perfectly." %}<br/>
|
||||
{% trans "In the meantime, we would like to ask you a little patience<br/> until our team contacts you with beta access." %}<br/>
|
||||
{% trans "Thank you!" %} </p></td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,129 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
{% load i18n%}
|
||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Oxygen Invoice</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width: 480px) {
|
||||
table[class*="container-for-gmail-android"] {
|
||||
min-width: 290px !important; width: 100% !important;
|
||||
}
|
||||
img[class="force-width-gmail"] {
|
||||
display: none !important; width: 0 !important; height: 0 !important;
|
||||
}
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-left"] {
|
||||
width: 160px !important; padding-left: 0 !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-right"] {
|
||||
width: 160px !important; padding-right: 0 !important;
|
||||
}
|
||||
td[class="header-lg"] {
|
||||
font-size: 24px !important; padding-bottom: 5px !important;
|
||||
}
|
||||
td[class="content-padding"] {
|
||||
padding: 5px 0 5px !important;
|
||||
}
|
||||
td[class="button"] {
|
||||
padding: 5px 5px 30px !important;
|
||||
}
|
||||
td[class*="free-text"] {
|
||||
padding: 10px 18px 30px !important;
|
||||
}
|
||||
td[class~="mobile-hide-img"] {
|
||||
display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
|
||||
}
|
||||
td[class~="item"] {
|
||||
width: 140px !important; vertical-align: top !important;
|
||||
}
|
||||
td[class~="quantity"] {
|
||||
width: 50px !important;
|
||||
}
|
||||
td[class~="price"] {
|
||||
width: 90px !important;
|
||||
}
|
||||
td[class="item-table"] {
|
||||
padding: 30px 20px !important;
|
||||
}
|
||||
td[class="mini-container-left"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
td[class="mini-container-right"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
|
||||
<!--[if gte mso 9]>
|
||||
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
|
||||
<v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
|
||||
<v:textbox inset="0,0,0,0">
|
||||
<![endif]-->
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle">
|
||||
<a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
|
||||
</td>
|
||||
<td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
<!--[if gte mso 9]>
|
||||
</v:textbox>
|
||||
</v:rect>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center">
|
||||
{% trans "Thank you for your request." %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center">
|
||||
<p>{% trans "You are one step away from being our beta tester!" %} <br/><br/>
|
||||
{% trans "Currently we are running our tests to make sure everything runs perfectly." %}<br/>
|
||||
{% trans "In the meantime, we would like to ask you a little patience<br/> until our team contacts you with beta access." %}<br/>
|
||||
{% trans "Thank you!" %} </p></td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,125 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Oxygen Invoice</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width: 480px) {
|
||||
table[class*="container-for-gmail-android"] {
|
||||
min-width: 290px !important; width: 100% !important;
|
||||
}
|
||||
img[class="force-width-gmail"] {
|
||||
display: none !important; width: 0 !important; height: 0 !important;
|
||||
}
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-left"] {
|
||||
width: 160px !important; padding-left: 0 !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-right"] {
|
||||
width: 160px !important; padding-right: 0 !important;
|
||||
}
|
||||
td[class="header-lg"] {
|
||||
font-size: 24px !important; padding-bottom: 5px !important;
|
||||
}
|
||||
td[class="content-padding"] {
|
||||
padding: 5px 0 5px !important;
|
||||
}
|
||||
td[class="button"] {
|
||||
padding: 5px 5px 30px !important;
|
||||
}
|
||||
td[class*="free-text"] {
|
||||
padding: 10px 18px 30px !important;
|
||||
}
|
||||
td[class~="mobile-hide-img"] {
|
||||
display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
|
||||
}
|
||||
td[class~="item"] {
|
||||
width: 140px !important; vertical-align: top !important;
|
||||
}
|
||||
td[class~="quantity"] {
|
||||
width: 50px !important;
|
||||
}
|
||||
td[class~="price"] {
|
||||
width: 90px !important;
|
||||
}
|
||||
td[class="item-table"] {
|
||||
padding: 30px 20px !important;
|
||||
}
|
||||
td[class="mini-container-left"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
td[class="mini-container-right"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
|
||||
<!--[if gte mso 9]>
|
||||
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
|
||||
<v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
|
||||
<v:textbox inset="0,0,0,0">
|
||||
<![endif]-->
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;" align="left" valign="middle">
|
||||
<a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
|
||||
</td>
|
||||
<td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
<!--[if gte mso 9]>
|
||||
</v:textbox>
|
||||
</v:rect>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;" align="center">
|
||||
An user requested a beta access
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;" align="center">
|
||||
<p>User {{email}} requested beta access </p></td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,125 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Oxygen Invoice</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width: 480px) {
|
||||
table[class*="container-for-gmail-android"] {
|
||||
min-width: 290px !important; width: 100% !important;
|
||||
}
|
||||
img[class="force-width-gmail"] {
|
||||
display: none !important; width: 0 !important; height: 0 !important;
|
||||
}
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-left"] {
|
||||
width: 160px !important; padding-left: 0 !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-right"] {
|
||||
width: 160px !important; padding-right: 0 !important;
|
||||
}
|
||||
td[class="header-lg"] {
|
||||
font-size: 24px !important; padding-bottom: 5px !important;
|
||||
}
|
||||
td[class="content-padding"] {
|
||||
padding: 5px 0 5px !important;
|
||||
}
|
||||
td[class="button"] {
|
||||
padding: 5px 5px 30px !important;
|
||||
}
|
||||
td[class*="free-text"] {
|
||||
padding: 10px 18px 30px !important;
|
||||
}
|
||||
td[class~="mobile-hide-img"] {
|
||||
display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
|
||||
}
|
||||
td[class~="item"] {
|
||||
width: 140px !important; vertical-align: top !important;
|
||||
}
|
||||
td[class~="quantity"] {
|
||||
width: 50px !important;
|
||||
}
|
||||
td[class~="price"] {
|
||||
width: 90px !important;
|
||||
}
|
||||
td[class="item-table"] {
|
||||
padding: 30px 20px !important;
|
||||
}
|
||||
td[class="mini-container-left"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
td[class="mini-container-right"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
|
||||
<!--[if gte mso 9]>
|
||||
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
|
||||
<v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
|
||||
<v:textbox inset="0,0,0,0">
|
||||
<![endif]-->
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle">
|
||||
<a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
|
||||
</td>
|
||||
<td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
<!--[if gte mso 9]>
|
||||
</v:textbox>
|
||||
</v:rect>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center">
|
||||
An user requested a beta access
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center">
|
||||
<p>User {{email}} requested beta access </p></td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,131 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Oxygen Invoice</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width: 480px) {
|
||||
table[class*="container-for-gmail-android"] {
|
||||
min-width: 290px !important; width: 100% !important;
|
||||
}
|
||||
img[class="force-width-gmail"] {
|
||||
display: none !important; width: 0 !important; height: 0 !important;
|
||||
}
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-left"] {
|
||||
width: 160px !important; padding-left: 0 !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-right"] {
|
||||
width: 160px !important; padding-right: 0 !important;
|
||||
}
|
||||
td[class="header-lg"] {
|
||||
font-size: 24px !important; padding-bottom: 5px !important;
|
||||
}
|
||||
td[class="content-padding"] {
|
||||
padding: 5px 0 5px !important;
|
||||
}
|
||||
td[class="button"] {
|
||||
padding: 5px 5px 30px !important;
|
||||
}
|
||||
td[class*="free-text"] {
|
||||
padding: 10px 18px 30px !important;
|
||||
}
|
||||
td[class~="mobile-hide-img"] {
|
||||
display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
|
||||
}
|
||||
td[class~="item"] {
|
||||
width: 140px !important; vertical-align: top !important;
|
||||
}
|
||||
td[class~="quantity"] {
|
||||
width: 50px !important;
|
||||
}
|
||||
td[class~="price"] {
|
||||
width: 90px !important;
|
||||
}
|
||||
td[class="item-table"] {
|
||||
padding: 30px 20px !important;
|
||||
}
|
||||
td[class="mini-container-left"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
td[class="mini-container-right"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
|
||||
<!--[if gte mso 9]>
|
||||
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
|
||||
<v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
|
||||
<v:textbox inset="0,0,0,0">
|
||||
<![endif]-->
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 0px;" align="left" valign="middle">
|
||||
<a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
|
||||
</td>
|
||||
<td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
<!--[if gte mso 9]>
|
||||
</v:textbox>
|
||||
</v:rect>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5px 0px;" align="center">
|
||||
An user requested a beta access
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 5px 20px;" align="center">
|
||||
<p>User {{email}} requested beta access </p>
|
||||
{% for vm in vms %}
|
||||
Type: {{vm.type}} - Amount: {{vm.amount}}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 5px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,131 +0,0 @@
|
|||
{% load static from staticfiles %}
|
||||
<!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b -->
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Oxygen Invoice</title>
|
||||
</head>
|
||||
<body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;">
|
||||
<style type="text/css">
|
||||
@media only screen and (max-width: 480px) {
|
||||
table[class*="container-for-gmail-android"] {
|
||||
min-width: 290px !important; width: 100% !important;
|
||||
}
|
||||
img[class="force-width-gmail"] {
|
||||
display: none !important; width: 0 !important; height: 0 !important;
|
||||
}
|
||||
table[class="w320"] {
|
||||
width: 320px !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-left"] {
|
||||
width: 160px !important; padding-left: 0 !important;
|
||||
}
|
||||
td[class*="mobile-header-padding-right"] {
|
||||
width: 160px !important; padding-right: 0 !important;
|
||||
}
|
||||
td[class="header-lg"] {
|
||||
font-size: 24px !important; padding-bottom: 5px !important;
|
||||
}
|
||||
td[class="content-padding"] {
|
||||
padding: 5px 0 5px !important;
|
||||
}
|
||||
td[class="button"] {
|
||||
padding: 5px 5px 30px !important;
|
||||
}
|
||||
td[class*="free-text"] {
|
||||
padding: 10px 18px 30px !important;
|
||||
}
|
||||
td[class~="mobile-hide-img"] {
|
||||
display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important;
|
||||
}
|
||||
td[class~="item"] {
|
||||
width: 140px !important; vertical-align: top !important;
|
||||
}
|
||||
td[class~="quantity"] {
|
||||
width: 50px !important;
|
||||
}
|
||||
td[class~="price"] {
|
||||
width: 90px !important;
|
||||
}
|
||||
td[class="item-table"] {
|
||||
padding: 30px 20px !important;
|
||||
}
|
||||
td[class="mini-container-left"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
td[class="mini-container-right"] {
|
||||
padding: 0 15px 15px !important; display: block !important; width: 290px !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center">
|
||||
<!--[if gte mso 9]>
|
||||
<v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;">
|
||||
<v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" />
|
||||
<v:textbox inset="0,0,0,0">
|
||||
<![endif]-->
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle">
|
||||
<a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a>
|
||||
</td>
|
||||
<td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
<!--[if gte mso 9]>
|
||||
</v:textbox>
|
||||
</v:rect>
|
||||
<![endif]-->
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center">
|
||||
An user requested a beta access
|
||||
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center">
|
||||
<p>User {{email}} requested beta access </p>
|
||||
{% for vm in vms %}
|
||||
Type: {{vm.type}}
|
||||
{% endfor %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
<tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff">
|
||||
<center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
<td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;">
|
||||
</td>
|
||||
</tr></table>
|
||||
</center>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -14,7 +14,7 @@
|
|||
<table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;">
|
||||
<tr>
|
||||
<td>
|
||||
<img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;">
|
||||
<img src="{{ base_url }}{% static 'datacenterlight/img/datacenterlight.png' %}" style="max-width: 200px;">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@ -33,18 +33,19 @@
|
|||
<p style="color: #4382c8; line-height: 1.4; font-family: Lato, Arial, sans-serif; font-weight: 300; margin: 0;">
|
||||
{{base_url}}{{activation_link}}
|
||||
</p>
|
||||
<p>
|
||||
{% if account_details %}
|
||||
{% url 'hosting:reset_password' as reset_password_url %}
|
||||
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 10px;">
|
||||
{% trans "Your account details are as follows" %}:
|
||||
|
||||
{% trans "Username" %} : {% trans "Your email address" %}
|
||||
{% trans "Password" %} : {{account_details}}
|
||||
|
||||
{% trans "You can reset your password here" %}:
|
||||
{{base_url}}{{reset_password_url}}
|
||||
{% endif %}
|
||||
</p>
|
||||
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 10px; margin-top: 0;">
|
||||
{% trans "Username" %} : {% trans "Your email address" %}<br/>
|
||||
{% trans "Password" %} : {{account_details}}
|
||||
</p>
|
||||
<p style="line-height: 1.75; font-family: Lato, Arial, sans-serif; font-weight: 300; margin-bottom: 0; margin-top: 0;">
|
||||
{% blocktrans %}You can reset your password <a href="{{base_url}}{{reset_password_url}}" style="text-decoration: none; color: #4382c8; font-weight: 400;">here</a>.{% endblocktrans %}
|
||||
</p>
|
||||
{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
<table style="width: 100%; border-spacing: 0; border-collapse: collapse; max-width: 560px;">
|
||||
<tr>
|
||||
<td>
|
||||
<img src="{{ base_url }}{% static 'datacenterlight/img/logo_black.png' %}" style="width: 200px; height: 50px;">
|
||||
<img src="{{ base_url }}{% static 'datacenterlight/img/datacenterlight.png' %}" style="max-width: 200px;">
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
|
|
@ -1,14 +1,32 @@
|
|||
{% load staticfiles i18n%}
|
||||
<form id="order_form" method="POST" action="" data-toggle="validator" role="form">
|
||||
|
||||
{% if vm_pricing %}
|
||||
<script type="application/javascript">
|
||||
window.vat_inclusive = {% if vm_pricing.vat_inclusive %}true{% else %}false{% endif%};
|
||||
window.vat_percentage = {{vm_pricing.vat_percentage|default:0}};
|
||||
window.coresUnitPrice = {{vm_pricing.cores_unit_price|default:0}};
|
||||
window.ramUnitPrice = {{vm_pricing.ram_unit_price|default:0}};
|
||||
window.ssdUnitPrice = {{vm_pricing.ssd_unit_price|default:0}};
|
||||
window.hddUnitPrice = {{vm_pricing.hdd_unit_price|default:0}};
|
||||
window.discountAmount = {{vm_pricing.discount_amount|default:0}};
|
||||
</script>
|
||||
{% endif %}
|
||||
|
||||
<form id="order_form" method="POST" action="{{calculator_form_url}}" data-toggle="validator" role="form">
|
||||
{% csrf_token %}
|
||||
<div class="title">
|
||||
<h3>{% trans "VM hosting" %} </h3>
|
||||
</div>
|
||||
<div class="price">
|
||||
<span id="total">15</span>
|
||||
<span id="total"></span>
|
||||
<span>CHF/{% trans "month" %}</span>
|
||||
<div class="price-text">
|
||||
<p>{% trans "VAT included" %}</p>
|
||||
<p>
|
||||
{% if vm_pricing.vat_inclusive %}{% trans "VAT included" %} <br>{% endif %}
|
||||
{% if vm_pricing.discount_amount %}
|
||||
{% trans "You save" %} {{ vm_pricing.discount_amount }} CHF
|
||||
{% endif %}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="descriptions">
|
||||
|
@ -36,8 +54,8 @@
|
|||
<div class="form-group">
|
||||
<div class="description input">
|
||||
<i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i>
|
||||
<input id="ramValue" class="input-price select-number" type="number" min="2" max="200" name="ram"
|
||||
data-error="{% trans 'Please enter a value in range 2 - 200.' %}" required>
|
||||
<input id="ramValue" class="input-price select-number" type="number" min="1" max="200" name="ram"
|
||||
data-error="{% trans 'Please enter a value in range 1 - 200.' %}" required>
|
||||
<span> GB RAM</span>
|
||||
<i class="fa fa-plus-circle right" data-plus="ram" aria-hidden="true"></i>
|
||||
</div>
|
||||
|
@ -71,15 +89,13 @@
|
|||
</div>
|
||||
<div class="description select-configuration input form-group justify-center">
|
||||
<label for="config">OS</label>
|
||||
<select name="config" id="">
|
||||
<select name="config">
|
||||
{% for template in templates %}
|
||||
<option value="{{template.opennebula_vm_template_id}}">{{template.name}}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<!--<div class="description check-ip">
|
||||
<input type="checkbox" name="ipv6"> Ipv6 Only<br>
|
||||
</div>-->
|
||||
</div>
|
||||
<input type="hidden" name="pricing_name" value="{% if vm_pricing.name %}{{vm_pricing.name}}{% else %}unknown{% endif%}"></input>
|
||||
<input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input>
|
||||
</form>
|
|
@ -1,39 +1,21 @@
|
|||
{% load staticfiles i18n%}
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
{% load i18n %}
|
||||
|
||||
<footer>
|
||||
<div class="container">
|
||||
<ul class="list-inline">
|
||||
{% if request.resolver_match.url_name != "index" %}
|
||||
<li>
|
||||
<a href="{% url 'datacenterlight:index' %}">{% trans "Home" %}</a>
|
||||
<a class="url-init" href="https://{{MULTISITE_CMS_FALLBACK}}">{% trans "Home" %}</a>
|
||||
</li>
|
||||
<li class="footer-menu-divider">⋅</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="url-init" href="{% url 'datacenterlight:index' %}#how">{% trans "Highlights" %}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="url-init" href="{% url 'datacenterlight:index' %}#your">{% trans "Scale out" %}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="url-init" href="{% url 'datacenterlight:index' %}#our">{% trans "Reliable and light" %}</a>
|
||||
</li>
|
||||
{% if request.resolver_match.url_name != "index" %}
|
||||
<li>
|
||||
<a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Pricing" %}</a>
|
||||
<a class="url-init" href="https://{{MULTISITE_CMS_FALLBACK}}#contact">{% trans "Contact" %}</a>
|
||||
</li>
|
||||
<li class="footer-menu-divider">⋅</li>
|
||||
{% else %}
|
||||
<li>
|
||||
<a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Order VM" %}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
<a class="url-init" href="{% url 'datacenterlight:index' %}#contact">{% trans "Contact" %}</a>
|
||||
<a class="url-init" href="https://{{MULTISITE_CMS_FALLBACK}}/cms/terms-of-service">{% trans "Terms of Service" %}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. {% trans "All Rights Reserved" %}</p>
|
||||
<p class="copyright text-muted small">Copyright © ungleich glarus ag {% now "Y" %}. {% trans "All Rights Reserved" %}</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
{% load staticfiles i18n%}
|
||||
{% load custom_tags %}
|
||||
{% load staticfiles i18n custom_tags %}
|
||||
{% get_current_language as LANGUAGE_CODE %}
|
||||
<nav class="navbar navbar-default navbar-fixed-top topnav">
|
||||
<div class="topnav">
|
||||
|
||||
<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="#bs-example-navbar-collapse-1">
|
||||
|
@ -17,19 +16,8 @@
|
|||
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
|
||||
<!-- Start Navbar collapse-->
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="dropdown highlights-dropdown">
|
||||
<a class="dropdown-toggle url-init" href="{% url 'datacenterlight:index' %}#how" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans "Highlights" %} <span class="caret"></span></a>
|
||||
<ul class="dropdown-menu ">
|
||||
<li><a class="url-init" href="{% url 'datacenterlight:index' %}#your">{% trans "Scale out" %}</a></li>
|
||||
<li><a class="url-init" href="{% url 'datacenterlight:index' %}#our">{% trans "Reliable and light" %}</a></li>
|
||||
<li> <a class="url-init" href="{% url 'datacenterlight:index' %}#price">{% trans "Order VM" %}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="{% url 'datacenterlight:whydatacenterlight' %}">{% trans "Why Data Center Light?" %}</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class="url-init" href="{% url 'datacenterlight:index' %}#contact">{% trans "Contact" %}</a>
|
||||
<a class="url-init" href="https://datacenterlight.ch/en-us/cms/datacenterlight/#contact">{% trans "Contact" %}</a>
|
||||
</li>
|
||||
<li>
|
||||
{% if LANGUAGE_CODE == 'en-us'%}
|
||||
|
|
|
@ -6,10 +6,6 @@
|
|||
<!-- Header -->
|
||||
<div class="intro-header" id="home">
|
||||
<div class="container">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
|
||||
<div class="intro-message">
|
||||
<h1>Data Center Light</h1>
|
||||
<h3>{% trans "Finally, an affordable VM hosting in Switzerland!" %}</h3>
|
||||
|
@ -25,22 +21,16 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
|
||||
</div>
|
||||
<!-- /.intro-header -->
|
||||
|
||||
<!-- Page Content -->
|
||||
<div class="split-section right" id="how">
|
||||
|
||||
<div class="container">
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
||||
<div class="col-sm-6">
|
||||
<div class="split-text">
|
||||
<div class="split-title">
|
||||
<h2>{% trans "Highlights" %}</h2>
|
||||
|
@ -65,91 +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>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
<!-- /.option 1 -->
|
||||
</div>
|
||||
|
||||
<div class="split-section left" id="your">
|
||||
|
||||
<div class="split-section left section-gradient" id="your">
|
||||
<div class="container">
|
||||
<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-title">
|
||||
<h2>{% trans "Scale out" %}</h2>
|
||||
</div>
|
||||
<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>
|
||||
|
||||
</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>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
<!-- /.option 1 -->
|
||||
</div>
|
||||
<div class="split-section right" id="our">
|
||||
|
||||
<div class="split-section right" id="our">
|
||||
<div class="container">
|
||||
<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>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
||||
<div class="col-sm-6">
|
||||
<div class="split-text">
|
||||
<div class="split-title">
|
||||
<h2>{% trans "Reliable and light" %}</h2>
|
||||
</div>
|
||||
<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>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
<!-- /.option 1 -->
|
||||
</div>
|
||||
|
||||
<!-- /.content-section-b -->
|
||||
<div class="content-section-a pricing-section" id="price">
|
||||
|
||||
<div class="split-section pricing-section section-gradient" id="price">
|
||||
<div class="container">
|
||||
<!-- Page Features -->
|
||||
<div class="row text-center">
|
||||
<div class="col-xs-12 col-md-6 text">
|
||||
<h2 class="section-heading">{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}</h2>
|
||||
<p class="lead new-lead">{% blocktrans %}Ready in 30 seconds.<br/>Experience the unbeatable speed from Data Center Light.{% endblocktrans %}</p>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<div class="split-text">
|
||||
<div class="split-title">
|
||||
<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 class="col-md-6">
|
||||
<div class="price-calc-section">
|
||||
<div class="card">
|
||||
{% include "datacenterlight/includes/_calculator_form.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-md-6 hero-feature">
|
||||
<div class="price-calc-section no-padding">
|
||||
<div class="landing card">
|
||||
<img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt="">
|
||||
<div class="caption">
|
||||
{% include "datacenterlight/calculator_form.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- / contact section -->
|
||||
<div class="full-contact-section">
|
||||
<div class="intro-header-2 contact-section" id="contact">
|
||||
<div class="container">
|
||||
|
@ -160,18 +138,18 @@
|
|||
</div>
|
||||
<div class="contact-details">
|
||||
<div class="subtitle">
|
||||
<h3>ungleich GmbH</h3>
|
||||
<h3>ungleich glarus ag</h3>
|
||||
</div>
|
||||
<div class="description">
|
||||
<p>info@datacenterlight.ch</p>
|
||||
<p>In der Au 7, Schwanden 8762</p>
|
||||
<p>Bahnhofstrasse 1, 8783 Linthal</p>
|
||||
<p>{% trans "Switzerland " %}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="social">
|
||||
<a target="_blank" class="" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a>
|
||||
<a target="_blank" class="" href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a>
|
||||
<a target="_blank" class="" href="https://www.facebook.com/ungleich.ch/"><i class="fa fa-facebook"></i></a>
|
||||
<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">
|
||||
|
@ -180,10 +158,8 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /.banner -->
|
||||
{% endblock %}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{% extends "hosting/base_short.html" %}
|
||||
{% load staticfiles bootstrap3 i18n %}
|
||||
{% extends "datacenterlight/base_hosting.html" %}
|
||||
{% load staticfiles bootstrap3 i18n cms_tags humanize %}
|
||||
|
||||
{% block css_extra %}
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/>
|
||||
|
@ -39,7 +39,7 @@
|
|||
<p>
|
||||
{% trans "Don't have an account yet?" %}<br>
|
||||
{% trans "You can sign up by filling in the information below." %}<br>
|
||||
<a href="{% url 'hosting:reset_password' %}">{% trans "Forgot password?" %}</a>
|
||||
<a href="{% url 'hosting:reset_password' %}" target="_blank">{% trans "Forgot password?" %}</a> or <a href="{% url 'hosting:resend_activation_link' %}" target="_blank">{% trans "Resend activation link" %}?</a>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
@ -78,7 +78,24 @@
|
|||
<hr>
|
||||
<p>{% trans "Configuration"%} <strong class="pull-right">{{request.session.template.name}}</strong></p>
|
||||
<hr>
|
||||
<p class="last-p"><strong>{%trans "Total" %}</strong> <small>({%trans "including VAT" %})</small> <strong class="pull-right">{{request.session.specs.price}} CHF/{% trans "Month" %}</strong></p>
|
||||
<p>
|
||||
<strong>{%trans "Total" %}</strong>
|
||||
<small>
|
||||
({% if vm_pricing.vat_inclusive %}{%trans "including VAT" %}{% else %}{%trans "excluding VAT" %}{% endif %})
|
||||
</small>
|
||||
<strong class="pull-right">{{request.session.specs.price|intcomma}} CHF/{% trans "Month" %}</strong>
|
||||
</p>
|
||||
<hr>
|
||||
{% if vm_pricing.discount_amount %}
|
||||
<p class="mb-0">
|
||||
{%trans "Discount" as discount_name %}
|
||||
<strong>{{ vm_pricing.discount_name|default:discount_name }}</strong>
|
||||
<strong class="pull-right text-primary">- {{ vm_pricing.discount_amount }} CHF/{% trans "Month" %}</strong>
|
||||
</p>
|
||||
<p>
|
||||
({% trans "Will be applied at checkout" %})
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,24 +1,166 @@
|
|||
{% extends "hosting/order_detail.html" %}
|
||||
{% load i18n %}
|
||||
{% extends "datacenterlight/base_hosting.html" %}
|
||||
{% load staticfiles bootstrap3 i18n custom_tags humanize %}
|
||||
|
||||
{% block navbar %}
|
||||
{% include "datacenterlight/includes/_navbar.html" %}
|
||||
{% endblock navbar %}
|
||||
|
||||
{% block submit_btn %}
|
||||
{% block content %}
|
||||
<div id="order-detail{{order.pk}}" class="order-detail-container">
|
||||
{% if messages %}
|
||||
<div class="alert alert-warning">
|
||||
{% for message in messages %}
|
||||
<span>{{ message }}</span>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if not error %}
|
||||
<div class="dashboard-container-head">
|
||||
<h1 class="dashboard-title-thin">
|
||||
<img src="{% static 'hosting/img/billing.svg' %}" class="un-icon">{% blocktrans with page_header_text=page_header_text|default:"Invoice" %}{{page_header_text}}{% endblocktrans %}
|
||||
</h1>
|
||||
</div>
|
||||
<div class="order-details">
|
||||
<p>
|
||||
<strong>{% trans "Date" %}:</strong>
|
||||
<span class="locale_date">
|
||||
{% now "Y-m-d h:i a" %}
|
||||
</span>
|
||||
</p>
|
||||
<hr>
|
||||
<div>
|
||||
<address>
|
||||
<h4>{% trans "Billed to" %}:</h4>
|
||||
<p>
|
||||
{% with request.session.billing_address_data as billing_address %}
|
||||
{{billing_address.cardholder_name}}<br>
|
||||
{{billing_address.street_address}}, {{billing_address.postal_code}}<br>
|
||||
{{billing_address.city}}, {{billing_address.country}}
|
||||
{% endwith %}
|
||||
</p>
|
||||
</address>
|
||||
</div>
|
||||
<hr>
|
||||
<div>
|
||||
<h4>{% trans "Payment method" %}:</h4>
|
||||
<p>
|
||||
{{cc_brand|default:_('Credit Card')}} {% trans "ending in" %} ****{{cc_last4}}<br>
|
||||
{{request.user.email}}
|
||||
</p>
|
||||
</div>
|
||||
<hr>
|
||||
<div>
|
||||
<h4>{% trans "Order summary" %}</h4>
|
||||
<p>
|
||||
<strong>{% trans "Product" %}:</strong>
|
||||
{{ request.session.template.name }}
|
||||
</p>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
<p>
|
||||
<span>{% trans "Cores" %}: </span>
|
||||
<strong class="pull-right">{{vm.cpu|floatformat}}</strong>
|
||||
</p>
|
||||
<p>
|
||||
<span>{% trans "Memory" %}: </span>
|
||||
<strong class="pull-right">{{vm.memory|intcomma}} GB</strong>
|
||||
</p>
|
||||
<p>
|
||||
<span>{% trans "Disk space" %}: </span>
|
||||
<strong class="pull-right">{{vm.disk_size|intcomma}} GB</strong>
|
||||
</p>
|
||||
</div>
|
||||
<div class="col-sm-12">
|
||||
<hr class="thin-hr">
|
||||
</div>
|
||||
{% if vm.vat > 0 or vm.discount.amount > 0 %}
|
||||
<div class="col-sm-6">
|
||||
<div class="subtotal-price">
|
||||
{% if vm.vat > 0 %}
|
||||
<p>
|
||||
<strong class="text-lg">{% trans "Subtotal" %} </strong>
|
||||
<strong class="pull-right">{{vm.price|floatformat:2|intcomma}} CHF</strong>
|
||||
</p>
|
||||
<p>
|
||||
<small>{% trans "VAT" %} ({{ vm.vat_percent|floatformat:2|intcomma }}%) </small>
|
||||
<strong class="pull-right">{{vm.vat|floatformat:2|intcomma}} CHF</strong>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if vm.discount.amount > 0 %}
|
||||
<p class="text-primary">
|
||||
{%trans "Discount" as discount_name %}
|
||||
<strong>{{ vm.discount.name|default:discount_name }} </strong>
|
||||
<strong class="pull-right">- {{ vm.discount.amount }} CHF</strong>
|
||||
</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-sm-12">
|
||||
<hr class="thin-hr">
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col-sm-6">
|
||||
<p class="total-price">
|
||||
<strong>{% trans "Total" %} </strong>
|
||||
<strong class="pull-right">{{vm.total_price|floatformat:2|intcomma}} CHF</strong>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<hr class="thin-hr">
|
||||
</div>
|
||||
<form id="virtual_machine_create_form" action="" method="POST">
|
||||
{% csrf_token %}
|
||||
<div class="row">
|
||||
<div class="col-sm-8">
|
||||
<div class="dcl-place-order-text">{% blocktrans with vm_price=request.session.specs.price %}By clicking "Place order" this plan will charge your credit card account with the fee of {{ vm_price }}CHF/month{% endblocktrans %}.</div>
|
||||
<div class="dcl-place-order-text">{% blocktrans with vm_total_price=vm.total_price|floatformat:2|intcomma %}By clicking "Place order" this plan will charge your credit card account with {{vm_total_price}} CHF/month{% endblocktrans %}.</div>
|
||||
</div>
|
||||
<div class="col-sm-4 order-confirm-btn text-right">
|
||||
<button class="btn choice-btn" id="btn-create-vm"
|
||||
data-toggle="modal" data-target="#createvm-modal">
|
||||
<button class="btn choice-btn" id="btn-create-vm" data-toggle="modal" data-target="#createvm-modal">
|
||||
{% trans "Place order" %}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock submit_btn %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
|
||||
<!-- Create VM Modal -->
|
||||
<div class="modal fade" id="createvm-modal" tabindex="-1" role="dialog"
|
||||
aria-hidden="true" data-backdrop="static" data-keyboard="false">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="modal-icon">
|
||||
<i class="fa fa-cog fa-spin fa-3x fa-fw"></i>
|
||||
<span class="sr-only">{% trans "Processing..." %}</span>
|
||||
</div>
|
||||
<h4 class="modal-title" id="createvm-modal-title"></h4>
|
||||
<div class="modal-text" id="createvm-modal-body">
|
||||
{% trans "Hold tight, we are processing your request" %}
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a id="createvm-modal-done-btn" class="btn btn-success btn-ok btn-wide hide" href="{% url 'hosting:virtual_machines' %}">{% trans "OK" %}</a>
|
||||
<button id="createvm-modal-close-btn" type="button" class="btn btn-danger btn-ok btn-wide hide" data-dismiss="modal" aria-label="create-vm-close">{% trans "Close" %}</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- / Create VM Modal -->
|
||||
|
||||
<script type="text/javascript">
|
||||
{% trans "Some problem encountered. Please try again later." as err_msg %}
|
||||
var create_vm_error_message = '{{err_msg|safe}}';
|
||||
window.onload = function () {
|
||||
var locale_dates = document.getElementsByClassName("locale_date");
|
||||
var formats = ['YYYY-MM-DD hh:mm a']
|
||||
var i;
|
||||
for (i = 0; i < locale_dates.length; i++) {
|
||||
var oldDate = moment.utc(locale_dates[i].textContent, formats);
|
||||
var outputFormat = locale_dates[i].getAttribute('data-format') || oldDate._f;
|
||||
locale_dates[i].innerHTML = oldDate.local().format(outputFormat);
|
||||
locale_dates[i].className += ' done';
|
||||
}
|
||||
};
|
||||
</script>
|
||||
{%endblock%}
|
|
@ -1,32 +0,0 @@
|
|||
{% extends "datacenterlight/base.html" %}
|
||||
{% load staticfiles i18n %}
|
||||
{% block content %}
|
||||
|
||||
<div class="intro-pricing success-pricing">
|
||||
|
||||
<div class="intro-message">
|
||||
<h2 class="section-heading">{% trans "Thank you for order! Our team will contact you via email" %}</h2>
|
||||
{% if LANGUAGE_CODE == 'en-us'%}
|
||||
<h2 class="section-heading">{% trans "as soon as possible!" %}</h2>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.onload=function(){
|
||||
$('.selectpicker').selectpicker({
|
||||
style: 'btn-link',
|
||||
windowPadding: 10,
|
||||
});
|
||||
|
||||
var hash = window.location.hash.substr(1);
|
||||
console.log(hash);
|
||||
if (hash == 'requestform'){
|
||||
$('#reques-success-message').modal('show');
|
||||
}
|
||||
|
||||
};
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
|
@ -3,25 +3,16 @@
|
|||
|
||||
{% block content %}
|
||||
<!-- Why Data Center Light? -->
|
||||
<div class="full-whydcl-sec">
|
||||
<div class="whydcl-header whydcl-section" id="why_dcl">
|
||||
<div class="dcl-header">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-12 col-md-12">
|
||||
<div class="single-heading">
|
||||
<h2>{% trans "Why Data Center Light?" %}</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h1>{% trans "Why Data Center Light?" %}</h1>
|
||||
</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="col-sm-6 split-text">
|
||||
<div class="split-title">
|
||||
<h2>{% trans "Tech Stack" %}</h2>
|
||||
</div>
|
||||
|
@ -30,123 +21,120 @@
|
|||
<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 class="col-sm-6 split-figure">
|
||||
<div class="section-figure">
|
||||
<div class="section-image">
|
||||
<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 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">
|
||||
<div class="section-image">
|
||||
<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
|
||||
<span class="logo-caption">{% trans "Our monitoring" %}</span>
|
||||
<div class="section-image-caption">{% trans "Our monitoring" %}</div>
|
||||
</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 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="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
||||
<div class="section-image">
|
||||
<img class="img-responsive" src="{% static 'datacenterlight/img/django.png' %}" alt="Django">
|
||||
<span class="logo-caption">{% trans "Our web frontend" %}</span>
|
||||
<div class="section-image-caption">{% trans "Our web frontend" %}</div>
|
||||
</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 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="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
||||
<div class="section-image">
|
||||
<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 class="section-image-caption">{% trans "Our configuration management system" %}</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap">
|
||||
<div class="section-image">
|
||||
<img class="img-responsive" src="{% static 'datacenterlight/img/python-logo.png' %}" alt="Python">
|
||||
<span class="logo-caption">{% trans "Our awesome juice" %}</span>
|
||||
<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 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>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.container -->
|
||||
<hr class="thick-divider"/><!-- Divider -->
|
||||
<div class=" space">
|
||||
<div class="split-section right split-section-plain">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-4 col-md-5 ">
|
||||
<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
|
||||
<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="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
|
||||
<div class="section-image">
|
||||
<img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist byu ngleich">
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1">
|
||||
<div class="section-image">
|
||||
<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-8 col-md-7 text-right">
|
||||
<div class="tech-sub-sec">
|
||||
</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>
|
||||
<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>
|
||||
</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>
|
||||
<!-- /.container -->
|
||||
<hr class="thick-divider"/><!-- Divider -->
|
||||
<div class="space">
|
||||
|
||||
<div class="banner-list">
|
||||
<div class="container">
|
||||
<div class="tech-sub-sec">
|
||||
<h3>{% trans "We bring the future to you." %}</h3>
|
||||
<div class="banner-list-heading">
|
||||
<h2>{% trans "We bring the future to you." %}</h3>
|
||||
</div>
|
||||
<div class="flex-row flex-row-rev">
|
||||
<div class="percent-text">
|
||||
100% <strong>IPv6</strong>
|
||||
</div>
|
||||
<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 class="flex-row">
|
||||
<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>
|
||||
</div>
|
||||
<div class="desc-text padding-vertical w380">
|
||||
<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>
|
||||
<div class="desc-text padding-vertical">
|
||||
<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>
|
||||
<!-- /.container -->
|
||||
</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">
|
||||
<!-- Page Features -->
|
||||
<div class="row text-center">
|
||||
<div class="col-xs-12 col-md-6 text">
|
||||
<h2 class="section-heading">{% 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 class="row">
|
||||
<div class="col-md-6 split-text">
|
||||
<div class="split-title">
|
||||
<h2>{% trans "Starting from only 15CHF per month. Try now." %}</h2>
|
||||
</div>
|
||||
|
||||
<div class="col-xs-12 col-md-6 hero-feature">
|
||||
<div class="price-calc-section no-padding">
|
||||
<div class="landing card">
|
||||
<img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt="">
|
||||
<div class="caption">
|
||||
{% include "datacenterlight/calculator_form.html" %}
|
||||
<div class="split-description">
|
||||
<div class="lead">
|
||||
<p>{% trans "Actions speak louder than words. Let's do it, try our VM now." %}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
<div class="price-calc-section">
|
||||
<div class="card">
|
||||
{% include "datacenterlight/includes/_calculator_form.html" %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- End Why Data Center Light? -->
|
||||
{% endblock %}
|
||||
|
|
|
@ -41,4 +41,14 @@ def multiply(value, arg):
|
|||
:param arg:
|
||||
:return:
|
||||
"""
|
||||
return value*arg
|
||||
return value * arg
|
||||
|
||||
|
||||
@register.filter('escaped_line_break')
|
||||
def escaped_line_break(value):
|
||||
"""
|
||||
usage: {{ text|escaped_line_break }}
|
||||
:param value:
|
||||
:return:
|
||||
"""
|
||||
return value.replace("\\n", "\n")
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import TemplateView, RedirectView
|
||||
|
||||
from .views import (
|
||||
IndexView, BetaProgramView, LandingProgramView, BetaAccessView,
|
||||
SuccessView, PaymentOrderView, OrderConfirmationView,
|
||||
IndexView, PaymentOrderView, OrderConfirmationView,
|
||||
WhyDataCenterLightView, ContactUsView
|
||||
)
|
||||
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', IndexView.as_view(), name='index'),
|
||||
|
@ -15,17 +13,14 @@ urlpatterns = [
|
|||
url(r'^g/$', IndexView.as_view(), name='index_g'),
|
||||
url(r'^f/$', IndexView.as_view(), name='index_f'),
|
||||
url(r'^l/$', IndexView.as_view(), name='index_l'),
|
||||
url(r'^new/$', RedirectView.as_view(url='/cms/'),
|
||||
name='cms_index'),
|
||||
url(r'^whydatacenterlight/?$', WhyDataCenterLightView.as_view(),
|
||||
name='whydatacenterlight'),
|
||||
url(r'^beta-program/?$', BetaProgramView.as_view(), name='beta'),
|
||||
url(r'^landing/?$', LandingProgramView.as_view(), name='landing'),
|
||||
url(r'^payment/?$', PaymentOrderView.as_view(), name='payment'),
|
||||
url(r'^order-confirmation/?$', OrderConfirmationView.as_view(),
|
||||
name='order_confirmation'),
|
||||
url(r'^order-success/?$', SuccessView.as_view(), name='order_success'),
|
||||
url(r'^beta_access?$', BetaAccessView.as_view(), name='beta_access'),
|
||||
url(r'^contact/?$', ContactUsView.as_view(), name='contact_us'),
|
||||
|
||||
url(r'glasfaser/?$',
|
||||
TemplateView.as_view(template_name='ungleich_page/glasfaser.html'),
|
||||
name='glasfaser'),
|
||||
|
|
14
datacenterlight/utils.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from django.contrib.sites.models import Site
|
||||
|
||||
from .cms_models import CMSIntegration
|
||||
|
||||
|
||||
def get_cms_integration(name):
|
||||
current_site = Site.objects.get_current()
|
||||
try:
|
||||
cms_integration = CMSIntegration.objects.get(
|
||||
name=name, domain=current_site
|
||||
)
|
||||
except CMSIntegration.DoesNotExist:
|
||||
cms_integration = CMSIntegration.objects.get(name=name, domain=None)
|
||||
return cms_integration
|
|
@ -1,5 +1,5 @@
|
|||
import logging
|
||||
import json
|
||||
import logging
|
||||
|
||||
from django import forms
|
||||
from django.conf import settings
|
||||
|
@ -11,22 +11,20 @@ from django.http import HttpResponseRedirect, HttpResponse
|
|||
from django.shortcuts import render
|
||||
from django.utils.translation import get_language, ugettext_lazy as _
|
||||
from django.views.decorators.cache import cache_control
|
||||
from django.views.generic import FormView, CreateView, TemplateView, DetailView
|
||||
from django.views.generic import FormView, CreateView, DetailView
|
||||
|
||||
from datacenterlight.tasks import create_vm_task
|
||||
from hosting.models import HostingOrder, UserCardDetail
|
||||
from hosting.forms import HostingUserLoginForm
|
||||
from hosting.models import HostingOrder
|
||||
from membership.models import CustomUser, StripeCustomer
|
||||
from opennebula_api.serializers import VMTemplateSerializer
|
||||
from utils.forms import (
|
||||
BillingAddressForm, BillingAddressFormSignup
|
||||
)
|
||||
from utils.hosting_utils import get_vm_price, HostingUtils
|
||||
from utils.mailer import BaseEmail
|
||||
from utils.forms import BillingAddressForm, BillingAddressFormSignup
|
||||
from utils.hosting_utils import get_vm_price_with_vat
|
||||
from utils.stripe_utils import StripeUtils
|
||||
from utils.tasks import send_plain_email_task
|
||||
from .forms import BetaAccessForm, ContactForm
|
||||
from .models import BetaAccess, BetaAccessVMType, BetaAccessVM, VMTemplate
|
||||
from .forms import ContactForm
|
||||
from .models import VMTemplate, VMPricing
|
||||
from .utils import get_cms_integration
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -43,9 +41,10 @@ class ContactUsView(FormView):
|
|||
return self.render_to_response(
|
||||
self.get_context_data(contact_form=form))
|
||||
else:
|
||||
return render(self.request,
|
||||
'datacenterlight/index.html',
|
||||
self.get_context_data(contact_form=form))
|
||||
return render(
|
||||
self.request, 'datacenterlight/index.html',
|
||||
self.get_context_data(contact_form=form)
|
||||
)
|
||||
|
||||
def form_valid(self, form):
|
||||
form.save()
|
||||
|
@ -69,138 +68,14 @@ class ContactUsView(FormView):
|
|||
return self.render_to_response(
|
||||
self.get_context_data(success=True, contact_form=form))
|
||||
else:
|
||||
return render(self.request,
|
||||
'datacenterlight/index.html',
|
||||
self.get_context_data(success=True,
|
||||
contact_form=form))
|
||||
|
||||
|
||||
class LandingProgramView(TemplateView):
|
||||
template_name = "datacenterlight/landing.html"
|
||||
|
||||
|
||||
class SuccessView(TemplateView):
|
||||
template_name = "datacenterlight/success.html"
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
if 'specs' not in request.session or 'user' not in request.session:
|
||||
return HttpResponseRedirect(reverse('datacenterlight:index'))
|
||||
elif 'token' not in request.session:
|
||||
return HttpResponseRedirect(reverse('datacenterlight:payment'))
|
||||
elif 'order_confirmation' not in request.session:
|
||||
return HttpResponseRedirect(
|
||||
reverse('datacenterlight:order_confirmation'))
|
||||
else:
|
||||
for session_var in ['specs', 'user', 'template', 'billing_address',
|
||||
'billing_address_data',
|
||||
'token', 'customer']:
|
||||
if session_var in request.session:
|
||||
del request.session[session_var]
|
||||
return render(request, self.template_name)
|
||||
|
||||
|
||||
class BetaAccessView(FormView):
|
||||
template_name = "datacenterlight/beta_access.html"
|
||||
form_class = BetaAccessForm
|
||||
success_message = "Thank you, we will contact you as soon as possible"
|
||||
|
||||
def form_valid(self, form):
|
||||
context = {
|
||||
'base_url': "{0}://{1}".format(self.request.scheme,
|
||||
self.request.get_host())
|
||||
}
|
||||
|
||||
email_data = {
|
||||
'subject': 'DatacenterLight Beta Access Request',
|
||||
'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
|
||||
'to': form.cleaned_data.get('email'),
|
||||
'from': '(datacenterlight) DatacenterLight Support support@datacenterlight.ch',
|
||||
'context': context,
|
||||
'template_name': 'request_access_confirmation',
|
||||
'template_path': 'datacenterlight/emails/'
|
||||
}
|
||||
email = BaseEmail(**email_data)
|
||||
email.send()
|
||||
|
||||
context.update({
|
||||
'email': form.cleaned_data.get('email')
|
||||
})
|
||||
|
||||
email_data = {
|
||||
'subject': 'DatacenterLight Beta Access Request',
|
||||
'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
|
||||
'to': 'info@ungleich.ch',
|
||||
'context': context,
|
||||
'template_name': 'request_access_notification',
|
||||
'template_path': 'datacenterlight/emails/'
|
||||
}
|
||||
email = BaseEmail(**email_data)
|
||||
email.send()
|
||||
|
||||
messages.add_message(self.request, messages.SUCCESS,
|
||||
self.success_message)
|
||||
return render(self.request, 'datacenterlight/beta_success.html', {})
|
||||
|
||||
|
||||
class BetaProgramView(CreateView):
|
||||
template_name = "datacenterlight/beta.html"
|
||||
model = BetaAccessVM
|
||||
fields = '__all__'
|
||||
# form_class = BetaAccessForm
|
||||
# success_url = "/datacenterlight#requestform"
|
||||
success_message = "Thank you, we will contact you as soon as possible"
|
||||
|
||||
def get_success_url(self):
|
||||
success_url = reverse('datacenterlight:beta')
|
||||
success_url += "#success"
|
||||
return success_url
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
vms = BetaAccessVMType.objects.all()
|
||||
context = super(BetaProgramView, self).get_context_data(**kwargs)
|
||||
|
||||
# templates = OpenNebulaManager().get_templates()
|
||||
# data = VirtualMachineTemplateSerializer(templates, many=True).data
|
||||
|
||||
context.update({
|
||||
'base_url': "{0}://{1}".format(self.request.scheme,
|
||||
self.request.get_host()),
|
||||
'vms': vms
|
||||
})
|
||||
return context
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
data = request.POST
|
||||
vms = BetaAccessVM.create(data)
|
||||
|
||||
context = {
|
||||
'base_url': "{0}://{1}".format(self.request.scheme,
|
||||
self.request.get_host()),
|
||||
'email': data.get('email'),
|
||||
'name': data.get('name'),
|
||||
'vms': vms
|
||||
}
|
||||
|
||||
email_data = {
|
||||
'subject': 'DatacenterLight Beta Access Request',
|
||||
'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
|
||||
'to': 'info@ungleich.ch',
|
||||
'context': context,
|
||||
'template_name': 'request_beta_access_notification',
|
||||
'template_path': 'datacenterlight/emails/'
|
||||
}
|
||||
email = BaseEmail(**email_data)
|
||||
email.send()
|
||||
|
||||
messages.add_message(self.request, messages.SUCCESS,
|
||||
self.success_message)
|
||||
return HttpResponseRedirect(self.get_success_url())
|
||||
return render(
|
||||
self.request, 'datacenterlight/index.html',
|
||||
self.get_context_data(success=True, contact_form=form)
|
||||
)
|
||||
|
||||
|
||||
class IndexView(CreateView):
|
||||
template_name = "datacenterlight/index.html"
|
||||
model = BetaAccess
|
||||
form_class = BetaAccessForm
|
||||
success_url = "/datacenterlight#requestform"
|
||||
success_message = "Thank you, we will contact you as soon as possible"
|
||||
|
||||
|
@ -209,7 +84,7 @@ class IndexView(CreateView):
|
|||
raise ValidationError(_('Invalid number of cores'))
|
||||
|
||||
def validate_memory(self, value):
|
||||
if (value > 200) or (value < 2):
|
||||
if (value > 200) or (value < 1):
|
||||
raise ValidationError(_('Invalid RAM size'))
|
||||
|
||||
def validate_storage(self, value):
|
||||
|
@ -218,15 +93,11 @@ class IndexView(CreateView):
|
|||
|
||||
@cache_control(no_cache=True, must_revalidate=True, no_store=True)
|
||||
def get(self, request, *args, **kwargs):
|
||||
for session_var in ['specs', 'user', 'billing_address_data']:
|
||||
for session_var in ['specs', 'user', 'billing_address_data',
|
||||
'pricing_name']:
|
||||
if session_var in request.session:
|
||||
del request.session[session_var]
|
||||
|
||||
vm_templates = VMTemplate.objects.all()
|
||||
context = {
|
||||
'templates': vm_templates
|
||||
}
|
||||
return render(request, self.template_name, context)
|
||||
return HttpResponseRedirect(reverse('datacenterlight:cms_index'))
|
||||
|
||||
def post(self, request):
|
||||
cores = request.POST.get('cpu')
|
||||
|
@ -236,43 +107,73 @@ class IndexView(CreateView):
|
|||
storage = request.POST.get('storage')
|
||||
storage_field = forms.IntegerField(validators=[self.validate_storage])
|
||||
template_id = int(request.POST.get('config'))
|
||||
pricing_name = request.POST.get('pricing_name')
|
||||
vm_pricing = VMPricing.get_vm_pricing_by_name(pricing_name)
|
||||
|
||||
template = VMTemplate.objects.filter(
|
||||
opennebula_vm_template_id=template_id).first()
|
||||
opennebula_vm_template_id=template_id
|
||||
).first()
|
||||
template_data = VMTemplateSerializer(template).data
|
||||
referer_url = request.META['HTTP_REFERER']
|
||||
|
||||
if vm_pricing is None:
|
||||
vm_pricing_name_msg = _(
|
||||
"Incorrect pricing name. Please contact support"
|
||||
"{support_email}".format(
|
||||
support_email=settings.DCL_SUPPORT_FROM_ADDRESS
|
||||
)
|
||||
)
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, vm_pricing_name_msg,
|
||||
extra_tags='pricing'
|
||||
)
|
||||
return HttpResponseRedirect(referer_url + "#order_form")
|
||||
else:
|
||||
vm_pricing_name = vm_pricing.name
|
||||
|
||||
try:
|
||||
cores = cores_field.clean(cores)
|
||||
except ValidationError as err:
|
||||
msg = '{} : {}.'.format(cores, str(err))
|
||||
messages.add_message(self.request, messages.ERROR, msg,
|
||||
extra_tags='cores')
|
||||
return HttpResponseRedirect(
|
||||
reverse('datacenterlight:index') + "#order_form")
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, msg, extra_tags='cores'
|
||||
)
|
||||
return HttpResponseRedirect(referer_url + "#order_form")
|
||||
|
||||
try:
|
||||
memory = memory_field.clean(memory)
|
||||
except ValidationError as err:
|
||||
msg = '{} : {}.'.format(memory, str(err))
|
||||
messages.add_message(self.request, messages.ERROR, msg,
|
||||
extra_tags='memory')
|
||||
return HttpResponseRedirect(
|
||||
reverse('datacenterlight:index') + "#order_form")
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, msg, extra_tags='memory'
|
||||
)
|
||||
return HttpResponseRedirect(referer_url + "#order_form")
|
||||
|
||||
try:
|
||||
storage = storage_field.clean(storage)
|
||||
except ValidationError as err:
|
||||
msg = '{} : {}.'.format(storage, str(err))
|
||||
messages.add_message(self.request, messages.ERROR, msg,
|
||||
extra_tags='storage')
|
||||
return HttpResponseRedirect(
|
||||
reverse('datacenterlight:index') + "#order_form")
|
||||
amount_to_be_charged = get_vm_price(cpu=cores, memory=memory,
|
||||
disk_size=storage)
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, msg, extra_tags='storage'
|
||||
)
|
||||
return HttpResponseRedirect(referer_url + "#order_form")
|
||||
|
||||
price, vat, vat_percent, discount = get_vm_price_with_vat(
|
||||
cpu=cores,
|
||||
memory=memory,
|
||||
ssd_size=storage,
|
||||
pricing_name=vm_pricing_name
|
||||
)
|
||||
specs = {
|
||||
'cpu': cores,
|
||||
'memory': memory,
|
||||
'disk_size': storage,
|
||||
'price': amount_to_be_charged
|
||||
'price': price,
|
||||
'vat': vat,
|
||||
'vat_percent': vat_percent,
|
||||
'discount': discount,
|
||||
'total_price': price + vat - discount['amount'],
|
||||
'pricing_name': vm_pricing_name
|
||||
}
|
||||
request.session['specs'] = specs
|
||||
request.session['template'] = template_data
|
||||
|
@ -286,54 +187,16 @@ class IndexView(CreateView):
|
|||
def get_context_data(self, **kwargs):
|
||||
context = super(IndexView, self).get_context_data(**kwargs)
|
||||
context.update({
|
||||
'base_url': "{0}://{1}".format(self.request.scheme,
|
||||
self.request.get_host()),
|
||||
'base_url': "{0}://{1}".format(
|
||||
self.request.scheme, self.request.get_host()
|
||||
),
|
||||
'contact_form': ContactForm
|
||||
})
|
||||
return context
|
||||
|
||||
def form_valid(self, form):
|
||||
|
||||
context = {
|
||||
'base_url': "{0}://{1}".format(self.request.scheme,
|
||||
self.request.get_host())
|
||||
}
|
||||
|
||||
email_data = {
|
||||
'subject': 'DatacenterLight Beta Access Request',
|
||||
'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
|
||||
'to': form.cleaned_data.get('email'),
|
||||
'from': '(datacenterlight) DatacenterLight Support support@datacenterlight.ch',
|
||||
'context': context,
|
||||
'template_name': 'request_access_confirmation',
|
||||
'template_path': 'datacenterlight/emails/'
|
||||
}
|
||||
email = BaseEmail(**email_data)
|
||||
email.send()
|
||||
|
||||
context.update({
|
||||
'email': form.cleaned_data.get('email')
|
||||
})
|
||||
|
||||
email_data = {
|
||||
'subject': 'DatacenterLight Beta Access Request',
|
||||
'from_address': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>',
|
||||
'to': 'info@ungleich.ch',
|
||||
'context': context,
|
||||
'template_name': 'request_access_notification',
|
||||
'template_path': 'datacenterlight/emails/'
|
||||
}
|
||||
email = BaseEmail(**email_data)
|
||||
email.send()
|
||||
|
||||
messages.add_message(self.request, messages.SUCCESS,
|
||||
self.success_message)
|
||||
return super(IndexView, self).form_valid(form)
|
||||
|
||||
|
||||
class WhyDataCenterLightView(IndexView):
|
||||
template_name = "datacenterlight/whydatacenterlight.html"
|
||||
model = BetaAccess
|
||||
|
||||
|
||||
class PaymentOrderView(FormView):
|
||||
|
@ -347,21 +210,11 @@ class PaymentOrderView(FormView):
|
|||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(PaymentOrderView, self).get_context_data(**kwargs)
|
||||
user = self.request.user
|
||||
stripe_customer = None
|
||||
if hasattr(user, 'stripecustomer'):
|
||||
stripe_customer = user.stripecustomer
|
||||
cards_list = UserCardDetail.get_all_cards_list(
|
||||
stripe_customer=stripe_customer
|
||||
)
|
||||
if 'billing_address_data' in self.request.session:
|
||||
billing_address_data = self.request.session['billing_address_data']
|
||||
if 'token' in billing_address_data:
|
||||
billing_address_data.pop('token')
|
||||
if 'card' in billing_address_data:
|
||||
billing_address_data.pop('card')
|
||||
else:
|
||||
billing_address_data = {}
|
||||
|
||||
if self.request.user.is_authenticated():
|
||||
if billing_address_data:
|
||||
billing_address_form = BillingAddressForm(
|
||||
|
@ -371,34 +224,47 @@ class PaymentOrderView(FormView):
|
|||
billing_address_form = BillingAddressForm(
|
||||
instance=self.request.user.billing_addresses.first()
|
||||
)
|
||||
# Get user last order
|
||||
last_hosting_order = HostingOrder.objects.filter(
|
||||
customer__user=self.request.user
|
||||
).last()
|
||||
|
||||
# If user has already an hosting order, get the credit card
|
||||
# data from it
|
||||
if last_hosting_order:
|
||||
credit_card_data = last_hosting_order.get_cc_data()
|
||||
if credit_card_data:
|
||||
context['credit_card_data'] = credit_card_data
|
||||
else:
|
||||
context['credit_card_data'] = None
|
||||
else:
|
||||
billing_address_form = BillingAddressFormSignup(
|
||||
initial=billing_address_data
|
||||
)
|
||||
|
||||
context.update({
|
||||
'cards_list': cards_list,
|
||||
'stripe_key': settings.STRIPE_API_PUBLIC_KEY,
|
||||
'site_url': reverse('datacenterlight:index'),
|
||||
'login_form': HostingUserLoginForm(prefix='login_form'),
|
||||
'billing_address_form': billing_address_form
|
||||
'billing_address_form': billing_address_form,
|
||||
'cms_integration': get_cms_integration('default'),
|
||||
'vm_pricing': VMPricing.get_vm_pricing_by_name(
|
||||
self.request.session['specs']['pricing_name']
|
||||
)
|
||||
})
|
||||
return context
|
||||
|
||||
@cache_control(no_cache=True, must_revalidate=True, no_store=True)
|
||||
def get(self, request, *args, **kwargs):
|
||||
# user is no longer added to session on the index page
|
||||
if 'specs' not in request.session:
|
||||
return HttpResponseRedirect(reverse('datacenterlight:index'))
|
||||
HostingUtils.clear_items_from_list(
|
||||
request.session,
|
||||
['token', 'card_id', 'customer', 'user']
|
||||
)
|
||||
return self.render_to_response(self.get_context_data())
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
if 'login_form' in request.POST:
|
||||
login_form = HostingUserLoginForm(data=request.POST,
|
||||
prefix='login_form')
|
||||
login_form = HostingUserLoginForm(
|
||||
data=request.POST, prefix='login_form'
|
||||
)
|
||||
if login_form.is_valid():
|
||||
email = login_form.cleaned_data.get('email')
|
||||
password = login_form.cleaned_data.get('password')
|
||||
|
@ -428,39 +294,8 @@ class PaymentOrderView(FormView):
|
|||
'name': request.user.name
|
||||
}
|
||||
customer = StripeCustomer.get_or_create(
|
||||
email=this_user.get('email'), token=token
|
||||
)
|
||||
if token is '':
|
||||
# card selected case
|
||||
card_id = address_form.cleaned_data.get('card')
|
||||
try:
|
||||
user_card_detail = UserCardDetail.objects.get(
|
||||
id=card_id)
|
||||
if not request.user.has_perm(
|
||||
'view_usercarddetail', user_card_detail
|
||||
):
|
||||
raise UserCardDetail.DoesNotExist(
|
||||
_("{user} does not have permission to access"
|
||||
" the card").format(user=request.user.email)
|
||||
)
|
||||
except UserCardDetail.DoesNotExist as e:
|
||||
ex = str(e)
|
||||
logger.error(
|
||||
"Card Id: {card_id}, Exception: {ex}".format(
|
||||
card_id=card_id, ex=ex
|
||||
)
|
||||
)
|
||||
msg = _("An error occurred. Details: {}".format(ex))
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, msg,
|
||||
extra_tags='make_charge_error'
|
||||
)
|
||||
return HttpResponseRedirect(
|
||||
reverse('hosting:payment') + '#payment_error'
|
||||
)
|
||||
request.session['card_id'] = user_card_detail.id
|
||||
else:
|
||||
request.session['token'] = token
|
||||
email=this_user.get('email'),
|
||||
token=token)
|
||||
else:
|
||||
user_email = address_form.cleaned_data.get('email')
|
||||
user_name = address_form.cleaned_data.get('name')
|
||||
|
@ -481,9 +316,9 @@ class PaymentOrderView(FormView):
|
|||
)
|
||||
)
|
||||
customer = StripeCustomer.create_stripe_api_customer(
|
||||
email=user_email, token=token,
|
||||
customer_name=user_name
|
||||
)
|
||||
email=user_email,
|
||||
token=token,
|
||||
customer_name=user_name)
|
||||
except CustomUser.DoesNotExist:
|
||||
logger.debug(
|
||||
("StripeCustomer does not exist for {email}."
|
||||
|
@ -495,7 +330,7 @@ class PaymentOrderView(FormView):
|
|||
email=user_email,
|
||||
token=token,
|
||||
customer_name=user_name)
|
||||
request.session['token'] = token
|
||||
|
||||
request.session['billing_address_data'] = address_form.cleaned_data
|
||||
request.session['user'] = this_user
|
||||
# Get or create stripe customer
|
||||
|
@ -508,6 +343,7 @@ class PaymentOrderView(FormView):
|
|||
billing_address_form=address_form
|
||||
)
|
||||
)
|
||||
request.session['token'] = token
|
||||
if type(customer) is StripeCustomer:
|
||||
request.session['customer'] = customer.stripe_id
|
||||
else:
|
||||
|
@ -530,36 +366,30 @@ class OrderConfirmationView(DetailView):
|
|||
def get(self, request, *args, **kwargs):
|
||||
if 'specs' not in request.session or 'user' not in request.session:
|
||||
return HttpResponseRedirect(reverse('datacenterlight:index'))
|
||||
if 'token' not in request.session and 'card_id' not in request.session:
|
||||
if 'token' not in request.session:
|
||||
return HttpResponseRedirect(reverse('datacenterlight:payment'))
|
||||
stripe_api_cus_id = request.session.get('customer')
|
||||
stripe_utils = StripeUtils()
|
||||
card_details = stripe_utils.get_card_details(stripe_api_cus_id,
|
||||
request.session.get(
|
||||
'token'))
|
||||
if not card_details.get('response_object'):
|
||||
msg = card_details.get('error')
|
||||
messages.add_message(self.request, messages.ERROR, msg,
|
||||
extra_tags='failed_payment')
|
||||
return HttpResponseRedirect(
|
||||
reverse('datacenterlight:payment') + '#payment_error')
|
||||
context = {
|
||||
'site_url': reverse('datacenterlight:index'),
|
||||
'cc_last4': card_details.get('response_object').get('last4'),
|
||||
'cc_brand': card_details.get('response_object').get('brand'),
|
||||
'vm': request.session.get('specs'),
|
||||
'page_header_text': _('Confirm Order'),
|
||||
'billing_address_data': request.session.get('billing_address_data')
|
||||
'billing_address_data': (
|
||||
request.session.get('billing_address_data')
|
||||
),
|
||||
'cms_integration': get_cms_integration('default'),
|
||||
}
|
||||
if 'token' in request.session:
|
||||
stripe_utils = StripeUtils()
|
||||
card_details = stripe_utils.get_cards_details_from_token(
|
||||
request.session.get('token')
|
||||
)
|
||||
card_detail_resp = card_details.get('response_object')
|
||||
if not card_detail_resp:
|
||||
msg = card_details.get('error')
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, msg,
|
||||
extra_tags='failed_payment'
|
||||
)
|
||||
return HttpResponseRedirect(
|
||||
reverse('datacenterlight:payment') + '#payment_error'
|
||||
)
|
||||
context['cc_last4'] = card_detail_resp.get('last4')
|
||||
context['cc_brand'] = card_detail_resp.get('brand')
|
||||
else:
|
||||
card_id = self.request.session.get('card_id')
|
||||
card_detail = UserCardDetail.objects.get(id=card_id)
|
||||
context['cc_last4'] = card_detail.last4
|
||||
context['cc_brand'] = card_detail.brand
|
||||
return render(request, self.template_name, context)
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
|
@ -569,16 +399,13 @@ class OrderConfirmationView(DetailView):
|
|||
stripe_api_cus_id = request.session.get('customer')
|
||||
vm_template_id = template.get('id', 1)
|
||||
stripe_utils = StripeUtils()
|
||||
if 'token' in self.request.session:
|
||||
card_details = stripe_utils.get_cards_details_from_token(
|
||||
request.session['token']
|
||||
)
|
||||
card_details = stripe_utils.get_card_details(stripe_api_cus_id,
|
||||
request.session.get(
|
||||
'token'))
|
||||
if not card_details.get('response_object'):
|
||||
msg = card_details.get('error')
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, msg,
|
||||
extra_tags='failed_payment'
|
||||
)
|
||||
messages.add_message(self.request, messages.ERROR, msg,
|
||||
extra_tags='failed_payment')
|
||||
response = {
|
||||
'status': False,
|
||||
'redirect': "{url}#{section}".format(
|
||||
|
@ -587,88 +414,28 @@ class OrderConfirmationView(DetailView):
|
|||
'msg_title': str(_('Error.')),
|
||||
'msg_body': str(
|
||||
_('There was a payment related error.'
|
||||
' On close of this popup, you will be redirected '
|
||||
'back to the payment page.'))
|
||||
' On close of this popup, you will be redirected back to'
|
||||
' the payment page.'))
|
||||
}
|
||||
return HttpResponse(
|
||||
json.dumps(response), content_type="application/json"
|
||||
)
|
||||
card_details_response = card_details['response_object']
|
||||
card_details_dict = {
|
||||
'last4': card_details_response['last4'],
|
||||
'brand': card_details_response['brand'],
|
||||
'card_id': card_details_response['card_id']
|
||||
}
|
||||
s_cus = None
|
||||
try:
|
||||
s_cus = StripeCustomer.objects.get(stripe_id=stripe_api_cus_id)
|
||||
except StripeCustomer.DoesNotExist:
|
||||
pass
|
||||
if s_cus:
|
||||
ucd = UserCardDetail.get_user_card_details(s_cus, card_details_response)
|
||||
if not ucd:
|
||||
acc_result = stripe_utils.associate_customer_card(
|
||||
stripe_api_cus_id, request.session['token'],
|
||||
set_as_default=True
|
||||
)
|
||||
if acc_result['response_object'] is None:
|
||||
msg = acc_result.get('error')
|
||||
messages.add_message(
|
||||
self.request, messages.ERROR, msg,
|
||||
extra_tags='failed_payment'
|
||||
)
|
||||
response = {
|
||||
'status': False,
|
||||
'redirect': "{url}#{section}".format(
|
||||
url=reverse('datacenterlight:payment'),
|
||||
section='payment_error'),
|
||||
'msg_title': str(_('Error.')),
|
||||
'msg_body': str(
|
||||
_('There was a payment related error.'
|
||||
' On close of this popup, you will be '
|
||||
'redirected back to the payment page.')
|
||||
)
|
||||
}
|
||||
logger.error(
|
||||
"Card association failed. Error {error}".format(
|
||||
error=acc_result['error']
|
||||
)
|
||||
)
|
||||
return HttpResponse(json.dumps(response),
|
||||
content_type="application/json")
|
||||
else:
|
||||
if not ucd.preferred:
|
||||
UserCardDetail.set_default_card(
|
||||
stripe_api_cus_id=stripe_api_cus_id,
|
||||
stripe_source_id=ucd.card_id
|
||||
)
|
||||
else:
|
||||
card_id = request.session.get('card_id')
|
||||
user_card_detail = UserCardDetail.objects.get(id=card_id)
|
||||
card_details_dict = {
|
||||
'last4': user_card_detail.last4,
|
||||
'brand': user_card_detail.brand,
|
||||
'card_id': user_card_detail.card_id
|
||||
}
|
||||
if not user_card_detail.preferred:
|
||||
UserCardDetail.set_default_card(
|
||||
stripe_api_cus_id=stripe_api_cus_id,
|
||||
stripe_source_id=user_card_detail.card_id
|
||||
)
|
||||
card_details_dict = card_details.get('response_object')
|
||||
cpu = specs.get('cpu')
|
||||
memory = specs.get('memory')
|
||||
disk_size = specs.get('disk_size')
|
||||
amount_to_be_charged = specs.get('price')
|
||||
plan_name = StripeUtils.get_stripe_plan_name(
|
||||
cpu=cpu, memory=memory, disk_size=disk_size
|
||||
)
|
||||
stripe_plan_id = StripeUtils.get_stripe_plan_id(
|
||||
cpu=cpu, ram=memory, ssd=disk_size, version=1, app='dcl'
|
||||
)
|
||||
amount_to_be_charged = specs.get('total_price')
|
||||
plan_name = StripeUtils.get_stripe_plan_name(cpu=cpu,
|
||||
memory=memory,
|
||||
disk_size=disk_size)
|
||||
stripe_plan_id = StripeUtils.get_stripe_plan_id(cpu=cpu,
|
||||
ram=memory,
|
||||
ssd=disk_size,
|
||||
version=1,
|
||||
app='dcl')
|
||||
stripe_plan = stripe_utils.get_or_create_stripe_plan(
|
||||
amount=amount_to_be_charged, name=plan_name,
|
||||
stripe_plan_id=stripe_plan_id
|
||||
)
|
||||
amount=amount_to_be_charged,
|
||||
name=plan_name,
|
||||
stripe_plan_id=stripe_plan_id)
|
||||
subscription_result = stripe_utils.subscribe_customer_to_plan(
|
||||
stripe_api_cus_id,
|
||||
[{"plan": stripe_plan.get(
|
||||
|
@ -677,14 +444,6 @@ class OrderConfirmationView(DetailView):
|
|||
# Check if the subscription was approved and is active
|
||||
if (stripe_subscription_obj is None
|
||||
or stripe_subscription_obj.status != 'active'):
|
||||
if request.user.is_authenticated():
|
||||
sac_id = request.user.stripecustomer.stripe_id
|
||||
else:
|
||||
sac_id = stripe_api_cus_id
|
||||
stripe_utils.dissociate_customer_card(
|
||||
sac_id,
|
||||
card_details_dict['card_id']
|
||||
)
|
||||
msg = subscription_result.get('error')
|
||||
messages.add_message(self.request, messages.ERROR, msg,
|
||||
extra_tags='failed_payment')
|
||||
|
@ -701,6 +460,7 @@ class OrderConfirmationView(DetailView):
|
|||
}
|
||||
return HttpResponse(json.dumps(response),
|
||||
content_type="application/json")
|
||||
|
||||
# Create user if the user is not logged in and if he is not already
|
||||
# registered
|
||||
if not request.user.is_authenticated():
|
||||
|
@ -738,21 +498,13 @@ class OrderConfirmationView(DetailView):
|
|||
# object already exists
|
||||
stripe_customer_id = request.user.stripecustomer.id
|
||||
custom_user = request.user
|
||||
|
||||
# Save billing address
|
||||
billing_address_data = request.session.get('billing_address_data')
|
||||
logger.debug('billing_address_data is {}'.format(billing_address_data))
|
||||
billing_address_data.update({
|
||||
'user': custom_user.id
|
||||
})
|
||||
if 'token' in request.session and s_cus is not None:
|
||||
ucd = UserCardDetail.get_or_create_user_card_detail(
|
||||
stripe_customer=s_cus,
|
||||
card_details=card_details_response
|
||||
)
|
||||
UserCardDetail.save_default_card_local(
|
||||
s_cus.stripe_id,
|
||||
ucd.card_id
|
||||
)
|
||||
user = {
|
||||
'name': custom_user.name,
|
||||
'email': custom_user.email,
|
||||
|
@ -761,28 +513,29 @@ class OrderConfirmationView(DetailView):
|
|||
'request_host': request.get_host(),
|
||||
'language': get_language(),
|
||||
}
|
||||
create_vm_task.delay(
|
||||
vm_template_id, user, specs, template, stripe_customer_id,
|
||||
billing_address_data, stripe_subscription_obj.id,
|
||||
card_details_dict
|
||||
)
|
||||
HostingUtils.clear_items_from_list(
|
||||
request.session,
|
||||
['specs', 'template', 'billing_address', 'billing_address_data',
|
||||
'token', 'customer', 'card_id']
|
||||
)
|
||||
if request.user.is_authenticated():
|
||||
redirect_url = reverse('hosting:virtual_machines')
|
||||
else:
|
||||
redirect_url = reverse('datacenterlight:index')
|
||||
|
||||
create_vm_task.delay(vm_template_id, user, specs, template,
|
||||
stripe_customer_id, billing_address_data,
|
||||
stripe_subscription_obj.id, card_details_dict)
|
||||
for session_var in ['specs', 'template', 'billing_address',
|
||||
'billing_address_data',
|
||||
'token', 'customer', 'pricing_name']:
|
||||
if session_var in request.session:
|
||||
del request.session[session_var]
|
||||
|
||||
response = {
|
||||
'status': True,
|
||||
'redirect': redirect_url,
|
||||
'redirect': (
|
||||
reverse('hosting:virtual_machines')
|
||||
if request.user.is_authenticated()
|
||||
else reverse('datacenterlight:index')
|
||||
),
|
||||
'msg_title': str(_('Thank you for the order.')),
|
||||
'msg_body': str(
|
||||
_('Your VM will be up and running in a few moments.'
|
||||
' We will send you a confirmation email as soon as'
|
||||
' it is ready.'))
|
||||
}
|
||||
|
||||
return HttpResponse(json.dumps(response),
|
||||
content_type="application/json")
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.9.4 on 2017-12-23 22:56
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('digitalglarus', '0024_bookingcancellation'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='membershiporder',
|
||||
name='stripe_subscription_id',
|
||||
field=models.CharField(max_length=100, null=True),
|
||||
),
|
||||
]
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
|
||||
import calendar
|
||||
import time
|
||||
|
||||
from datetime import datetime, date, timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from django.db import models
|
||||
|
@ -59,6 +59,17 @@ class MembershipType(models.Model):
|
|||
return "{} - {}".format(datetime.strftime(start_date, "%b, %d %Y"),
|
||||
datetime.strftime(end_date, "%b, %d %Y"))
|
||||
|
||||
@cached_property
|
||||
def next_month_in_sec_since_epoch(self):
|
||||
"""
|
||||
First day of the next month expressed in seconds since the epoch time
|
||||
:return: Time in seconds
|
||||
"""
|
||||
start_date, end_date = self.first_month_range
|
||||
first_day_next_month = end_date + timedelta(days=1)
|
||||
epoch_time = int(time.mktime(first_day_next_month.timetuple()))
|
||||
return epoch_time
|
||||
|
||||
|
||||
class Membership(models.Model):
|
||||
type = models.ForeignKey(MembershipType)
|
||||
|
@ -71,12 +82,12 @@ class Membership(models.Model):
|
|||
|
||||
@classmethod
|
||||
def get_current_membership(cls, user):
|
||||
|
||||
has_order_current_month = Q(membershiporder__customer__user=user,
|
||||
membershiporder__created_at__month=datetime.today().month)
|
||||
has_order_current_month = Q(
|
||||
membershiporder__customer__user=user,
|
||||
membershiporder__created_at__month=datetime.today().month
|
||||
)
|
||||
# import pdb;pdb.set_trace()
|
||||
return cls.objects.\
|
||||
filter(has_order_current_month).last()
|
||||
return cls.objects.filter(has_order_current_month).last()
|
||||
|
||||
# def get_current_active_membership(cls, user):
|
||||
# membership = cls.get_current_membership(user)
|
||||
|
@ -84,8 +95,7 @@ class Membership(models.Model):
|
|||
|
||||
@classmethod
|
||||
def get_by_user(cls, user):
|
||||
return cls.objects.\
|
||||
filter(membershiporder__customer__user=user).last()
|
||||
return cls.objects.filter(membershiporder__customer__user=user).last()
|
||||
|
||||
@classmethod
|
||||
def create(cls, data):
|
||||
|
@ -96,18 +106,23 @@ class Membership(models.Model):
|
|||
def activate_or_crete(cls, data, user):
|
||||
membership = cls.get_by_user(user)
|
||||
membership_id = membership.id if membership else None
|
||||
obj, created = cls.objects.update_or_create(id=membership_id, defaults=data)
|
||||
obj, created = cls.objects.update_or_create(
|
||||
id=membership_id, defaults=data
|
||||
)
|
||||
return obj
|
||||
|
||||
@classmethod
|
||||
def is_digitalglarus_active_member(cls, user):
|
||||
# past_month = (datetime.today() - relativedelta(months=1)).month
|
||||
has_order_current_month = Q(membershiporder__customer__user=user,
|
||||
membershiporder__created_at__month=datetime.today().month)
|
||||
has_order_current_month = Q(
|
||||
membershiporder__customer__user=user,
|
||||
membershiporder__created_at__month=datetime.today().month
|
||||
)
|
||||
# has_order_past_month = Q(membershiporder__customer__user=user,
|
||||
# membershiporder__created_at__month=past_month)
|
||||
active_membership = Q(active=True)
|
||||
# return cls.objects.filter(has_order_past_month | has_order_current_month).\
|
||||
# return cls.objects.filter(
|
||||
# has_order_past_month | has_order_current_month).\
|
||||
return cls.objects.filter(has_order_current_month).\
|
||||
filter(active_membership).exists()
|
||||
|
||||
|
@ -129,6 +144,7 @@ class MembershipOrder(Ordereable, models.Model):
|
|||
membership = models.ForeignKey(Membership)
|
||||
start_date = models.DateField()
|
||||
end_date = models.DateField()
|
||||
stripe_subscription_id = models.CharField(max_length=100, null=True)
|
||||
|
||||
@classmethod
|
||||
def current_membership_dates(cls, user):
|
||||
|
@ -172,10 +188,12 @@ class MembershipOrder(Ordereable, models.Model):
|
|||
@classmethod
|
||||
def create(cls, data):
|
||||
stripe_charge = data.pop('stripe_charge', None)
|
||||
stripe_subscription_id = data.pop('stripe_subscription_id', None)
|
||||
instance = cls.objects.create(**data)
|
||||
instance.stripe_charge_id = stripe_charge.id
|
||||
instance.last4 = stripe_charge.source.last4
|
||||
instance.cc_brand = stripe_charge.source.brand
|
||||
instance.stripe_subscription_id = stripe_subscription_id
|
||||
instance.save()
|
||||
return instance
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ hr.small {
|
|||
}
|
||||
.navbar-custom .navbar-brand {
|
||||
color: white;
|
||||
padding: 20px;
|
||||
padding: 5px 20px;
|
||||
}
|
||||
.navbar-custom .navbar-brand:hover,
|
||||
.navbar-custom .navbar-brand:focus {
|
||||
|
|
Before Width: | Height: | Size: 169 KiB After Width: | Height: | Size: 141 KiB |
|
@ -235,7 +235,7 @@ fieldset[disabled] .btn-xl.active {
|
|||
.navbar-default .navbar-brand {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, cursive;
|
||||
color: #a1cfd7;
|
||||
padding-top: 10px;
|
||||
padding-top: 11px;
|
||||
}
|
||||
|
||||
.navbar-default .navbar-brand:hover,
|
||||
|
|