merged master
This commit is contained in:
		
				commit
				
					
						925252f1c9
					
				
			
		
					 44 changed files with 2581 additions and 1811 deletions
				
			
		
							
								
								
									
										33
									
								
								Changelog
									
										
									
									
									
								
							
							
						
						
									
										33
									
								
								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) | ||||
|  |  | |||
|  | @ -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 <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\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. <br>Yes, we are that cool. " | ||||
| msgstr "" | ||||
| "Unser gesamter Softwaresstack ist Open-Source – Wir verwenden nichts, das " | ||||
| "nicht Open-Source ist.<br/>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. <br>We grew up with it, live by it, and believe in it.<br> The " | ||||
| "more we work on our data center,<br> the more we contribute back to the FOSS " | ||||
| "community." | ||||
| msgstr "" | ||||
| "Data Center Light ist ein Teil der Free und Opens Source Software (FOSS) " | ||||
| "Bewegung.<br/> Wir sind damit gross geworden, leben damit und glauben daran." | ||||
| "<br/> 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.<br>\n" | ||||
| "                            Your VM needs only IPv6. Data Center Light " | ||||
| "provides<br> transparent two-way IPv6/IPv4 translation.\n" | ||||
| "                            " | ||||
| msgstr "" | ||||
| "Data Center Light verwendet die zur Zeit modernsten Technologien.<br/>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" | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										29
									
								
								datacenterlight/management/commands/fetchvmtemplates.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								datacenterlight/management/commands/fetchvmtemplates.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -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))) | ||||
