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, | ||||
|  |  | |||