diff --git a/Changelog b/Changelog index 95b7dab8..98142cd4 100644 --- a/Changelog +++ b/Changelog @@ -1,3 +1,36 @@ +1.0.21: 2017-07-21 + * #3591: [datacenterlight, payment] Fixed card holder name to appear on Confirm Order page + * #3558: [datacenterlight] Changed font family and background color for header + * #3581: [datacenterlight] Lead font weight change + * #3584: [all] Add flag is_superuser=True in MyUserManager +1.0.20: 2017-07-18 + * #3590: [digitalglarus] Added impact hub partner logo and text in digitalglarus + [datacenterlight, hosting] Fixed overlapping of date and billing address in the mobile view + * #3580: [datacenterlight, hosting] Introduced newly designed payment page. Cust1.0.20: 2017-07-18 + * #3590: [digitalglarus] Added impact hub partner logo and text in digitalglarus + [datacenterlight, hosting] Fixed overlapping of date and billing address in the mobile view + * #3580: [datacenterlight, hosting] Introduced newly designed payment page. Customized Stripe credit card input fields + * #3568: [all] Improved the way of adding Google analytics (ga) code. We now have ga code for ungleich, digitalglarus, blog, hosting + and datacenterlight + * #3564: [datacenterlight] Improved calculator form validations, both client side and server side + [datacenterlight] Changed "Place order" button to "Submit" in the payment page + * #3540: [datacenterlight] Improved credit card section with Stripe clarification texts and corresponding DE translationsomized Stripe credit card input fields + * #3568: [all] Improved the way of adding Google analytics (ga) code. We now have ga code for ungleich, digitalglarus, blog, hosting + and datacenterlight + * #3564: [datacenterlight] Improved calculator form validations, both client side and server side + [datacenterlight] Changed "Place order" button to "Submit" in the payment page + * #3540: [datacenterlight] Improved credit card section with Stripe clarification texts and corresponding DE translations +1.0.19: 2017-07-09 + * [blog] Added a space between "Posted on" and the "Date" + * [datacenterlight, digitalglarus] Introduced Google Analytics for DCL and digitalglarus.ch + * [datacenterlight] Fixed calculator error message positioning + * [digitalglarus] Fixed favicon for digitalglarus + * [all] Introduced PEP8 code standards using flake8 + * [all] DEBUG is set to False on production + * [all] Using memcached as cache provider on production + * [datacenterlight] Removed Order Now button outline in the order form + * [datacenterlight] Refactored html pages, fixed missing body tag, removed some duplicate script imports + * [datacenterlight] Introduced Why Data Center Light page 1.0.18: 2017-07-02 * [datacenterlight] Introduced the new flow. Landing page -> Payment -> Order confirmation -> Success * [datacenterlight] Fixed issue showing local time to the user in order confirmation page, vm pages (like ssh keys) diff --git a/datacenterlight/locale/de/LC_MESSAGES/django.po b/datacenterlight/locale/de/LC_MESSAGES/django.po index a0c9a470..e221c123 100644 --- a/datacenterlight/locale/de/LC_MESSAGES/django.po +++ b/datacenterlight/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-07-02 23:08+0530\n" +"POT-Creation-Date: 2017-07-24 18:51+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -42,6 +42,70 @@ msgstr "" "Vielen dank für Ihre Anmeldung. Sie erhalten in kürze eine Bestätigungsmail " "von unserem Team" +#: templates/datacenterlight/calculator_form.html:5 +#: templates/datacenterlight/pricing.html:22 +msgid "VM hosting" +msgstr "" + +#: templates/datacenterlight/calculator_form.html:9 +msgid "month" +msgstr "Monat" + +#: templates/datacenterlight/calculator_form.html:11 +#: templates/datacenterlight/pricing.html:28 +msgid "VAT included" +msgstr "MwSt. inklusive" + +#: templates/datacenterlight/calculator_form.html:16 +#: templates/datacenterlight/pricing.html:33 +msgid "Hosted in Switzerland" +msgstr "Standort: Schweiz" + +#: templates/datacenterlight/calculator_form.html:21 +msgid "Please enter a value in range 1 - 48." +msgstr "Bitte gib einen Wert von 1 bis 48 ein." + +#: templates/datacenterlight/calculator_form.html:30 +msgid "Please enter a value in range 2 - 200." +msgstr "Bitte gib einen Wert von 2 bis 200 ein." + +#: templates/datacenterlight/calculator_form.html:39 +msgid "Please enter a value in range 10 - 2000." +msgstr "Bitte gib einen Wert von 10 bis 200 ein." + +#: templates/datacenterlight/calculator_form.html:40 +#: templates/datacenterlight/pricing.html:50 +msgid "GB Storage (SSD)" +msgstr "GB Storage (SSD)" + +#: templates/datacenterlight/calculator_form.html:59 +msgid "Name" +msgstr "" + +#: templates/datacenterlight/calculator_form.html:60 +msgid "Your Name" +msgstr "Dein Name" + +#: templates/datacenterlight/calculator_form.html:60 +msgid "Please enter your name." +msgstr "Bitte gib Deinen Namen ein." + +#: templates/datacenterlight/calculator_form.html:74 +msgid "Email" +msgstr "E-Mail-Adresse" + +#: templates/datacenterlight/calculator_form.html:75 +msgid "Your Email" +msgstr "Deine E-Mail" + +#: templates/datacenterlight/calculator_form.html:75 +msgid "Please enter a valid email address." +msgstr "Bitte gib eine gültige E-Mailadresse ein." + +#: templates/datacenterlight/calculator_form.html:88 +msgid "Continue" +msgstr "Weiter" + #: templates/datacenterlight/emails/request_access_confirmation.html:99 #: templates/datacenterlight/emails/request_access_confirmation.txt:99 msgid "Thank you for your request." @@ -129,27 +193,28 @@ msgstr "" #: templates/datacenterlight/includes/_footer.html:11 #: templates/datacenterlight/includes/_footer.html:31 #: templates/datacenterlight/includes/_navbar.html:27 -#: templates/datacenterlight/index.html:20 -#: templates/datacenterlight/index.html:47 +#: templates/datacenterlight/includes/_navbar.html:28 +#: templates/datacenterlight/index.html:19 +#: templates/datacenterlight/index.html:46 msgid "Highlights" msgstr "" #: templates/datacenterlight/includes/_footer.html:14 #: templates/datacenterlight/includes/_footer.html:34 #: templates/datacenterlight/includes/_navbar.html:30 -#: templates/datacenterlight/index.html:86 +#: templates/datacenterlight/index.html:85 msgid "Scale out" msgstr "Skalierung" #: templates/datacenterlight/includes/_footer.html:17 #: templates/datacenterlight/includes/_footer.html:37 -#: templates/datacenterlight/includes/_navbar.html:33 -#: templates/datacenterlight/index.html:112 +#: templates/datacenterlight/includes/_navbar.html:31 +#: templates/datacenterlight/index.html:111 msgid "Reliable and light" msgstr "Zuverlässig und leicht" #: templates/datacenterlight/includes/_footer.html:20 -#: templates/datacenterlight/includes/_navbar.html:36 +#: templates/datacenterlight/includes/_navbar.html:32 msgid "Order VM" msgstr "VM bestellen" @@ -167,28 +232,33 @@ msgstr "Home" msgid "Pricing" msgstr "Preise" -#: templates/datacenterlight/index.html:16 +#: templates/datacenterlight/includes/_navbar.html:36 +#: templates/datacenterlight/whydatacenterlight.html:12 +msgid "Why Data Center Light?" +msgstr "Warum Data Center Light?" + +#: templates/datacenterlight/index.html:15 msgid "Finally, an affordable VM hosting in Switzerland!" msgstr "Endlich: bezahlbares VM Hosting in der Schweiz" -#: templates/datacenterlight/index.html:23 +#: templates/datacenterlight/index.html:22 msgid "I want it!" msgstr "Das will ich haben!" -#: templates/datacenterlight/index.html:53 +#: templates/datacenterlight/index.html:52 msgid "" "Reuses existing factory halls instead of building a new expensive building." msgstr "" "Verwendet ehemalige Fabrikhallen anstatt ein neues, teures Gebäude zu " "errichten.
" -#: templates/datacenterlight/index.html:58 +#: templates/datacenterlight/index.html:57 msgid "Only wants you to pay for what you actually need." msgstr "" "Möchte, dass du nur bezahlst, was du auch wirklich brauchst: Wähle deine " "Ressourcen individuell aus!
" -#: templates/datacenterlight/index.html:62 +#: templates/datacenterlight/index.html:61 msgid "" "Is creative, using a modern and alternative design for a data center in " "order to make it more sustainable and affordable at the same time." @@ -197,7 +267,7 @@ msgstr "" "macht um Nachhaltigkeit zu fördern und somit erschwingliche Preise bieten zu " "können.
" -#: templates/datacenterlight/index.html:66 +#: templates/datacenterlight/index.html:65 msgid "" "Cuts down the costs for you by using FOSS (Free Open Source Software) " "exclusively, wherefore we can save money from paying licenses." @@ -206,7 +276,7 @@ msgstr "" "mit FOSS (Free Open Source Software) arbeitet und wir daher auf " "Lizenzgebühren verzichten können.
" -#: templates/datacenterlight/index.html:89 +#: templates/datacenterlight/index.html:88 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 " @@ -216,7 +286,7 @@ msgstr "" "erschwingliche Systeme. Bei grösserer Auslastung werden mehr " "Standardkomponenten hinzugekauft und skalieren so das Datencenter." -#: templates/datacenterlight/index.html:115 +#: templates/datacenterlight/index.html:114 msgid "" "Our VMs are located in Switzerland, with reliable power supply and fast " "internet connection. Our VM costs less thanks to our featherlight " @@ -226,91 +296,26 @@ msgstr "" "Energieversorgung, sowie schneller Internetverbindung ausgestattet. Unser " "Angebot ist aufgrund unserer leichten Infrastruktur überaus kostengünstig." -#: templates/datacenterlight/index.html:133 +#: templates/datacenterlight/index.html:132 #: templates/datacenterlight/pricing.html:86 msgid "Simple and affordable: Try our virtual machine with featherlight price." msgstr "" "Einfach und bezahlbar: Teste nun unsere virtuellen Maschinen mit " "federleichten Preisen." -#: templates/datacenterlight/index.html:134 +#: templates/datacenterlight/index.html:133 msgid "Affordable VM hosting based in Switzerland" msgstr "Bezahlbares VM Hosting in der Schweiz" -#: templates/datacenterlight/index.html:145 -#: templates/datacenterlight/pricing.html:22 -msgid "VM hosting" -msgstr "" - -#: templates/datacenterlight/index.html:149 -msgid "month" -msgstr "Monat" - -#: templates/datacenterlight/index.html:151 -#: templates/datacenterlight/pricing.html:28 -msgid "VAT included" -msgstr "MwSt. inklusive" - -#: templates/datacenterlight/index.html:156 -#: templates/datacenterlight/pricing.html:33 -msgid "Hosted in Switzerland" -msgstr "Standort: Schweiz" - -#: templates/datacenterlight/index.html:161 -msgid "Please enter a value greater than or equal to 1." -msgstr "Bitte gib einen Wert größer oder gleich 1 ein." - -#: templates/datacenterlight/index.html:170 -msgid "Please enter a value greater than or equal to 2." -msgstr "Bitte gib einen Wert größer oder gleich 2 ein." - -#: templates/datacenterlight/index.html:179 -msgid "Please enter a value greater than or equal to 10." -msgstr "Bitte gib einen Wert größer oder gleich 10 ein" - -#: templates/datacenterlight/index.html:180 -#: templates/datacenterlight/pricing.html:50 -msgid "GB Storage (SSD)" -msgstr "GB Storage (SSD)" - -#: templates/datacenterlight/index.html:199 -msgid "Name" -msgstr "" - -#: templates/datacenterlight/index.html:200 -msgid "Your Name" -msgstr "Dein Name" - -#: templates/datacenterlight/index.html:200 -msgid "Please enter your name" -msgstr "Bitte gib Deinen Namen ein" - -#: templates/datacenterlight/index.html:214 -msgid "Email" -msgstr "E-Mail-Adresse" - -#: templates/datacenterlight/index.html:215 -msgid "Your Email" -msgstr "Deine E-Mail" - -#: templates/datacenterlight/index.html:215 -msgid "Please enter a valid email address" -msgstr "Bitte gib eine gültige E-Mailadresse ein" - -#: templates/datacenterlight/index.html:228 -#: templates/datacenterlight/pricing.html:79 -msgid "Order Now!" -msgstr "Bestelle jetzt!" - -#: templates/datacenterlight/index.html:254 +#: templates/datacenterlight/index.html:166 msgid "Switzerland " msgstr "Schweiz" -#: templates/datacenterlight/index.html:271 +#: templates/datacenterlight/index.html:183 msgid "Questions?" msgstr "Fragen?" -#: templates/datacenterlight/index.html:271 +#: templates/datacenterlight/index.html:183 msgid "Contact us!" msgstr "Kontaktiere uns!" @@ -319,46 +324,46 @@ msgid "Confirm Order" msgstr "Bestellung Bestätigen" #: templates/datacenterlight/order_detail.html:30 -msgid "Billed To:" -msgstr "Rechnungsadresse" - -#: templates/datacenterlight/order_detail.html:39 msgid "Date" msgstr "Datum" -#: templates/datacenterlight/order_detail.html:48 +#: templates/datacenterlight/order_detail.html:36 +msgid "Billed To:" +msgstr "Rechnungsadresse" + +#: templates/datacenterlight/order_detail.html:47 msgid "Payment Method:" msgstr "Bezahlmethode" -#: templates/datacenterlight/order_detail.html:49 +#: templates/datacenterlight/order_detail.html:48 msgid "ending" msgstr "endend in" -#: templates/datacenterlight/order_detail.html:59 +#: templates/datacenterlight/order_detail.html:58 msgid "Order summary" msgstr "Bestellungsübersicht" -#: templates/datacenterlight/order_detail.html:63 +#: templates/datacenterlight/order_detail.html:62 msgid "Cores" msgstr "Prozessorkerne" -#: templates/datacenterlight/order_detail.html:65 +#: templates/datacenterlight/order_detail.html:64 msgid "Memory" msgstr "Arbeitsspeicher" -#: templates/datacenterlight/order_detail.html:67 +#: templates/datacenterlight/order_detail.html:66 msgid "Disk space" msgstr "Festplattenkapazität" -#: templates/datacenterlight/order_detail.html:69 +#: templates/datacenterlight/order_detail.html:68 msgid "Configuration" msgstr "Konfiguration" -#: templates/datacenterlight/order_detail.html:71 +#: templates/datacenterlight/order_detail.html:70 msgid "Total" msgstr "" -#: templates/datacenterlight/order_detail.html:78 +#: templates/datacenterlight/order_detail.html:77 msgid "Place order" msgstr "Bestellen" @@ -366,6 +371,10 @@ msgstr "Bestellen" msgid "We are cutting down the costs significantly!" msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen" +#: templates/datacenterlight/pricing.html:79 +msgid "Order Now!" +msgstr "Bestelle jetzt!" + #: templates/datacenterlight/pricing.html:89 msgid "" "Our VMs are hosted in Glarus, Switzerland, and our website is currently " @@ -392,14 +401,115 @@ msgstr "" msgid "as soon as possible!" msgstr "" -#: views.py:234 +#: templates/datacenterlight/whydatacenterlight.html:26 +msgid "Tech Stack" +msgstr "Tech Stack" + +#: templates/datacenterlight/whydatacenterlight.html:29 +msgid "We are seriously open source." +msgstr "Wir sind vollends opensource." + +#: templates/datacenterlight/whydatacenterlight.html:30 +msgid "" +" Our full software stack is open source – We don't use anything that isn't " +"open source.
Yes, we are that cool. " +msgstr "" +"Unser gesamter Softwaresstack ist Open-Source – Wir verwenden nichts, das " +"nicht Open-Source ist.
Yep, so cool sind wir." + +#: templates/datacenterlight/whydatacenterlight.html:37 +msgid "Our services run on" +msgstr "Unsere Dienste läuft auf" + +#: templates/datacenterlight/whydatacenterlight.html:41 +msgid "Our monitoring" +msgstr "Unser Monitoring" + +#: templates/datacenterlight/whydatacenterlight.html:45 +msgid "Our storage layer" +msgstr "Unser Storage-Layer" + +#: templates/datacenterlight/whydatacenterlight.html:49 +msgid "Our web frontend" +msgstr "Unser Web-Frontend" + +#: templates/datacenterlight/whydatacenterlight.html:53 +msgid "Our cloud" +msgstr "Unsere Cloud" + +#: templates/datacenterlight/whydatacenterlight.html:57 +msgid "Our configuration management system" +msgstr "Unser Konfigurationsmanagementsystem" + +#: templates/datacenterlight/whydatacenterlight.html:61 +msgid "Our awesome juice" +msgstr "Unser Treibstoff" + +#: templates/datacenterlight/whydatacenterlight.html:65 +msgid "Our NAT64 gateway" +msgstr "Unser NAT64 Gateway" + +#: templates/datacenterlight/whydatacenterlight.html:90 +msgid "We believe in giving back to the FOSS community." +msgstr "Wir unterstützen die FOSS Community." + +#: templates/datacenterlight/whydatacenterlight.html:91 +msgid "" +"Data Center Light is the child of free and open source software (FOSS) " +"movement.
We grew up with it, live by it, and believe in it.
The " +"more we work on our data center,
the more we contribute back to the FOSS " +"community." +msgstr "" +"Data Center Light ist ein Teil der Free und Opens Source Software (FOSS) " +"Bewegung.
Wir sind damit gross geworden, leben damit und glauben daran." +"
Je weiter wir mit unserem Data Center Light vorankommen, desto mehr " +"können wir etwas an die FOSS Community zurückgeben." + +#: templates/datacenterlight/whydatacenterlight.html:104 +msgid "We bring the future to you." +msgstr "Wir bringen die Zukunft zu dir." + +#: templates/datacenterlight/whydatacenterlight.html:107 +msgid "" +" Data Center Light uses the most modern technologies out there.
\n" +" Your VM needs only IPv6. Data Center Light " +"provides
transparent two-way IPv6/IPv4 translation.\n" +" " +msgstr "" +"Data Center Light verwendet die zur Zeit modernsten Technologien.
Deine " +"VM läuft mit IPv6. Data Center Light bietet eine transparente IPv6/IPv4-" +"Zweiweglösung." + +#: templates/datacenterlight/whydatacenterlight.html:122 +msgid "" +" No more spinning metal plates! Data Center Light uses only SSDs. We keep " +"things faster and lighter. " +msgstr "" +"Keine drehenden Metallplatten mehr! Data Center Light verwendet " +"ausschliesslich SSDs. Wir halten die Dinge schnell, leicht und effizient." + +#: templates/datacenterlight/whydatacenterlight.html:138 +msgid "Starting from only 15CHF per month. Try now." +msgstr "Unser Angebot beginnt bei 15 CHF pro Monat. Probier's jetzt aus!" + +#: templates/datacenterlight/whydatacenterlight.html:139 +msgid "Actions speak louder than words. Let's do it, try our VM now." +msgstr "Tagen sagen mehr als Worte – Teste jetzt unsere VM!" + +#: views.py:235 msgid "is not a proper name" msgstr "ist kein gültiger Name" -#: views.py:241 +#: views.py:242 msgid "is not a proper email" msgstr "ist keine gültige E-Mailadresse" +#~ msgid "Please enter a value greater than or equal to 1." +#~ msgstr "Bitte gib einen Wert größer oder gleich 1 ein." + +#~ msgid "Please enter a value greater than or equal to 10." +#~ msgstr "Bitte gib einen Wert größer oder gleich 10 ein" + #~ msgid "Buy VM" #~ msgstr "VM Kaufen" diff --git a/datacenterlight/management/commands/fetchvmtemplates.py b/datacenterlight/management/commands/fetchvmtemplates.py new file mode 100644 index 00000000..15b76fc1 --- /dev/null +++ b/datacenterlight/management/commands/fetchvmtemplates.py @@ -0,0 +1,29 @@ +from django.core.management.base import BaseCommand +from opennebula_api.models import OpenNebulaManager +from datacenterlight.models import VMTemplate +import logging + +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + help = 'Fetches the VM templates from OpenNebula and populates the dcl VMTemplate model' + + 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) + + old_vm_templates = VMTemplate.objects.all() + old_vm_templates.delete() + + 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))) diff --git a/datacenterlight/models.py b/datacenterlight/models.py index 605a944c..fdfebc96 100644 --- a/datacenterlight/models.py +++ b/datacenterlight/models.py @@ -9,12 +9,13 @@ class BetaAccessVMType(models.Model): 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) + (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): @@ -48,3 +49,13 @@ class BetaAccessVM(models.Model): amount=vm[VM_AMOUNT], type=vm_type)) return created_vms + + +class VMTemplate(models.Model): + name = models.CharField(max_length=50) + opennebula_vm_template_id = models.IntegerField() + + @classmethod + def create(cls, name, opennebula_vm_template_id): + vm_template = cls(name=name, opennebula_vm_template_id=opennebula_vm_template_id) + return vm_template diff --git a/datacenterlight/static/datacenterlight/css/landing-page.css b/datacenterlight/static/datacenterlight/css/landing-page.css index c9fd76aa..07ecc3b6 100755 --- a/datacenterlight/static/datacenterlight/css/landing-page.css +++ b/datacenterlight/static/datacenterlight/css/landing-page.css @@ -3,10 +3,12 @@ * Code licensed under the Apache License v2.0. * For details, see http://www.apache.org/licenses/LICENSE-2.0. */ + @font-face { - font-family: 'Lato-Regular'; - src: url('../fonts/Lato/Lato-Regular.ttf'); + font-family: 'Lato-Light'; + src: url('../fonts/Lato/Lato-Light.ttf'); } + body, html { width: 100%; @@ -20,143 +22,182 @@ h3, h4, h5, h6 { - font-family: 'Lato', sans-serif; + font-family: 'Lato-Light', sans-serif; font-weight: 300; } + + /*blue light #5A74AF*/ + + /*blue dark #29427A*/ + .topnav { - font-size: 14px; + font-size: 14px; +} + +.menu-url { + cursor: pointer; } .lead { font-size: 18px; font-weight: 400; } -.btn{ + +.btn { box-shadow: 0 1px 4px rgba(0, 0, 0, .6); } + .fa-li.fa-lg { color: #29427A; margin-top: 6px; } -.btn-transparent{ + +.btn-transparent { background: transparent; border: 2px solid #fff; color: #fff; transition: all .2s ease-in; } -.btn-primary{ + +.btn-primary { background: #29427A; border-color: #29427A; color: #fff; width: auto; } -.btn-primary:hover{ + +.btn-primary:hover { background: rgba(41, 66, 122, 0.8); border-color: #29427A; } -.btn-transparent:hover{ + +.btn-transparent:hover { background: #fff; border: 2px solid #fff; color: #000; transition: all .2s ease-in; } + .btn-info { color: #fff; background-color: #5A74AF; border-color: #5A74AF; } + .btn-info:hover { color: #fff; background-color: rgba(90, 116, 175, 0.8); border-color: #5A74AF; } + .btn-info:focus { color: #fff; background-color: rgba(90, 116, 175, 0.8); border-color: #5A74AF; } -.btn-lg{ + +.btn-lg { min-width: 180px; } -#logoWhite{ + +#logoWhite { display: none; } -#logoBlack{ + +#logoBlack { display: block; } -.navbar{ + +.navbar { transition: all .3s ease-in; } -.navbar-default{ + +.navbar-default { background: #fff; border: none; padding: 5px; } -.navbar-transparent{ + +.navbar-transparent { background: transparent; border: none; padding: 20px; } -.navbar-transparent #logoBlack{ + +.navbar-transparent #logoBlack { display: none; } -.navbar-transparent #logoWhite{ + +.navbar-transparent #logoWhite { display: block; width: 220px; } + .navbar-default .navbar-nav>li>a { cursor: pointer; - font-family: 'Lato-Regular', sans-serif; + font-family: 'Lato-Light', sans-serif; } + .navbar-transparent .navbar-nav>li>a { color: #fff; cursor: pointer; - font-family: 'Lato-Regular', sans-serif; + font-family: 'Lato-Light', sans-serif; } + .navbar-transparent .navbar-nav>li>a:hover { color: #fff; } -.navbar-transparent .navbar-nav>li>a:focus, .navbar-transparent .navbar-nav>li>a:hover { + +.navbar-transparent .navbar-nav>li>a:focus, +.navbar-transparent .navbar-nav>li>a:hover { color: #fff; background-color: transparent; } + .navbar-default .btn-link { box-shadow: none; } + .navbar-brand { padding: 10px 15px; cursor: pointer; } + .navbar-right { margin-right: 10px; } + .navbar-default .btn-link { color: #fff; } + .navbar-default .btn-link:hover { color: #fff !important; } -.nav-language{ + +.nav-language { position: relative; } -.nav-language .select-language{ + +.nav-language .select-language { padding: 15px 10px; color: #777; } -.navbar-transparent .nav-language .select-language{ + +.navbar-transparent .nav-language .select-language { color: #fff; - font-family: 'Lato-Regular', sans-serif; + font-family: 'Lato-Light', sans-serif; } -.nav-language .select-language span{ +.nav-language .select-language span { margin-left: 5px; margin-right: 5px; - font-family: 'Lato-Regular', sans-serif; - + font-family: 'Lato', sans-serif; } -.nav-language .drop-language{ + +.nav-language .drop-language { position: absolute; top: 45px; left: -8px; @@ -164,30 +205,35 @@ h6 { width: 100px; height: 40px; padding: 9px 10px; - -webkit-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); - -moz-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); - box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); + -webkit-box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); + -moz-box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); + box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); display: none; z-index: 100; /* margin-left: 10px; */ text-align: center; border-radius: 4px; } -.nav-language .drop-language a{ - cursor: pointer; - font-family: 'Lato-Regular', sans-serif; + +.nav-language .drop-language a { + cursor: pointer; + font-family: 'Lato', sans-serif; } -.navbar-transparent .nav-language .drop-language{ + +.navbar-transparent .nav-language .drop-language { background: transparent; border: 1px solid #fff; } -.navbar-transparent .nav-language .drop-language a{ + +.navbar-transparent .nav-language .drop-language a { color: #fff; - font-family: 'Lato-Regular', sans-serif; + font-family: 'Lato-Light', sans-serif; } -.nav-language:hover .drop-language{ + +.nav-language:hover .drop-language { display: block; } + .intro-header { height: 100vh; text-align: center; @@ -200,17 +246,19 @@ h6 { align-items: center; } -.intro-header::before{ +.intro-header::before { content: ""; position: absolute; top: 0; bottom: 0; left: 0; right: 0; - background: rgba(90, 116, 175, 0.7); + background: rgba(38, 59, 107, 0.7); } + .intro-header-1 { - padding-top: 50px; /* If you're making other pages, make sure there is 50px of padding to make sure the navbar doesn't overlap content! */ + padding-top: 50px; + /* If you're making other pages, make sure there is 50px of padding to make sure the navbar doesn't overlap content! */ padding-bottom: 50px; text-align: center; color: #fff; @@ -218,7 +266,8 @@ h6 { background-size: cover; position: relative; } -.intro-header-1::before{ + +.intro-header-1::before { content: ""; position: absolute; top: 0; @@ -227,8 +276,10 @@ h6 { right: 0; background: rgba(90, 116, 175, 0.36); } + .intro-header-2 { - padding-top: 50px; /* If you're making other pages, make sure there is 50px of padding to make sure the navbar doesn't overlap content! */ + padding-top: 50px; + /* If you're making other pages, make sure there is 50px of padding to make sure the navbar doesn't overlap content! */ padding-bottom: 50px; text-align: center; color: #f8f8f8; @@ -236,7 +287,8 @@ h6 { background-size: cover; position: relative; } -.intro-header-2::before{ + +.intro-header-2::before { content: ""; position: absolute; top: 0; @@ -245,19 +297,20 @@ h6 { right: 0; background: rgba(41, 66, 122, 0.59); } + .intro-message { position: relative; - width: 80%; + width: 80%; margin: 0 auto; - } + .intro-signup { position: relative; padding-top: 20%; padding-bottom: 20%; } -.intro-message > h1 { +.intro-message>h1 { margin: 0; font-weight: 400; font-size: 6em; @@ -266,15 +319,14 @@ h6 { .intro-divider { width: 400px; border-top: 1px solid #f8f8f8; - border-bottom: 1px solid rgba(0,0,0,0.2); + border-bottom: 1px solid rgba(0, 0, 0, 0.2); } -.intro-message > h3 { +.intro-message>h3 { font-weight: 300; - } -.intro-pricing{ +.intro-pricing { text-align: center; color: #fff; background: url(../img/pattern.jpg) no-repeat center center; @@ -286,11 +338,13 @@ h6 { align-items: center; position: relative; } -.intro-pricing.success-pricing{ + +.intro-pricing.success-pricing { height: 100vh; max-height: 100vh; } -.intro-pricing::before{ + +.intro-pricing::before { content: ""; position: absolute; top: 0; @@ -299,19 +353,23 @@ h6 { right: 0; background: rgba(90, 116, 175, 0.7); } -.intro-pricing .intro-message .section-heading{ + +.intro-pricing .intro-message .section-heading { font-size: 45px; width: 80%; margin: 0 auto; } + .split-section { padding: 70px 0; } -.split-section .icon-section{ + +.split-section .icon-section { position: relative; min-height: 330px; } -.split-section .icon-section i{ + +.split-section .icon-section i { position: absolute; left: 50%; top: 50%; @@ -319,58 +377,74 @@ h6 { font-size: 216px; color: #5A74AF; } -.split-section .split-text .lead{ + +.split-section .split-text .lead { font-size: 21px; color: #3a3a3a; + font-weight: 300 !important; } + +.new-lead { + font-weight: 300 !important; + font-size: 21px !important; +} + .split-section .split-text .split-title{ position: relative; margin-bottom: 25px; } -.split-section .split-text .split-title h2{ + +.split-section .split-text .split-title h2 { font-size: 50px; line-height: 50px; padding-bottom: 25px; color: #3a3a3a; letter-spacing: 3px; } -.split-section.left{ - background: -webkit-linear-gradient(#f0f4f7, #fff) no-repeat; - background: -o-linear-gradient(#f0f4f7, #fff) no-repeat; - background: linear-gradient(#f0f4f7, #fff) no-repeat; + +.split-section.left { + background: -webkit-linear-gradient(#f0f4f7, #fff) no-repeat; + background: -o-linear-gradient(#f0f4f7, #fff) no-repeat; + background: linear-gradient(#f0f4f7, #fff) no-repeat; } -.split-section.left .split-description{ +.split-section.left .split-description { width: 90%; margin-right: auto; } -.split-section.right .split-description{ + +.split-section.right .split-description { width: 90%; margin-left: auto; } -.split-section.right .split-description.title p{ + +.split-section.right .split-description.title p { font-size: 27px; margin-bottom: 10px; text-align: left; - } + .split-section.right .split-text { text-align: right; } -.split-section.right .split-text ul{ + +.split-section.right .split-text ul { text-align: left; } + .split-section.left .split-text { text-align: left; } -.split-section.right .split-text .split-title h2{ +.split-section.right .split-text .split-title h2 { text-align: right; } -.split-section.left .split-text .split-title h2{ + +.split-section.left .split-text .split-title h2 { text-align: left; } -.split-section.right .split-text .split-title::before{ + +.split-section.right .split-text .split-title::before { content: ""; position: absolute; bottom: 0; @@ -379,7 +453,8 @@ h6 { width: 70px; right: 0; } -.split-section.left .split-text .split-title::before{ + +.split-section.left .split-text .split-title::before { content: ""; position: absolute; bottom: 0; @@ -389,67 +464,79 @@ h6 { left: 0; } -.split-section.what .icon-section{ +.split-section.what .icon-section { position: relative; min-height: 500px; } + .split-section.what .split-text .lead { font-size: 19px; color: #3a3a3a; margin-bottom: 5px; line-height: 29px; } -.split-section.what .fa-li.fa-lg{ + +.split-section.what .fa-li.fa-lg { font-size: 17px; } -.pricing-section{ + +.pricing-section { padding: 80px 0 !important; background: -webkit-linear-gradient(top, #f0f4f7, #fff) no-repeat; background: linear-gradient(to bottom, #f0f4f7, #fff) no-repeat; } -.pricing-section .card{ +.pricing-section .card { width: 350px; margin: 0 auto; background: #fff; - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); padding-bottom: 40px; border-radius: 7px; position: relative; } -.pricing-section .card .img-beta{ + +.pricing-section .card .img-beta { position: absolute; top: 5px; width: 60px; left: 3px; } -.pricing-section .card .title{ + +.pricing-section .card .title { padding: 15px 40px; } -.pricing-section .card .title h3{ -} -.pricing-section .card .price{ + +.pricing-section .card .title h3 {} + +.pricing-section .card .price { background: #5A74AF; padding: 22px; color: #fff; font-size: 32px; } -.pricing-section .card .description{ + +.pricing-section .card .description { padding: 12px; } -.pricing-section .card .descriptions{ + +.pricing-section .card .descriptions { padding: 10px 30px; } -.pricing-section .card .description p{ + +.pricing-section .card .description p { margin: 0; } -.pricing-section .card .btn{ + +.pricing-section .card .btn { margin-top: 20px; } -.pricing-section .text{ + +.pricing-section .text { text-align: left; } -.pricing-section .text .section-heading{ + +.pricing-section .text .section-heading { /*font-size: 50px;*/ font-size: 48px; line-height: 50px; @@ -458,7 +545,8 @@ h6 { letter-spacing: 1px; position: relative; } -.pricing-section .text .section-heading::before{ + +.pricing-section .text .section-heading::before { content: ""; position: absolute; bottom: 0; @@ -467,7 +555,8 @@ h6 { width: 70px; left: 0; } -.request-section{ + +.request-section { 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%); @@ -476,14 +565,16 @@ h6 { background-image: linear-gradient(to left, #29427A 50%, #4F6699 100%); padding: 70px 0; } -.request-section .title h2{ + +.request-section .title h2 { font-size: 45px; margin: 0; color: #fff; padding-bottom: 25px; position: relative; } -.request-section .title h2::before{ + +.request-section .title h2::before { content: ""; position: absolute; bottom: 0; @@ -492,23 +583,27 @@ h6 { width: 70px; left: 0; } -.request-section .form-beta{ + +.request-section .form-beta { width: 80%; margin: 0 auto; max-width: 350px; text-align: center; +} +.request-section .form-beta input { + height: 50px; } -.request-section .form-beta input{ - height: 50px; + +.request-section .form-beta input { + height: 50px; } -.request-section .form-beta input{ - height: 50px; -} -.request-section .form-beta .btn-lg{ + +.request-section .form-beta .btn-lg { width: 100%; font-size: 16px; } + .banner { padding: 100px 0; color: #fff; @@ -516,7 +611,8 @@ h6 { background-size: cover; position: relative; } -.full-contact-section{ + +.full-contact-section { 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%); @@ -531,12 +627,12 @@ h6 { background-attachment: fixed; } -.contact-section .card{ +.contact-section .card { text-align: center; width: 350px; margin: 0 auto; background: #fff; - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); padding-bottom: 40px; border-radius: 7px; color: #4c4444; @@ -544,23 +640,28 @@ h6 { padding: 45px; margin-top: -115px; } -.contact-section .card .social a{ + +.contact-section .card .social a { color: #29427A; font-size: 45px; } -.contact-section .card .subtitle h3{ + +.contact-section .card .subtitle h3 { font-size: 30px; margin-bottom: 23px; } -.contact-section .card .social a:hover{ + +.contact-section .card .social a:hover { text-decoration: none; } + .contact-section .title { margin-right: auto; width: 80%; max-width: 468px; } -.contact-section .title h2{ + +.contact-section .title h2 { font-size: 65px; margin: 0; color: #fff; @@ -568,7 +669,8 @@ h6 { position: relative; text-align: right; } -.contact-section .title h2::before{ + +.contact-section .title h2::before { content: ""; position: absolute; bottom: 0; @@ -577,19 +679,23 @@ h6 { width: 70px; right: 0; } + + /*Why DCL*/ + .full-whydcl-sec { color: #fff; text-align: center; background-image: -ms-linear-gradient(right, #29427A 50%, #4F6699 100%); - background-image: -moz-linear-gradient(right, #29427A 50%, #4F6699 100%); - background-image: -o-linear-gradient(right, #29427A 50%, #4F6699 100%); - background-image: -webkit-gradient(linear, right top, left top, color-stop(50, #29427A), color-stop(100, #4F6699)); - background-image: -webkit-linear-gradient(right, #29427A 50%, #4F6699 100%); - background-image: linear-gradient(to left, #29427A 50%, #4F6699 100%); + background-image: -moz-linear-gradient(right, #29427A 50%, #4F6699 100%); + background-image: -o-linear-gradient(right, #29427A 50%, #4F6699 100%); + background-image: -webkit-gradient(linear, right top, left top, color-stop(50, #29427A), color-stop(100, #4F6699)); + background-image: -webkit-linear-gradient(right, #29427A 50%, #4F6699 100%); + background-image: linear-gradient(to left, #29427A 50%, #4F6699 100%); } + .whydcl-header { - padding: 150px 0 150px 0; + padding: 150px 0 150px 0; text-align: center; color: #f8f8f8; background: url(../img/pattern.jpg) no-repeat center center; @@ -597,6 +703,7 @@ h6 { position: relative; background-attachment: fixed; } + .whydcl-header::before { content: ""; position: absolute; @@ -604,27 +711,33 @@ h6 { bottom: 0; left: 0; right: 0; - background: rgba(90, 116, 175,0.85); + background: rgba(90, 116, 175, 0.85); /*background: rgba(45,70,122,0.8);*/ } + .single-heading h2 { font-size: 65px; margin: 0; - padding: 0; + padding: 0; } + #tech_stack { background: #fff; } + #tech_stack h3 { font-size: 42px; width: 70%; } + hr.thick-divider { border-top: 3px solid #eee !important; } + .space { padding: 50px 0; } + tech-sub-sec h2 { font-size: 45px; line-height: 60px; @@ -632,97 +745,127 @@ tech-sub-sec h2 { color: #3a3a3a; letter-spacing: 1px; } + .logo-wrap { text-align: center; min-height: 140px; padding: 20px 40px 30px 40px; } -.btm-space{ - padding-bottom: 8px; + +.btm-space { + padding-bottom: 8px; } + +.btm-space-tayga { + padding-bottom: 12px; +} + .percent-text { font-size: 50px; color: #999; } + .tech-sub-sec h2 { font-size: 40px; line-height: 55px; } -.space-middle{ - padding: 45px 0; + +.space-middle { + padding: 45px 0; } -.padding-vertical{ - padding: 35px 0; + +.padding-vertical { + padding: 35px 0; } + .percent-text img { - margin-left:20px; + margin-left: 20px; } + .space-block { padding: 30px 0; } + .dropdown-menu { border: 1px solid #fff; - -webkit-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); - -moz-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); - box-shadow: -8px 13px 31px -8px rgba(77,77,77,1); + -webkit-box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); + -moz-box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); + box-shadow: -8px 13px 31px -8px rgba(77, 77, 77, 1); display: none; text-align: center; border-radius: 4px !important; padding: 5px !important; } -.dropdown-menu > li > a:focus, .dropdown-menu > li > a:hover { + +.dropdown-menu>li>a:focus, +.dropdown-menu>li>a:hover { background: transparent; text-decoration: underline !important; } + .logo-wrap .logo-caption { padding-top: 20px; display: inline-block; color: #999 !important; } + .lead-light { color: #999 !important; line-height: 32px !important; } + .logo-wrap-1 { padding-top: 50px; } -.dropdown-menu > li > a { + +.dropdown-menu>li>a { padding: 1px 10px !important; } -.dropdown-menu{ - left: 0 !important; - min-width: 155px; - text-align: left; - margin-left: 15px; + +.dropdown-menu { + left: 0 !important; + min-width: 155px; + text-align: left; + margin-left: 15px; } -.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:focus, .navbar-default .navbar-nav > .open > a:hover { + +.navbar-default .navbar-nav>.open>a, +.navbar-default .navbar-nav>.open>a:focus, +.navbar-default .navbar-nav>.open>a:hover { background: transparent; color: #fff; } -.dropdown-menu > li > a { + +.dropdown-menu>li>a { font-size: 13px; font-weight: 300; - font-family: 'Lato-Regular', sans-serif; + font-family: 'Lato-Light', sans-serif; } -.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:focus, .navbar-default .navbar-nav > .active > a:hover { + +.navbar-default .navbar-nav>.active>a, +.navbar-default .navbar-nav>.active>a:focus, +.navbar-default .navbar-nav>.active>a:hover { background: #2D457A; color: #fff; border-radius: 6px; } + /*Pricing page*/ -.price-calc-section{ +.price-calc-section { padding: 80px 40px !important; background: -webkit-linear-gradient(top, #f0f4f7, #fff) no-repeat; background: linear-gradient(to bottom, #f0f4f7, #fff) no-repeat; display: flex; - font-family: 'Lato-Regular', sans-serif; + font-family: 'Lato', sans-serif; } -.price-calc-section .text{ - width: 50%; + +.price-calc-section .text { + width: 50%; } -.price-calc-section .text .section-heading{ + +.price-calc-section .text .section-heading { font-size: 48px; line-height: 48px; padding-bottom: 27px; @@ -731,12 +874,13 @@ tech-sub-sec h2 { position: relative; text-align: right; } -.price-calc-section .text .description{ + +.price-calc-section .text .description { font-size: 20px; text-align: right; } -.price-calc-section .text .section-heading::before{ +.price-calc-section .text .section-heading::before { content: ""; position: absolute; bottom: 0; @@ -745,11 +889,12 @@ tech-sub-sec h2 { width: 70px; right: 0; } -.price-calc-section .card{ + +.price-calc-section .card { width: 50%; margin: 0 auto; background: #fff; - box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23); + box-shadow: 0 10px 20px rgba(0, 0, 0, 0.19), 0 6px 6px rgba(0, 0, 0, 0.23); padding-bottom: 40px; border-radius: 7px; text-align: center; @@ -757,34 +902,42 @@ tech-sub-sec h2 { max-width: 400px; position: relative; } + .price-calc-section .landing { width: 100% !important; } -.no-padding{ - padding:0 !important; + +.no-padding { + padding: 0 !important; } -.price-calc-section .card .img-beta{ + +.price-calc-section .card .img-beta { position: absolute; top: 5px; width: 60px; left: 3px; } -.price-calc-section .card .title{ + +.price-calc-section .card .title { padding: 15px 40px; } -.price-calc-section .card .title h3{ - font-family: 'Lato-Regular', sans-serif; + +.price-calc-section .card .title h3 { + font-family: 'Lato', sans-serif; } -.price-calc-section .card .price{ + +.price-calc-section .card .price { background: #5A74AF; padding: 22px; color: #fff; font-size: 32px; } -.price-calc-section .card .price .price-text{ + +.price-calc-section .card .price .price-text { font-size: 14px; } -.price-calc-section .card .description{ + +.price-calc-section .card .description { padding: 12px; position: relative; display: flex; @@ -800,34 +953,43 @@ tech-sub-sec h2 { width: 30%; text-align: left; } + .price-calc-section .card .description .select-number{ - font-size: 20px; - text-align: center; - width: 60px; + font-size: 20px; + text-align: center; + width: 85px; } -.price-calc-section .card .description i{ + +.price-calc-section .card .description i { color: #29427A; cursor: pointer; font-size: 24px; } -.price-calc-section .card .description .left{ - margin-right: 7px; + +.price-calc-section .card .description .left { + margin-right: 7px; } -.price-calc-section .card .description .right{ - margin-left: 7px; + +.price-calc-section .card .description .right { + margin-left: 7px; } -.price-calc-section .card .descriptions{ + +.price-calc-section .card .descriptions { padding: 10px 30px; } -.price-calc-section .card .description p{ + +.price-calc-section .card .description p { margin: 0; } -.price-calc-section .card .btn{ + +.price-calc-section .card .btn { margin-top: 20px; font-size: 20px; width: 200px; + border: none; } -.price-calc-section .card .select-configuration select{ + +.price-calc-section .card .select-configuration select { outline: none; background: #fff; border-color: #d0d0d0; @@ -837,24 +999,30 @@ tech-sub-sec h2 { font-size: 16px; margin-left: 10px; } -.price-calc-section .card .check-ip{ + +.price-calc-section .card .check-ip { font-size: 18px; } -.price-calc-section .card .justify-center{ + +.price-calc-section .card .justify-center { justify-content: center !important; } -.price-calc-section .card .description.input label{ + +.price-calc-section .card .description.input label { font-size: 15px; font-weight: 800; - font-family: 'Lato-Regular'; + font-family: 'Lato'; margin-bottom: 0; width: 40px; } + + /*Changed class****.price-calc-section .card .description.input input*/ -.price-calc-section .card .description input{ - width: 200px; - font-size: 14px; - text-align: left; + +.price-calc-section .card .description input { + width: 200px; + font-size: 14px; + text-align: left; padding: 5px 10px; border-radius: 4px; border: 1px solid #d0d0d0; @@ -862,78 +1030,93 @@ tech-sub-sec h2 { margin-left: 10px; } -.price-calc-section .card .check-ip input[type=checkbox]{ +.price-calc-section .card .check-ip input[type=checkbox] { font-size: 17px; margin: 0 8px; } + .help-block.with-errors { text-align: center; margin: 0; padding: 0; } -.has-error .checkbox, .has-error .checkbox-inline, .has-error .control-label, .has-error .help-block, .has-error .radio, .has-error .radio-inline, .has-error.checkbox label, .has-error.checkbox-inline label, .has-error.radio label, .has-error.radio-inline label{ -color: #eb4d5c; + +.has-error .checkbox, +.has-error .checkbox-inline, +.has-error .control-label, +.has-error .help-block, +.has-error .radio, +.has-error .radio-inline, +.has-error.checkbox label, +.has-error.checkbox-inline label, +.has-error.radio label, +.has-error.radio-inline label { + color: #eb4d5c; } + .form-group { margin: 0; border-bottom: 1px solid rgba(128, 128, 128, 0.3); } + @media(max-width:767px) { - .percent-text { - font-size: 50px; - } - #tech_stack h3 { - font-size: 30px; - line-height: 40px; - width: 100%; - } - .navbar-nav .open .dropdown-menu { - text-align: left; - font-size: 12px; - } - .visible-mobile { - display:block; - } - .visible-desktop { - display:none !important; - } - .navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:focus, .navbar-default .navbar-nav > .open > a:hover { - background: transparent; - color: #777 !important; + .percent-text { + font-size: 50px; + } + #tech_stack h3 { + font-size: 30px; + line-height: 40px; + width: 100%; + } + .navbar-nav .open .dropdown-menu { + text-align: left; + font-size: 12px; + } + .visible-mobile { + display: block; + } + .visible-desktop { + display: none !important; + } + .navbar-default .navbar-nav>.open>a, + .navbar-default .navbar-nav>.open>a:focus, + .navbar-default .navbar-nav>.open>a:hover { + background: transparent; + color: #777 !important; + } } -} -@media screen and (min-device-width: 480px) and (max-device-width: 767px) { -.logo-wrap { - width: 50%; - padding: 15px 30px !important; - min-height: 179px; -} -.logo-wrap-1 { - width: 50%; - padding: 15px 30px !importantx; - min-height: 179px; -} -.landscape-xs-6{ - width: 50%; -} -.landscape-xs-8{ - width: 66.66666667%; -} -.landscape-xs-4{ - width: 33.33333333%; +@media screen and (min-device-width: 480px) and (max-device-width: 767px) { + .logo-wrap { + width: 50%; + padding: 15px 30px !important; + min-height: 179px; + } + .logo-wrap-1 { + width: 50%; + padding: 15px 30px !important; + min-height: 179px; + } + .landscape-xs-6 { + width: 50%; + } + .landscape-xs-8 { + width: 66.66666667%; + } + .landscape-xs-4 { + width: 33.33333333%; + } } -} @media(min-width:768px) { - .visible-mobile { - display:none !important; - } - .visible-desktop { - display:block; - } - + .visible-mobile { + display: none !important; + } + .visible-desktop { + display: block; + } } + @media(max-width:990px) { .pricing-section .text { text-align: center; @@ -949,31 +1132,29 @@ color: #eb4d5c; } @media(max-width:768px) { -.percent-text { - font-size: 43px; -} - .tech-sub-sec h2 { - font-size: 30px; -line-height: 40px; -} -.single-heading h2 { - font-size: 50px; + .percent-text { + font-size: 43px; + } + .tech-sub-sec h2 { + font-size: 30px; + line-height: 40px; + } + .single-heading h2 { + font-size: 50px; + } + .logo-wrap { + padding: 10px; + } + .navbar-transparent li a { + color: #777 !important; } -.logo-wrap { - padding: 10px; -} -.navbar-transparent li a { - color: #777 !important; -} .intro-message { padding-bottom: 15%; } - - .intro-message > h1 { + .intro-message>h1 { font-size: 3em; } - - ul.intro-social-buttons > li { + ul.intro-social-buttons>li { display: block; margin-bottom: 20px; padding: 0; @@ -986,11 +1167,9 @@ line-height: 40px; .intro-pricing .intro-message { padding-bottom: 0; } - - ul.intro-social-buttons > li:last-child { + ul.intro-social-buttons>li:last-child { margin-bottom: 0; } - .intro-divider { width: 100%; } @@ -999,18 +1178,18 @@ line-height: 40px; border: none; padding: 5px; } - .navbar-transparent #logoBlack{ + .navbar-transparent #logoBlack { display: block; } - .navbar-transparent #logoWhite{ + .navbar-transparent #logoWhite { display: none; } .navbar-transparent .navbar-nav>li>a { font-size: 14px; color: #777; } - .nav-language:hover{ - height: 80px; + .nav-language:hover { + height: 80px; } .navbar-transparent .nav-language .select-language { color: #777; @@ -1026,7 +1205,6 @@ line-height: 40px; border: 1px solid rgba(119, 119, 119, 0.4); box-shadow: none; } - .navbar-default .nav-language .drop-language { background: #fff; /* border: 1px solid #fff; */ @@ -1041,11 +1219,13 @@ line-height: 40px; .navbar-default .nav-language .drop-language a { color: #777; } - .navbar-transparent .navbar-nav>li>a:focus, .navbar-transparent .navbar-nav>li>a:hover { + .navbar-transparent .navbar-nav>li>a:focus, + .navbar-transparent .navbar-nav>li>a:hover { color: #333; background-color: transparent; } - .navbar-default .navbar-nav>li>a:focus, .navbar-default .navbar-nav>li>a:hover { + .navbar-default .navbar-nav>li>a:focus, + .navbar-default .navbar-nav>li>a:hover { color: #333; background-color: transparent; } @@ -1055,17 +1235,17 @@ line-height: 40px; .split-section .icon-section { min-height: 160px; } - .split-section.what .icon-section{ + .split-section.what .icon-section { min-height: 160px; } - .split-section .icon-section i{ + .split-section .icon-section i { font-size: 120px; } - .split-section .split-text .split-title h2{ + .split-section .split-text .split-title h2 { font-size: 35px; line-height: 35px; } - .pricing-section .text .section-heading{ + .pricing-section .text .section-heading { font-size: 35px; line-height: 35px; } @@ -1079,7 +1259,7 @@ line-height: 40px; text-align: center; margin-bottom: 55px; } - .request-section .title h2::before{ + .request-section .title h2::before { left: 50%; transform: translate(-50%, 0); } @@ -1087,13 +1267,13 @@ line-height: 40px; width: 300px; margin: 0 auto; } - .contact-section .title h2{ + .contact-section .title h2 { font-size: 35px; line-height: 40px; text-align: center; margin-top: 35px; } - .contact-section .title h2::before{ + .contact-section .title h2::before { left: 50%; transform: translate(-50%, 0); } @@ -1101,12 +1281,10 @@ line-height: 40px; color: #29427A; font-size: 30px; } - .intro-pricing .intro-message .section-heading { font-size: 30px; } - - .price-calc-section{ + .price-calc-section { flex-direction: column; padding: 60px 10px !important; } @@ -1120,7 +1298,7 @@ line-height: 40px; margin-top: 20px; } .price-calc-section .text .section-heading { - font-size: 35px; + font-size: 35px; line-height: 35px; padding-bottom: 15px; text-align: center; @@ -1133,22 +1311,20 @@ line-height: 40px; font-size: 18px; text-align: center; } - - .price-calc-section .card .description .select-number{ + .price-calc-section .card .description .select-number { font-size: 17px; text-align: center; width: 60px; } - } @media(max-width:540px) { -.logo-wrap { - padding: 30px; -} -.percent-text { - text-align: center; -} + .logo-wrap { + padding: 30px; + } + .percent-text { + text-align: center; + } .pricing-section .card { width: 90%; } @@ -1159,10 +1335,10 @@ line-height: 40px; width: 90%; padding: 25px 10px; } - .intro-message > h1 { + .intro-message>h1 { font-size: 2em; } - .price-calc-section .text .section-heading { + .price-calc-section .text .section-heading { font-size: 24px; line-height: 25px; } @@ -1171,14 +1347,13 @@ line-height: 40px; margin-left: 0px; } .pull-left.space-middle { - width: 67%; - padding: 20px 0px; - text-align: left; -} -.pull-left.ssdimg { - width: 30%; -} - + width: 67%; + padding: 20px 0px; + text-align: left; + } + .pull-left.ssdimg { + width: 30%; + } } .network-name { @@ -1207,9 +1382,6 @@ line-height: 40px; border-top: 3px solid #e7e7e7; } - - - .btn-buynow { background-color: #607D8B; border-color: #607D8B; @@ -1221,10 +1393,11 @@ line-height: 40px; margin-top: 15px; } } + @media(min-width:1200px) { -.container-small{ - width:980px; -} + .container-small { + width: 980px; + } } footer { @@ -1236,20 +1409,17 @@ p.copyright { margin: 15px 0 0; } - a#forgotpassword { color: #ffffff; - } - .topnav a:focus { - outline: none; + outline: none; outline-offset: 0; } .topnav .btn:focus { - outline: none !important; + outline: none !important; outline-offset: 0; } @@ -1258,22 +1428,22 @@ a#forgotpassword { } .content-404 h1 { - margin: 0 0 15px; - font-size: 200px; - line-height: 1; - font-weight: 700; - color: #6db97c; - + margin: 0 0 15px; + font-size: 200px; + line-height: 1; + font-weight: 700; + color: #6db97c; } .btn-buynow { background-color: #607D8B; border-color: #607D8B; } -.form-300{ + +.form-300 { width: 300px; } -.error-message-box{ +.error-message-box { margin-top: 20px; } diff --git a/datacenterlight/static/datacenterlight/img/tayga.png b/datacenterlight/static/datacenterlight/img/tayga.png index 07b9e092..fb2a7429 100644 Binary files a/datacenterlight/static/datacenterlight/img/tayga.png and b/datacenterlight/static/datacenterlight/img/tayga.png differ diff --git a/datacenterlight/static/datacenterlight/js/main.js b/datacenterlight/static/datacenterlight/js/main.js index bfe92631..44b92a0c 100644 --- a/datacenterlight/static/datacenterlight/js/main.js +++ b/datacenterlight/static/datacenterlight/js/main.js @@ -1,22 +1,22 @@ -(function($){ +(function($) { "use strict"; // Start of use strict - - + + /* --------------------------------------------- Scripts initialization --------------------------------------------- */ - var cardPricing ={ + var cardPricing = { 'cpu': { 'id': 'coreValue', 'value': 1, - 'min':1, + 'min': 1, 'max': 48, 'interval': 1 }, 'ram': { 'id': 'ramValue', 'value': 2, - 'min':2, + 'min': 2, 'max': 200, 'interval': 1 }, @@ -24,131 +24,141 @@ 'id': 'storageValue', 'value': 10, 'min': 10, - 'max': 500, + 'max': 2000, 'interval': 10 } - } - $(window).load(function(){ - - + }; + $(window).load(function() { + + }); - - $(document).ready(function(){ + + $(document).ready(function() { verifiedUrl(); - _navScroll(); - _initScroll(); - _initNavUrl(); - _initPricing(); - + _navScroll(); + _initScroll(); + _initNavUrl(); + _initPricing(); + }); - - $(window).resize(function(){ - - - + + $(window).resize(function() { + + + }); - + /* --------------------------------------------- Nav panel classic --------------------------------------------- */ - if (window.matchMedia("(min-width: 767px)").matches) { - $('ul.nav li.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); - }); -} else { - /* the viewport is less than 400 pixels wide */ -} - - - - function _initScroll(){ - $(window).scroll(function(){ - _navScroll(); + if (window.matchMedia("(min-width: 767px)").matches) { + $('ul.nav li.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); }); - + } else { + /* the viewport is less than 400 pixels wide */ } - function _navScroll(){ - if($(window).scrollTop() > 10 ){ + + + function _initScroll() { + $(window).scroll(function() { + _navScroll(); + }); + } + + function _navScroll() { + if ($(window).scrollTop() > 10) { $(".navbar").removeClass("navbar-transparent"); $(".navbar-default .btn-link").css("color", "#777"); $(".dropdown-menu").removeClass("navbar-transparent"); $(".dropdown-menu > li > a").css("color", "#777"); - }else{ + } else { $(".navbar").addClass("navbar-transparent"); $(".navbar-default .btn-link").css("color", "#fff"); $(".dropdown-menu").addClass("navbar-transparent"); $(".dropdown-menu > li > a").css("color", "#fff"); } } - function _initNavUrl(){ - $('.url').click(function(){ - var href = $(this).attr('data-url'); - $('.navbar-collapse').removeClass('in'); - $('.navbar-collapse').addClass('collapsing'); - $('html, body').animate({ - scrollTop: $(href).offset().top - }, 1000); + + function _initNavUrl() { + $('.url').click(function(event) { + event.preventDefault(); + var href = $(this).attr('data-url'); + $('.navbar-collapse').removeClass('in'); + $('.navbar-collapse').addClass('collapsing'); + var url = window.location.pathname; + var urlSplit = url.split('/'); + if (urlSplit.length === 3 && urlSplit[2] === 'datacenterlight') { + $('html, body').animate({ + scrollTop: $(href).offset().top + }, 1000); + } else { + var allUrl = window.location.href; + var redirect = allUrl.split('whydatacenterlight') + window.location.href = '/en-us/datacenterlight' + href; + } }); } - function verifiedUrl(){ - if(window.location.href.indexOf('#success') > -1){ + + function verifiedUrl() { + if (window.location.href.indexOf('#success') > -1) { form_success(); - console.log('epa'); } } - function _initPricing(){ + function _initPricing() { _fetchPricing(); - $('.fa-minus-circle.left').click(function(event){ + $('.fa-minus-circle.left').click(function(event) { var data = $(this).data('minus'); - - if(cardPricing[data].value > cardPricing[data].min){ + + if (cardPricing[data].value > cardPricing[data].min) { cardPricing[data].value = Number(cardPricing[data].value) - cardPricing[data].interval; } _fetchPricing(); }); - $('.fa-plus-circle.right').click(function(event){ + $('.fa-plus-circle.right').click(function(event) { var data = $(this).data('plus'); - if(cardPricing[data].value < cardPricing[data].max){ + if (cardPricing[data].value < cardPricing[data].max) { cardPricing[data].value = Number(cardPricing[data].value) + cardPricing[data].interval; } _fetchPricing(); }); - $('.input-price').change(function(){ + $('.input-price').change(function() { var data = $(this).attr("name"); - cardPricing[data].value = $('input[name='+data+']').val(); + cardPricing[data].value = $('input[name=' + data + ']').val(); _fetchPricing(); }); } - function _fetchPricing(){ - Object.keys(cardPricing).map(function(element){ + + function _fetchPricing() { + Object.keys(cardPricing).map(function(element) { //$('#'+cardPricing[element].id).val(cardPricing[element].value); - $('input[name='+element+']').val(cardPricing[element].value); + $('input[name=' + element + ']').val(cardPricing[element].value); }); _calcPricing(); } - function _calcPricing(){ - var total = (cardPricing['cpu'].value * 5) + (2* cardPricing['ram'].value) + (0.6* cardPricing['storage'].value); + function _calcPricing() { + var total = (cardPricing['cpu'].value * 5) + (2 * cardPricing['ram'].value) + (0.6 * cardPricing['storage'].value); total = parseFloat(total.toFixed(2)); $("#total").text(total); $('input[name=total]').val(total); } - function form_success(){ + + function form_success() { $('#sucessModal').modal('show'); } - function _calculate(numbers, price){ - $('#valueTotal').text(numbers*price*31); + + function _calculate(numbers, price) { + $('#valueTotal').text(numbers * price * 31); } - - - -})(jQuery); + +})(jQuery); diff --git a/datacenterlight/templates/datacenterlight/base.html b/datacenterlight/templates/datacenterlight/base.html index 2c3f0e5d..fc69a2d5 100644 --- a/datacenterlight/templates/datacenterlight/base.html +++ b/datacenterlight/templates/datacenterlight/base.html @@ -3,65 +3,66 @@ - + - - - - - + + + + + - Data Center Light - - {% block title %}VM hosting made in Switzerland{% endblock %} - - + Data Center Light - + {% block title %}VM hosting made in Switzerland{% endblock %} + + - - - - - - - + + + + + + + - - + + - - - - - {% include "google_analytics.html" %} - - + + + + + {% include "google_analytics.html" %} + + - + - - {% include "datacenterlight/includes/_navbar.html" %} - - - {% block content %} - {% endblock %} - - {% include "datacenterlight/includes/_footer.html" %} - - - - + + {% include "datacenterlight/includes/_navbar.html" %} - + {% block content %} + {% endblock %} - - - - - - - - + {% include "datacenterlight/includes/_footer.html" %} + + + + + + + + + + + + + + + + + diff --git a/datacenterlight/templates/datacenterlight/calculator_form.html b/datacenterlight/templates/datacenterlight/calculator_form.html new file mode 100644 index 00000000..cdba4809 --- /dev/null +++ b/datacenterlight/templates/datacenterlight/calculator_form.html @@ -0,0 +1,123 @@ +{% load staticfiles i18n%} +
+ {% csrf_token %} +
+

{% trans "VM hosting" %}

+
+
+ 15 + CHF/{% trans "month" %} +
+

{% trans "VAT included" %}

+
+
+
+
+

{% trans "Hosted in Switzerland" %}

+
+
+
+ + + Core + +
+
+ {% for message in messages %} + {% if 'cores' in message.tags %} +
  • + {{ message|safe }} +
+ {% endif %} + {% endfor %} +
+
+
+
+ + + GB RAM + +
+
+ {% for message in messages %} + {% if 'memory' in message.tags %} +
  • + {{ message|safe }} +
+ {% endif %} + {% endfor %} +
+
+
+
+ + + {% trans "GB Storage (SSD)" %} + +
+
+ {% for message in messages %} + {% if 'storage' in message.tags %} +
  • + {{ message|safe }} +
+ {% endif %} + {% endfor %} +
+
+
+ + +
+ + +
+
+ + +
+
+ {% for message in messages %} + {% if 'name' in message.tags %} +
    +
  • + {{ message|safe }} +
  • +
+ {% endif %} + {% endfor %} +
+
+
+
+ + +
+
+ {% for message in messages %} + {% if 'email' in message.tags %} +
    +
  • + {{ message|safe }} +
  • +
+ {% endif %} + {% endfor %} +
+
+
+ +
diff --git a/datacenterlight/templates/datacenterlight/includes/_navbar.html b/datacenterlight/templates/datacenterlight/includes/_navbar.html index cb1a7180..84358b4d 100644 --- a/datacenterlight/templates/datacenterlight/includes/_navbar.html +++ b/datacenterlight/templates/datacenterlight/includes/_navbar.html @@ -12,28 +12,28 @@ {% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} - - + + {% else %} - - + + {% endif %} - + @@ -87,7 +86,7 @@

{% 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." %}

- +
@@ -112,8 +111,8 @@

{% trans "Reliable and light" %}

-

{% trans "Our VMs are located in Switzerland, with reliable power supply and fast internet connection. Our VM costs less thanks to our featherlight infrastructure." %}

- +

{% trans "Our VMs are located in Switzerland, with reliable power supply and fast internet connection. Our VM costs less thanks to our featherlight infrastructure." %}

+
@@ -122,7 +121,7 @@ - +
@@ -131,7 +130,7 @@

{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}

-

{% trans "Affordable VM hosting based in Switzerland" %}

+

{% trans "Affordable VM hosting based in Switzerland" %}

@@ -139,94 +138,7 @@
-
- {% csrf_token %} -
-

{% trans "VM hosting" %}

-
-
- 15 - CHF/{% trans "month" %} -
-

{% trans "VAT included" %}

-
-
-
-
-

{% trans "Hosted in Switzerland" %}

-
-
-
- - - Core - -
-
-
-
-
- - - GB RAM - -
-
-
-
-
- - - {% trans "GB Storage (SSD)" %} - -
-
-
-
- - -
- - -
-
- - -
-
- {% for message in messages %} - {% if 'name' in message.tags %} -
  • - {{ message|safe }} -
- {% endif %} - {% endfor %} -
-
-
-
- - -
-
- {% for message in messages %} - {% if 'email' in message.tags %} -
  • - {{ message|safe }} -
- {% endif %} - {% endfor %} -
-
-
- -
+ {% include "datacenterlight/calculator_form.html" %}
@@ -242,7 +154,7 @@
- +
@@ -254,15 +166,9 @@

{% trans "Switzerland " %}

@@ -275,7 +181,7 @@
- +
- {% endblock %} +{% endblock %} diff --git a/datacenterlight/templates/datacenterlight/order_detail.html b/datacenterlight/templates/datacenterlight/order_detail.html index 273074cf..8b1180bb 100644 --- a/datacenterlight/templates/datacenterlight/order_detail.html +++ b/datacenterlight/templates/datacenterlight/order_detail.html @@ -4,94 +4,93 @@ {% load custom_tags %} {% block content %} -
- {% if messages %} -
-
-
-
- {% for message in messages %} - {{ message }} - {% endfor %} -
-
-
- {% endif %} - {% if not error %} -
-
-
-

{% trans "Confirm Order"%}

-
-
+
+ {% if messages %}
-
-
-

{% trans "Billed To:"%}

- {% with request.session.billing_address_data as billing_address %} - {{request.session.user.name}}
{{billing_address|get_value_from_dict:'street_address'}}, {{billing_address|get_value_from_dict:'postal_code'}}
- {{billing_address|get_value_from_dict:'city'}}, {{billing_address|get_value_from_dict:'country'}}. - {% endwith %} -
-
-
-
- {% trans "Date"%}:
- {% now "Y-m-d H:i" %}

-
- +
+
+
+ {% for message in messages %} + {{ message }} + {% endfor %} +
+ {% endif %} + {% if not error %}
-
-
- {% trans "Payment Method:"%}
- {{cc_brand}} {% trans "ending" %} **** {{cc_last4}}
- {{request.session.user.email}} -
+
+
+

{% trans "Confirm Order"%}

+
+
+
+
+
+ {% trans "Date"%}:
+ {% now "Y-m-d H:i" %}

+
+
+
+
+

{% trans "Billed To:"%}

+ {% with request.session.billing_address_data as billing_address %} + {{billing_address|get_value_from_dict:'cardholder_name'}}
{{billing_address|get_value_from_dict:'street_address'}}, {{billing_address|get_value_from_dict:'postal_code'}}
+ {{billing_address|get_value_from_dict:'city'}}, {{billing_address|get_value_from_dict:'country'}}. + {% endwith %} +
+
+
+
+
+
+ {% trans "Payment Method:"%}
+ {{cc_brand}} {% trans "ending" %} **** {{cc_last4}}
+ {{request.session.user.email}} +
+
+
-
-
- -
-
-

{% trans "Order summary"%}

-
-
- {% with request.session.specs as vm %} -

{% trans "Cores"%} {{vm.cpu}}

+ +
+
+

{% trans "Order summary"%}


-

{% trans "Memory"%} {{vm.memory}} GB

-
-

{% trans "Disk space"%} {{vm.disk_size}} GB

-
-

{% trans "Configuration"%} {{request.session.template.name}}

-
-

{% trans "Total"%}

{{vm.price}} CHF

- {% endwith %} +
+ {% with request.session.specs as vm %} +

{% trans "Cores"%} {{vm.cpu}}

+
+

{% trans "Memory"%} {{vm.memory}} GB

+
+

{% trans "Disk space"%} {{vm.disk_size}} GB

+
+

{% trans "Configuration"%} {{request.session.template.name}}

+
+

{% trans "Total"%}

{{vm.price}} CHF

+ {% endwith %} +
+
+
+ {% csrf_token %} + +
+
-
-
- {% csrf_token %} - -
-
+ {% endif %}
- {% endif %} -
- + {%endblock%} diff --git a/datacenterlight/templates/datacenterlight/pricing.html b/datacenterlight/templates/datacenterlight/pricing.html index bfda4054..0724a6ce 100644 --- a/datacenterlight/templates/datacenterlight/pricing.html +++ b/datacenterlight/templates/datacenterlight/pricing.html @@ -13,73 +13,73 @@
- -
-
- {% csrf_token %} - -
-

{% trans "VM hosting" %}

-
-
- 15 - CHF -
-

{% trans "VAT included" %}

-
-
-
-
-

{% trans "Hosted in Switzerland" %}

-
-
- - - Core - -
-
- - - GB RAM - -
-
- - - {% trans "GB Storage (SSD)" %} - -
+ +
+ + {% csrf_token %} - - -
- - +
+

{% trans "VM hosting" %}

+
+
+ 15 + CHF +
+

{% trans "VAT included" %}

+
- - - - - -
- +
+
+

{% trans "Hosted in Switzerland" %}

+
+
+ + + Core + +
+
+ + + GB RAM + +
+
+ + + {% trans "GB Storage (SSD)" %} + +
- -
+ + +
+ + +
+ + + + + +
+ + + +
diff --git a/datacenterlight/templates/datacenterlight/success.html b/datacenterlight/templates/datacenterlight/success.html index 4cbee12a..ff553f3c 100644 --- a/datacenterlight/templates/datacenterlight/success.html +++ b/datacenterlight/templates/datacenterlight/success.html @@ -12,29 +12,21 @@
- - - - - - - - + var hash = window.location.hash.substr(1); + console.log(hash); + if (hash == 'requestform'){ + $('#reques-success-message').modal('show'); + } + }; + {% endblock %} \ No newline at end of file diff --git a/datacenterlight/templates/datacenterlight/whydatacenterlight.html b/datacenterlight/templates/datacenterlight/whydatacenterlight.html index fa85721c..948a51b2 100644 --- a/datacenterlight/templates/datacenterlight/whydatacenterlight.html +++ b/datacenterlight/templates/datacenterlight/whydatacenterlight.html @@ -1,22 +1,19 @@ {% extends "datacenterlight/base.html" %} {% load staticfiles i18n%} -{% get_current_language as LANGUAGE_CODE %} {% block content %} - -
-
-
-
-
-
-

{% trans "Why Data Center Light?" %}

+
+
+
+
+
+

{% trans "Why Data Center Light?" %}

-
-
-
+
+
+
@@ -35,39 +32,39 @@
-
- Devuan - {% trans "Our services run on" %} -
-
- Prometheus - {% trans "Our monitoring" %} -
-
- Ceph - {% trans "Our storage layer" %} -
-
- Django - {% trans "Our web frontend" %} -
-
- Opennebula - {% trans "Our cloud" %} -
-
- Cdist by ungleich - {% trans "Our configuration management system" %} -
-
- Python - {% trans "Our awesome juice" %} -
-
- Tayga - {% trans "Our NAT64 gateway" %} -
- +
+ Devuan + {% trans "Our services run on" %} +
+
+ Prometheus + {% trans "Our monitoring" %} +
+
+ Ceph + {% trans "Our storage layer" %} +
+
+ Django + {% trans "Our web frontend" %} +
+
+ Opennebula + {% trans "Our cloud" %} +
+
+ Cdist by ungleich + {% trans "Our configuration management system" %} +
+
+ Python + {% trans "Our awesome juice" %} +
+
+ Tayga + {% trans "Our NAT64 gateway" %} +
+
@@ -77,21 +74,21 @@
-
-
- Opennebula -
-
- Cdist byu ngleich -
-
- Prometheus -
+
+
+ Opennebula +
+
+ Cdist byu ngleich +
+
+ Prometheus +

{% trans "We believe in giving back to the FOSS community." %}

-

{% blocktrans %}Data Center Light is the child of free and open source software (FOSS).
We grew up with it, live by it, and believe in it.
The more we work on our data center,
the more we contribute back to the FOSS community.{% endblocktrans %}

+

{% blocktrans %}Data Center Light is the child of free and open source software (FOSS) movement.
We grew up with it, live by it, and believe in it.
The more we work on our data center,
the more we contribute back to the FOSS community.{% endblocktrans %}

@@ -102,33 +99,30 @@
-
-
-

{% trans "We bring the future to you." %}

-
-
-

{% blocktrans %} Data Center Light uses the most modern technologies out there.
- Your VM needs only IPv6. Data Center Light provides
transparent two-way IPv6/IPv4 translation. - {% endblocktrans %}

-
-
- 100% IPv6 -
-
-
-
-
- 100% SSD SSD -
-
-
-

{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}

-
-
+
+
+

{% trans "We bring the future to you." %}

+
+
+

{% blocktrans %} Data Center Light uses the most modern technologies out there.
+ Your VM needs only IPv6. Data Center Light provides
transparent two-way IPv6/IPv4 translation. + {% endblocktrans %}

+
+
+ 100% IPv6 +
+
+
+
+
+ 100% SSD SSD +
+
+
+

{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}

+
+
- - -
@@ -142,7 +136,7 @@

{% trans "Starting from only 15CHF per month. Try now." %}

-

{% trans "Actions speak louder than words. Let's do it, try our VM now." %}

+

{% trans "Actions speak louder than words. Let's do it, try our VM now." %}

@@ -150,94 +144,7 @@
-
- {% csrf_token %} -
-

{% trans "VM hosting" %}

-
-
- 15 - CHF/{% trans "month" %} -
-

{% trans "VAT included" %}

-
-
-
-
-

{% trans "Hosted in Switzerland" %}

-
-
-
- - - Core - -
-
-
-
-
- - - GB RAM - -
-
-
-
-
- - - {% trans "GB Storage (SSD)" %} - -
-
-
-
- - -
- - -
-
- - -
-
- {% for message in messages %} - {% if 'name' in message.tags %} -
  • - {{ message|safe }} -
- {% endif %} - {% endfor %} -
-
-
-
- - -
-
- {% for message in messages %} - {% if 'email' in message.tags %} -
  • - {{ message|safe }} -
- {% endif %} - {% endfor %} -
-
-
- -
+ {% include "datacenterlight/calculator_form.html" %}
@@ -249,6 +156,4 @@
- - - {% endblock %} +{% endblock %} diff --git a/datacenterlight/views.py b/datacenterlight/views.py index 11bd3637..3103434f 100644 --- a/datacenterlight/views.py +++ b/datacenterlight/views.py @@ -1,7 +1,7 @@ from django.views.generic import FormView, CreateView, TemplateView, DetailView from django.http import HttpResponseRedirect from .forms import BetaAccessForm -from .models import BetaAccess, BetaAccessVMType, BetaAccessVM +from .models import BetaAccess, BetaAccessVMType, BetaAccessVM, VMTemplate from django.contrib import messages from django.core.urlresolvers import reverse from django.core.mail import EmailMessage @@ -21,7 +21,7 @@ from datetime import datetime from membership.models import CustomUser, StripeCustomer from oca.pool import WrongIdError from opennebula_api.models import OpenNebulaManager -from opennebula_api.serializers import VirtualMachineTemplateSerializer, VirtualMachineSerializer +from opennebula_api.serializers import VirtualMachineTemplateSerializer, VirtualMachineSerializer, VMTemplateSerializer class LandingProgramView(TemplateView): @@ -195,42 +195,69 @@ class IndexView(CreateView): success_url = "/datacenterlight#requestform" success_message = "Thank you, we will contact you as soon as possible" + def validate_cores(self, value): + if (value > 48) or (value < 1): + raise ValidationError(_('Not a proper cores number')) + + def validate_memory(self, value): + if (value > 200) or (value < 2): + raise ValidationError(_('Not a proper ram number')) + + def validate_storage(self, value): + if (value > 2000) or (value < 10): + raise ValidationError(_('Not a proper storage number')) + @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']: if session_var in request.session: del request.session[session_var] - try: - manager = OpenNebulaManager() - templates = manager.get_templates() - context = { - 'templates': VirtualMachineTemplateSerializer(templates, many=True).data - } - except: - messages.error(request, - 'We have a temporary problem to connect to our backend. \ - Please try again in a few minutes' - ) - context = { - 'error': 'connection' - } + + vm_templates = VMTemplate.objects.all() + context = { + 'templates': vm_templates + } return render(request, self.template_name, context) def post(self, request): cores = request.POST.get('cpu') + cores_field = forms.IntegerField(validators=[self.validate_cores]) memory = request.POST.get('ram') + memory_field = forms.IntegerField(validators=[self.validate_memory]) storage = request.POST.get('storage') + storage_field = forms.IntegerField(validators=[self.validate_storage]) price = request.POST.get('total') template_id = int(request.POST.get('config')) - manager = OpenNebulaManager() - template = manager.get_template(template_id) - template_data = VirtualMachineTemplateSerializer(template).data + template = VMTemplate.objects.filter(opennebula_vm_template_id=template_id).first() + template_data = VMTemplateSerializer(template).data name = request.POST.get('name') email = request.POST.get('email') name_field = forms.CharField() email_field = forms.EmailField() + + 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") + + 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") + + 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") + try: name = name_field.clean(name) except ValidationError as err: @@ -315,25 +342,6 @@ class WhyDataCenterLightView(IndexView): template_name = "datacenterlight/whydatacenterlight.html" model = BetaAccess - @cache_control(no_cache=True, must_revalidate=True, no_store=True) - def get(self, request, *args, **kwargs): - try: - manager = OpenNebulaManager() - templates = manager.get_templates() - context = { - 'templates': VirtualMachineTemplateSerializer(templates, many=True).data, - } - except: - messages.error( - request, - 'We have a temporary problem to connect to our backend. \ - Please try again in a few minutes' - ) - context = { - 'error': 'connection' - } - return render(request, self.template_name, context) - class PaymentOrderView(FormView): template_name = 'hosting/payment.html' @@ -345,6 +353,7 @@ class PaymentOrderView(FormView): if billing_address_data: form_kwargs.update({ 'initial': { + 'cardholder_name': billing_address_data['cardholder_name'], 'street_address': billing_address_data['street_address'], 'city': billing_address_data['city'], 'postal_code': billing_address_data['postal_code'], @@ -465,9 +474,9 @@ class OrderConfirmationView(DetailView): template_id=vm_template_id, specs=specs, vm_name="{email}-{template_name}-{date}".format( - email=user.get('email'), - template_name=template.get('name'), - date=int(datetime.now().strftime("%s"))) + email=user.get('email'), + template_name=template.get('name'), + date=int(datetime.now().strftime("%s"))) ) # Create a Hosting Order diff --git a/digitalglarus/locale/de/LC_MESSAGES/django.po b/digitalglarus/locale/de/LC_MESSAGES/django.po index ffbfcc91..f4193749 100644 --- a/digitalglarus/locale/de/LC_MESSAGES/django.po +++ b/digitalglarus/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-05-30 13:47+0000\n" +"POT-Creation-Date: 2017-07-16 17:50+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: cms_templates/djangocms_blog/_header_post_detail.html:20 +#: cms_templates/djangocms_blog/_header_post_detail.html:21 #: digitalglarus/templates/digitalglarus/post_detail.html:19 #: ungleich/templates/ungleich/djangocms_blog/includes/blog_item.html:19 msgid "Posted on" @@ -80,27 +80,27 @@ msgstr "von" msgid "Digital Glarus Gallery" msgstr "" -#: digitalglarus/cms_plugins.py:21 +#: digitalglarus/cms_plugins.py:22 msgid "Digital Glarus Supporters" msgstr "" -#: digitalglarus/forms.py:35 digitalglarus/forms.py:70 nosystemd/forms.py:47 -#: utils/forms.py:109 +#: digitalglarus/forms.py:34 digitalglarus/forms.py:69 nosystemd/forms.py:47 +#: utils/forms.py:107 msgid "Street Address" msgstr "Adresse" -#: digitalglarus/forms.py:36 digitalglarus/forms.py:71 nosystemd/forms.py:48 -#: utils/forms.py:110 utils/forms.py:124 +#: digitalglarus/forms.py:35 digitalglarus/forms.py:70 nosystemd/forms.py:48 +#: utils/forms.py:108 utils/forms.py:123 msgid "City" msgstr "Stadt" -#: digitalglarus/forms.py:37 digitalglarus/forms.py:72 nosystemd/forms.py:49 -#: utils/forms.py:111 utils/forms.py:125 +#: digitalglarus/forms.py:36 digitalglarus/forms.py:71 nosystemd/forms.py:49 +#: utils/forms.py:109 utils/forms.py:124 msgid "Postal Code" msgstr "Postleitzahl" -#: digitalglarus/forms.py:38 digitalglarus/forms.py:73 nosystemd/forms.py:50 -#: utils/forms.py:112 utils/forms.py:126 +#: digitalglarus/forms.py:37 digitalglarus/forms.py:72 nosystemd/forms.py:50 +#: utils/forms.py:110 utils/forms.py:125 msgid "Country" msgstr "Land" @@ -116,7 +116,7 @@ msgid "previous" msgstr "vorherige" #: digitalglarus/templates/glarus_blog/post_list.html:26 -#: dynamicweb/settings/base.py:182 templates/cms/__init__.py:10 +#: dynamicweb/settings/base.py:192 templates/cms/__init__.py:10 #: templates/cms/ungleichch/__init__.py:5 msgid "Page" msgstr "Seite" @@ -135,22 +135,22 @@ msgstr "nächste" msgid "Change to language:" msgstr "Sprache wechseln zu: " -#: digitalglarus/templates/new_base_glarus.html:168 -#: digitalglarus/templates/new_base_glarus.html:191 +#: digitalglarus/templates/new_base_glarus.html:161 +#: digitalglarus/templates/new_base_glarus.html:184 #: digitalglarus/templates/new_base_glarus_c.html:176 #: digitalglarus/templates/new_base_glarus_c.html:199 msgid "Bookings" msgstr "" -#: digitalglarus/templates/new_base_glarus.html:172 -#: digitalglarus/templates/new_base_glarus.html:195 +#: digitalglarus/templates/new_base_glarus.html:165 +#: digitalglarus/templates/new_base_glarus.html:188 #: digitalglarus/templates/new_base_glarus_c.html:180 #: digitalglarus/templates/new_base_glarus_c.html:203 msgid "Membership" msgstr "" -#: digitalglarus/templates/new_base_glarus.html:178 -#: digitalglarus/templates/new_base_glarus.html:201 +#: digitalglarus/templates/new_base_glarus.html:171 +#: digitalglarus/templates/new_base_glarus.html:194 #: digitalglarus/templates/new_base_glarus_c.html:186 #: digitalglarus/templates/new_base_glarus_c.html:209 #: nosystemd/templates/nosystemd/base.html:76 @@ -247,106 +247,71 @@ msgstr "befurworter/?$" msgid "Message Successfully Sent" msgstr "" -#: dynamicweb/settings-test/__init__.py:178 +#: dynamicweb/settings-test/__init__.py:181 msgid "US English" msgstr "" -#: dynamicweb/settings-test/__init__.py:179 +#: dynamicweb/settings-test/__init__.py:182 msgid "German" msgstr "" -#: dynamicweb/settings-test/__init__.py:232 -#: dynamicweb/settings-test/__init__.py:241 -#: dynamicweb/settings/__init__old.py:232 -#: dynamicweb/settings/__init__old.py:241 dynamicweb/settings/base.py:270 -#: dynamicweb/settings/base.py:279 +#: dynamicweb/settings-test/__init__.py:235 +#: dynamicweb/settings-test/__init__.py:244 dynamicweb/settings/base.py:280 +#: dynamicweb/settings/base.py:289 msgid "Content" msgstr "" -#: dynamicweb/settings/__init__old.py:178 dynamicweb/settings/base.py:211 -msgid "English" -msgstr "" - -#: dynamicweb/settings/__init__old.py:179 dynamicweb/settings/base.py:212 -msgid "Deutsch" -msgstr "" - -#: dynamicweb/settings/base.py:171 +#: dynamicweb/settings/base.py:181 msgid "default" msgstr "" -#: dynamicweb/settings/base.py:172 +#: dynamicweb/settings/base.py:182 msgid "2 Column" msgstr "" -#: dynamicweb/settings/base.py:173 +#: dynamicweb/settings/base.py:183 msgid "3 Column" msgstr "" -#: dynamicweb/settings/base.py:174 templates/cms/__init__.py:4 +#: dynamicweb/settings/base.py:184 templates/cms/__init__.py:4 #: templates/cms/digitalglarus/__init__.py:4 msgid "DG.About" msgstr "" -#: dynamicweb/settings/base.py:175 templates/cms/__init__.py:5 +#: dynamicweb/settings/base.py:185 templates/cms/__init__.py:5 #: templates/cms/digitalglarus/__init__.py:5 #, fuzzy #| msgid "contact/?$" msgid "DG.Contact" msgstr "kontakt/?$" -#: dynamicweb/settings/base.py:176 templates/cms/__init__.py:6 +#: dynamicweb/settings/base.py:186 templates/cms/__init__.py:6 #: templates/cms/digitalglarus/__init__.py:6 msgid "DG.Home" msgstr "" -#: dynamicweb/settings/base.py:177 templates/cms/__init__.py:7 +#: dynamicweb/settings/base.py:187 templates/cms/__init__.py:7 #: templates/cms/digitalglarus/__init__.py:7 msgid "DG.CoWork" msgstr "" -#: dynamicweb/settings/base.py:179 +#: dynamicweb/settings/base.py:189 msgid "DG.OneColumn" msgstr "" -#: dynamicweb/settings/base.py:181 templates/cms/__init__.py:9 +#: dynamicweb/settings/base.py:191 templates/cms/__init__.py:9 #: templates/cms/ungleichch/__init__.py:4 msgid "Blog" msgstr "" -#: membership/forms.py:43 utils/forms.py:142 -msgid "Name" -msgstr "Name" - -#: membership/forms.py:43 -#, fuzzy -msgid "Card number" -msgstr "Kartennummer" - -#: membership/forms.py:43 -msgid "Expiry date" -msgstr "Ablaufdatum" - -#: membership/forms.py:44 -msgid "CCV" +#: dynamicweb/settings/base.py:221 +msgid "English" msgstr "" -#: membership/models.py:67 -msgid "staff status" +#: dynamicweb/settings/base.py:222 +msgid "Deutsch" msgstr "" -#: membership/models.py:69 -msgid "Designates whether the user can log into this admin site." -msgstr "" - -#: membership/models.py:181 -msgid "Use this pattern(MM/YYYY)." -msgstr "" - -#: membership/models.py:182 -msgid "Wrong CCV number." -msgstr "Falsche CCV Nummer" - #: nosystemd/forms.py:46 msgid "Amount" msgstr "Betrag" @@ -502,979 +467,987 @@ msgstr "" msgid "DG.Detail" msgstr "" -#: ungleich/cms_toolbar.py:24 +#: ungleich/cms_toolbar.py:23 msgid "Page Header" msgstr "" -#: ungleich/views.py:78 +#: ungleich/views.py:79 #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "" -#: utils/fields.py:7 +#: utils/fields.py:6 msgid "Andorra" msgstr "" -#: utils/fields.py:8 +#: utils/fields.py:7 msgid "United Arab Emirates" msgstr "" -#: utils/fields.py:9 +#: utils/fields.py:8 msgid "Afghanistan" msgstr "" -#: utils/fields.py:10 +#: utils/fields.py:9 msgid "Antigua & Barbuda" msgstr "" -#: utils/fields.py:11 +#: utils/fields.py:10 msgid "Anguilla" msgstr "" -#: utils/fields.py:12 +#: utils/fields.py:11 msgid "Albania" msgstr "" -#: utils/fields.py:13 +#: utils/fields.py:12 msgid "Armenia" msgstr "" -#: utils/fields.py:14 +#: utils/fields.py:13 msgid "Netherlands Antilles" msgstr "" -#: utils/fields.py:15 +#: utils/fields.py:14 msgid "Angola" msgstr "" -#: utils/fields.py:16 +#: utils/fields.py:15 msgid "Antarctica" msgstr "" -#: utils/fields.py:17 +#: utils/fields.py:16 msgid "Argentina" msgstr "" -#: utils/fields.py:18 +#: utils/fields.py:17 msgid "American Samoa" msgstr "" -#: utils/fields.py:19 +#: utils/fields.py:18 msgid "Austria" msgstr "" -#: utils/fields.py:20 +#: utils/fields.py:19 msgid "Australia" msgstr "" -#: utils/fields.py:21 +#: utils/fields.py:20 msgid "Aruba" msgstr "" -#: utils/fields.py:22 +#: utils/fields.py:21 msgid "Azerbaijan" msgstr "" -#: utils/fields.py:23 +#: utils/fields.py:22 msgid "Bosnia and Herzegovina" msgstr "" -#: utils/fields.py:24 +#: utils/fields.py:23 msgid "Barbados" msgstr "" -#: utils/fields.py:25 +#: utils/fields.py:24 msgid "Bangladesh" msgstr "" -#: utils/fields.py:26 +#: utils/fields.py:25 msgid "Belgium" msgstr "" -#: utils/fields.py:27 +#: utils/fields.py:26 msgid "Burkina Faso" msgstr "" -#: utils/fields.py:28 +#: utils/fields.py:27 msgid "Bulgaria" msgstr "" -#: utils/fields.py:29 +#: utils/fields.py:28 msgid "Bahrain" msgstr "" -#: utils/fields.py:30 +#: utils/fields.py:29 msgid "Burundi" msgstr "" -#: utils/fields.py:31 +#: utils/fields.py:30 msgid "Benin" msgstr "" -#: utils/fields.py:32 +#: utils/fields.py:31 msgid "Bermuda" msgstr "" -#: utils/fields.py:33 +#: utils/fields.py:32 msgid "Brunei Darussalam" msgstr "" -#: utils/fields.py:34 +#: utils/fields.py:33 msgid "Bolivia" msgstr "" -#: utils/fields.py:35 +#: utils/fields.py:34 msgid "Brazil" msgstr "" -#: utils/fields.py:36 +#: utils/fields.py:35 msgid "Bahama" msgstr "" -#: utils/fields.py:37 +#: utils/fields.py:36 msgid "Bhutan" msgstr "" -#: utils/fields.py:38 +#: utils/fields.py:37 msgid "Bouvet Island" msgstr "" -#: utils/fields.py:39 +#: utils/fields.py:38 msgid "Botswana" msgstr "" -#: utils/fields.py:40 +#: utils/fields.py:39 msgid "Belarus" msgstr "" -#: utils/fields.py:41 +#: utils/fields.py:40 msgid "Belize" msgstr "" -#: utils/fields.py:42 +#: utils/fields.py:41 msgid "Canada" msgstr "" -#: utils/fields.py:43 +#: utils/fields.py:42 msgid "Cocos (Keeling) Islands" msgstr "" -#: utils/fields.py:44 +#: utils/fields.py:43 msgid "Central African Republic" msgstr "" -#: utils/fields.py:45 +#: utils/fields.py:44 msgid "Congo" msgstr "" -#: utils/fields.py:46 +#: utils/fields.py:45 msgid "Switzerland" msgstr "" -#: utils/fields.py:47 +#: utils/fields.py:46 msgid "Ivory Coast" msgstr "" -#: utils/fields.py:48 +#: utils/fields.py:47 msgid "Cook Iislands" msgstr "" -#: utils/fields.py:49 +#: utils/fields.py:48 msgid "Chile" msgstr "" -#: utils/fields.py:50 +#: utils/fields.py:49 msgid "Cameroon" msgstr "" -#: utils/fields.py:51 +#: utils/fields.py:50 msgid "China" msgstr "" -#: utils/fields.py:52 +#: utils/fields.py:51 msgid "Colombia" msgstr "" -#: utils/fields.py:53 +#: utils/fields.py:52 msgid "Costa Rica" msgstr "" -#: utils/fields.py:54 +#: utils/fields.py:53 msgid "Cuba" msgstr "" -#: utils/fields.py:55 +#: utils/fields.py:54 msgid "Cape Verde" msgstr "" -#: utils/fields.py:56 +#: utils/fields.py:55 msgid "Christmas Island" msgstr "" -#: utils/fields.py:57 +#: utils/fields.py:56 msgid "Cyprus" msgstr "" -#: utils/fields.py:58 +#: utils/fields.py:57 msgid "Czech Republic" msgstr "" -#: utils/fields.py:59 +#: utils/fields.py:58 msgid "Germany" msgstr "" -#: utils/fields.py:60 +#: utils/fields.py:59 msgid "Djibouti" msgstr "" -#: utils/fields.py:61 +#: utils/fields.py:60 msgid "Denmark" msgstr "" -#: utils/fields.py:62 +#: utils/fields.py:61 msgid "Dominica" msgstr "" -#: utils/fields.py:63 +#: utils/fields.py:62 msgid "Dominican Republic" msgstr "" -#: utils/fields.py:64 +#: utils/fields.py:63 msgid "Algeria" msgstr "" -#: utils/fields.py:65 +#: utils/fields.py:64 msgid "Ecuador" msgstr "" -#: utils/fields.py:66 +#: utils/fields.py:65 msgid "Estonia" msgstr "" -#: utils/fields.py:67 +#: utils/fields.py:66 msgid "Egypt" msgstr "" -#: utils/fields.py:68 +#: utils/fields.py:67 msgid "Western Sahara" msgstr "" -#: utils/fields.py:69 +#: utils/fields.py:68 msgid "Eritrea" msgstr "" -#: utils/fields.py:70 +#: utils/fields.py:69 msgid "Spain" msgstr "" -#: utils/fields.py:71 +#: utils/fields.py:70 msgid "Ethiopia" msgstr "" -#: utils/fields.py:72 +#: utils/fields.py:71 msgid "Finland" msgstr "" -#: utils/fields.py:73 +#: utils/fields.py:72 msgid "Fiji" msgstr "" -#: utils/fields.py:74 +#: utils/fields.py:73 msgid "Falkland Islands (Malvinas)" msgstr "" -#: utils/fields.py:75 +#: utils/fields.py:74 msgid "Micronesia" msgstr "" -#: utils/fields.py:76 +#: utils/fields.py:75 msgid "Faroe Islands" msgstr "" -#: utils/fields.py:77 +#: utils/fields.py:76 msgid "France" msgstr "" -#: utils/fields.py:78 +#: utils/fields.py:77 msgid "France, Metropolitan" msgstr "" -#: utils/fields.py:79 +#: utils/fields.py:78 msgid "Gabon" msgstr "" -#: utils/fields.py:80 +#: utils/fields.py:79 msgid "United Kingdom (Great Britain)" msgstr "" -#: utils/fields.py:81 +#: utils/fields.py:80 msgid "Grenada" msgstr "" -#: utils/fields.py:82 +#: utils/fields.py:81 msgid "Georgia" msgstr "" -#: utils/fields.py:83 +#: utils/fields.py:82 msgid "French Guiana" msgstr "" -#: utils/fields.py:84 +#: utils/fields.py:83 msgid "Ghana" msgstr "" -#: utils/fields.py:85 +#: utils/fields.py:84 msgid "Gibraltar" msgstr "" -#: utils/fields.py:86 +#: utils/fields.py:85 msgid "Greenland" msgstr "" -#: utils/fields.py:87 +#: utils/fields.py:86 msgid "Gambia" msgstr "" -#: utils/fields.py:88 +#: utils/fields.py:87 msgid "Guinea" msgstr "" -#: utils/fields.py:89 +#: utils/fields.py:88 msgid "Guadeloupe" msgstr "" -#: utils/fields.py:90 +#: utils/fields.py:89 msgid "Equatorial Guinea" msgstr "" -#: utils/fields.py:91 +#: utils/fields.py:90 msgid "Greece" msgstr "" -#: utils/fields.py:92 +#: utils/fields.py:91 msgid "South Georgia and the South Sandwich Islands" msgstr "" -#: utils/fields.py:93 +#: utils/fields.py:92 msgid "Guatemala" msgstr "" -#: utils/fields.py:94 +#: utils/fields.py:93 msgid "Guam" msgstr "" -#: utils/fields.py:95 +#: utils/fields.py:94 msgid "Guinea-Bissau" msgstr "" -#: utils/fields.py:96 +#: utils/fields.py:95 msgid "Guyana" msgstr "" -#: utils/fields.py:97 +#: utils/fields.py:96 msgid "Hong Kong" msgstr "" -#: utils/fields.py:98 +#: utils/fields.py:97 msgid "Heard & McDonald Islands" msgstr "" -#: utils/fields.py:99 +#: utils/fields.py:98 msgid "Honduras" msgstr "" -#: utils/fields.py:100 +#: utils/fields.py:99 msgid "Croatia" msgstr "" -#: utils/fields.py:101 +#: utils/fields.py:100 msgid "Haiti" msgstr "" -#: utils/fields.py:102 +#: utils/fields.py:101 msgid "Hungary" msgstr "" -#: utils/fields.py:103 +#: utils/fields.py:102 msgid "Indonesia" msgstr "" -#: utils/fields.py:104 +#: utils/fields.py:103 msgid "Ireland" msgstr "" -#: utils/fields.py:105 +#: utils/fields.py:104 msgid "Israel" msgstr "" -#: utils/fields.py:106 +#: utils/fields.py:105 msgid "India" msgstr "" -#: utils/fields.py:107 +#: utils/fields.py:106 msgid "British Indian Ocean Territory" msgstr "" -#: utils/fields.py:108 +#: utils/fields.py:107 msgid "Iraq" msgstr "" -#: utils/fields.py:109 +#: utils/fields.py:108 msgid "Islamic Republic of Iran" msgstr "" -#: utils/fields.py:110 +#: utils/fields.py:109 msgid "Iceland" msgstr "" -#: utils/fields.py:111 +#: utils/fields.py:110 msgid "Italy" msgstr "" -#: utils/fields.py:112 +#: utils/fields.py:111 msgid "Jamaica" msgstr "" -#: utils/fields.py:113 +#: utils/fields.py:112 msgid "Jordan" msgstr "" -#: utils/fields.py:114 +#: utils/fields.py:113 msgid "Japan" msgstr "" -#: utils/fields.py:115 +#: utils/fields.py:114 msgid "Kenya" msgstr "" -#: utils/fields.py:116 +#: utils/fields.py:115 msgid "Kyrgyzstan" msgstr "" -#: utils/fields.py:117 +#: utils/fields.py:116 msgid "Cambodia" msgstr "" -#: utils/fields.py:118 +#: utils/fields.py:117 msgid "Kiribati" msgstr "" -#: utils/fields.py:119 +#: utils/fields.py:118 msgid "Comoros" msgstr "" -#: utils/fields.py:120 +#: utils/fields.py:119 msgid "St. Kitts and Nevis" msgstr "" -#: utils/fields.py:121 +#: utils/fields.py:120 msgid "Korea, Democratic People's Republic of" msgstr "" -#: utils/fields.py:122 +#: utils/fields.py:121 msgid "Korea, Republic of" msgstr "" -#: utils/fields.py:123 +#: utils/fields.py:122 msgid "Kuwait" msgstr "" -#: utils/fields.py:124 +#: utils/fields.py:123 msgid "Cayman Islands" msgstr "" -#: utils/fields.py:125 +#: utils/fields.py:124 msgid "Kazakhstan" msgstr "" -#: utils/fields.py:126 +#: utils/fields.py:125 msgid "Lao People's Democratic Republic" msgstr "" -#: utils/fields.py:127 +#: utils/fields.py:126 msgid "Lebanon" msgstr "" -#: utils/fields.py:128 +#: utils/fields.py:127 msgid "Saint Lucia" msgstr "" -#: utils/fields.py:129 +#: utils/fields.py:128 msgid "Liechtenstein" msgstr "" -#: utils/fields.py:130 +#: utils/fields.py:129 msgid "Sri Lanka" msgstr "" -#: utils/fields.py:131 +#: utils/fields.py:130 msgid "Liberia" msgstr "" -#: utils/fields.py:132 +#: utils/fields.py:131 msgid "Lesotho" msgstr "" -#: utils/fields.py:133 +#: utils/fields.py:132 msgid "Lithuania" msgstr "" -#: utils/fields.py:134 +#: utils/fields.py:133 msgid "Luxembourg" msgstr "" -#: utils/fields.py:135 +#: utils/fields.py:134 msgid "Latvia" msgstr "" -#: utils/fields.py:136 +#: utils/fields.py:135 msgid "Libyan Arab Jamahiriya" msgstr "" -#: utils/fields.py:137 +#: utils/fields.py:136 msgid "Morocco" msgstr "" -#: utils/fields.py:138 +#: utils/fields.py:137 msgid "Monaco" msgstr "" -#: utils/fields.py:139 +#: utils/fields.py:138 msgid "Moldova, Republic of" msgstr "" -#: utils/fields.py:140 +#: utils/fields.py:139 msgid "Madagascar" msgstr "" -#: utils/fields.py:141 +#: utils/fields.py:140 msgid "Marshall Islands" msgstr "" -#: utils/fields.py:142 +#: utils/fields.py:141 msgid "Mali" msgstr "" -#: utils/fields.py:143 +#: utils/fields.py:142 msgid "Mongolia" msgstr "" -#: utils/fields.py:144 +#: utils/fields.py:143 msgid "Myanmar" msgstr "" -#: utils/fields.py:145 +#: utils/fields.py:144 msgid "Macau" msgstr "" -#: utils/fields.py:146 +#: utils/fields.py:145 msgid "Northern Mariana Islands" msgstr "" -#: utils/fields.py:147 +#: utils/fields.py:146 msgid "Martinique" msgstr "" -#: utils/fields.py:148 +#: utils/fields.py:147 msgid "Mauritania" msgstr "" -#: utils/fields.py:149 +#: utils/fields.py:148 msgid "Monserrat" msgstr "" -#: utils/fields.py:150 +#: utils/fields.py:149 msgid "Malta" msgstr "" -#: utils/fields.py:151 +#: utils/fields.py:150 msgid "Mauritius" msgstr "" -#: utils/fields.py:152 +#: utils/fields.py:151 msgid "Maldives" msgstr "" -#: utils/fields.py:153 +#: utils/fields.py:152 msgid "Malawi" msgstr "" -#: utils/fields.py:154 +#: utils/fields.py:153 msgid "Mexico" msgstr "" -#: utils/fields.py:155 +#: utils/fields.py:154 msgid "Malaysia" msgstr "" -#: utils/fields.py:156 +#: utils/fields.py:155 msgid "Mozambique" msgstr "" -#: utils/fields.py:157 +#: utils/fields.py:156 msgid "Namibia" msgstr "" -#: utils/fields.py:158 +#: utils/fields.py:157 msgid "New Caledonia" msgstr "" -#: utils/fields.py:159 +#: utils/fields.py:158 msgid "Niger" msgstr "" -#: utils/fields.py:160 +#: utils/fields.py:159 msgid "Norfolk Island" msgstr "" -#: utils/fields.py:161 +#: utils/fields.py:160 msgid "Nigeria" msgstr "" -#: utils/fields.py:162 +#: utils/fields.py:161 msgid "Nicaragua" msgstr "" -#: utils/fields.py:163 +#: utils/fields.py:162 msgid "Netherlands" msgstr "" -#: utils/fields.py:164 +#: utils/fields.py:163 msgid "Norway" msgstr "" -#: utils/fields.py:165 +#: utils/fields.py:164 msgid "Nepal" msgstr "" -#: utils/fields.py:166 +#: utils/fields.py:165 msgid "Nauru" msgstr "" -#: utils/fields.py:167 +#: utils/fields.py:166 msgid "Niue" msgstr "" -#: utils/fields.py:168 +#: utils/fields.py:167 msgid "New Zealand" msgstr "" -#: utils/fields.py:169 +#: utils/fields.py:168 msgid "Oman" msgstr "" -#: utils/fields.py:170 +#: utils/fields.py:169 msgid "Panama" msgstr "" -#: utils/fields.py:171 +#: utils/fields.py:170 msgid "Peru" msgstr "" -#: utils/fields.py:172 +#: utils/fields.py:171 msgid "French Polynesia" msgstr "" -#: utils/fields.py:173 +#: utils/fields.py:172 msgid "Papua New Guinea" msgstr "" -#: utils/fields.py:174 +#: utils/fields.py:173 msgid "Philippines" msgstr "" -#: utils/fields.py:175 +#: utils/fields.py:174 msgid "Pakistan" msgstr "" -#: utils/fields.py:176 +#: utils/fields.py:175 msgid "Poland" msgstr "" -#: utils/fields.py:177 +#: utils/fields.py:176 msgid "St. Pierre & Miquelon" msgstr "" -#: utils/fields.py:178 +#: utils/fields.py:177 msgid "Pitcairn" msgstr "" -#: utils/fields.py:179 +#: utils/fields.py:178 msgid "Puerto Rico" msgstr "" -#: utils/fields.py:180 +#: utils/fields.py:179 msgid "Portugal" msgstr "" -#: utils/fields.py:181 +#: utils/fields.py:180 msgid "Palau" msgstr "" -#: utils/fields.py:182 +#: utils/fields.py:181 msgid "Paraguay" msgstr "" -#: utils/fields.py:183 +#: utils/fields.py:182 msgid "Qatar" msgstr "" -#: utils/fields.py:184 +#: utils/fields.py:183 msgid "Reunion" msgstr "" -#: utils/fields.py:185 +#: utils/fields.py:184 msgid "Romania" msgstr "" -#: utils/fields.py:186 +#: utils/fields.py:185 msgid "Russian Federation" msgstr "" -#: utils/fields.py:187 +#: utils/fields.py:186 msgid "Rwanda" msgstr "" -#: utils/fields.py:188 +#: utils/fields.py:187 msgid "Saudi Arabia" msgstr "" -#: utils/fields.py:189 +#: utils/fields.py:188 msgid "Solomon Islands" msgstr "" -#: utils/fields.py:190 +#: utils/fields.py:189 msgid "Seychelles" msgstr "" -#: utils/fields.py:191 +#: utils/fields.py:190 msgid "Sudan" msgstr "" -#: utils/fields.py:192 +#: utils/fields.py:191 msgid "Sweden" msgstr "" -#: utils/fields.py:193 +#: utils/fields.py:192 msgid "Singapore" msgstr "" -#: utils/fields.py:194 +#: utils/fields.py:193 msgid "St. Helena" msgstr "" -#: utils/fields.py:195 +#: utils/fields.py:194 msgid "Slovenia" msgstr "" -#: utils/fields.py:196 +#: utils/fields.py:195 msgid "Svalbard & Jan Mayen Islands" msgstr "" -#: utils/fields.py:197 +#: utils/fields.py:196 msgid "Slovakia" msgstr "" -#: utils/fields.py:198 +#: utils/fields.py:197 msgid "Sierra Leone" msgstr "" -#: utils/fields.py:199 +#: utils/fields.py:198 msgid "San Marino" msgstr "" -#: utils/fields.py:200 +#: utils/fields.py:199 msgid "Senegal" msgstr "" -#: utils/fields.py:201 +#: utils/fields.py:200 msgid "Somalia" msgstr "" -#: utils/fields.py:202 +#: utils/fields.py:201 msgid "Suriname" msgstr "" -#: utils/fields.py:203 +#: utils/fields.py:202 msgid "Sao Tome & Principe" msgstr "" -#: utils/fields.py:204 +#: utils/fields.py:203 msgid "El Salvador" msgstr "" -#: utils/fields.py:205 +#: utils/fields.py:204 msgid "Syrian Arab Republic" msgstr "" -#: utils/fields.py:206 +#: utils/fields.py:205 msgid "Swaziland" msgstr "" -#: utils/fields.py:207 +#: utils/fields.py:206 msgid "Turks & Caicos Islands" msgstr "" -#: utils/fields.py:208 +#: utils/fields.py:207 msgid "Chad" msgstr "" -#: utils/fields.py:209 +#: utils/fields.py:208 msgid "French Southern Territories" msgstr "" -#: utils/fields.py:210 +#: utils/fields.py:209 msgid "Togo" msgstr "" -#: utils/fields.py:211 +#: utils/fields.py:210 msgid "Thailand" msgstr "" -#: utils/fields.py:212 +#: utils/fields.py:211 msgid "Tajikistan" msgstr "" -#: utils/fields.py:213 +#: utils/fields.py:212 msgid "Tokelau" msgstr "" -#: utils/fields.py:214 +#: utils/fields.py:213 msgid "Turkmenistan" msgstr "" -#: utils/fields.py:215 +#: utils/fields.py:214 msgid "Tunisia" msgstr "" -#: utils/fields.py:216 +#: utils/fields.py:215 msgid "Tonga" msgstr "" -#: utils/fields.py:217 +#: utils/fields.py:216 msgid "East Timor" msgstr "" -#: utils/fields.py:218 +#: utils/fields.py:217 msgid "Turkey" msgstr "" -#: utils/fields.py:219 +#: utils/fields.py:218 msgid "Trinidad & Tobago" msgstr "" -#: utils/fields.py:220 +#: utils/fields.py:219 msgid "Tuvalu" msgstr "" -#: utils/fields.py:221 +#: utils/fields.py:220 msgid "Taiwan, Province of China" msgstr "" -#: utils/fields.py:222 +#: utils/fields.py:221 msgid "Tanzania, United Republic of" msgstr "" -#: utils/fields.py:223 +#: utils/fields.py:222 msgid "Ukraine" msgstr "" -#: utils/fields.py:224 +#: utils/fields.py:223 msgid "Uganda" msgstr "" -#: utils/fields.py:225 +#: utils/fields.py:224 msgid "United States Minor Outlying Islands" msgstr "" -#: utils/fields.py:226 +#: utils/fields.py:225 msgid "United States of America" msgstr "" -#: utils/fields.py:227 +#: utils/fields.py:226 msgid "Uruguay" msgstr "" -#: utils/fields.py:228 +#: utils/fields.py:227 msgid "Uzbekistan" msgstr "" -#: utils/fields.py:229 +#: utils/fields.py:228 msgid "Vatican City State (Holy See)" msgstr "" -#: utils/fields.py:230 +#: utils/fields.py:229 msgid "St. Vincent & the Grenadines" msgstr "" -#: utils/fields.py:231 +#: utils/fields.py:230 msgid "Venezuela" msgstr "" -#: utils/fields.py:232 +#: utils/fields.py:231 msgid "British Virgin Islands" msgstr "" -#: utils/fields.py:233 +#: utils/fields.py:232 msgid "United States Virgin Islands" msgstr "" -#: utils/fields.py:234 +#: utils/fields.py:233 msgid "Viet Nam" msgstr "" -#: utils/fields.py:235 +#: utils/fields.py:234 msgid "Vanuatu" msgstr "" -#: utils/fields.py:236 +#: utils/fields.py:235 msgid "Wallis & Futuna Islands" msgstr "" -#: utils/fields.py:237 +#: utils/fields.py:236 msgid "Samoa" msgstr "" -#: utils/fields.py:238 +#: utils/fields.py:237 msgid "Yemen" msgstr "" -#: utils/fields.py:239 +#: utils/fields.py:238 msgid "Mayotte" msgstr "" -#: utils/fields.py:240 +#: utils/fields.py:239 msgid "Yugoslavia" msgstr "" -#: utils/fields.py:241 +#: utils/fields.py:240 msgid "South Africa" msgstr "" -#: utils/fields.py:242 +#: utils/fields.py:241 msgid "Zambia" msgstr "" -#: utils/fields.py:243 +#: utils/fields.py:242 msgid "Zaire" msgstr "" -#: utils/fields.py:244 +#: utils/fields.py:243 msgid "Zimbabwe" msgstr "" -#: utils/fields.py:245 +#: utils/fields.py:244 msgid "Unknown or unspecified country" msgstr "" -#: utils/forms.py:20 +#: utils/forms.py:21 msgid "Enter your name or company name" msgstr "Geben Sie Ihren Namen oder der Ihrer Firma ein" -#: utils/forms.py:123 +#: utils/forms.py:106 +msgid "Cardholder Name" +msgstr "Name des Kartenbesitzer" + +#: utils/forms.py:122 msgid "Street Building" msgstr "" +#: utils/forms.py:142 +msgid "Name" +msgstr "Name" + #: utils/forms.py:143 msgid "Email" msgstr "Email" @@ -1487,6 +1460,16 @@ msgstr "Telefon" msgid "Message" msgstr "Nachricht" +#, fuzzy +#~ msgid "Card number" +#~ msgstr "Kartennummer" + +#~ msgid "Expiry date" +#~ msgstr "Ablaufdatum" + +#~ msgid "Wrong CCV number." +#~ msgstr "Falsche CCV Nummer" + #~ msgid "home/?$" #~ msgstr "haus/?$" diff --git a/digitalglarus/static/digitalglarus/img/impacthub_logo.jpg b/digitalglarus/static/digitalglarus/img/impacthub_logo.jpg new file mode 100644 index 00000000..075fe83e Binary files /dev/null and b/digitalglarus/static/digitalglarus/img/impacthub_logo.jpg differ diff --git a/digitalglarus/templates/digitalglarus/index.html b/digitalglarus/templates/digitalglarus/index.html index 0a371bb1..b57e54b5 100644 --- a/digitalglarus/templates/digitalglarus/index.html +++ b/digitalglarus/templates/digitalglarus/index.html @@ -121,7 +121,48 @@ p a{ color: #ecf0f1; } - + .section-top-content { + font-size: 30px; + font-weight: 600; + padding-top: 50px; + } + .section-top-content span{ + font-weight: 300; + } + .section-top-txt { + padding-top: 80px; + text-transform: uppercase; + text-align: right; + } + .section-top-img { + padding:0px; + } +@media(max-width:500px) { + .section-top-txt { + padding: 55px 5px 0 0px; + } + .section-top-content { + font-size: 28px; + } +} +@media(max-width:360px) { + .section-top-txt { + padding: 32px 5px 0 0px; + } + .section-top-content { + font-size: 18px; + } +} +@media screen and (min-device-width: 768px) and (max-device-width: 991px) { + .section-top-txt { + padding-top: 43px; + } +} +@media screen and (min-device-width: 992px) and (max-device-width: 1200px) { + .section-top-txt { + padding-top: 65px; + } +} @@ -132,7 +173,15 @@
-
+
+
+
+
Partner of
+
+
+
+
+

In Digital Glarus you can..


@@ -526,4 +575,4 @@
--> -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/digitalglarus/templates/new_base_glarus.html b/digitalglarus/templates/new_base_glarus.html index 826b49c0..3b18756d 100644 --- a/digitalglarus/templates/new_base_glarus.html +++ b/digitalglarus/templates/new_base_glarus.html @@ -45,17 +45,10 @@ - - + + {% include 'google_analytics.html' %} + {% endwith %} - + + {% include "google_analytics.html" %} + diff --git a/hosting/templates/hosting/base_short.html b/hosting/templates/hosting/base_short.html index 37e33193..39b5a0fc 100644 --- a/hosting/templates/hosting/base_short.html +++ b/hosting/templates/hosting/base_short.html @@ -41,29 +41,34 @@ + + {% include "google_analytics.html" %} + - + {% block navbar %} -
- - - + + + {% endblock navbar %}
diff --git a/hosting/templates/hosting/beta.html b/hosting/templates/hosting/beta.html index 68cbb5a9..bdf37f58 100644 --- a/hosting/templates/hosting/beta.html +++ b/hosting/templates/hosting/beta.html @@ -31,16 +31,10 @@ - + + {% include 'google_analytics.html' %} + diff --git a/hosting/templates/hosting/hosting_pricing.html b/hosting/templates/hosting/hosting_pricing.html index c6ae33d0..9032ddd6 100644 --- a/hosting/templates/hosting/hosting_pricing.html +++ b/hosting/templates/hosting/hosting_pricing.html @@ -18,7 +18,9 @@ - + + {% include 'google_analytics.html' %} + diff --git a/hosting/templates/hosting/includes/_navbar_transparent.html b/hosting/templates/hosting/includes/_navbar_transparent.html new file mode 100644 index 00000000..31bbe6bf --- /dev/null +++ b/hosting/templates/hosting/includes/_navbar_transparent.html @@ -0,0 +1,11 @@ +{% load static i18n %} + + \ No newline at end of file diff --git a/hosting/templates/hosting/login.html b/hosting/templates/hosting/login.html index 3ae7b7c2..12c9eba6 100644 --- a/hosting/templates/hosting/login.html +++ b/hosting/templates/hosting/login.html @@ -1,18 +1,23 @@ {% extends "hosting/base_short.html" %} {% load i18n %} {% load staticfiles bootstrap3%} + +{% block navbar %} + {% include 'hosting/includes/_navbar_transparent.html' %} +{% endblock navbar %} + {% block content %}
- +

{% trans "Your VM hosted in Switzerland"%}

- +

{% trans "Login"%}

@@ -26,8 +31,8 @@ {% trans "Login"%} {% endbuttons %} - - + +