|  | @ -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 | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 6 KiB | 
|  | @ -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,25 +24,25 @@ | |||
|             '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() { | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -53,102 +53,112 @@ | |||
|     /* --------------------------------------------- | ||||
|      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); | ||||
|  |  | |||
|  | @ -3,65 +3,66 @@ | |||
| <!DOCTYPE html> | ||||
| <html lang="{{LANGUAGE_CODE}}"> | ||||
| 
 | ||||
| <head> | ||||
|     <head> | ||||
| 
 | ||||
|     <meta charset="utf-8"> | ||||
|     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|     <meta name="description" content="Data Center Light by ungleich"> | ||||
|     <meta name="author" content="ungleich GmbH"> | ||||
|         <meta charset="utf-8"> | ||||
|         <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||
|         <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|         <meta name="description" content="Data Center Light by ungleich"> | ||||
|         <meta name="author" content="ungleich GmbH"> | ||||
| 
 | ||||
|     <title>Data Center Light - | ||||
|     {% block title %}VM hosting made in Switzerland{% endblock %}</title> | ||||
|     <!-- Bootstrap Core CSS --> | ||||
|     <link href="{% static 'datacenterlight/css/bootstrap.min.css' %}" rel="stylesheet"> | ||||
|         <title>Data Center Light - | ||||
|         {% block title %}VM hosting made in Switzerland{% endblock %}</title> | ||||
|         <!-- Bootstrap Core CSS --> | ||||
|         <link href="{% static 'datacenterlight/css/bootstrap.min.css' %}" rel="stylesheet"> | ||||
| 
 | ||||
|     <!-- Custom Fonts --> | ||||
|     <!--Import Google Icon Font--> | ||||
|      <link href="//fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> | ||||
|     <link href="{% static 'datacenterlight/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css"> | ||||
|     <link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css"> | ||||
|     <link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon" /> | ||||
|     <link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.css" rel="stylesheet"> | ||||
|         <!-- Custom Fonts --> | ||||
|         <!--Import Google Icon Font--> | ||||
|          <link href="//fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> | ||||
|         <link href="{% static 'datacenterlight/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css"> | ||||
|         <link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css"> | ||||
|         <link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon" /> | ||||
|         <link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.css" rel="stylesheet"> | ||||
| 
 | ||||
|     <!-- Custom CSS --> | ||||
|     <link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet"> | ||||
|         <!-- Custom CSS --> | ||||
|         <link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet"> | ||||
| 
 | ||||
|     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> | ||||
|     <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> | ||||
|     <!--[if lt IE 9]> | ||||
|         <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | ||||
|         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||
|     <![endif]--> | ||||
|     <!-- Google analytics --> | ||||
|     {% include "google_analytics.html" %} | ||||
|     <!-- End Google Analytics --> | ||||
| </head> | ||||
|         <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> | ||||
|         <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> | ||||
|         <!--[if lt IE 9]> | ||||
|             <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | ||||
|             <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||
|         <![endif]--> | ||||
|         <!-- Google analytics --> | ||||
|         {% include "google_analytics.html" %} | ||||
|         <!-- End Google Analytics --> | ||||
|     </head> | ||||
| 
 | ||||
| <body> | ||||
|     <body> | ||||
| 
 | ||||
|     <!-- Navigation --> | ||||
|     {% include "datacenterlight/includes/_navbar.html" %} | ||||
|         <!-- Navigation --> | ||||
|         {% include "datacenterlight/includes/_navbar.html" %} | ||||
| 
 | ||||
| 
 | ||||
| 	{% block content %} | ||||
|     {% endblock %} | ||||
|         {% block content %} | ||||
|         {% endblock %} | ||||
| 
 | ||||
| 	{% include "datacenterlight/includes/_footer.html" %} | ||||
|     <!-- Footer --> | ||||
|         {% include "datacenterlight/includes/_footer.html" %} | ||||
|         <!-- Footer --> | ||||
| 
 | ||||
|     <!-- jQuery --> | ||||
|     <script src="{% static 'datacenterlight/js/jquery.js' %}"></script> | ||||
|         <!-- jQuery --> | ||||
|         <script src="{% static 'datacenterlight/js/jquery.js' %}"></script> | ||||
| 
 | ||||
| 
 | ||||
|     <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script> | ||||
|         <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script> | ||||
| 
 | ||||
|     <!-- Bootstrap Core JavaScript --> | ||||
|     <script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script> | ||||
|     <script src="{% static 'datacenterlight/js/main.js' %}"></script> | ||||
|     <!-- Load form js --> | ||||
|     <script src="{% static 'datacenterlight/js/form.js' %}"></script> | ||||
|     <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script> | ||||
|     <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script> | ||||
|     <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script> | ||||
|         <!-- Bootstrap Core JavaScript --> | ||||
|         <script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script> | ||||
|         <script src="{% static 'datacenterlight/js/main.js' %}"></script> | ||||
|         <!-- Load form js --> | ||||
|         <script src="{% static 'datacenterlight/js/form.js' %}"></script> | ||||
|         <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script> | ||||
|         <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script> | ||||
|         <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script> | ||||
|     </body> | ||||
| </html> | ||||
|  |  | |||
							
								
								
									
										123
									
								
								datacenterlight/templates/datacenterlight/calculator_form.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								datacenterlight/templates/datacenterlight/calculator_form.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,123 @@ | |||
| {% load staticfiles i18n%} | ||||
| <form id="order_form" method="POST" action="" data-toggle="validator" role="form"> | ||||
|     {% csrf_token %} | ||||
|     <div class="title"> | ||||
|         <h3>{% trans "VM hosting" %} </h3> | ||||
|     </div> | ||||
|     <div class="price"> | ||||
|         <span id="total">15</span> | ||||
|         <span>CHF/{% trans "month" %}</span> | ||||
|         <div class="price-text"> | ||||
|             <p>{% trans "VAT included" %}</p> | ||||
|         </div> | ||||
|     </div> | ||||
|     <div class="descriptions"> | ||||
|         <div class="description form-group"> | ||||
|             <p>{% trans "Hosted in Switzerland" %}</p> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|             <div class="description input"> | ||||
|                 <i class="fa fa-minus-circle left" data-minus="cpu" aria-hidden="true"></i> | ||||
|                 <input class="input-price select-number" type="number" min="1" max="48" id="coreValue" name="cpu" | ||||
|                        data-error="{% trans 'Please enter a value in range 1 - 48.' %}" required> | ||||
|                 <span> Core</span> | ||||
|                 <i class="fa fa-plus-circle right" data-plus="cpu" aria-hidden="true"></i> | ||||
|             </div> | ||||
|             <div class="help-block with-errors"> | ||||
|                 {% for message in messages %} | ||||
|                     {% if 'cores' in message.tags %} | ||||
|                      <ul class="list-unstyled"><li> | ||||
|                         {{ message|safe }} | ||||
|                     </li></ul> | ||||
|                     {% endif %} | ||||
|                 {% endfor %} | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|             <div class="description input"> | ||||
|                 <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i> | ||||
|                 <input id="ramValue" class="input-price select-number" type="number" min="2" max="200" name="ram" | ||||
|                        data-error="{% trans 'Please enter a value in range 2 - 200.' %}" required> | ||||
|                 <span> GB RAM</span> | ||||
|                 <i class="fa fa-plus-circle right" data-plus="ram" aria-hidden="true"></i> | ||||
|             </div> | ||||
|             <div class="help-block with-errors"> | ||||
|                 {% for message in messages %} | ||||
|                     {% if 'memory' in message.tags %} | ||||
|                      <ul class="list-unstyled"><li> | ||||
|                         {{ message|safe }} | ||||
|                     </li></ul> | ||||
|                     {% endif %} | ||||
|                 {% endfor %} | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|             <div class="description input"> | ||||
|                 <i class="fa fa-minus-circle left" data-minus="storage" aria-hidden="true"></i> | ||||
|                 <input id="storageValue" class="input-price select-number" type="number" min="10" max="2000" step="10" | ||||
|                        name="storage" data-error="{% trans 'Please enter a value in range 10 - 2000.' %}" required> | ||||
|                 <span>{% trans "GB Storage (SSD)" %}</span> | ||||
|                 <i class="fa fa-plus-circle right" data-plus="storage" aria-hidden="true"></i> | ||||
|             </div> | ||||
|             <div class="help-block with-errors"> | ||||
|                 {% for message in messages %} | ||||
|                     {% if 'storage' in message.tags %} | ||||
|                      <ul class="list-unstyled"><li> | ||||
|                         {{ message|safe }} | ||||
|                     </li></ul> | ||||
|                     {% endif %} | ||||
|                 {% endfor %} | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="description select-configuration input form-group justify-center"> | ||||
|             <label for="config">OS</label> | ||||
|             <select name="config" id=""> | ||||
|                 {% for template in templates %} | ||||
|                 <option value="{{template.opennebula_vm_template_id}}">{{template.name}}</option> | ||||
|                 {% endfor %} | ||||
|             </select> | ||||
|         </div> | ||||
|         <input type="hidden" name="total"> | ||||
|         <!--<div class="description check-ip"> | ||||
|             <input type="checkbox" name="ipv6"> Ipv6 Only<br> | ||||
|         </div>--> | ||||
|         <div class="form-group"> | ||||
|             <div class="description input justify-center"> | ||||
|                 <label for="name" class="control-label">{% trans "Name"%}</label> | ||||
|                 <input type="text" name="name" class="form-control" placeholder="{% trans 'Your Name'%}" | ||||
|                        data-minlength="3" data-error="{% trans 'Please enter your name.' %}" required> | ||||
|             </div> | ||||
|             <div class="help-block with-errors"> | ||||
|                 {% for message in messages %} | ||||
|                 {% if 'name' in message.tags %} | ||||
|                 <ul class="list-unstyled"> | ||||
|                     <li> | ||||
|                         {{ message|safe }} | ||||
|                     </li> | ||||
|                 </ul> | ||||
|                 {% endif %} | ||||
|                 {% endfor %} | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="form-group"> | ||||
|             <div class="description input justify-center"> | ||||
|                 <label for="email" class="control-label">{% trans "Email"%}</label> | ||||
|                 <input name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" | ||||
|                        placeholder="{% trans 'Your Email' %}" | ||||
|                        data-error="{% trans 'Please enter a valid email address.' %}" required> | ||||
|             </div> | ||||
|             <div class="help-block with-errors"> | ||||
|                 {% for message in messages %} | ||||
|                 {% if 'email' in message.tags %} | ||||
|                 <ul class="list-unstyled"> | ||||
|                     <li> | ||||
|                         {{ message|safe }} | ||||
|                     </li> | ||||
|                 </ul> | ||||
|                 {% endif %} | ||||
|                 {% endfor %} | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     <input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input> | ||||
| </form> | ||||
|  | @ -12,11 +12,11 @@ | |||
|       <span class="icon-bar"></span> | ||||
|     </button> | ||||
|     {% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} | ||||
|                   <a href="{% url 'datacenterlight:index' %}" id="logoBlack" class="navbar-brand topnav url" data-url="#home"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a> | ||||
|                   <a href="{% url 'datacenterlight:index' %}" id="logoWhite" class="navbar-brand topnav url" data-url="#home"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> | ||||
|                   <a href="{% url 'datacenterlight:index' %}" id="logoBlack" class="navbar-brand topnav" data-url="#home"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a> | ||||
|                   <a href="{% url 'datacenterlight:index' %}" id="logoWhite" class="navbar-brand topnav" data-url="#home"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> | ||||
|                 {% else %} | ||||
|                    <a href="{% url 'datacenterlight:index' %}" id="logoBlack" class="navbar-brand topnav url"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a> | ||||
|                     <a href="{% url 'datacenterlight:index' %}" id="logoWhite" class="navbar-brand topnav url"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> | ||||
|                    <a href="{% url 'datacenterlight:index' %}" id="logoBlack" class="navbar-brand topnav"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a> | ||||
|                     <a href="{% url 'datacenterlight:index' %}" id="logoWhite" class="navbar-brand topnav"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> | ||||
|                 {% endif %} | ||||
| 
 | ||||
|   </div> | ||||
|  | @ -25,15 +25,15 @@ | |||
| 		{% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} | ||||
|            <li class="dropdown"> | ||||
|                 <a class="dropdown-toggle  visible-mobile" href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans "Highlights" %}<span class="caret"></span></a> | ||||
|                 <a class="dropdown-toggle url disabled visible-desktop" href="{% url 'datacenterlight:index' %}#how" data-url="#how" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans "Highlights" %}<span class="caret"></span></a> | ||||
|                 <a class="dropdown-toggle url disabled visible-desktop menu-url" data-url="#how" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">{% trans "Highlights" %}<span class="caret"></span></a> | ||||
| 			<ul class="dropdown-menu"> | ||||
| 				<li><a class="url" href="{% url 'datacenterlight:index' %}#your" data-url="#your"  >{% trans "Scale out" %}</a></li> | ||||
| 				<li><a class="url" href="{% url 'datacenterlight:index' %}#our" data-url="#our">{% trans "Reliable and light" %}</a></li> | ||||
| 				<li> <a class="url" href="{% url 'datacenterlight:index' %}#price" data-url="#price" >{% trans "Order VM" %}</a></li> | ||||
| 				<li><a class="url menu-url" data-url="#your" href="#your">{% trans "Scale out" %}</a></li> | ||||
| 				<li><a class="url menu-url" data-url="#our" href="#our">{% trans "Reliable and light" %}</a></li> | ||||
| 				<li> <a class="url menu-url" data-url="#price" href="#price">{% trans "Order VM" %}</a></li> | ||||
| 			</ul> | ||||
|            </li> | ||||
| 			<li> | ||||
| 				<a class="url" href="{% url 'datacenterlight:index' %}/whydatacenterlight" >{% trans "Why Data Center Light?" %}</a> | ||||
| 				<a href="{% url 'datacenterlight:index' %}/whydatacenterlight" >{% trans "Why Data Center Light?" %}</a> | ||||
| 			</li> | ||||
| 			<li> | ||||
| 				<a class="url" href="{% url 'datacenterlight:index' %}#contact" data-url="#contact"  >{% trans "Contact" %}</a> | ||||
|  | @ -48,11 +48,12 @@ | |||
| 				{% endif %} | ||||
| 				<i class="fa fa-globe" aria-hidden="true"></i> | ||||
| 				</div> | ||||
| 
 | ||||
| 				<div class="drop-language"> | ||||
| 				{% if LANGUAGE_CODE == 'en-us'%} | ||||
| 				<a class="url" href="{% change_lang 'de' %}">Deutsch</a> | ||||
| 				<a href="{% change_lang 'de' %}">Deutsch</a> | ||||
| 				{% else %} | ||||
| 				<a class="url" href="{% change_lang 'en-us' %}" >English</a> | ||||
| 				<a href="{% change_lang 'en-us' %}" >English</a> | ||||
| 				{% endif %} | ||||
| 				</div> | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,6 +1,5 @@ | |||
| {% extends "datacenterlight/base.html" %} | ||||
| {% load staticfiles i18n%} | ||||
| {% get_current_language as LANGUAGE_CODE %} | ||||
| 
 | ||||
| {% block content %} | ||||
| 
 | ||||
|  | @ -112,7 +111,7 @@ | |||
|                             <h2>{% trans "Reliable and light" %}</h2> | ||||
|                         </div> | ||||
|                         <div class="split-description"> | ||||
|                          <p class="lead">{% trans "Our VMs are located in Switzerland, with reliable power supply and fast internet connection. Our VM costs less thanks to our featherlight infrastructure." %}</p> | ||||
|                             <p class="lead">{% trans "Our VMs are located in Switzerland, with reliable power supply and fast internet connection. Our VM costs less thanks to our featherlight infrastructure." %}</p> | ||||
| 
 | ||||
|                         </div> | ||||
|                     </div> | ||||
|  | @ -131,7 +130,7 @@ | |||
|             <div class="row text-center"> | ||||
|                 <div class="col-xs-12 col-md-6 text"> | ||||
|                     <h2 class="section-heading">{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}</h2> | ||||
|                     <p class="lead">{% trans "Affordable VM hosting based in Switzerland" %}</p> | ||||
|                     <p class="lead new-lead">{% trans "Affordable VM hosting based in Switzerland" %}</p> | ||||
|                 </div> | ||||
| 
 | ||||
|                 <div class="col-xs-12 col-md-6 hero-feature"> | ||||
|  | @ -139,94 +138,7 @@ | |||
|                         <div class="landing card"> | ||||
|                             <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> | ||||
|                             <div class="caption"> | ||||
|                                 <form id="order_form" method="POST" action="" data-toggle="validator" role="form"> | ||||
|                                     {% csrf_token %} | ||||
|                                     <div class="title"> | ||||
|                                        <h3>{% trans "VM hosting" %} </h3> | ||||
|                                     </div> | ||||
|                                     <div class="price"> | ||||
|                                         <span id="total">15</span> | ||||
|                                         <span>CHF/{% trans "month" %}</span> | ||||
|                                         <div class="price-text"> | ||||
|                                             <p>{% trans "VAT included" %}</p> | ||||
|                                         </div> | ||||
|                                     </div> | ||||
|                                     <div class="descriptions"> | ||||
|                                         <div class="description form-group"> | ||||
|                                             <p>{% trans "Hosted in Switzerland" %}</p> | ||||
|                                         </div> | ||||
|                                         <div class="form-group"> | ||||
|                                             <div class="description input"> | ||||
|                                             <i class="fa fa-minus-circle left" data-minus="cpu" aria-hidden="true"></i> | ||||
|                                             <input class="input-price select-number" type="number"  min="1" max="42" id="coreValue" name="cpu" data-error="{% trans 'Please enter a value greater than or equal to 1.' %}" required> | ||||
|                                             <span> Core</span> | ||||
|                                             <i class="fa fa-plus-circle right" data-plus="cpu"  aria-hidden="true"></i> | ||||
|                                             </div> | ||||
|                                             <div class="help-block with-errors"></div> | ||||
|                                         </div> | ||||
|                                         <div class="form-group"> | ||||
|                                             <div class="description input"> | ||||
|                                             <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i> | ||||
|                                             <input id="ramValue" class="input-price select-number" type="number"  min="2" max="200"  name="ram" data-error="{% trans 'Please enter a value greater than or equal to 2.' %}" required> | ||||
|                                             <span> GB RAM</span> | ||||
|                                             <i class="fa fa-plus-circle right" data-plus="ram"  aria-hidden="true"></i> | ||||
|                                             </div> | ||||
|                                             <div class="help-block with-errors"></div> | ||||
|                                         </div> | ||||
|                                         <div class="form-group"> | ||||
|                                             <div class="description input"> | ||||
|                                             <i class="fa fa-minus-circle left" data-minus="storage" aria-hidden="true"></i> | ||||
|                                             <input id="storageValue" class="input-price select-number" type="number"  min="10" max="500" step="10" name="storage" data-error="{% trans 'Please enter a value greater than or equal to 10.' %}" required> | ||||
|                                             <span>{% trans "GB Storage (SSD)" %}</span> | ||||
|                                             <i class="fa fa-plus-circle right" data-plus="storage"  aria-hidden="true"></i> | ||||
|                                             </div> | ||||
|                                             <div class="help-block with-errors"></div> | ||||
|                                         </div> | ||||
|                                         <div class="description select-configuration input form-group justify-center"> | ||||
|                                             <label for="config">OS</label> | ||||
|                                             <select name="config" id=""> | ||||
|                                                 {% for template in templates %} | ||||
|                                                     <option value="{{template.id}}">{{template.name}} </option> | ||||
|                                                 {% endfor %} | ||||
|                                             </select> | ||||
|                                         </div> | ||||
|                                         <input type="hidden" name="total"> | ||||
|                                         <!--<div class="description check-ip"> | ||||
|                                             <input type="checkbox" name="ipv6"> Ipv6 Only<br> | ||||
|                                         </div>--> | ||||
|                                             <div class="form-group"> | ||||
|                                                 <div class="description input justify-center"> | ||||
|                                                 <label for="name" class="control-label">{% trans "Name"%}</label> | ||||
|                                                 <input type="text" name="name" class="form-control" placeholder="{% trans 'Your Name'%}" data-minlength="3" data-error="{% trans 'Please enter your name' %}" required> | ||||
|                                                 </div> | ||||
|                                                 <div class="help-block with-errors"> | ||||
|                                                     {% for message in messages %} | ||||
|                                                         {% if 'name' in message.tags %} | ||||
|                                                         <ul class="list-unstyled"><li> | ||||
|                                                             {{ message|safe }} | ||||
|                                                         </li></ul> | ||||
|                                                         {% endif %} | ||||
|                                                     {% endfor %} | ||||
|                                                 </div> | ||||
|                                             </div> | ||||
|                                             <div class="form-group"> | ||||
|                                                 <div class="description input justify-center"> | ||||
|                                                 <label for="email" class="control-label">{% trans "Email"%}</label> | ||||
|                                                 <input name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" placeholder="{% trans 'Your Email' %}" data-error="{% trans 'Please enter a valid email address' %}" required> | ||||
|                                                 </div> | ||||
|                                                 <div class="help-block with-errors"> | ||||
|                                                     {% for message in messages %} | ||||
|                                                         {% if 'email' in message.tags %} | ||||
|                                                          <ul class="list-unstyled"><li> | ||||
|                                                             {{ message|safe }} | ||||
|                                                         </li></ul> | ||||
|                                                         {% endif %} | ||||
|                                                     {% endfor %} | ||||
|                                                 </div> | ||||
|                                             </div> | ||||
|                                     </div> | ||||
|                                     <input type="submit" class="btn btn-primary" value="{% trans 'Order Now!' %}"></input> | ||||
|                                 </form> | ||||
|                             {% include "datacenterlight/calculator_form.html" %} | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|  | @ -254,15 +166,9 @@ | |||
|                                 <p>{% trans "Switzerland " %}</p> | ||||
|                             </div> | ||||
|                             <div class="social"> | ||||
|                                 <a target="_blank" class="" href="https://twitter.com/datacenterlight"> | ||||
|                                      <i class="fa fa-twitter fa-fw"></i> | ||||
|                                 </a> | ||||
|                                 <a  target="_blank"  class=""  href="https://github.com/ungleich"> | ||||
|                                      <i class="fa fa-github fa-fw"></i> | ||||
|                                 </a> | ||||
|                                 <a  target="_blank"  class=""  href="https://www.facebook.com/ungleich.ch/"> | ||||
|                                      <i class="fa fa-facebook fa-fw"></i> | ||||
|                                 </a> | ||||
|                                 <a target="_blank" class="" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a> | ||||
|                                 <a target="_blank"  class=""  href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a> | ||||
|                                 <a  target="_blank"  class=""  href="https://www.facebook.com/ungleich.ch/"><i class="fa fa-facebook fa-fw"></i></a> | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|  | @ -278,4 +184,4 @@ | |||
| 
 | ||||
|     </div> | ||||
|     <!-- /.banner --> | ||||
|     {% endblock %} | ||||
| {% endblock %} | ||||
|  |  | |||
|  | @ -4,94 +4,93 @@ | |||
| {% load custom_tags %} | ||||
| {% block content %} | ||||
| 
 | ||||
| <div class="order-detail-container"> | ||||
|    {% if messages %} | ||||
|     <div class="row"> | ||||
|         <div class="col-xs-12 col-md-8 col-md-offset-2"> | ||||
|             <br/> | ||||
|                 <div class="alert alert-warning"> | ||||
|                     {% for message in messages %} | ||||
|                     <span>{{ message }}</span> | ||||
|                     {% endfor %} | ||||
|                 </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     {% endif %} | ||||
|     {% if not error %} | ||||
|     <div class="row">   | ||||
|         <div class="col-xs-12 col-md-8 col-md-offset-2"> | ||||
|             <div class="invoice-title"> | ||||
|                 <h2>{% trans "Confirm Order"%}</h2> | ||||
|             </div> | ||||
|             <hr> | ||||
|     <div class="order-detail-container"> | ||||
|        {% if messages %} | ||||
|             <div class="row"> | ||||
|                 <div class="col-xs-6"> | ||||
|                     <address> | ||||
|                     <h3><b>{% trans "Billed To:"%}</b></h3> | ||||
|                     {% with request.session.billing_address_data as billing_address %} | ||||
|                         {{request.session.user.name}}<br> {{billing_address|get_value_from_dict:'street_address'}}, {{billing_address|get_value_from_dict:'postal_code'}}<br> | ||||
|                         {{billing_address|get_value_from_dict:'city'}}, {{billing_address|get_value_from_dict:'country'}}. | ||||
|                     {% endwith %} | ||||
|                     </address> | ||||
|                 </div> | ||||
|                 <div class="col-xs-6 text-right"> | ||||
|                     <address> | ||||
|                         <strong>{% trans "Date"%}:</strong><br> | ||||
|                         <span id="order-created_at">{% now "Y-m-d H:i" %}</span><br><br> | ||||
|                     </address> | ||||
| 
 | ||||
|                 <div class="col-xs-12 col-md-8 col-md-offset-2"> | ||||
|                     <br/> | ||||
|                     <div class="alert alert-warning"> | ||||
|                         {% for message in messages %} | ||||
|                         <span>{{ message }}</span> | ||||
|                         {% endfor %} | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         {% endif %} | ||||
|         {% if not error %} | ||||
|             <div class="row"> | ||||
|                 <div class="col-xs-6"> | ||||
|                     <address> | ||||
|                         <strong>{% trans "Payment Method:"%}</strong><br> | ||||
|                             {{cc_brand}} {% trans "ending" %} **** {{cc_last4}}<br> | ||||
|                             {{request.session.user.email}} | ||||
|                     </address> | ||||
|                 <div class="col-xs-12 col-md-8 col-md-offset-2"> | ||||
|                     <div class="invoice-title"> | ||||
|                         <h2>{% trans "Confirm Order"%}</h2> | ||||
|                     </div> | ||||
|                     <hr> | ||||
|                     <div class="row"> | ||||
|                         <div class="col-xs-12 col-sm-6 pull-right order-confirm-date"> | ||||
|                             <address> | ||||
|                                 <strong>{% trans "Date"%}:</strong><br> | ||||
|                                 <span id="order-created_at">{% now "Y-m-d H:i" %}</span><br><br> | ||||
|                             </address> | ||||
|                         </div> | ||||
|                         <div class="col-xs-12 col-sm-6"> | ||||
|                             <address> | ||||
|                             <h3><b>{% trans "Billed To:"%}</b></h3> | ||||
|                             {% with request.session.billing_address_data as billing_address %} | ||||
|                                 {{billing_address|get_value_from_dict:'cardholder_name'}}<br> {{billing_address|get_value_from_dict:'street_address'}}, {{billing_address|get_value_from_dict:'postal_code'}}<br> | ||||
|                                 {{billing_address|get_value_from_dict:'city'}}, {{billing_address|get_value_from_dict:'country'}}. | ||||
|                             {% endwith %} | ||||
|                             </address> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                     <div class="row"> | ||||
|                         <div class="col-xs-6"> | ||||
|                             <address> | ||||
|                                 <strong>{% trans "Payment Method:"%}</strong><br> | ||||
|                                     {{cc_brand}} {% trans "ending" %} **** {{cc_last4}}<br> | ||||
|                                     {{request.session.user.email}} | ||||
|                             </address> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
| 
 | ||||
|             <div class="row"> | ||||
|                 <div class="col-md-8 col-md-offset-2"> | ||||
|                     <h3><b>{% trans "Order summary"%}</b></h3> | ||||
|                     <hr> | ||||
|                     <div class="content"> | ||||
|                         {% with request.session.specs as vm %} | ||||
|                             <p><b>{% trans "Cores"%}</b> <span class="pull-right">{{vm.cpu}}</span></p> | ||||
|                             <hr> | ||||
|                             <p><b>{% trans "Memory"%}</b> <span class="pull-right">{{vm.memory}} GB</span></p> | ||||
|                             <hr> | ||||
|                             <p><b>{% trans "Disk space"%}</b> <span class="pull-right">{{vm.disk_size}} GB</span></p> | ||||
|                             <hr> | ||||
|                             <p><b>{% trans "Configuration"%}</b> <span class="pull-right">{{request.session.template.name}}</span></p> | ||||
|                             <hr> | ||||
|                             <h4>{% trans "Total"%}<p class="pull-right"><b>{{vm.price}} CHF</b></p></h4> | ||||
|                         {% endwith %} | ||||
|                     </div> | ||||
|                     <br/> | ||||
|                     <form method="post"> | ||||
|                     {% csrf_token %} | ||||
|                     <div class=" content pull-right"> | ||||
|                         <a href="{{next_url}}" ><button class="btn btn-info">{% trans "Place order"%}</button></a> | ||||
|                     </div> | ||||
|                     </form> | ||||
|                 </div> | ||||
|             </div> | ||||
|         {% endif %} | ||||
|     </div> | ||||
| 
 | ||||
|     <div class="row"> | ||||
|         <div class="col-md-8 col-md-offset-2"> | ||||
|             <h3><b>{% trans "Order summary"%}</b></h3> | ||||
|             <hr> | ||||
|             <div class="content"> | ||||
|                 {% with request.session.specs as vm %} | ||||
|                     <p><b>{% trans "Cores"%}</b> <span class="pull-right">{{vm.cpu}}</span></p> | ||||
|                     <hr> | ||||
|                     <p><b>{% trans "Memory"%}</b> <span class="pull-right">{{vm.memory}} GB</span></p> | ||||
|                     <hr> | ||||
|                     <p><b>{% trans "Disk space"%}</b> <span class="pull-right">{{vm.disk_size}} GB</span></p> | ||||
|                     <hr> | ||||
|                     <p><b>{% trans "Configuration"%}</b> <span class="pull-right">{{request.session.template.name}}</span></p> | ||||
|                     <hr> | ||||
|                     <h4>{% trans "Total"%}<p class="pull-right"><b>{{vm.price}} CHF</b></p></h4> | ||||
|                 {% endwith %} | ||||
|             </div> | ||||
|             <br/> | ||||
|             <form method="post"> | ||||
|             {% csrf_token %} | ||||
|             <div class=" content pull-right"> | ||||
|                 <a href="{{next_url}}" ><button class="btn btn-info">{% trans "Place order"%}</button></a> | ||||
|             </div> | ||||
|             </form> | ||||
|         </div> | ||||
|     </div> | ||||
|     {% endif %} | ||||
| </div> | ||||
| 
 | ||||
|     <script type="text/javascript"> | ||||
| 
 | ||||
| <script type="text/javascript"> | ||||
|         window.onload = function () { | ||||
|                 var locale_date = moment.utc(document.getElementById("order-created_at").textContent,'YYYY-MM-DD HH:mm').toDate(); | ||||
|                 locale_date =  moment(locale_date).format("YYYY-MM-DD h:mm:ss a"); | ||||
|                 document.getElementById('order-created_at').innerHTML = locale_date; | ||||
| 
 | ||||
|     window.onload = function () { | ||||
|             var locale_date = moment.utc(document.getElementById("order-created_at").textContent,'YYYY-MM-DD HH:mm').toDate(); | ||||
|             locale_date =  moment(locale_date).format("YYYY-MM-DD h:mm:ss a"); | ||||
|             document.getElementById('order-created_at').innerHTML = locale_date; | ||||
|         }; | ||||
| 
 | ||||
|     }; | ||||
| 
 | ||||
| </script> | ||||
|     </script> | ||||
| {%endblock%} | ||||
|  |  | |||
|  | @ -13,73 +13,73 @@ | |||
| 
 | ||||
| 	<div class="price-calc-section"> | ||||
| 		<div class="card"> | ||||
|       <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> | ||||
| 			 <div class="caption"> | ||||
|             <form method="POST" action=""> | ||||
| 				{% csrf_token %} | ||||
|             <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> | ||||
|             <div class="caption"> | ||||
|                 <form method="POST" action=""> | ||||
|                     {% csrf_token %} | ||||
| 
 | ||||
|                 <div class="title"> | ||||
|                    <h3>{% trans "VM hosting" %} </h3>  | ||||
|                 </div> | ||||
|               <div class="price"> | ||||
|                   <span id="total">15</span> | ||||
|                   <span>CHF</span> | ||||
|                   <div class="price-text"> | ||||
|                       <p>{% trans "VAT included" %}</p> | ||||
|                   </div> | ||||
|               </div> | ||||
|               <div class="descriptions"> | ||||
|                   <div class="description"> | ||||
|                     <p>{% trans "Hosted in Switzerland" %}</p> | ||||
|                   </div> | ||||
|                   <div class="description"> | ||||
|                      <i class="fa fa-minus-circle left" data-minus="cpu" aria-hidden="true"></i> | ||||
|                      <input class="input-price" type="number"  min="1" max="42" id="coreValue" name="cpu"> | ||||
|                      <span> Core</span>  | ||||
|                      <i class="fa fa-plus-circle right" data-plus="cpu"  aria-hidden="true"></i> | ||||
|                   </div> | ||||
|                   <div class="description"> | ||||
|                    <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i> | ||||
|                     <input id="ramValue" class="input-price" type="number"  min="2" max="200"  name="ram"> | ||||
|                     <span> GB RAM</span> | ||||
|                     <i class="fa fa-plus-circle right" data-plus="ram"  aria-hidden="true"></i> | ||||
|                   </div> | ||||
|                   <div class="description"> | ||||
|                   	<i class="fa fa-minus-circle left" data-minus="storage" aria-hidden="true"></i> | ||||
|                     <input id="storageValue" class="input-price" type="number"  min="10" max="500" step="10" name="storage"> | ||||
|                     <span>{% trans "GB Storage (SSD)" %}</span> | ||||
|                      <i class="fa fa-plus-circle right" data-plus="storage"  aria-hidden="true"></i> | ||||
|                     <div class="title"> | ||||
|                        <h3>{% trans "VM hosting" %} </h3> | ||||
|                     </div> | ||||
|                   <div class="price"> | ||||
|                       <span id="total">15</span> | ||||
|                       <span>CHF</span> | ||||
|                       <div class="price-text"> | ||||
|                           <p>{% trans "VAT included" %}</p> | ||||
|                       </div> | ||||
|                   </div> | ||||
|                   <div class="descriptions"> | ||||
|                       <div class="description"> | ||||
|                         <p>{% trans "Hosted in Switzerland" %}</p> | ||||
|                       </div> | ||||
|                       <div class="description"> | ||||
|                          <i class="fa fa-minus-circle left" data-minus="cpu" aria-hidden="true"></i> | ||||
|                          <input class="input-price" type="number"  min="1" max="42" id="coreValue" name="cpu"> | ||||
|                          <span> Core</span> | ||||
|                          <i class="fa fa-plus-circle right" data-plus="cpu"  aria-hidden="true"></i> | ||||
|                       </div> | ||||
|                       <div class="description"> | ||||
|                        <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i> | ||||
|                         <input id="ramValue" class="input-price" type="number"  min="2" max="200"  name="ram"> | ||||
|                         <span> GB RAM</span> | ||||
|                         <i class="fa fa-plus-circle right" data-plus="ram"  aria-hidden="true"></i> | ||||
|                       </div> | ||||
|                       <div class="description"> | ||||
|                         <i class="fa fa-minus-circle left" data-minus="storage" aria-hidden="true"></i> | ||||
|                         <input id="storageValue" class="input-price" type="number"  min="10" max="500" step="10" name="storage"> | ||||
|                         <span>{% trans "GB Storage (SSD)" %}</span> | ||||
|                          <i class="fa fa-plus-circle right" data-plus="storage"  aria-hidden="true"></i> | ||||
|                       </div> | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|                   <div class="description select-configuration input"> | ||||
|                     <label for="name">OS</label> | ||||
|                   	<select name="config" id=""> | ||||
| 						{% for template in templates %} | ||||
|                                 <option value="{{template.id}}">{{template.name}} </option> | ||||
|                         {% endfor %} | ||||
|                   	</select> | ||||
|                       <div class="description select-configuration input"> | ||||
|                         <label for="name">OS</label> | ||||
|                         <select name="config" id=""> | ||||
|                             {% for template in templates %} | ||||
|                                     <option value="{{template.id}}">{{template.name}} </option> | ||||
|                             {% endfor %} | ||||
|                         </select> | ||||
|                       </div> | ||||
|                       <input type="hidden" name="total"> | ||||
| 
 | ||||
|                      <!--  <div class="description input"> | ||||
|                         <label for="name">Name</label> | ||||
|                         <input type="text" name="name" placeholder="Your Name"> | ||||
|                       </div> | ||||
|                       <div class="description input"> | ||||
|                         <label for="email">Email</label> | ||||
|                         <input type="email" name="email" placeholder="Your Email"> | ||||
|                       </div> --> | ||||
| 
 | ||||
|                        <!--<div class="description check-ip"> | ||||
|                         <input type="checkbox" name="ipv6"> Ipv6 Only<br> | ||||
|                        </div>--> | ||||
|                   </div> | ||||
|                   <input type="hidden" name="total"> | ||||
|                   <input type="submit" class="btn btn-primary" value="{% trans 'Order Now!' %}"></input> | ||||
| 
 | ||||
|                  <!--  <div class="description input"> | ||||
|                     <label for="name">Name</label> | ||||
|                     <input type="text" name="name" placeholder="Your Name"> | ||||
|                   </div> | ||||
|                   <div class="description input"> | ||||
|                     <label for="email">Email</label> | ||||
|                     <input type="email" name="email" placeholder="Your Email"> | ||||
|                   </div> --> | ||||
|                   | ||||
|                    <!--<div class="description check-ip"> | ||||
|                   	<input type="checkbox" name="ipv6"> Ipv6 Only<br> | ||||
| 				   </div>--> | ||||
|               </div> | ||||
|               <input type="submit" class="btn btn-primary" value="{% trans 'Order Now!' %}"></input> | ||||
| 
 | ||||
|             </form> | ||||
|           </div> | ||||
|                 </form> | ||||
|             </div> | ||||
| 		</div> | ||||
| 
 | ||||
| 		<div class="text"> | ||||
|  |  | |||
|  | @ -12,29 +12,21 @@ | |||
| 		</div> | ||||
| 
 | ||||
| 	</div> | ||||
|     <script src="{% static 'datacenterlight/js/jquery.js' %}"></script> | ||||
| 
 | ||||
| <script type="text/javascript"> | ||||
|       window.onload=function(){ | ||||
|         $('.selectpicker').selectpicker({ | ||||
|              style: 'btn-link', | ||||
|              windowPadding: 10, | ||||
|         }); | ||||
| 	<script type="text/javascript"> | ||||
| 		  window.onload=function(){ | ||||
| 			$('.selectpicker').selectpicker({ | ||||
| 				 style: 'btn-link', | ||||
| 				 windowPadding: 10, | ||||
| 			}); | ||||
| 
 | ||||
|         var hash = window.location.hash.substr(1); | ||||
|         console.log(hash); | ||||
|         if (hash == 'requestform'){ | ||||
|             $('#reques-success-message').modal('show'); | ||||
|         } | ||||
| 
 | ||||
|        }; | ||||
| </script> | ||||
| 
 | ||||
|     <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script> | ||||
| 
 | ||||
|     <!-- Bootstrap Core JavaScript --> | ||||
|     <script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script> | ||||
|     <script src="{% static 'datacenterlight/js/main.js' %}"></script> | ||||
| 			var hash = window.location.hash.substr(1); | ||||
| 			console.log(hash); | ||||
| 			if (hash == 'requestform'){ | ||||
| 				$('#reques-success-message').modal('show'); | ||||
| 			} | ||||
| 
 | ||||
| 		   }; | ||||
| 	</script> | ||||
| 
 | ||||
| {% endblock %} | ||||
|  | @ -1,22 +1,19 @@ | |||
| {% extends "datacenterlight/base.html" %} | ||||
| {% load staticfiles i18n%} | ||||
| {% get_current_language as LANGUAGE_CODE %} | ||||
| 
 | ||||
| {% block content %} | ||||
| 
 | ||||
|      | ||||
|     <!-- Why Data Center Light? --> | ||||
|     <div class="full-whydcl-sec"> | ||||
| 		<div class="whydcl-header whydcl-section" id="why_dcl"> | ||||
| 		<div class="container"> | ||||
| 			<div class="row"> | ||||
| 				<div class="col-sm-12 col-md-12"> | ||||
| 					<div class="single-heading"> | ||||
| 						<h2>{% trans "Why Data Center Light?" %}</h2> | ||||
|         <div class="whydcl-header whydcl-section" id="why_dcl"> | ||||
|         <div class="container"> | ||||
|             <div class="row"> | ||||
|                 <div class="col-sm-12 col-md-12"> | ||||
|                     <div class="single-heading"> | ||||
|                         <h2>{% trans "Why Data Center Light?" %}</h2> | ||||
|                      </div> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     </div> | ||||
|     <div class="split-section left" id="tech_stack"> | ||||
|  | @ -35,38 +32,38 @@ | |||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="col-xs-12 col-sm-6 col-md-6"> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive btm-space" src="{% static 'datacenterlight/img/devuan.png' %}" alt="Devuan"> | ||||
| 						<span class="logo-caption">{% trans "Our services run on" %}</span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus"> | ||||
| 						<span class="logo-caption">{% trans "Our monitoring" %}</span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive btm-space" src="{% static 'datacenterlight/img/Ceph_Logo.png' %}" alt="Ceph"> | ||||
| 						<span class="logo-caption">{% trans "Our storage layer" %}</span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/django.png' %}" alt="Django"> | ||||
| 						<span class="logo-caption">{% trans "Our web frontend" %}</span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive btm-space" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula"> | ||||
| 						<span class="logo-caption">{% trans "Our cloud" %}</span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist by ungleich"> | ||||
| 						<span class="logo-caption">{% trans "Our configuration management system" %}</span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/python-logo.png' %}" alt="Python"> | ||||
| 						<span class="logo-caption">{% trans "Our awesome juice" %}</span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/tayga.png' %}" alt="Tayga"> | ||||
| 						<span class="logo-caption">{% trans "Our NAT64 gateway" %}</span> | ||||
| 					</div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive btm-space" src="{% static 'datacenterlight/img/devuan.png' %}" alt="Devuan"> | ||||
|                         <span class="logo-caption">{% trans "Our services run on" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus"> | ||||
|                         <span class="logo-caption">{% trans "Our monitoring" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive btm-space" src="{% static 'datacenterlight/img/Ceph_Logo.png' %}" alt="Ceph"> | ||||
|                         <span class="logo-caption">{% trans "Our storage layer" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive" src="{% static 'datacenterlight/img/django.png' %}" alt="Django"> | ||||
|                         <span class="logo-caption">{% trans "Our web frontend" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive btm-space" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula"> | ||||
|                         <span class="logo-caption">{% trans "Our cloud" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist by ungleich"> | ||||
|                         <span class="logo-caption">{% trans "Our configuration management system" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive" src="{% static 'datacenterlight/img/python-logo.png' %}" alt="Python"> | ||||
|                         <span class="logo-caption">{% trans "Our awesome juice" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> | ||||
|                         <img class="img-responsive btm-space-tayga" src="{% static 'datacenterlight/img/tayga.png' %}" alt="Tayga"> | ||||
|                         <span class="logo-caption">{% trans "Our NAT64 gateway" %}</span> | ||||
|                     </div> | ||||
|                      | ||||
|                 </div> | ||||
|             </div> | ||||
|  | @ -77,21 +74,21 @@ | |||
|         <div class=" space"> | ||||
|         <div class="container"> | ||||
|             <div class="row"> | ||||
| 				<div class="col-xs-12 col-sm-4 col-md-5 "> | ||||
| 					<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula"> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist byu ngleich"> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1"> | ||||
| 						<img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus"> | ||||
| 					</div> | ||||
|                 <div class="col-xs-12 col-sm-4 col-md-5 "> | ||||
|                     <div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1"> | ||||
|                         <img class="img-responsive" src="{% static 'datacenterlight/img/opennebula.png' %}" alt="Opennebula"> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1"> | ||||
|                         <img class="img-responsive" src="{% static 'datacenterlight/img/cdistbyungleich.png' %}" alt="Cdist byu ngleich"> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-12 col-md-6 col-md-6 logo-wrap-1"> | ||||
|                         <img class="img-responsive" src="{% static 'datacenterlight/img/prometheus.png' %}" alt="Prometheus"> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="col-xs-12 col-sm-8 col-md-7 text-right"> | ||||
|                         <div class="tech-sub-sec"> | ||||
|                             <h2>{% trans "We believe in giving back to the FOSS community." %}</h2> | ||||
|                             <p class="lead">{% blocktrans %}Data Center Light is the child of free and open source software (FOSS). <br>We grew up with it, live by it, and believe in it.<br> The more we work on our data center,<br> the more we contribute back to the FOSS community.{% endblocktrans %}</p> | ||||
|                             <p class="lead new-lead">{% blocktrans %}Data Center Light is the child of free and open source software (FOSS) movement. <br>We grew up with it, live by it, and believe in it.<br> The more we work on our data center,<br> the more we contribute back to the FOSS community.{% endblocktrans %}</p> | ||||
|                         </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|  | @ -102,33 +99,30 @@ | |||
|         <div class="space"> | ||||
|         <div class="container"> | ||||
|             <div class="row"> | ||||
| 				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> | ||||
| 					<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 tech-sub-sec"> | ||||
| 						<h2>{% trans "We bring the future to you." %}</h2> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-7 col-md-8 col-lg-8 text-left tech-sub-sec landscape-xs-6"> | ||||
| 							<p class="lead">{% blocktrans %} Data Center Light uses the most modern technologies out there.<br> | ||||
| 							Your VM needs only IPv6. Data Center Light provides<br> transparent two-way IPv6/IPv4 translation. | ||||
| 							{% endblocktrans %}</p> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-5 col-md-4 col-lg-4 percent-text text-right landscape-xs-6"> | ||||
| 							100% <strong>IPv6</strong> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				<div class="col-lg-12 space-block"></div> | ||||
| 				<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> | ||||
| 					<div class="col-xs-12 col-sm-7 col-md-8 col-lg-8 percent-text landscape-xs-8"> | ||||
| 							<span class="pull-left space-middle"> 100% <strong>SSD</strong></span> <span class="pull-left ssdimg"><img class="img-responsive" src="{% static 'datacenterlight/img/ssd.jpg' %}" alt="SSD"></span> | ||||
| 					</div> | ||||
| 					<div class="col-xs-12 col-sm-5 col-md-4 col-lg-4 text-right tech-sub-sec  padding-vertical landscape-xs-4"> | ||||
| 						<div> | ||||
| 							<p class="lead">{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}</p> | ||||
| 						</div> | ||||
| 					</div> | ||||
|                 <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> | ||||
|                     <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 tech-sub-sec"> | ||||
|                         <h2>{% trans "We bring the future to you." %}</h2> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-7 col-md-8 col-lg-8 text-left tech-sub-sec landscape-xs-6"> | ||||
|                             <p class="lead new-lead">{% blocktrans %} Data Center Light uses the most modern technologies out there.<br> | ||||
|                             Your VM needs only IPv6. Data Center Light provides<br> transparent two-way IPv6/IPv4 translation. | ||||
|                             {% endblocktrans %}</p> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-5 col-md-4 col-lg-4 percent-text text-right landscape-xs-6"> | ||||
|                             100% <strong>IPv6</strong> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="col-lg-12 space-block"></div> | ||||
|                 <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> | ||||
|                     <div class="col-xs-12 col-sm-7 col-md-8 col-lg-8 percent-text landscape-xs-8"> | ||||
|                             <span class="pull-left space-middle"> 100% <strong>SSD</strong></span> <span class="pull-left ssdimg"><img class="img-responsive" src="{% static 'datacenterlight/img/ssd.jpg' %}" alt="SSD"></span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-5 col-md-4 col-lg-4 text-right tech-sub-sec  padding-vertical landscape-xs-4"> | ||||
|                         <div> | ||||
|                             <p class="lead new-lead">{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}</p> | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|                  | ||||
| 				 | ||||
|                  | ||||
|             </div> | ||||
|         </div> | ||||
|         </div> | ||||
|  | @ -142,7 +136,7 @@ | |||
|             <div class="row text-center"> | ||||
|                 <div class="col-xs-12 col-md-6 text"> | ||||
|                     <h2 class="section-heading">{% trans "Starting from only 15CHF per month. Try now." %}</h2> | ||||
|                     <p class="lead">{% trans "Actions speak louder than words. Let's do it, try our VM now." %}</p> | ||||
|                     <p class="lead new-lead">{% trans "Actions speak louder than words. Let's do it, try our VM now." %}</p> | ||||
|                 </div> | ||||
| 
 | ||||
|                 <div class="col-xs-12 col-md-6 hero-feature"> | ||||
|  | @ -150,94 +144,7 @@ | |||
|                         <div class="landing card"> | ||||
|                             <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> | ||||
|                             <div class="caption"> | ||||
|                                 <form id="order_form" method="POST" action="" data-toggle="validator" role="form"> | ||||
|                                     {% csrf_token %} | ||||
|                                     <div class="title"> | ||||
|                                        <h3>{% trans "VM hosting" %} </h3> | ||||
|                                     </div> | ||||
|                                     <div class="price"> | ||||
|                                         <span id="total">15</span> | ||||
|                                         <span>CHF/{% trans "month" %}</span> | ||||
|                                         <div class="price-text"> | ||||
|                                             <p>{% trans "VAT included" %}</p> | ||||
|                                         </div> | ||||
|                                     </div> | ||||
|                                     <div class="descriptions"> | ||||
|                                         <div class="description form-group"> | ||||
|                                             <p>{% trans "Hosted in Switzerland" %}</p> | ||||
|                                         </div> | ||||
|                                         <div class="form-group"> | ||||
|                                             <div class="description input"> | ||||
|                                             <i class="fa fa-minus-circle left" data-minus="cpu" aria-hidden="true"></i> | ||||
|                                             <input class="input-price select-number" type="number"  min="1" max="42" id="coreValue" name="cpu" data-error="{% trans 'Please enter a value greater than or equal to 1.' %}" required> | ||||
|                                             <span> Core</span> | ||||
|                                             <i class="fa fa-plus-circle right" data-plus="cpu"  aria-hidden="true"></i> | ||||
|                                             </div> | ||||
|                                             <div class="help-block with-errors"></div> | ||||
|                                         </div> | ||||
|                                         <div class="form-group"> | ||||
|                                             <div class="description input"> | ||||
|                                             <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i> | ||||
|                                             <input id="ramValue" class="input-price select-number" type="number"  min="2" max="200"  name="ram" data-error="{% trans 'Please enter a value greater than or equal to 2.' %}" required> | ||||
|                                             <span> GB RAM</span> | ||||
|                                             <i class="fa fa-plus-circle right" data-plus="ram"  aria-hidden="true"></i> | ||||
|                                             </div> | ||||
|                                             <div class="help-block with-errors"></div> | ||||
|                                         </div> | ||||
|                                         <div class="form-group"> | ||||
|                                             <div class="description input"> | ||||
|                                             <i class="fa fa-minus-circle left" data-minus="storage" aria-hidden="true"></i> | ||||
|                                             <input id="storageValue" class="input-price select-number" type="number"  min="10" max="500" step="10" name="storage" data-error="{% trans 'Please enter a value greater than or equal to 10.' %}" required> | ||||
|                                             <span>{% trans "GB Storage (SSD)" %}</span> | ||||
|                                             <i class="fa fa-plus-circle right" data-plus="storage"  aria-hidden="true"></i> | ||||
|                                             </div> | ||||
|                                             <div class="help-block with-errors"></div> | ||||
|                                         </div> | ||||
|                                         <div class="description select-configuration input form-group justify-center"> | ||||
|                                             <label for="config">OS</label> | ||||
|                                             <select name="config" id=""> | ||||
|                                                 {% for template in templates %} | ||||
|                                                     <option value="{{template.id}}">{{template.name}} </option> | ||||
|                                                 {% endfor %} | ||||
|                                             </select> | ||||
|                                         </div> | ||||
|                                         <input type="hidden" name="total"> | ||||
|                                         <!--<div class="description check-ip"> | ||||
|                                             <input type="checkbox" name="ipv6"> Ipv6 Only<br> | ||||
|                                         </div>--> | ||||
|                                             <div class="form-group"> | ||||
|                                                 <div class="description input justify-center"> | ||||
|                                                 <label for="name" class="control-label">{% trans "Name"%}</label> | ||||
|                                                 <input type="text" name="name" class="form-control" placeholder="{% trans 'Your Name'%}" data-minlength="3" data-error="{% trans 'Please enter your name' %}" required> | ||||
|                                                 </div> | ||||
|                                                 <div class="help-block with-errors"> | ||||
|                                                     {% for message in messages %} | ||||
|                                                         {% if 'name' in message.tags %} | ||||
|                                                         <ul class="list-unstyled"><li> | ||||
|                                                             {{ message|safe }} | ||||
|                                                         </li></ul> | ||||
|                                                         {% endif %} | ||||
|                                                     {% endfor %} | ||||
|                                                 </div> | ||||
|                                             </div> | ||||
|                                             <div class="form-group"> | ||||
|                                                 <div class="description input justify-center"> | ||||
|                                                 <label for="email" class="control-label">{% trans "Email"%}</label> | ||||
|                                                 <input name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" placeholder="{% trans 'Your Email' %}" data-error="{% trans 'Please enter a valid email address' %}" required> | ||||
|                                                 </div> | ||||
|                                                 <div class="help-block with-errors"> | ||||
|                                                     {% for message in messages %} | ||||
|                                                         {% if 'email' in message.tags %} | ||||
|                                                          <ul class="list-unstyled"><li> | ||||
|                                                             {{ message|safe }} | ||||
|                                                         </li></ul> | ||||
|                                                         {% endif %} | ||||
|                                                     {% endfor %} | ||||
|                                                 </div> | ||||
|                                             </div> | ||||
|                                     </div> | ||||
|                                     <input type="submit" class="btn btn-primary" value="{% trans 'Order Now!' %}"></input> | ||||
|                                 </form> | ||||
|                             {% include "datacenterlight/calculator_form.html" %} | ||||
|                             </div> | ||||
|                         </div> | ||||
|                     </div> | ||||
|  | @ -249,6 +156,4 @@ | |||
|     </div> | ||||
|      | ||||
|     <!-- End Why Data Center Light? --> | ||||
| 
 | ||||
|   | ||||
|     {% endblock %} | ||||
| {% endblock %} | ||||
|  |  | |||
|  | @ -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 | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								digitalglarus/static/digitalglarus/img/impacthub_logo.jpg
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								digitalglarus/static/digitalglarus/img/impacthub_logo.jpg
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 9.1 KiB | 
|  | @ -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; | ||||
|      } | ||||
| } | ||||
|   </style> | ||||
| 
 | ||||
| 
 | ||||
|  | @ -132,7 +173,15 @@ | |||
|     <section id="services"> | ||||
|       <div class="container"> | ||||
|     <div class="row"> | ||||
|       <div class="col-lg-12 text-center wow fadeInDown"> | ||||
|       <div class="col-lg-12 text-center wow fadeInDown section-top-content"> | ||||
|         <div class="col-lg-3 col-sm-2 col-xs-12"></div> | ||||
|         <div class="col-lg-6 col-sm-10 col-xs-12"> | ||||
| 			<div class="col-lg-5 col-sm-5 col-xs-6 section-top-txt">Partner <span>of</span></div> | ||||
| 			<div class="col-lg-7 col-sm-4 col-xs-6 section-top-img"><a href="https://zurich.impacthub.ch" target="_blank"><img src="{% static 'digitalglarus/img/impacthub_logo.jpg' %}" class="img-responsive" alt=""></a></div> | ||||
| 		</div> | ||||
|         <div class="col-lg-3 col-sm-12 col-xs-12"></div> | ||||
|       </div> | ||||
|       <div class="col-lg-12 col-xs-12 text-center wow fadeInDown"> | ||||
|         <h2 class="section-heading">In Digital Glarus you can..</h2> | ||||
|         <hr class="primary"> | ||||
|       </div> | ||||
|  |  | |||
|  | @ -45,17 +45,10 @@ | |||
|     <script src="{% static 'digitalglarus/https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||
|     <![endif]--> | ||||
|     <!-- <link href="css/ungleich.css" rel="stylesheet" type="text/css"></link> --> | ||||
|     <!-- Google tracking --> | ||||
|     <script src="//www.google-analytics.com/analytics.js" async></script><script> | ||||
|       (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||||
|       (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||||
|       m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||||
|       })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | ||||
| 
 | ||||
|       ga('create', 'UA-62285904-1', 'auto'); | ||||
|       ga('send', 'pageview'); | ||||
| 
 | ||||
|     </script> | ||||
|     <!-- Google analytics --> | ||||
|     {% include 'google_analytics.html' %} | ||||
|     <!-- End Google Analytics --> | ||||
|     <link rel="shortcut icon" href="{% static 'digitalglarus/img/favicon.ico' %}" type="image/x-icon"> | ||||
|     <style id="igtranslator-color" type="text/css"></style> | ||||
|     <style type="text/css"> | ||||
|  |  | |||
|  | @ -146,7 +146,6 @@ TEMPLATES = [ | |||
|     { | ||||
|         'BACKEND': 'django.template.backends.django.DjangoTemplates', | ||||
|         'DIRS': [os.path.join(PROJECT_DIR, 'cms_templates/'), | ||||
|                  os.path.join(PROJECT_DIR, 'templates'), | ||||
|                  os.path.join(PROJECT_DIR, 'cms_templates/djangocms_blog/'), | ||||
|                  os.path.join(PROJECT_DIR, 'membership'), | ||||
|                  os.path.join(PROJECT_DIR, 'hosting/templates/'), | ||||
|  | @ -154,8 +153,8 @@ TEMPLATES = [ | |||
|                  os.path.join(PROJECT_DIR, 'ungleich/templates/djangocms_blog/'), | ||||
|                  os.path.join(PROJECT_DIR, 'ungleich/templates/cms/ungleichch'), | ||||
|                  os.path.join(PROJECT_DIR, 'ungleich/templates/ungleich'), | ||||
|                  os.path.join(PROJECT_DIR, 'ungleich_page/templates/ungleich_page') | ||||
| 
 | ||||
|                  os.path.join(PROJECT_DIR, 'ungleich_page/templates/ungleich_page'), | ||||
|                  os.path.join(PROJECT_DIR, 'templates/analytics'), | ||||
|                  ], | ||||
|         'APP_DIRS': True, | ||||
|         'OPTIONS': { | ||||
|  | @ -516,8 +515,12 @@ DCL_SUPPORT_FROM_ADDRESS = env('DCL_SUPPORT_FROM_ADDRESS') | |||
| 
 | ||||
| # Settings for Google analytics | ||||
| GOOGLE_ANALYTICS_PROPERTY_IDS = { | ||||
|     'datacenterlight.ch': 'UA-62285904-9', | ||||
|     'ungleich.ch': 'UA-62285904-1', | ||||
|     'digitalglarus.ch': 'UA-62285904-2', | ||||
|     'blog.ungleich.ch': 'UA-62285904-4', | ||||
|     'hosting': 'UA-62285904-5', | ||||
|     'datacenterlight.ch': 'UA-62285904-9', | ||||
| 
 | ||||
|     '127.0.0.1:8000': 'localhost', | ||||
|     'dynamicweb-development.ungleich.ch': 'development', | ||||
|     'dynamicweb-staging.ungleich.ch': 'staging' | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ msgid "" | |||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2017-07-01 02:09+0530\n" | ||||
| "POT-Creation-Date: 2017-07-17 00:53+0530\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
|  | @ -18,55 +18,55 @@ msgstr "" | |||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| 
 | ||||
| #: forms.py:28 | ||||
| #: forms.py:25 | ||||
| msgid "Your account is not activated yet." | ||||
| msgstr "Dein Account wurde noch nicht aktiviert." | ||||
| 
 | ||||
| #: forms.py:65 | ||||
| #: forms.py:62 | ||||
| msgid "Paste here your public key" | ||||
| msgstr "Fügen Sie Ihren public key ein" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:68 | ||||
| #: templates/hosting/base_short.html:71 | ||||
| msgid "My Virtual Machines" | ||||
| msgstr "Meine virtuellen Maschinen" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:73 templates/hosting/orders.html.py:12 | ||||
| #: templates/hosting/base_short.html:76 templates/hosting/orders.html.py:12 | ||||
| msgid "My Orders" | ||||
| msgstr "Meine Bestellungen" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:82 | ||||
| #: templates/hosting/base_short.html:85 | ||||
| msgid "Keys" | ||||
| msgstr "Schlüssel" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:87 | ||||
| #: templates/hosting/base_short.html:90 | ||||
| msgid "Notifications " | ||||
| msgstr "Benachrichtigungen" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:90 | ||||
| #: templates/hosting/base_short.html:93 | ||||
| msgid "Logout" | ||||
| msgstr "Abmelden" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:95 | ||||
| #: templates/hosting/base_short.html:98 | ||||
| msgid "How it works" | ||||
| msgstr "So funktioniert es" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:98 | ||||
| #: templates/hosting/base_short.html:101 | ||||
| msgid "Your infrastructure" | ||||
| msgstr "deine Infrastruktur" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:101 | ||||
| #: templates/hosting/base_short.html:104 | ||||
| msgid "Our inftrastructure" | ||||
| msgstr "Unsere Infrastruktur" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:104 | ||||
| #: templates/hosting/base_short.html:107 | ||||
| msgid "Pricing" | ||||
| msgstr "Preise" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:107 | ||||
| #: templates/hosting/base_short.html:110 | ||||
| msgid "Contact" | ||||
| msgstr "Kontakt" | ||||
| 
 | ||||
| #: templates/hosting/base_short.html:110 | ||||
| #: templates/hosting/base_short.html:113 | ||||
| #: templates/hosting/confirm_reset_password.html:38 | ||||
| #: templates/hosting/login.html:17 templates/hosting/login.html.py:26 | ||||
| #: templates/hosting/reset_password.html:32 templates/hosting/signup.html:30 | ||||
|  | @ -185,20 +185,14 @@ msgid "New Virtual Machine" | |||
| msgstr "Neue virtuelle Maschine" | ||||
| 
 | ||||
| #: templates/hosting/create_virtual_machine.html:28 | ||||
| #, fuzzy | ||||
| #| msgid "Select VM Template:" | ||||
| msgid "Step 1. Select VM Template:" | ||||
| msgstr "Wähle eine Vorlage" | ||||
| 
 | ||||
| #: templates/hosting/create_virtual_machine.html:42 | ||||
| #, fuzzy | ||||
| #| msgid "Select VM Configuration:" | ||||
| msgid "Step2. Select VM Configuration" | ||||
| msgstr "Wähle eine Konfiguration" | ||||
| 
 | ||||
| #: templates/hosting/create_virtual_machine.html:59 | ||||
| #, fuzzy | ||||
| #| msgid "Pricing" | ||||
| msgid "Price " | ||||
| msgstr "Preis" | ||||
| 
 | ||||
|  | @ -239,7 +233,7 @@ msgid "Don't have an account yet ? " | |||
| msgstr "Besitzt du kein Benutzerkonto?" | ||||
| 
 | ||||
| #: templates/hosting/login.html:37 templates/hosting/signup.html.py:13 | ||||
| #: templates/hosting/signup.html:21 views.py:223 | ||||
| #: templates/hosting/signup.html:21 views.py:219 | ||||
| msgid "Sign up" | ||||
| msgstr "Registrieren" | ||||
| 
 | ||||
|  | @ -295,23 +289,23 @@ msgstr "Bezahlmethode" | |||
| msgid "Order summary" | ||||
| msgstr "Bestellungsübersicht" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:65 templates/hosting/payment.html:17 | ||||
| #: templates/hosting/order_detail.html:65 templates/hosting/payment.html:13 | ||||
| #: templates/hosting/virtual_machine_detail.html:76 | ||||
| msgid "Cores" | ||||
| msgstr "Prozessorkerne" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:67 templates/hosting/payment.html:20 | ||||
| #: templates/hosting/order_detail.html:67 templates/hosting/payment.html:16 | ||||
| #: templates/hosting/virtual_machine_detail.html:82 | ||||
| msgid "Memory" | ||||
| msgstr "Arbeitsspeicher" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:69 templates/hosting/payment.html:23 | ||||
| #: templates/hosting/order_detail.html:69 templates/hosting/payment.html:19 | ||||
| msgid "Disk space" | ||||
| msgstr "Festplattenkapazität" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:71 | ||||
| #: templates/hosting/order_detail.html:71 templates/hosting/payment.html:41 | ||||
| msgid "Total" | ||||
| msgstr "" | ||||
| msgstr "Gesamt" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:77 | ||||
| msgid "Finish Configuration" | ||||
|  | @ -355,42 +349,97 @@ msgstr "Schliessen" | |||
| msgid "Delete" | ||||
| msgstr "Löschen" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:12 | ||||
| msgid "Billing Amount" | ||||
| msgstr "Rechnungsbetrag" | ||||
| #: templates/hosting/payment.html:10 | ||||
| msgid "Your Order" | ||||
| msgstr "Deine Bestellung" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:26 | ||||
| #: templates/hosting/payment.html:22 | ||||
| #: templates/hosting/virtual_machine_detail.html:98 | ||||
| msgid "Configuration" | ||||
| msgstr "Konfiguration" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:38 | ||||
| #: templates/hosting/payment.html:41 | ||||
| msgid "including VAT" | ||||
| msgstr "inkl. Mehrwertsteuer" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:55 | ||||
| msgid "Billing Address" | ||||
| msgstr "Rechnungsadresse" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:52 | ||||
| msgid "Payment Details" | ||||
| msgstr "Rechnungsdetails" | ||||
| #: templates/hosting/payment.html:66 | ||||
| msgid "Credit Card" | ||||
| msgstr "Kreditkarte" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:65 | ||||
| msgid "Submit Payment" | ||||
| msgstr "Betrag überweisen" | ||||
| #: templates/hosting/payment.html:71 | ||||
| msgid "" | ||||
| "\n" | ||||
| "                                Please fill in your credit card information " | ||||
| "below. We are using <a\n" | ||||
| "                                    href=\"https://stripe.com\" target=" | ||||
| "\"_blank\">Stripe</a> for payment and do not store\n" | ||||
| "                                your information in our database.\n" | ||||
| "                                " | ||||
| msgstr "" | ||||
| "\n" | ||||
| "Bitte füll Deine Kreditkarteninformationen unten aus. Wir nutzen <a href=" | ||||
| "\"https://stripe.com\" target=\"_blank\">Stripe</a> für die Bezahlung und " | ||||
| "speichern keine Informationen in unserer Datenbank." | ||||
| 
 | ||||
| #: templates/hosting/payment.html:84 | ||||
| msgid "CARD NUMBER" | ||||
| #: templates/hosting/payment.html:90 | ||||
| msgid "" | ||||
| "\n" | ||||
| "                                        You are not making any payment yet. " | ||||
| "After submitting your card\n" | ||||
| "                                        information, you will be taken to " | ||||
| "the Confirm Order Page.\n" | ||||
| "                                        " | ||||
| msgstr "" | ||||
| "\n" | ||||
| "Es wird noch keine Bezahlung vorgenommen. Nach der Eingabe Deiner " | ||||
| "Kreditkateninformationen wirst du auf die Bestellbestätigungsseite " | ||||
| "weitergeleitet." | ||||
| 
 | ||||
| #: templates/hosting/payment.html:101 templates/hosting/payment.html.py:143 | ||||
| msgid "Submit" | ||||
| msgstr "Absenden" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:113 | ||||
| msgid "Card Number" | ||||
| msgstr "Kreditkartennummer" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:89 | ||||
| msgid "Valid Card Number" | ||||
| msgstr "Gültige Kreditkartennummer" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:98 | ||||
| msgid "EXPIRATION DATE" | ||||
| #: templates/hosting/payment.html:117 | ||||
| msgid "Expiry Date" | ||||
| msgstr "Ablaufdatum" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:109 | ||||
| msgid "CV CODE" | ||||
| msgstr "CV Code" | ||||
| #: templates/hosting/payment.html:122 | ||||
| msgid "CVC" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:126 | ||||
| msgid "Card Type" | ||||
| msgstr "Kartentyp" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:135 | ||||
| msgid "" | ||||
| "\n" | ||||
| "                                            You are not making any payment " | ||||
| "yet. After submitting your card\n" | ||||
| "                                            information, you will be taken " | ||||
| "to the Confirm Order Page.\n" | ||||
| "                                            " | ||||
| msgstr "" | ||||
| "\n" | ||||
| "Es wird noch keine Bezahlung vorgenommen. Nach der Eingabe Deiner " | ||||
| "Kreditkateninformationen wirst du auf die Bestellbestätigungsseite " | ||||
| "weitergeleitet." | ||||
| 
 | ||||
| #: templates/hosting/payment.html:178 | ||||
| msgid "Processing" | ||||
| msgstr "Weiter" | ||||
| 
 | ||||
| #: templates/hosting/payment.html:179 | ||||
| msgid "Enter your credit card number" | ||||
| msgstr "Deine Kreditkartennummer" | ||||
| 
 | ||||
| #: templates/hosting/reset_password.html:15 | ||||
| msgid "Reset your password" | ||||
|  | @ -431,14 +480,10 @@ msgid "Created at" | |||
| msgstr "Erstellt am" | ||||
| 
 | ||||
| #: templates/hosting/user_keys.html:43 | ||||
| #, fuzzy | ||||
| #| msgid "Delete" | ||||
| msgid "Delete Key" | ||||
| msgstr "Löschen" | ||||
| 
 | ||||
| #: templates/hosting/user_keys.html:56 | ||||
| #, fuzzy | ||||
| #| msgid "Do You want do delete your order?" | ||||
| msgid "Do You want to delete this key?" | ||||
| msgstr "Möchtest Du den Schlüssel löschen?" | ||||
| 
 | ||||
|  | @ -502,11 +547,11 @@ msgstr "IPv4" | |||
| msgid "Ipv6" | ||||
| msgstr "IPv6" | ||||
| 
 | ||||
| #: views.py:213 views.py:232 | ||||
| #: views.py:207 views.py:229 | ||||
| msgid "login" | ||||
| msgstr "einloggen" | ||||
| 
 | ||||
| #: views.py:217 | ||||
| #: views.py:212 | ||||
| msgid "" | ||||
| "Thank you for signing up. We have sent an email to you. Please follow the " | ||||
| "instructions in it to activate your account. Once activated, you can login " | ||||
|  | @ -516,32 +561,55 @@ msgstr "" | |||
| "den Anweisungen um deinen Account zu aktivieren. Danach kannst du dich über " | ||||
| "diesen" | ||||
| 
 | ||||
| #: views.py:218 views.py:243 | ||||
| #: views.py:214 views.py:240 | ||||
| msgid "Go back to" | ||||
| msgstr "Zurück" | ||||
| 
 | ||||
| #: views.py:233 | ||||
| #: views.py:230 | ||||
| msgid "Account activation" | ||||
| msgstr "Accountaktivierung" | ||||
| 
 | ||||
| #: views.py:236 | ||||
| #: views.py:233 | ||||
| msgid "Your account has been activated." | ||||
| msgstr "Dein Account wurde aktiviert." | ||||
| 
 | ||||
| #: views.py:237 | ||||
| #: views.py:234 | ||||
| msgid "You can now" | ||||
| msgstr "Du kannst dich nun" | ||||
| 
 | ||||
| #: views.py:242 | ||||
| #: views.py:239 | ||||
| msgid "Sorry. Your request is invalid." | ||||
| msgstr "Entschuldigung, deine Anfrage ist ungültig." | ||||
| 
 | ||||
| #: views.py:760 | ||||
| #: views.py:757 | ||||
| msgid "" | ||||
| "We could not find the requested VM. Please                            " | ||||
| "contact Data Center Light Support." | ||||
| msgstr "" | ||||
| 
 | ||||
| #~ msgid "Billing Amount" | ||||
| #~ msgstr "Rechnungsbetrag" | ||||
| 
 | ||||
| #~ msgid "Payment Details" | ||||
| #~ msgstr "Rechnungsdetails" | ||||
| 
 | ||||
| #~ msgid "Place Order" | ||||
| #~ msgstr "Bestelle" | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "You are not making any payment yet. After placing your order, you will be " | ||||
| #~ "taken to the Submit Payment Page." | ||||
| #~ msgstr "" | ||||
| #~ "Es wird noch keine Bezahlung vorgenommen. Nach der Eingabe deiner " | ||||
| #~ "Kreditkateninformationen wirst du auf die Bestellbestätigungsseite " | ||||
| #~ "weitergeleitet." | ||||
| 
 | ||||
| #~ msgid "CARD NUMBER" | ||||
| #~ msgstr "Kreditkartennummer" | ||||
| 
 | ||||
| #~ msgid "EXPIRATION DATE" | ||||
| #~ msgstr "Ablaufdatum" | ||||
| 
 | ||||
| #~ msgid "Home" | ||||
| #~ msgstr "Home" | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,14 +4,15 @@ | |||
|  * 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-face { | ||||
|     src: url('../fonts/Lato/Lato-Black.ttf'); | ||||
| } | ||||
| 
 | ||||
| @font-face { | ||||
|     font-family: 'Lato-Light'; | ||||
|     src: url('../fonts/Lato/Lato-Light.ttf'); | ||||
|  | @ -33,10 +34,35 @@ h6 { | |||
|     font-family: 'Lato-Regular', sans-serif; | ||||
|     font-weight: 300; | ||||
| } | ||||
| 
 | ||||
| .topnav { | ||||
|     font-size: 14px; | ||||
| } | ||||
| 
 | ||||
| .navbar-transparent { | ||||
|     background: transparent; | ||||
|     border: none; | ||||
|     padding: 20px; | ||||
| } | ||||
| 
 | ||||
| .navbar-transparent .navbar-nav>li>a { | ||||
|     color: #fff; | ||||
|     cursor: pointer; | ||||
|     font-family: 'Lato-Regular', 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 { | ||||
|     color: #fff; | ||||
|     background-color: transparent; | ||||
| } | ||||
| 
 | ||||
| .navbar-transparent #logoWhite{ | ||||
|     display: block; | ||||
|     width: 220px; | ||||
| } | ||||
| 
 | ||||
| .lead { | ||||
|     font-size: 18px; | ||||
|     font-weight: 400; | ||||
|  | @ -191,17 +217,19 @@ h6 { | |||
|     float: right; | ||||
|     margin-top: 0; | ||||
| } | ||||
| 
 | ||||
| /*------Auth section---------*/ | ||||
| .auth-container{ | ||||
| .auth-container { | ||||
|     height: 100vh; | ||||
|     position: relative; | ||||
| } | ||||
| .auth-bg{ | ||||
| 
 | ||||
| .auth-bg { | ||||
|     background: url(../img/auth-bg.jpg); | ||||
|     position: fixed; | ||||
|     left: 0; | ||||
|     top: 0; | ||||
|      width: 100%; | ||||
|     width: 100%; | ||||
|     height: 100vh; | ||||
|     background-repeat: no-repeat; | ||||
|     background-position: center center; | ||||
|  | @ -209,7 +237,8 @@ h6 { | |||
|     background-attachment: fixed; | ||||
| 
 | ||||
| } | ||||
| .auth-bg::before{ | ||||
| 
 | ||||
| .auth-bg::before { | ||||
|     content: ""; | ||||
|     position: absolute; | ||||
|     top: 0; | ||||
|  | @ -219,26 +248,30 @@ h6 { | |||
|     background: rgba(75, 75, 101, 0.55); | ||||
|     z-index: 1; | ||||
| } | ||||
| .auth-container .container{ | ||||
| 
 | ||||
| .auth-container .container { | ||||
|     z-index: 1000; | ||||
| } | ||||
| .auth-container .auth-content{ | ||||
| 
 | ||||
| .auth-container .auth-content { | ||||
|     width: 100%; | ||||
|     margin: 0 auto; | ||||
|     max-width: 390px; | ||||
| } | ||||
| .auth-container .auth-center{ | ||||
| 
 | ||||
| .auth-container .auth-center { | ||||
|     position: absolute; | ||||
|     left: 50%; | ||||
|     top: 50%; | ||||
|     transform: translate(-50%,-50%);  | ||||
|     transform: translate(-50%, -50%); | ||||
|     width: 100%; | ||||
| } | ||||
| 
 | ||||
| .auth-container .auth-title{ | ||||
| .auth-container .auth-title { | ||||
|     margin-bottom: 50px; | ||||
| } | ||||
| .auth-container .auth-title h2{ | ||||
| 
 | ||||
| .auth-container .auth-title h2 { | ||||
|     color: #fff; | ||||
|     font-size: 44px; | ||||
|     text-align: center; | ||||
|  | @ -247,7 +280,8 @@ h6 { | |||
|     margin-bottom: 30px; | ||||
|     position: relative; | ||||
| } | ||||
| .auth-container .auth-title h2::after{ | ||||
| 
 | ||||
| .auth-container .auth-title h2::after { | ||||
|     content: ""; | ||||
|     position: absolute; | ||||
|     bottom: -20px; | ||||
|  | @ -258,17 +292,17 @@ h6 { | |||
|     transform: translate(-50%, 0); | ||||
| } | ||||
| 
 | ||||
| .auth-box{ | ||||
| .auth-box { | ||||
|     background: #fff; | ||||
|     padding: 0; | ||||
|     padding-bottom: 30px; | ||||
|     box-sizing: border-box; | ||||
|     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); | ||||
|     border-radius: 4px; | ||||
|     z-index: 10; | ||||
| } | ||||
| 
 | ||||
| .auth-box .section-heading{ | ||||
| .auth-box .section-heading { | ||||
|     color: #5a5a5a; | ||||
|     padding-top: 30px; | ||||
|     padding-bottom: 5px; | ||||
|  | @ -279,42 +313,51 @@ h6 { | |||
|     border-radius: 3px 3px 0px 0px; | ||||
|     margin: 0 auto; | ||||
| } | ||||
| .auth-box .form{ | ||||
| 
 | ||||
| .auth-box .form { | ||||
|     padding: 20px; | ||||
|     width: 80%; | ||||
|     margin: 0 auto; | ||||
| } | ||||
| .auth-box .form .red{ | ||||
| 
 | ||||
| .auth-box .form .red { | ||||
|     color: #ea3a3a; | ||||
| } | ||||
| .auth-box .form .btn{ | ||||
|     box-shadow: 0 0px 9px rgba(0,0,0,0.19), 0 3px 5px rgba(0,0,0,0.23); | ||||
| 
 | ||||
| .auth-box .form .btn { | ||||
|     box-shadow: 0 0px 9px rgba(0, 0, 0, 0.19), 0 3px 5px rgba(0, 0, 0, 0.23); | ||||
|     letter-spacing: 3px; | ||||
|     font-size: 17px; | ||||
|     text-transform: uppercase; | ||||
| } | ||||
| .auth-box .form .form-control{ | ||||
| 
 | ||||
| .auth-box .form .form-control { | ||||
|     height: 44px; | ||||
|     font-size: 16px; | ||||
| } | ||||
| 
 | ||||
| .auth-box .auth-footer { | ||||
|     text-align: center; | ||||
|     padding: 10px; | ||||
| } | ||||
| .auth-box .auth-footer .text{ | ||||
| 
 | ||||
| .auth-box .auth-footer .text { | ||||
|     color: #777; | ||||
| } | ||||
| .auth-box .auth-footer .links a{ | ||||
|     color: #1e94cc; | ||||
| } | ||||
| .auth-box .auth-footer .links a:hover{ | ||||
| 
 | ||||
| .auth-box .auth-footer .links a { | ||||
|     color: #1e94cc; | ||||
| } | ||||
| 
 | ||||
| .auth-box.sign-up{ | ||||
| .auth-box .auth-footer .links a:hover { | ||||
|     color: #1e94cc; | ||||
| } | ||||
| 
 | ||||
| .auth-box.sign-up { | ||||
|     padding-bottom: 5px; | ||||
| } | ||||
| .auth-box.sign-up .form{ | ||||
| 
 | ||||
| .auth-box.sign-up .form { | ||||
|     padding: 15px 20px 0 20px; | ||||
| } | ||||
| 
 | ||||
|  | @ -325,6 +368,7 @@ h6 { | |||
|     line-height: 30px; | ||||
|     font-family: 'Lato' !important; | ||||
| } | ||||
| 
 | ||||
| .sign-up-message a { | ||||
|     font-size: 18px; | ||||
|     color: #1e94cc !important; | ||||
|  | @ -353,38 +397,47 @@ h6 { | |||
|     ul.banner-social-buttons > li:last-child { | ||||
|         margin-bottom: 0; | ||||
|     } | ||||
| 
 | ||||
|     .auth-box .form { | ||||
|         padding: 15px 0px 0 0; | ||||
|     } | ||||
| 
 | ||||
|     .auth-box.sign-up .form { | ||||
|         padding: 15px 0px 0 0; | ||||
|     } | ||||
| 
 | ||||
|     .auth-box .form .form-control { | ||||
|         height: 44px; | ||||
|         font-size: 13px; | ||||
|     } | ||||
| 
 | ||||
|     .auth-container .auth-title { | ||||
|         display: none; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @media (max-width: 540px) { | ||||
|     .auth-container .auth-title h2{ | ||||
|     .auth-container .auth-title h2 { | ||||
|         font-size: 32px; | ||||
|         width: 90%; | ||||
|         margin-bottom: 50px; | ||||
|     } | ||||
|     .auth-container.auth-signup .auth-title h2{ | ||||
| 
 | ||||
|     .auth-container.auth-signup .auth-title h2 { | ||||
|         font-size: 20px; | ||||
|         width: 90%; | ||||
|         margin-bottom: 50px; | ||||
|     } | ||||
| 
 | ||||
|     .auth-box .form { | ||||
|         width: 90%; | ||||
|     } | ||||
| 
 | ||||
|     .auth-box .section-heading { | ||||
|         font-size: 15px; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| footer { | ||||
|     padding: 2%; | ||||
|     background-color: #f8f8f8; | ||||
|  | @ -418,3 +471,246 @@ a.unlink:hover { | |||
|     color: inherit; | ||||
| } | ||||
| 
 | ||||
| /***** DCL payment page **********/ | ||||
| .dcl-order-container { | ||||
|     font-family: Lato; | ||||
| } | ||||
| 
 | ||||
| .dcl-order-table-header { | ||||
|     border-bottom: 1px solid #eee; | ||||
|     padding-top: 15px; | ||||
|     padding-bottom: 15px; | ||||
|     font-size: 16px; | ||||
|     color: #333; | ||||
|     text-align: center; | ||||
|     font-weight: 300; | ||||
| } | ||||
| 
 | ||||
| .dcl-order-table-content { | ||||
|     border-bottom: 1px solid #eee; | ||||
|     padding-top: 15px; | ||||
|     padding-bottom: 15px; | ||||
|     font-size: 18px; | ||||
|     font-weight: 600; | ||||
|     text-align: center; | ||||
| } | ||||
| 
 | ||||
| .tbl-content { | ||||
| } | ||||
| 
 | ||||
| .dcl-order-table-total { | ||||
|     border-bottom: 4px solid #eee; | ||||
|     padding-top: 15px; | ||||
|     padding-bottom: 20px; | ||||
|     font-size: 20px; | ||||
|     font-weight: 600; | ||||
|     color: #999; | ||||
| } | ||||
| 
 | ||||
| .dcl-order-table-total span { | ||||
|     font-size: 13px; | ||||
|     color: #999; | ||||
|     font-weight: 400; | ||||
|     padding-left: 5px; | ||||
| } | ||||
| 
 | ||||
| .dcl-order-table-total .tbl-total { | ||||
|     text-align: center; | ||||
|     color: #000; | ||||
| } | ||||
| 
 | ||||
| .tbl-no-padding { | ||||
|     padding: 0px; | ||||
| } | ||||
| 
 | ||||
| .dcl-billing-sec { | ||||
|     margin-top: 50px; | ||||
| } | ||||
| 
 | ||||
| .dcl-order-sec { | ||||
|     padding: 0 30px; | ||||
| } | ||||
| 
 | ||||
| .card-warning-content { | ||||
|     font-family: Lato; | ||||
|     border: 1px solid #a1a1a1; | ||||
|     border-radius: 3px; | ||||
|     padding: 5px; | ||||
| } | ||||
| 
 | ||||
| .stripe-payment-btn { | ||||
|     outline: none; | ||||
|     width: auto; | ||||
|     float: right; | ||||
|     font-style: normal; | ||||
|     font-weight: 300; | ||||
|     position: absolute; | ||||
|     padding-left: 30px; | ||||
|     padding-right: 30px; | ||||
|     right: 0; | ||||
| } | ||||
| 
 | ||||
| .brand { | ||||
| } | ||||
| 
 | ||||
| .brand #brand-icon { | ||||
| } | ||||
| 
 | ||||
| .card-number-element { | ||||
| } | ||||
| 
 | ||||
| .card-expiry-element { | ||||
| } | ||||
| 
 | ||||
| .card-cvc-element label { | ||||
|     padding-left: 10px; | ||||
| } | ||||
| 
 | ||||
| .card-element { | ||||
|     margin-bottom: 10px; | ||||
|     padding: 0; | ||||
| } | ||||
| 
 | ||||
| .card-element label{ | ||||
|     width:100%; | ||||
|     margin-bottom:0px; | ||||
| } | ||||
| 
 | ||||
| .my-input { | ||||
|    border-bottom: 1px solid #ccc; | ||||
|  } | ||||
| 
 | ||||
| .card-cvc-element .my-input { | ||||
|     padding-left: 10px; | ||||
| } | ||||
| 
 | ||||
| #card-errors { | ||||
|     clear: both; | ||||
|     padding: 0 0 10px; | ||||
|     color: #eb4d5c; | ||||
| } | ||||
| 
 | ||||
| .credit-card-goup{ | ||||
|     padding: 0; | ||||
| } | ||||
| 
 | ||||
| .order-confirm-date{ | ||||
|     text-align:right; | ||||
| } | ||||
| 
 | ||||
| @media (max-width: 767px) { | ||||
|     .dcl-order-table-total span { | ||||
|         padding-left: 3px; | ||||
|     } | ||||
| 
 | ||||
|     .dcl-order-sec { | ||||
|         padding: 10px 20px 30px 20px; | ||||
|         border-bottom: 4px solid #eee; | ||||
|     } | ||||
| 
 | ||||
|     .tbl-header { | ||||
|         border-bottom: 1px solid #eee; | ||||
|         padding: 10px 0; | ||||
|     } | ||||
| 
 | ||||
|     .tbl-content { | ||||
|         border-bottom: 1px solid #eee; | ||||
|         padding: 10px 0; | ||||
|     } | ||||
| 
 | ||||
|     .dcl-order-table-header { | ||||
|         border-bottom: 0px solid #eee; | ||||
|         padding: 10px 0; | ||||
|         text-align: left; | ||||
|     } | ||||
| 
 | ||||
|     .dcl-order-table-content { | ||||
|         border-bottom: 0px solid #eee; | ||||
|         padding: 10px 0; | ||||
|         text-align: right; | ||||
|         font-size: 16px; | ||||
|     } | ||||
| 
 | ||||
|     .dcl-order-table-total { | ||||
|         font-size: 18px; | ||||
|         color: #000; | ||||
|         padding: 10px 0; | ||||
|         border-bottom: 0px solid #eee; | ||||
|     } | ||||
| 
 | ||||
|     .dcl-order-table-total .tbl-total { | ||||
|         padding: 0px; | ||||
|         text-align: right; | ||||
|     } | ||||
| 
 | ||||
|     .dcl-billing-sec { | ||||
|         margin-top: 30px; | ||||
|         margin-bottom: 30px; | ||||
|     } | ||||
| 
 | ||||
|     .brand { | ||||
|     } | ||||
| 
 | ||||
|     .card-expiry-element { | ||||
|     padding-right: 10px; | ||||
|     } | ||||
| 
 | ||||
|     .card-cvc-element { | ||||
|     padding-left: 10px; | ||||
|     } | ||||
| 
 | ||||
|     .hide-mobile{ | ||||
|     display:none; | ||||
|     } | ||||
| 
 | ||||
|     #billing-form .form-control { | ||||
|     box-shadow: none !important; | ||||
|     font-weight: 400; | ||||
|     } | ||||
| 
 | ||||
|     .order-confirm-date{ | ||||
|         text-align:left; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @media (min-width: 1200px) { | ||||
|     .dcl-order-container { | ||||
|         width: 990px; | ||||
|         padding-right: 15px; | ||||
|         padding-left: 15px; | ||||
|         margin-right: auto; | ||||
|         margin-left: auto; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @media (min-width: 768px) { | ||||
|     .dcl-billing { | ||||
|         padding-right: 50px; | ||||
|         border-right: 1px solid #eee; | ||||
|     } | ||||
| 
 | ||||
|     .dcl-creditcard { | ||||
|         padding-left: 50px; | ||||
|     } | ||||
| 
 | ||||
|     .tbl-tot { | ||||
|         padding-left: 17px; | ||||
|     } | ||||
| 
 | ||||
|     .content-dashboard { | ||||
|         /*width: auto !important;*/ | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| @media only screen and (max-width: 1040px) and (min-width: 768px) { | ||||
|     .content-dashboard { | ||||
|         width: 96% !important; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @media only screen and (max-width: 1330px) and (min-width: 1200px) { | ||||
|     .content-dashboard { | ||||
|         width: 100% !important; | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -1,39 +1,143 @@ | |||
| $( document ).ready(function() { | ||||
| 
 | ||||
| 
 | ||||
| var cardBrandToPfClass = { | ||||
|     'visa': 'pf-visa', | ||||
|     'mastercard': 'pf-mastercard', | ||||
|     'amex': 'pf-american-express', | ||||
|     'discover': 'pf-discover', | ||||
|     'diners': 'pf-diners', | ||||
|     'jcb': 'pf-jcb', | ||||
|     'unknown': 'pf-credit-card' | ||||
| }; | ||||
| function setBrandIcon(brand) { | ||||
|     var brandIconElement = document.getElementById('brand-icon'); | ||||
|     var pfClass = 'pf-credit-card'; | ||||
|     if (brand in cardBrandToPfClass) { | ||||
|         pfClass = cardBrandToPfClass[brand]; | ||||
|     } | ||||
|     for (var i = brandIconElement.classList.length - 1; i >= 0; i--) { | ||||
|         brandIconElement.classList.remove(brandIconElement.classList[i]); | ||||
|     } | ||||
|     brandIconElement.classList.add('pf'); | ||||
|     brandIconElement.classList.add(pfClass); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| $(document).ready(function () { | ||||
|     $.ajaxSetup({ | ||||
|          beforeSend: function(xhr, settings) { | ||||
|              function getCookie(name) { | ||||
|                  var cookieValue = null; | ||||
|                  if (document.cookie && document.cookie != '') { | ||||
|                      var cookies = document.cookie.split(';'); | ||||
|                      for (var i = 0; i < cookies.length; i++) { | ||||
|                          var cookie = jQuery.trim(cookies[i]); | ||||
|                          // Does this cookie string begin with the name we want?
 | ||||
|                          if (cookie.substring(0, name.length + 1) == (name + '=')) { | ||||
|                              cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); | ||||
|                              break; | ||||
|                          } | ||||
|                      } | ||||
|                  } | ||||
|                  return cookieValue; | ||||
|              } | ||||
|              if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { | ||||
|                  // Only send the token to relative URLs i.e. locally.
 | ||||
|                  xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); | ||||
|              } | ||||
|          }  | ||||
|         beforeSend: function (xhr, settings) { | ||||
|             function getCookie(name) { | ||||
|                 var cookieValue = null; | ||||
|                 if (document.cookie && document.cookie != '') { | ||||
|                     var cookies = document.cookie.split(';'); | ||||
|                     for (var i = 0; i < cookies.length; i++) { | ||||
|                         var cookie = jQuery.trim(cookies[i]); | ||||
|                         // Does this cookie string begin with the name we want?
 | ||||
|                         if (cookie.substring(0, name.length + 1) == (name + '=')) { | ||||
|                             cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); | ||||
|                             break; | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|                 return cookieValue; | ||||
|             } | ||||
| 
 | ||||
|             if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { | ||||
|                 // Only send the token to relative URLs i.e. locally.
 | ||||
|                 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
| 
 | ||||
|     var hasCreditcard = window.hasCreditcard || false; | ||||
|     if (!hasCreditcard){ | ||||
|     if (!hasCreditcard) { | ||||
|         var stripe = Stripe(window.stripeKey); | ||||
|         var elements = stripe.elements({locale: window.current_lan}); | ||||
|         var card = elements.create('card', options={hidePostalCode: true}); | ||||
|         card.mount('#card-element'); | ||||
|         var element_style = { | ||||
|             fonts: [{ | ||||
|                 family: 'lato-light', | ||||
|                 src: 'url(https://cdn.jsdelivr.net/font-lato/2.0/Lato/Lato-Light.woff) format("woff2")' | ||||
|             }, { | ||||
|                 family: 'lato-regular', | ||||
|                 src: 'url(https://cdn.jsdelivr.net/font-lato/2.0/Lato/Lato-Regular.woff) format("woff2")' | ||||
|             } | ||||
|             ], | ||||
|             locale: window.current_lan | ||||
|         }; | ||||
|         var elements = stripe.elements(element_style); | ||||
|         var credit_card_text_style = { | ||||
|             base: { | ||||
|                 iconColor: '#666EE8', | ||||
|                 color: '#31325F', | ||||
|                 lineHeight: '25px', | ||||
|                 fontWeight: 300, | ||||
|                 fontFamily: "'lato-light', sans-serif", | ||||
|                 fontSize: '14px', | ||||
|                 '::placeholder': { | ||||
|                     color: '#777' | ||||
|                 } | ||||
|             }, | ||||
|             invalid: { | ||||
|                 iconColor: '#eb4d5c', | ||||
|                 color: '#eb4d5c', | ||||
|                 lineHeight: '25px', | ||||
|                 fontWeight: 300, | ||||
|                 fontFamily: "'lato-regular', sans-serif", | ||||
|                 fontSize: '14px', | ||||
|                 '::placeholder': { | ||||
|                     color: '#eb4d5c', | ||||
|                     fontWeight: 400 | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
|         var credit_card_cvv_style = { | ||||
|             base: { | ||||
|                 iconColor: '#666EE8', | ||||
|                 color: '#31325F', | ||||
|                 lineHeight: '25px', | ||||
|                 fontWeight: 300, | ||||
|                 fontFamily: "'lato-regular', sans-serif", | ||||
|                 fontSize: '14px', | ||||
|                 '::placeholder': { | ||||
|                     color: '#555' | ||||
|                 } | ||||
|             }, | ||||
|             invalid: { | ||||
|                 iconColor: '#eb4d5c', | ||||
|                 color: '#eb4d5c', | ||||
|                 lineHeight: '25px', | ||||
|                 fontWeight: 300, | ||||
|                 fontFamily: "'lato-regular', sans-serif", | ||||
|                 fontSize: '14px', | ||||
|                 '::placeholder': { | ||||
|                     color: '#eb4d5c', | ||||
|                     fontWeight: 600 | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
| 
 | ||||
|         var enter_ccard_text = "Enter your credit card number"; | ||||
|         if (typeof window.enter_your_card_text !== 'undefined') { | ||||
|             enter_ccard_text = window.enter_your_card_text; | ||||
|         } | ||||
|         var cardNumberElement = elements.create('cardNumber', { | ||||
|             style: credit_card_text_style, | ||||
|             placeholder: enter_ccard_text | ||||
|         }); | ||||
|         cardNumberElement.mount('#card-number-element'); | ||||
| 
 | ||||
|         var cardExpiryElement = elements.create('cardExpiry', { | ||||
|             style: credit_card_text_style | ||||
|         }); | ||||
|         cardExpiryElement.mount('#card-expiry-element'); | ||||
| 
 | ||||
|         var cardCvcElement = elements.create('cardCvc', { | ||||
|             style: credit_card_text_style | ||||
|         }); | ||||
|         cardCvcElement.mount('#card-cvc-element'); | ||||
|         cardNumberElement.on('change', function (event) { | ||||
|             if (event.brand) { | ||||
|                 setBrandIcon(event.brand); | ||||
|             } | ||||
|         }); | ||||
|     } | ||||
|     console.log("has creditcard", hasCreditcard); | ||||
|     // hasCreditcard= true;
 | ||||
|  | @ -42,85 +146,58 @@ $( document ).ready(function() { | |||
|     submit_form_btn.on('click', submit_payment); | ||||
| 
 | ||||
| 
 | ||||
|     function submit_payment(e){  | ||||
|       e.preventDefault(); | ||||
|       console.log("creditcard sdasd"); | ||||
|       // if (hasCreditcard) {
 | ||||
|          $('#billing-form').submit(); | ||||
|       // }
 | ||||
|     function submit_payment(e) { | ||||
|         e.preventDefault(); | ||||
|         console.log("creditcard sdasd"); | ||||
|         // if (hasCreditcard) {
 | ||||
|         $('#billing-form').submit(); | ||||
|         // }
 | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     var $form_new = $('#payment-form-new'); | ||||
|     $form_new.submit(payWithStripe_new); | ||||
| 
 | ||||
|     var $form = $('#payment-form'); | ||||
|     $form.submit(payWithStripe); | ||||
| 
 | ||||
|     /* If you're using Stripe for payments */ | ||||
|     function payWithStripe(e) { | ||||
|     function payWithStripe_new(e) { | ||||
|         e.preventDefault(); | ||||
| 
 | ||||
|         function stripeTokenHandler(token) { | ||||
|           // Insert the token ID into the form so it gets submitted to the server
 | ||||
|           var form = document.getElementById('payment-form'); | ||||
|           var hiddenInput = document.createElement('input'); | ||||
|           $('#id_token').val(token.id); | ||||
| 
 | ||||
|           $('#billing-form').submit(); | ||||
|             // Insert the token ID into the form so it gets submitted to the server
 | ||||
|             var form = document.getElementById('payment-form-new'); | ||||
|             $('#id_token').val(token.id); | ||||
|             $('#billing-form').submit(); | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         stripe.createToken(card).then(function(result) { | ||||
|         stripe.createToken(cardNumberElement).then(function (result) { | ||||
|             if (result.error) { | ||||
|               // Inform the user if there was an error
 | ||||
|               var errorElement = document.getElementById('card-errors'); | ||||
|               errorElement.textContent = result.error.message; | ||||
|                 // Inform the user if there was an error
 | ||||
|                 var errorElement = document.getElementById('card-errors'); | ||||
|                 errorElement.textContent = result.error.message; | ||||
|             } else { | ||||
|                 $form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>'); | ||||
|                 var process_text = "Processing"; | ||||
|                 if (typeof window.processing_text !== 'undefined') { | ||||
|                     process_text = window.processing_text | ||||
|                 } | ||||
| 
 | ||||
|                 $form_new.find('[type=submit]').html(process_text + ' <i class="fa fa-spinner fa-pulse"></i>'); | ||||
|                 // Send the token to your server
 | ||||
|                 stripeTokenHandler(result.token); | ||||
|             } | ||||
|         }); | ||||
| 
 | ||||
|         // /* Visual feedback */
 | ||||
|         // $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
 | ||||
| 
 | ||||
|         // var PublishableKey = window.stripeKey;
 | ||||
|         // Stripe.setPublishableKey(PublishableKey);
 | ||||
|         // Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
 | ||||
|         //     if (response.error) {
 | ||||
|         //         /* Visual feedback */
 | ||||
|         //         $form.find('[type=submit]').html('Try again');
 | ||||
|         //         /* Show Stripe errors on the form */
 | ||||
|         //         $form.find('.payment-errors').text(response.error.message);
 | ||||
|         //         $form.find('.payment-errors').closest('.row').show();
 | ||||
|         //     } else {
 | ||||
|         //         /* Visual feedback */
 | ||||
|         //         $form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
 | ||||
|         //         /* Hide Stripe errors on the form */
 | ||||
|         //         $form.find('.payment-errors').closest('.row').hide();
 | ||||
|         //         $form.find('.payment-errors').text("");
 | ||||
|         //         // response contains id and card, which contains additional card details
 | ||||
|         //         var token = response.id;
 | ||||
|         //         // AJAX
 | ||||
| 
 | ||||
|         //         //set token  on a hidden input
 | ||||
|         //         $('#id_token').val(token);
 | ||||
|         //         $('#billing-form').submit();
 | ||||
|         //     }
 | ||||
|         // });
 | ||||
|     } | ||||
| 
 | ||||
|     /* Form validation */ | ||||
|     $.validator.addMethod("month", function(value, element) { | ||||
|       return this.optional(element) || /^(01|02|03|04|05|06|07|08|09|10|11|12)$/.test(value); | ||||
|     $.validator.addMethod("month", function (value, element) { | ||||
|         return this.optional(element) || /^(01|02|03|04|05|06|07|08|09|10|11|12)$/.test(value); | ||||
|     }, "Please specify a valid 2-digit month."); | ||||
| 
 | ||||
|     $.validator.addMethod("year", function(value, element) { | ||||
|       return this.optional(element) || /^[0-9]{2}$/.test(value); | ||||
|     $.validator.addMethod("year", function (value, element) { | ||||
|         return this.optional(element) || /^[0-9]{2}$/.test(value); | ||||
|     }, "Please specify a valid 2-digit year."); | ||||
| 
 | ||||
|     validator = $form.validate({ | ||||
|     validator = $form_new.validate({ | ||||
|         rules: { | ||||
|             cardNumber: { | ||||
|                 required: true, | ||||
|  | @ -140,28 +217,16 @@ $( document ).ready(function() { | |||
|                 digits: true | ||||
|             } | ||||
|         }, | ||||
|         highlight: function(element) { | ||||
|         highlight: function (element) { | ||||
|             $(element).closest('.form-control').removeClass('success').addClass('error'); | ||||
|         }, | ||||
|         unhighlight: function(element) { | ||||
|         unhighlight: function (element) { | ||||
|             $(element).closest('.form-control').removeClass('error').addClass('success'); | ||||
|         }, | ||||
|         errorPlacement: function(error, element) { | ||||
|         errorPlacement: function (error, element) { | ||||
|             $(element).closest('.form-group').append(error); | ||||
|         } | ||||
|     }); | ||||
| 
 | ||||
|     paymentFormReady = function() { | ||||
|         if ($form.find('[name=cardNumber]').hasClass("success") && | ||||
|             $form.find('[name=expMonth]').hasClass("success") && | ||||
|             $form.find('[name=expYear]').hasClass("success") && | ||||
|             $form.find('[name=cvCode]').val().length > 1) { | ||||
|             return true; | ||||
|         } else { | ||||
|             return false; | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     // $form.find('[type=submit]').prop('disabled', true);
 | ||||
|     // var readyInterval = setInterval(function() {
 | ||||
|     //     if (paymentFormReady()) {
 | ||||
|  |  | |||
|  | @ -45,16 +45,10 @@ | |||
|     } | ||||
| </style> | ||||
| {% endwith %}    | ||||
| <script> | ||||
|   (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||||
|   (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||||
|   m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||||
|   })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | ||||
| 
 | ||||
|   ga('create', 'UA-62285904-5', 'auto'); | ||||
|   ga('send', 'pageview'); | ||||
| 
 | ||||
| </script> | ||||
|     <!-- Google analytics --> | ||||
|     {% include "google_analytics.html" %} | ||||
|     <!-- End Google Analytics --> | ||||
| 
 | ||||
| </head> | ||||
| <body> | ||||
|  |  | |||
|  | @ -41,29 +41,34 @@ | |||
|         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||
|     <![endif]--> | ||||
| 
 | ||||
|     <!-- Google analytics --> | ||||
|     {% include "google_analytics.html" %} | ||||
|     <!-- End Google Analytics --> | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- Navigation --> | ||||
|     {% block navbar %} | ||||
| 
 | ||||
|     <nav class="navbar navbar-default  navbar-fixed-top topnav" role="navigation"> | ||||
|         <div class="container topnav"> | ||||
|             <!-- Brand and toggle get grouped for better mobile display --> | ||||
|             <div class="navbar-header"> | ||||
|                 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> | ||||
|                     <span class="sr-only">Toggle navigation</span> | ||||
|                     <span class="icon-bar"></span> | ||||
|                     <span class="icon-bar"></span> | ||||
|                     <span class="icon-bar"></span> | ||||
|                 </button> | ||||
|                 <a class="navbar-brand topnav" href="{% if site_url %}{{site_url}}{% else %}{{ request.session.hosting_url}}{% endif %}"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a> | ||||
|             </div> | ||||
|             {% if request.user.is_authenticated %} | ||||
|             <!-- Collect the nav links, forms, and other content for toggling --> | ||||
|             <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | ||||
|                 <ul class="nav navbar-nav navbar-right"> | ||||
|         <!-- Navigation --> | ||||
| 
 | ||||
|         <nav class="navbar navbar-default  navbar-fixed-top topnav" role="navigation"> | ||||
|             <div class="container topnav"> | ||||
|                 <!-- Brand and toggle get grouped for better mobile display --> | ||||
|                 <div class="navbar-header"> | ||||
|                     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> | ||||
|                         <span class="sr-only">Toggle navigation</span> | ||||
|                         <span class="icon-bar"></span> | ||||
|                         <span class="icon-bar"></span> | ||||
|                         <span class="icon-bar"></span> | ||||
|                     </button> | ||||
|                     <a class="navbar-brand topnav" href="{% if site_url %}{{site_url}}{% else %}{{ request.session.hosting_url}}{% endif %}"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a> | ||||
|                 </div> | ||||
|                 {% if request.user.is_authenticated %} | ||||
|                 <!-- Collect the nav links, forms, and other content for toggling --> | ||||
|                 <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | ||||
|                     <ul class="nav navbar-nav navbar-right"> | ||||
|                         <li> | ||||
|                             <a href="{% url 'hosting:virtual_machines' %}"> | ||||
|                                 <i class="fa fa-server" aria-hidden="true"></i> {% trans "My Virtual Machines"%} | ||||
|  | @ -91,33 +96,14 @@ | |||
|                             <li><a href="{% url 'hosting:logout' %}"><i class="glyphicon glyphicon-lock"></i>{% trans "Logout"%} </a></li> | ||||
|                           </ul> | ||||
|                         </li> | ||||
|                         <!-- | ||||
|                         <li> | ||||
|                             <a href="{{ request.session.hosting_url}}#how">{% trans "How it works"%}</a> | ||||
|                         </li> | ||||
|                         <li> | ||||
|                             <a href="{{ request.session.hosting_url }}#your">{% trans "Your infrastructure"%}</a> | ||||
|                         </li> | ||||
|                        <li> | ||||
|                             <a href="{{ request.session.hosting_url }}#our">{% trans "Our inftrastructure"%}</a> | ||||
|                         </li> | ||||
|                         <li> | ||||
|                             <a href="{{ request.session.hosting_url }}#price">{% trans "Pricing" %}</a> | ||||
|                         </li> | ||||
|                         <li> | ||||
|                             <a href="{{ request.session.hosting_url }}#contact">{% trans "Contact"%}</a> | ||||
|                         </li> | ||||
|                         <li> | ||||
|                             <a href="{% url 'hosting:login' %}?next={{request.current_path}}">{% trans "Login"%}</a> | ||||
|                         </li>  --> | ||||
|                 </ul> | ||||
|                     </ul> | ||||
|                 </div> | ||||
|                 {% endif %} | ||||
|                 <!-- /.navbar-collapse --> | ||||
|             </div> | ||||
|             {% endif %} | ||||
|             <!-- /.navbar-collapse --> | ||||
|         </div> | ||||
|         <!-- /.container --> | ||||
|     </nav> | ||||
| 
 | ||||
|             <!-- /.container --> | ||||
|         </nav> | ||||
|     {% endblock navbar %} | ||||
| 
 | ||||
| 
 | ||||
|     <div class="content-dashboard"> | ||||
|  |  | |||
|  | @ -31,16 +31,10 @@ | |||
|         <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | ||||
|         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||
|     <![endif]--> | ||||
| <script> | ||||
|   (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||||
|   (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||||
|   m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||||
|   })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | ||||
| 
 | ||||
|   ga('create', 'UA-62285904-5', 'auto'); | ||||
|   ga('send', 'pageview'); | ||||
| 
 | ||||
| </script> | ||||
|     <!-- Google analytics --> | ||||
|     {% include 'google_analytics.html' %} | ||||
|     <!-- End Google Analytics --> | ||||
| 
 | ||||
| </head> | ||||
| 
 | ||||
|  |  | |||
|  | @ -18,7 +18,9 @@ | |||
|     <link href="{% static 'hosting/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css"> | ||||
|     <link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css"> | ||||
|     <link rel="shortcut icon" href="{% static 'hosting/img/favicon.ico' %}" type="image/x-icon" /> | ||||
| 
 | ||||
|     <!-- Google analytics --> | ||||
|     {% include 'google_analytics.html' %} | ||||
|     <!-- End Google Analytics --> | ||||
| </head> | ||||
| <body> | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										11
									
								
								hosting/templates/hosting/includes/_navbar_transparent.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								hosting/templates/hosting/includes/_navbar_transparent.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,11 @@ | |||
| {% load static i18n %} | ||||
| 
 | ||||
| <nav class="navbar navbar-default  navbar-fixed-top topnav navbar-transparent" role="navigation"> | ||||
|     <div class="container topnav"> | ||||
|         <!-- Brand and toggle get grouped for better mobile display --> | ||||
|         <div class="navbar-header"> | ||||
|             <a id="logoWhite" class="navbar-brand topnav" href="{% if site_url %}{{site_url}}{% else %}{{ request.session.hosting_url}}{% endif %}"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> | ||||
|         </div> | ||||
|     </div> | ||||
|     <!-- /.container --> | ||||
| </nav> | ||||
|  | @ -1,6 +1,11 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load i18n %} | ||||
| {% load staticfiles bootstrap3%} | ||||
| 
 | ||||
| {% block navbar %} | ||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} | ||||
| {% endblock navbar %} | ||||
| 
 | ||||
| {% block content %} | ||||
| 
 | ||||
| <div class="auth-container"> | ||||
|  |  | |||
|  | @ -24,15 +24,7 @@ | |||
|     		</div> | ||||
|     		<hr> | ||||
|     		<div class="row"> | ||||
|     			<div class="col-xs-6"> | ||||
|     				<address> | ||||
|                     <h3><b>{% trans "Billed To:"%}</b></h3> | ||||
|     					{{user.name}}<br> | ||||
|                         {{order.billing_address.street_address}},{{order.billing_address.postal_code}}<br> | ||||
|                         {{order.billing_address.city}}, {{order.billing_address.country}}. | ||||
|     				</address> | ||||
|     			</div> | ||||
|                 <div class="col-xs-6 text-right"> | ||||
| 				<div class="col-xs-12 col-md-6 pull-right order-confirm-date"> | ||||
|                     <address> | ||||
|                         <strong>{% trans "Date"%}:</strong><br> | ||||
|                         <span id="order-created_at">{{order.created_at|date:'Y-m-d H:i'}}</span><br><br> | ||||
|  | @ -44,6 +36,15 @@ | |||
|                     </address> | ||||
| 
 | ||||
|                 </div> | ||||
|     			<div class="col-xs-12 col-md-6"> | ||||
|     				<address> | ||||
|                     <h3><b>{% trans "Billed To:"%}</b></h3> | ||||
|     					{{user.name}}<br> | ||||
|                         {{order.billing_address.street_address}},{{order.billing_address.postal_code}}<br> | ||||
|                         {{order.billing_address.city}}, {{order.billing_address.country}}. | ||||
|     				</address> | ||||
|     			</div> | ||||
|                  | ||||
|     		</div> | ||||
|     		<div class="row"> | ||||
|     			<div class="col-xs-6"> | ||||
|  |  | |||
|  | @ -2,154 +2,182 @@ | |||
| {% load staticfiles bootstrap3 i18n %} | ||||
| {% block content %} | ||||
| <!-- Credit card form --> | ||||
| <div> | ||||
| 	<div class="payment-container"> | ||||
| 		<div class="row"> | ||||
| 		    <div class="col-xs-12 col-md-offset-2 col-md-4 summary-box"> | ||||
|             	<form role="form" novalidate> | ||||
|             		<div class="row"> | ||||
|             			<div class="col-xs-12"> | ||||
| 								<h3><b>{%trans "Billing Amount" %}</b></h3> | ||||
| 							<hr> | ||||
| 							<div class="content"> | ||||
| 								<!-- <p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.location_code}}</span></p> --> | ||||
| 								<!-- <hr> --> | ||||
| 								<p><b>{%trans "Cores"%}</b> <span | ||||
|                                     class="pull-right">{{request.session.specs.cpu|floatformat}}</span></p> | ||||
| 								<hr> | ||||
| 								<p><b>{%trans "Memory"%}</b> <span | ||||
|                                     class="pull-right">{{request.session.specs.memory|floatformat}} GB</span></p> | ||||
| 								<hr> | ||||
| 								<p><b>{%trans "Disk space"%}</b> <span | ||||
|                                     class="pull-right">{{request.session.specs.disk_size|floatformat}} GB</span></p> | ||||
| 								<hr> | ||||
| 								<p><b>{%trans "Configuration"%}</b> <span | ||||
|                                     class="pull-right">{{request.session.template.name}}</span></p> | ||||
| 								<hr> | ||||
| 								<h4>Total<p | ||||
|                                     class="pull-right"><b>{{request.session.specs.price }} CHF</b></p></h4> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 					</div> | ||||
| 				</form> | ||||
| 
 | ||||
| 			</div> | ||||
| 			<div class="col-xs-12 col-md-4  billing"> | ||||
| 				<h3><b>{%trans "Billing Address"%}</b></h3> | ||||
| 				<hr> | ||||
| 				<form role="form" id="billing-form" method="post" action="" novalidate> | ||||
| 	                {% for field in form %} | ||||
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/> | ||||
| <div class="dcl-order-container"> | ||||
|     <div class="payment-container"> | ||||
|         <div class="row"> | ||||
|             <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-order-sec"> | ||||
|                 <h3><strong>{%trans "Your Order" %}</strong></h3> | ||||
|                 <div class="col-xs-6 col-sm-12 col-md-12 col-lg-12 dcl-order-table-header"> | ||||
|                     <div class="col-xs-12 col-sm-2 col-md-1 col-lg-1 tbl-header"> | ||||
|                         {%trans "Cores" %} | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-3 col-md-4 col-lg-4 tbl-header"> | ||||
|                         {%trans "Memory" %} | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3 tbl-header"> | ||||
|                         {%trans "Disk space" %} | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-header"> | ||||
|                         {%trans "Configuration" %} | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="col-xs-6 col-sm-12 col-md-12 col-lg-12 dcl-order-table-content"> | ||||
|                     <div class="col-xs-12 col-sm-2 col-md-1 col-lg-1 tbl-content"> | ||||
|                         {{request.session.specs.cpu|floatformat}} | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-3 col-md-4 col-lg-4 tbl-content"> | ||||
|                         {{request.session.specs.memory|floatformat}} GB | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3 tbl-content"> | ||||
|                         {{request.session.specs.disk_size|floatformat}} GB | ||||
|                     </div> | ||||
|                     <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-content"> | ||||
|                         {{request.session.template.name}} | ||||
|                     </div> | ||||
|                 </div> | ||||
|                 <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-order-table-total"> | ||||
|                     <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 tbl-tot tbl-no-padding"> | ||||
|                         {%trans "Total" %} <span>{%trans "including VAT" %}</span> | ||||
|                     </div> | ||||
|                     <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 tbl-no-padding"> | ||||
|                         <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6"></div> | ||||
|                         <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-total">{{request.session.specs.price}} | ||||
|                             CHF | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <div class="row"> | ||||
|             <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-billing-sec"> | ||||
|                 <div class="col-xs-12 col-sm-5 col-md-6  billing dcl-billing"> | ||||
|                     <h3><b>{%trans "Billing Address"%}</b></h3> | ||||
|                     <hr> | ||||
|                     <form role="form" id="billing-form" method="post" action="" novalidate> | ||||
|                         {% for field in form %} | ||||
|                         {% csrf_token %} | ||||
| 	                    {% bootstrap_field field show_label=False type='fields'%} | ||||
| 	                {% endfor %} | ||||
| 	                {% bootstrap_form_errors form type='non_fields'%} | ||||
|                 </form> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	    <div class="row"> | ||||
| 	    	<div class="col-xs-12 col-md-offset-2 col-md-4 "></div> | ||||
| 	        <div class="col-xs-12 col-md-4 creditcard-box"> | ||||
| 				<h3><b>{%trans "Payment Details"%}</b></h3> | ||||
| 				<hr> | ||||
| 	            <div> | ||||
| 	                <div> | ||||
|                     {% if credit_card_data.last4 %} | ||||
|                       <form role="form" id="payment-form-with-creditcard"novalidate> | ||||
|                         <h5 class="billing-head">Credit Card</h5> | ||||
|                         <h5 class="membership-lead">Last 4: *****{{credit_card_data.last4}}</h5> | ||||
|                         <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5> | ||||
|                         <input type="hidden" name="credit_card_needed" value="false"/> | ||||
|                       </form> | ||||
|                       <div class="col-xs-6"> | ||||
|                         <button id="payment_button_with_creditcard" class="btn btn-success btn-sm btn-block" type="submit"> | ||||
| 							 {% trans "Submit Payment" %} | ||||
| 					   </button> | ||||
|                      </div> | ||||
|                     {% else %} | ||||
| 
 | ||||
| 
 | ||||
| 	                    <form role="form" id="payment-form" novalidate> | ||||
|                         {% bootstrap_field field show_label=False type='fields'%} | ||||
|                         {% endfor %} | ||||
|                         {% bootstrap_form_errors form type='non_fields'%} | ||||
|                     </form> | ||||
|                 </div> | ||||
|                 <div class="col-xs-12 col-sm-7 col-md-6 creditcard-box dcl-creditcard"> | ||||
|                     <h3><b>{%trans "Credit Card"%}</b></h3> | ||||
|                     <hr> | ||||
|                     <div> | ||||
|                         <div> | ||||
|                             <p> | ||||
|                                 {% blocktrans %} | ||||
|                                 Please fill in your credit card information below. We are using <a | ||||
|                                     href="https://stripe.com" target="_blank">Stripe</a> for payment and do not store | ||||
|                                 your information in our database. | ||||
|                                 {% endblocktrans %} | ||||
|                             </p> | ||||
|                         </div> | ||||
|                         <br> | ||||
|                         <div> | ||||
|                             {% if credit_card_data.last4 %} | ||||
|                             <form role="form" id="payment-form-with-creditcard" novalidate> | ||||
|                                 <h5 class="billing-head">Credit Card</h5> | ||||
|                                 <h5 class="membership-lead">Last 4: *****{{credit_card_data.last4}}</h5> | ||||
|                                 <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5> | ||||
|                                 <input type="hidden" name="credit_card_needed" value="false"/> | ||||
|                             </form> | ||||
|                             <div class="row"> | ||||
|                             <div class="form-group"> | ||||
|                             <div id="card-element"> | ||||
|                               <!-- a Stripe Element will be inserted here. --> | ||||
|                               </div> | ||||
|                                 <div class="col-xs-12"> | ||||
|                                     <p> | ||||
|                                         {% blocktrans %} | ||||
|                                         You are not making any payment yet. After submitting your card | ||||
|                                         information, you will be taken to the Confirm Order Page. | ||||
|                                         {% endblocktrans %} | ||||
|                                     </p> | ||||
|                                 </div> | ||||
|                                 <div class="col-xs-12"> | ||||
|                                     <div class="col-xs-6 pull-right"> | ||||
|                                         <button id="payment_button_with_creditcard" class="btn btn-success stripe-payment-btn" | ||||
|                                                 type="submit"> | ||||
|                                             {%trans "Submit" %} | ||||
|                                         </button> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
|                             </div> | ||||
|                              </div> | ||||
|                              <div id="card-errors" role="alert"></div> | ||||
| 
 | ||||
| <!-- 	                        <div class="row"> | ||||
| 	                            <div class="col-xs-9 col-md-12"> | ||||
| 	                                <div class="form-group"> | ||||
| 	                                    <label class="control-label" for="cardNumber">{%trans "CARD NUMBER"%}</label> | ||||
| 	                                    <div class="input-group"> | ||||
| 	                                        <input type="text" | ||||
| 											class="form-control" | ||||
| 											name="cardNumber" | ||||
| 											placeholder="{%trans "Valid Card Number"%}" required autofocus data-stripe="number" /> | ||||
| 	                                        <span class="input-group-addon"><i class="fa fa-credit-card"></i></span> | ||||
| 	                                    </div> | ||||
| 	                                </div> | ||||
| 	                            </div> | ||||
| 	                        </div> | ||||
| 	                        <div class="row"> | ||||
| 	                            <div class="col-xs-6 col-md-7"> | ||||
| 	                                <div class="form-group"> | ||||
| 	                                    <label for="expMonth">{%trans "EXPIRATION DATE"%}</label><br/> | ||||
| 	                                    <div class="col-xs-6 col-lg-6 col-md-6 pl-ziro"> | ||||
| 	                                        <input type="text" class="form-control" name="expMonth" placeholder="MM" required data-stripe="exp_month" /> | ||||
| 	                                    </div> | ||||
| 	                                    <div class="col-xs-6 col-lg-6 col-md-6 pl-ziro"> | ||||
| 	                                        <input type="text" class="form-control" name="expYear" placeholder="YY" required data-stripe="exp_year" /> | ||||
| 	                                    </div> | ||||
| 	                                </div> | ||||
| 	                            </div> | ||||
| 	                            <div class="col-xs-4 col-md-5 pull-right"> | ||||
| 	                                <div class="form-group"> | ||||
| 	                                    <label for="cvCode">{%trans "CV CODE"%}</label> | ||||
| 	                                    <input type="password" class="form-control" name="cvCode" placeholder="CV" required data-stripe="cvc" /> | ||||
| 	                                </div> | ||||
| 	                            </div> | ||||
| 	                        </div> --> | ||||
| 	                        <div class="row"> | ||||
| 	                            <div class="col-xs-6 float-right"> | ||||
| 	                                <button class="btn btn-success btn-sm btn-block" type="submit">Submit Payment</button> | ||||
| 	                            </div> | ||||
| 	                        </div> | ||||
| 	                        <div class="row" style="display:none;"> | ||||
| 	                            <div class="col-xs-12"> | ||||
| 	                                <p class="payment-errors"></p> | ||||
| 	                            </div> | ||||
| 	                        </div> | ||||
| 	                        {% if paymentError %} | ||||
| 	                        <div class="row"> | ||||
| 	                            <div class="col-xs-12"> | ||||
| 	                            	<p> | ||||
| 	                             	{% bootstrap_alert paymentError alert_type='danger' %} | ||||
| 	                             	</p> | ||||
| 	                            </div> | ||||
| 	                        </div> | ||||
| 	                        {% endif %} | ||||
|                             {% else %} | ||||
|                             <form action="" id="payment-form-new" method="POST"> | ||||
|                                 <input type="hidden" name="token"/> | ||||
|                                 <div class="group"> | ||||
|                                     <div class="col-xs-12 col-sm-12 col-md-10 col-lg-9 credit-card-goup"> | ||||
|                                        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 card-element card-number-element"> | ||||
|                                            <label>{%trans "Card Number" %}</label> | ||||
|                                            <div id="card-number-element" class="field my-input"></div> | ||||
|                                        </div> | ||||
|                                        <div class="col-xs-5 col-sm-3 col-md-3 col-lg-3 card-element card-expiry-element"> | ||||
|                                            <label>{%trans "Expiry Date" %}</label> | ||||
|                                            <div id="card-expiry-element" class="field my-input"></div> | ||||
|                                        </div> | ||||
|                                        <div class="col-xs-12 col-sm-2 col-md-6 col-lg-7 hide-mobile"></div> | ||||
|                                        <div class="col-xs-3 col-sm-3 col-md-3 col-lg-2 card-element card-cvc-element"> | ||||
|                                            <label>{%trans "CVC" %}</label> | ||||
|                                            <div id="card-cvc-element" class="field my-input"></div> | ||||
|                                        </div> | ||||
|                                        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 card-element brand"> | ||||
|                                            <label>{%trans "Card Type" %}</label> | ||||
|                                            <i class="pf pf-credit-card" id="brand-icon"></i> | ||||
|                                        </div> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
|                                 <div id="card-errors" role="alert"></div> | ||||
|                                 <div class="row"> | ||||
|                                     <div class="col-xs-12"> | ||||
|                                         <p class="card-warning-content"> | ||||
|                                             {% blocktrans %} | ||||
|                                             You are not making any payment yet. After submitting your card | ||||
|                                             information, you will be taken to the Confirm Order Page. | ||||
|                                             {% endblocktrans %} | ||||
|                                         </p> | ||||
|                                     </div> | ||||
|                                     <div class="col-xs-12"> | ||||
|                                         <div class="col-xs-6 pull-right"> | ||||
|                                             <button class="btn btn-success stripe-payment-btn" type="submit">{%trans "Submit" %} | ||||
|                                             </button> | ||||
|                                         </div> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
| 
 | ||||
|                                 <div class="row" style="display:none;"> | ||||
|                                     <div class="col-xs-12"> | ||||
|                                         <p class="payment-errors"></p> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
|                                 {% if paymentError %} | ||||
|                                 <div class="row"> | ||||
|                                     <div class="col-xs-12"> | ||||
|                                         <p> | ||||
|                                             {% bootstrap_alert paymentError alert_type='danger' %} | ||||
|                                         </p> | ||||
|                                     </div> | ||||
|                                 </div> | ||||
|                                 {% endif %} | ||||
|                             </form> | ||||
| 
 | ||||
| 	                    </form> | ||||
|                     {% endif %} | ||||
| 
 | ||||
| 	                </div> | ||||
| 	            </div> | ||||
| 	        </div> | ||||
| 	    </div> | ||||
| 	</div> | ||||
| 
 | ||||
|                             {% endif %} | ||||
|                         </div> | ||||
|                     </div> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </div> | ||||
| </div> | ||||
| 
 | ||||
| <!-- stripe key data --> | ||||
| {% if stripe_key %} | ||||
| {% get_current_language as LANGUAGE_CODE %} | ||||
| <script type="text/javascript"> | ||||
|     window.processing_text = '{%trans "Processing" %}'; | ||||
|     window.enter_your_card_text = '{%trans "Enter your credit card number" %}'; | ||||
| 
 | ||||
| 
 | ||||
|      (function () { | ||||
|     (function () { | ||||
|         window.stripeKey = "{{stripe_key}}"; | ||||
|         window.current_lan = "{{LANGUAGE_CODE}}"; | ||||
|     })(); | ||||
|  | @ -158,13 +186,11 @@ | |||
| 
 | ||||
| {% if credit_card_data.last4 and credit_card_data.cc_brand %} | ||||
| <script type="text/javascript"> | ||||
|      (function () {window.hasCreditcard = true;})(); | ||||
|     (function () { | ||||
|         window.hasCreditcard = true; | ||||
|     })(); | ||||
| </script> | ||||
| 
 | ||||
| {%endif%} | ||||
| 
 | ||||
| {%endblock%} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,6 +2,11 @@ | |||
| {% load staticfiles bootstrap3%} | ||||
| {% load i18n %} | ||||
| 
 | ||||
| {% block navbar %} | ||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} | ||||
| {% endblock navbar %} | ||||
| 
 | ||||
| 
 | ||||
| {% block content %} | ||||
| <div class="auth-container"> | ||||
|    <div class="auth-bg"></div> | ||||
|  |  | |||
|  | @ -1,6 +1,10 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 i18n %} | ||||
| 
 | ||||
| {% block navbar %} | ||||
|     {% include  'hosting/includes/_navbar_transparent.html' %} | ||||
| {% endblock navbar %} | ||||
| 
 | ||||
| {% block content %} | ||||
| <div class="auth-container auth-signup"> | ||||
|    <div class="auth-bg"></div> | ||||
|  |  | |||
|  | @ -479,6 +479,7 @@ class PaymentVMView(LoginRequiredMixin, FormView): | |||
| 
 | ||||
|         form_kwargs.update({ | ||||
|             'initial': { | ||||
|                 'cardholder_name': current_billing_address.cardholder_name, | ||||
|                 'street_address': current_billing_address.street_address, | ||||
|                 'city': current_billing_address.city, | ||||
|                 'postal_code': current_billing_address.postal_code, | ||||
|  |  | |||
|  | @ -51,6 +51,8 @@ class MyUserManager(BaseUserManager): | |||
|                                 name=name, | ||||
|                                 ) | ||||
|         user.is_admin = True | ||||
|         user.is_active = True | ||||
|         user.is_superuser = True | ||||
|         user.save(using=self._db) | ||||
|         return user | ||||
| 
 | ||||
|  |  | |||
|  | @ -59,7 +59,7 @@ class OpenNebulaManager(): | |||
|                 domain=settings.OPENNEBULA_DOMAIN, | ||||
|                 port=settings.OPENNEBULA_PORT, | ||||
|                 endpoint=settings.OPENNEBULA_ENDPOINT | ||||
|         )) | ||||
|             )) | ||||
| 
 | ||||
|     def _get_opennebula_client(self, username, password): | ||||
|         return oca.Client("{0}:{1}".format( | ||||
|  | @ -71,7 +71,7 @@ class OpenNebulaManager(): | |||
|                 domain=settings.OPENNEBULA_DOMAIN, | ||||
|                 port=settings.OPENNEBULA_PORT, | ||||
|                 endpoint=settings.OPENNEBULA_ENDPOINT | ||||
|         )) | ||||
|             )) | ||||
| 
 | ||||
|     def _get_user(self, user): | ||||
|         """Get the corresponding opennebula user for a CustomUser object | ||||
|  | @ -325,7 +325,7 @@ class OpenNebulaManager(): | |||
|             public_templates = [ | ||||
|                 template | ||||
|                 for template in self._get_template_pool() | ||||
|                 if 'public-' in template.name | ||||
|                 if template.name.startswith('public-') | ||||
|             ] | ||||
|             return public_templates | ||||
|         except ConnectionRefusedError: | ||||
|  | @ -396,7 +396,7 @@ class OpenNebulaManager(): | |||
| 
 | ||||
|     def delete_template(self, template_id): | ||||
|         self.oneadmin_client.call(oca.VmTemplate.METHODS[ | ||||
|                                   'delete'], template_id, False) | ||||
|                                       'delete'], template_id, False) | ||||
| 
 | ||||
|     def change_user_password(self, new_password): | ||||
|         self.oneadmin_client.call( | ||||
|  |  | |||
|  | @ -129,6 +129,12 @@ class VirtualMachineSerializer(serializers.Serializer): | |||
|         return obj.name.strip('public-') | ||||
| 
 | ||||
| 
 | ||||
| class VMTemplateSerializer(serializers.Serializer): | ||||
|     """Serializer to map the VMTemplate instance into JSON format.""" | ||||
|     id = serializers.IntegerField(read_only=True, source='opennebula_vm_template_id') | ||||
|     name = serializers.CharField(read_only=True) | ||||
| 
 | ||||
| 
 | ||||
| def hexstr2int(string): | ||||
|     return int(string.replace(':', ''), 16) | ||||
| 
 | ||||
|  |  | |||
|  | @ -34,6 +34,10 @@ | |||
|     {% endblock %} | ||||
|     {% render_block "external-css" %} | ||||
|     {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} | ||||
| 
 | ||||
|     <!-- Google analytics --> | ||||
|     {% include "google_analytics.html" %} | ||||
|     <!-- End Google Analytics --> | ||||
|   </head> | ||||
|   <body> | ||||
| 
 | ||||
|  | @ -60,16 +64,7 @@ | |||
|     {% bootstrap_javascript %} | ||||
|     {% endaddtoblock %} | ||||
|     {% addtoblock "js" %} | ||||
|     <script> | ||||
|       (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ | ||||
|       (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), | ||||
|       m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) | ||||
|       })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); | ||||
| 
 | ||||
|       ga('create', 'UA-62285904-4', 'auto'); | ||||
|       ga('send', 'pageview'); | ||||
| 
 | ||||
|     </script> | ||||
| 
 | ||||
|     <script src="{% static 'blog.ungleich.ch/vendor/js/jquery.min.js' %}" type="text/javascript" /> | ||||
|     <script src="{% static 'blog.ungleich.ch/js/navbar-scroll-up.js' %}" type="text/javascript" /> | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ | |||
|         </h2> | ||||
|       </a> | ||||
|       <p class="post-meta" style="font-size:0.9em;"> | ||||
| 	  	{% trans "Posted on" %}{{ post.date_published|date:"DATE_FORMAT" }} | ||||
| 	  	{% trans "Posted on" %} {{ post.date_published|date:"DATE_FORMAT" }} | ||||
|       </p> | ||||
| 
 | ||||
|       <p class="post-subtitle"> | ||||
|  |  | |||
|  | @ -31,26 +31,9 @@ | |||
| 
 | ||||
|     <link href="{% static 'ungleich_page/css/ungleich.css' %}" rel="stylesheet"> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- Google tracking --> | ||||
|     <script src="//www.google-analytics.com/analytics.js" async></script> | ||||
|     <script> | ||||
|         (function (i, s, o, g, r, a, m) { | ||||
|             i['GoogleAnalyticsObject'] = r; | ||||
|             i[r] = i[r] || function () { | ||||
|                         (i[r].q = i[r].q || []).push(arguments) | ||||
|                     }, i[r].l = 1 * new Date(); | ||||
|             a = s.createElement(o), | ||||
|                     m = s.getElementsByTagName(o)[0]; | ||||
|             a.async = 1; | ||||
|             a.src = g; | ||||
|             m.parentNode.insertBefore(a, m) | ||||
|         })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); | ||||
| 
 | ||||
|         ga('create', 'UA-62285904-1', 'auto'); | ||||
|         ga('send', 'pageview'); | ||||
| 
 | ||||
|     </script> | ||||
|     <!-- Google analytics --> | ||||
|     {% include "google_analytics.html" %} | ||||
|     <!-- End Google Analytics --> | ||||
|     <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon"> | ||||
|     <style id="igtranslator-color" type="text/css"></style> | ||||
| </head> | ||||
|  |  | |||
|  | @ -5,11 +5,12 @@ from django.core.mail import EmailMultiAlternatives | |||
| from django.utils.translation import ugettext_lazy as _ | ||||
| from django.contrib.auth import authenticate | ||||
| from membership.models import CustomUser | ||||
| 
 | ||||
| 
 | ||||
| # from utils.fields import CountryField | ||||
| 
 | ||||
| 
 | ||||
| class SignupFormMixin(forms.ModelForm): | ||||
| 
 | ||||
|     confirm_password = forms.CharField(widget=forms.PasswordInput()) | ||||
|     password = forms.CharField(widget=forms.PasswordInput()) | ||||
| 
 | ||||
|  | @ -50,8 +51,6 @@ class LoginFormMixin(forms.Form): | |||
|             return email | ||||
|         except CustomUser.DoesNotExist: | ||||
|             raise forms.ValidationError("User does not exist") | ||||
|         else: | ||||
|             return email | ||||
| 
 | ||||
| 
 | ||||
| class PasswordResetRequestForm(forms.Form): | ||||
|  | @ -67,8 +66,6 @@ class PasswordResetRequestForm(forms.Form): | |||
|             return email | ||||
|         except CustomUser.DoesNotExist: | ||||
|             raise forms.ValidationError("User does not exist") | ||||
|         else: | ||||
|             return email | ||||
| 
 | ||||
| 
 | ||||
| class SetPasswordForm(forms.Form): | ||||
|  | @ -91,7 +88,7 @@ class SetPasswordForm(forms.Form): | |||
|             if password1 != password2: | ||||
|                 raise forms.ValidationError( | ||||
|                     self.error_messages['password_mismatch'], | ||||
|                     code='password_mismatch',) | ||||
|                     code='password_mismatch', ) | ||||
|         return password2 | ||||
| 
 | ||||
| 
 | ||||
|  | @ -104,8 +101,9 @@ class BillingAddressForm(forms.ModelForm): | |||
| 
 | ||||
|     class Meta: | ||||
|         model = BillingAddress | ||||
|         fields = ['street_address', 'city', 'postal_code', 'country'] | ||||
|         fields = ['cardholder_name', 'street_address', 'city', 'postal_code', 'country'] | ||||
|         labels = { | ||||
|             'cardholder_name': _('Cardholder Name'), | ||||
|             'street_address': _('Street Address'), | ||||
|             'city': _('City'), | ||||
|             'postal_code': _('Postal Code'), | ||||
|  |  | |||
|  | @ -8,6 +8,7 @@ from .fields import CountryField | |||
| # Create your models here. | ||||
| 
 | ||||
| class BaseBillingAddress(models.Model): | ||||
|     cardholder_name = models.CharField(max_length=100, default="") | ||||
|     street_address = models.CharField(max_length=100) | ||||
|     city = models.CharField(max_length=50) | ||||
|     postal_code = models.CharField(max_length=50) | ||||
|  | @ -18,7 +19,6 @@ class BaseBillingAddress(models.Model): | |||
| 
 | ||||
| 
 | ||||
| class BillingAddress(BaseBillingAddress): | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return self.street_address | ||||
| 
 | ||||
|  | @ -32,6 +32,7 @@ class UserBillingAddress(BaseBillingAddress): | |||
| 
 | ||||
|     def to_dict(self): | ||||
|         return { | ||||
|             'Cardholder Name': self.cardholder_name, | ||||
|             'Street Address': self.street_address, | ||||
|             'City': self.city, | ||||
|             'Postal Code': self.postal_code, | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue