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 | 1.0.18: 2017-07-02 | ||||||
|     * [datacenterlight] Introduced the new flow. Landing page -> Payment -> Order confirmation -> Success |     * [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) |     * [datacenterlight] Fixed issue showing local time to the user in order confirmation page, vm pages (like ssh keys) | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PACKAGE VERSION\n" | "Project-Id-Version: PACKAGE VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: \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" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\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 " | "Vielen dank für Ihre Anmeldung. Sie erhalten in kürze eine Bestätigungsmail " | ||||||
| "von unserem Team" | "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.html:99 | ||||||
| #: templates/datacenterlight/emails/request_access_confirmation.txt:99 | #: templates/datacenterlight/emails/request_access_confirmation.txt:99 | ||||||
| msgid "Thank you for your request." | msgid "Thank you for your request." | ||||||
|  | @ -129,27 +193,28 @@ msgstr "" | ||||||
| #: templates/datacenterlight/includes/_footer.html:11 | #: templates/datacenterlight/includes/_footer.html:11 | ||||||
| #: templates/datacenterlight/includes/_footer.html:31 | #: templates/datacenterlight/includes/_footer.html:31 | ||||||
| #: templates/datacenterlight/includes/_navbar.html:27 | #: templates/datacenterlight/includes/_navbar.html:27 | ||||||
| #: templates/datacenterlight/index.html:20 | #: templates/datacenterlight/includes/_navbar.html:28 | ||||||
| #: templates/datacenterlight/index.html:47 | #: templates/datacenterlight/index.html:19 | ||||||
|  | #: templates/datacenterlight/index.html:46 | ||||||
| msgid "Highlights" | msgid "Highlights" | ||||||
| msgstr "" | msgstr "" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/includes/_footer.html:14 | #: templates/datacenterlight/includes/_footer.html:14 | ||||||
| #: templates/datacenterlight/includes/_footer.html:34 | #: templates/datacenterlight/includes/_footer.html:34 | ||||||
| #: templates/datacenterlight/includes/_navbar.html:30 | #: templates/datacenterlight/includes/_navbar.html:30 | ||||||
| #: templates/datacenterlight/index.html:86 | #: templates/datacenterlight/index.html:85 | ||||||
| msgid "Scale out" | msgid "Scale out" | ||||||
| msgstr "Skalierung" | msgstr "Skalierung" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/includes/_footer.html:17 | #: templates/datacenterlight/includes/_footer.html:17 | ||||||
| #: templates/datacenterlight/includes/_footer.html:37 | #: templates/datacenterlight/includes/_footer.html:37 | ||||||
| #: templates/datacenterlight/includes/_navbar.html:33 | #: templates/datacenterlight/includes/_navbar.html:31 | ||||||
| #: templates/datacenterlight/index.html:112 | #: templates/datacenterlight/index.html:111 | ||||||
| msgid "Reliable and light" | msgid "Reliable and light" | ||||||
| msgstr "Zuverlässig und leicht" | msgstr "Zuverlässig und leicht" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/includes/_footer.html:20 | #: templates/datacenterlight/includes/_footer.html:20 | ||||||
| #: templates/datacenterlight/includes/_navbar.html:36 | #: templates/datacenterlight/includes/_navbar.html:32 | ||||||
| msgid "Order VM" | msgid "Order VM" | ||||||
| msgstr "VM bestellen" | msgstr "VM bestellen" | ||||||
| 
 | 
 | ||||||
|  | @ -167,28 +232,33 @@ msgstr "Home" | ||||||
| msgid "Pricing" | msgid "Pricing" | ||||||
| msgstr "Preise" | 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!" | msgid "Finally, an affordable VM hosting in Switzerland!" | ||||||
| msgstr "Endlich: bezahlbares VM Hosting in der Schweiz" | msgstr "Endlich: bezahlbares VM Hosting in der Schweiz" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:23 | #: templates/datacenterlight/index.html:22 | ||||||
| msgid "I want it!" | msgid "I want it!" | ||||||
| msgstr "Das will ich haben!" | msgstr "Das will ich haben!" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:53 | #: templates/datacenterlight/index.html:52 | ||||||
| msgid "" | msgid "" | ||||||
| "Reuses existing factory halls instead of building a new expensive building." | "Reuses existing factory halls instead of building a new expensive building." | ||||||
| msgstr "" | msgstr "" | ||||||
| "Verwendet ehemalige Fabrikhallen anstatt ein neues, teures Gebäude zu " | "Verwendet ehemalige Fabrikhallen anstatt ein neues, teures Gebäude zu " | ||||||
| "errichten.
" | "errichten.
" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:58 | #: templates/datacenterlight/index.html:57 | ||||||
| msgid "Only wants you to pay for what you actually need." | msgid "Only wants you to pay for what you actually need." | ||||||
| msgstr "" | msgstr "" | ||||||
| "Möchte, dass du nur bezahlst, was du auch wirklich brauchst: Wähle deine " | "Möchte, dass du nur bezahlst, was du auch wirklich brauchst: Wähle deine " | ||||||
| "Ressourcen individuell aus!
" | "Ressourcen individuell aus!
" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:62 | #: templates/datacenterlight/index.html:61 | ||||||
| msgid "" | msgid "" | ||||||
| "Is creative, using a modern and alternative design for a data center in " | "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." | "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 " | "macht um Nachhaltigkeit zu fördern und somit erschwingliche Preise bieten zu " | ||||||
| "können.
" | "können.
" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:66 | #: templates/datacenterlight/index.html:65 | ||||||
| msgid "" | msgid "" | ||||||
| "Cuts down the costs for you by using FOSS (Free Open Source Software) " | "Cuts down the costs for you by using FOSS (Free Open Source Software) " | ||||||
| "exclusively, wherefore we can save money from paying licenses." | "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 " | "mit FOSS (Free Open Source Software) arbeitet und wir daher auf " | ||||||
| "Lizenzgebühren verzichten können.
" | "Lizenzgebühren verzichten können.
" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:89 | #: templates/datacenterlight/index.html:88 | ||||||
| msgid "" | msgid "" | ||||||
| "We don't use special hardware. We use commodity hardware: we buy computers " | "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 " | "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 " | "erschwingliche Systeme. Bei grösserer Auslastung werden mehr " | ||||||
| "Standardkomponenten hinzugekauft und skalieren so das Datencenter." | "Standardkomponenten hinzugekauft und skalieren so das Datencenter." | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:115 | #: templates/datacenterlight/index.html:114 | ||||||
| msgid "" | msgid "" | ||||||
| "Our VMs are located in Switzerland, with reliable power supply and fast " | "Our VMs are located in Switzerland, with reliable power supply and fast " | ||||||
| "internet connection. Our VM costs less thanks to our featherlight " | "internet connection. Our VM costs less thanks to our featherlight " | ||||||
|  | @ -226,91 +296,26 @@ msgstr "" | ||||||
| "Energieversorgung, sowie schneller Internetverbindung ausgestattet. Unser " | "Energieversorgung, sowie schneller Internetverbindung ausgestattet. Unser " | ||||||
| "Angebot ist aufgrund unserer leichten Infrastruktur überaus kostengünstig." | "Angebot ist aufgrund unserer leichten Infrastruktur überaus kostengünstig." | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:133 | #: templates/datacenterlight/index.html:132 | ||||||
| #: templates/datacenterlight/pricing.html:86 | #: templates/datacenterlight/pricing.html:86 | ||||||
| msgid "Simple and affordable: Try our virtual machine with featherlight price." | msgid "Simple and affordable: Try our virtual machine with featherlight price." | ||||||
| msgstr "" | msgstr "" | ||||||
| "Einfach und bezahlbar: Teste nun unsere virtuellen Maschinen mit " | "Einfach und bezahlbar: Teste nun unsere virtuellen Maschinen mit " | ||||||
| "federleichten Preisen." | "federleichten Preisen." | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:134 | #: templates/datacenterlight/index.html:133 | ||||||
| msgid "Affordable VM hosting based in Switzerland" | msgid "Affordable VM hosting based in Switzerland" | ||||||
| msgstr "Bezahlbares VM Hosting in der Schweiz" | msgstr "Bezahlbares VM Hosting in der Schweiz" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:145 | #: templates/datacenterlight/index.html:166 | ||||||
| #: 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 |  | ||||||
| msgid "Switzerland " | msgid "Switzerland " | ||||||
| msgstr "Schweiz" | msgstr "Schweiz" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:271 | #: templates/datacenterlight/index.html:183 | ||||||
| msgid "Questions?" | msgid "Questions?" | ||||||
| msgstr "Fragen?" | msgstr "Fragen?" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/index.html:271 | #: templates/datacenterlight/index.html:183 | ||||||
| msgid "Contact us!" | msgid "Contact us!" | ||||||
| msgstr "Kontaktiere uns!" | msgstr "Kontaktiere uns!" | ||||||
| 
 | 
 | ||||||
|  | @ -319,46 +324,46 @@ msgid "Confirm Order" | ||||||
| msgstr "Bestellung Bestätigen" | msgstr "Bestellung Bestätigen" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:30 | #: templates/datacenterlight/order_detail.html:30 | ||||||
| msgid "Billed To:" |  | ||||||
| msgstr "Rechnungsadresse" |  | ||||||
| 
 |  | ||||||
| #: templates/datacenterlight/order_detail.html:39 |  | ||||||
| msgid "Date" | msgid "Date" | ||||||
| msgstr "Datum" | 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:" | msgid "Payment Method:" | ||||||
| msgstr "Bezahlmethode" | msgstr "Bezahlmethode" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:49 | #: templates/datacenterlight/order_detail.html:48 | ||||||
| msgid "ending" | msgid "ending" | ||||||
| msgstr "endend in" | msgstr "endend in" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:59 | #: templates/datacenterlight/order_detail.html:58 | ||||||
| msgid "Order summary" | msgid "Order summary" | ||||||
| msgstr "Bestellungsübersicht" | msgstr "Bestellungsübersicht" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:63 | #: templates/datacenterlight/order_detail.html:62 | ||||||
| msgid "Cores" | msgid "Cores" | ||||||
| msgstr "Prozessorkerne" | msgstr "Prozessorkerne" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:65 | #: templates/datacenterlight/order_detail.html:64 | ||||||
| msgid "Memory" | msgid "Memory" | ||||||
| msgstr "Arbeitsspeicher" | msgstr "Arbeitsspeicher" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:67 | #: templates/datacenterlight/order_detail.html:66 | ||||||
| msgid "Disk space" | msgid "Disk space" | ||||||
| msgstr "Festplattenkapazität" | msgstr "Festplattenkapazität" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:69 | #: templates/datacenterlight/order_detail.html:68 | ||||||
| msgid "Configuration" | msgid "Configuration" | ||||||
| msgstr "Konfiguration" | msgstr "Konfiguration" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:71 | #: templates/datacenterlight/order_detail.html:70 | ||||||
| msgid "Total" | msgid "Total" | ||||||
| msgstr "" | msgstr "" | ||||||
| 
 | 
 | ||||||
| #: templates/datacenterlight/order_detail.html:78 | #: templates/datacenterlight/order_detail.html:77 | ||||||
| msgid "Place order" | msgid "Place order" | ||||||
| msgstr "Bestellen" | msgstr "Bestellen" | ||||||
| 
 | 
 | ||||||
|  | @ -366,6 +371,10 @@ msgstr "Bestellen" | ||||||
| msgid "We are cutting down the costs significantly!" | msgid "We are cutting down the costs significantly!" | ||||||
| msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen" | 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 | #: templates/datacenterlight/pricing.html:89 | ||||||
| msgid "" | msgid "" | ||||||
| "Our VMs are hosted in Glarus, Switzerland, and our website is currently " | "Our VMs are hosted in Glarus, Switzerland, and our website is currently " | ||||||
|  | @ -392,14 +401,115 @@ msgstr "" | ||||||
| msgid "as soon as possible!" | msgid "as soon as possible!" | ||||||
| msgstr "" | 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" | msgid "is not a proper name" | ||||||
| msgstr "ist kein gültiger Name" | msgstr "ist kein gültiger Name" | ||||||
| 
 | 
 | ||||||
| #: views.py:241 | #: views.py:242 | ||||||
| msgid "is not a proper email" | msgid "is not a proper email" | ||||||
| msgstr "ist keine gültige E-Mailadresse" | 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" | #~ msgid "Buy VM" | ||||||
| #~ msgstr "VM Kaufen" | #~ 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))) | ||||||
|  | @ -15,6 +15,7 @@ class BetaAccessVMType(models.Model): | ||||||
| class BetaAccess(models.Model): | class BetaAccess(models.Model): | ||||||
|     email = models.CharField(max_length=250) |     email = models.CharField(max_length=250) | ||||||
|     name = models.CharField(max_length=250) |     name = models.CharField(max_length=250) | ||||||
|  | 
 | ||||||
|     # vm = models.ForeignKey(BetaAccessVM) |     # vm = models.ForeignKey(BetaAccessVM) | ||||||
| 
 | 
 | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|  | @ -48,3 +49,13 @@ class BetaAccessVM(models.Model): | ||||||
|                                                   amount=vm[VM_AMOUNT], type=vm_type)) |                                                   amount=vm[VM_AMOUNT], type=vm_type)) | ||||||
| 
 | 
 | ||||||
|         return created_vms |         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 | 
|  | @ -24,10 +24,10 @@ | ||||||
|             'id': 'storageValue', |             'id': 'storageValue', | ||||||
|             'value': 10, |             'value': 10, | ||||||
|             'min': 10, |             'min': 10, | ||||||
|             'max': 500, |             'max': 2000, | ||||||
|             'interval': 10 |             'interval': 10 | ||||||
|         } |         } | ||||||
|     } |     }; | ||||||
|     $(window).load(function() { |     $(window).load(function() { | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -69,7 +69,6 @@ | ||||||
|         $(window).scroll(function() { |         $(window).scroll(function() { | ||||||
|             _navScroll(); |             _navScroll(); | ||||||
|         }); |         }); | ||||||
| 
 |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function _navScroll() { |     function _navScroll() { | ||||||
|  | @ -85,20 +84,30 @@ | ||||||
|             $(".dropdown-menu > li > a").css("color", "#fff"); |             $(".dropdown-menu > li > a").css("color", "#fff"); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     function _initNavUrl() { |     function _initNavUrl() { | ||||||
|         $('.url').click(function(){ |         $('.url').click(function(event) { | ||||||
|  |             event.preventDefault(); | ||||||
|             var href = $(this).attr('data-url'); |             var href = $(this).attr('data-url'); | ||||||
|             $('.navbar-collapse').removeClass('in'); |             $('.navbar-collapse').removeClass('in'); | ||||||
|             $('.navbar-collapse').addClass('collapsing'); |             $('.navbar-collapse').addClass('collapsing'); | ||||||
|  |             var url = window.location.pathname; | ||||||
|  |             var urlSplit = url.split('/'); | ||||||
|  |             if (urlSplit.length === 3 && urlSplit[2] === 'datacenterlight') { | ||||||
|                 $('html, body').animate({ |                 $('html, body').animate({ | ||||||
|                     scrollTop: $(href).offset().top |                     scrollTop: $(href).offset().top | ||||||
|                 }, 1000); |                 }, 1000); | ||||||
|  |             } else { | ||||||
|  |                 var allUrl = window.location.href; | ||||||
|  |                 var redirect = allUrl.split('whydatacenterlight') | ||||||
|  |                 window.location.href = '/en-us/datacenterlight' + href; | ||||||
|  |             } | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     function verifiedUrl() { |     function verifiedUrl() { | ||||||
|         if (window.location.href.indexOf('#success') > -1) { |         if (window.location.href.indexOf('#success') > -1) { | ||||||
|             form_success(); |             form_success(); | ||||||
|             console.log('epa'); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -127,6 +136,7 @@ | ||||||
|             _fetchPricing(); |             _fetchPricing(); | ||||||
|         }); |         }); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     function _fetchPricing() { |     function _fetchPricing() { | ||||||
|         Object.keys(cardPricing).map(function(element) { |         Object.keys(cardPricing).map(function(element) { | ||||||
|             //$('#'+cardPricing[element].id).val(cardPricing[element].value);
 |             //$('#'+cardPricing[element].id).val(cardPricing[element].value);
 | ||||||
|  | @ -142,13 +152,13 @@ | ||||||
|         $("#total").text(total); |         $("#total").text(total); | ||||||
|         $('input[name=total]').val(total); |         $('input[name=total]').val(total); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     function form_success() { |     function form_success() { | ||||||
|         $('#sucessModal').modal('show'); |         $('#sucessModal').modal('show'); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     function _calculate(numbers, price) { |     function _calculate(numbers, price) { | ||||||
|         $('#valueTotal').text(numbers * price * 31); |         $('#valueTotal').text(numbers * price * 31); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|    |  | ||||||
|      |  | ||||||
| })(jQuery); | })(jQuery); | ||||||
|  |  | ||||||
|  | @ -64,4 +64,5 @@ | ||||||
|         <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> | ||||||
|         <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script> |         <script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.16.0/jquery.validate.min.js"></script> | ||||||
|         <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script> |         <script src="//cdnjs.cloudflare.com/ajax/libs/1000hz-bootstrap-validator/0.11.9/validator.min.js"></script> | ||||||
|  |     </body> | ||||||
| </html> | </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> |       <span class="icon-bar"></span> | ||||||
|     </button> |     </button> | ||||||
|     {% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} |     {% 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="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 url" data-url="#home"><img src="{% static 'datacenterlight/img/logo_white.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 %} |                 {% 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="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 url"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> |                     <a href="{% url 'datacenterlight:index' %}" id="logoWhite" class="navbar-brand topnav"><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a> | ||||||
|                 {% endif %} |                 {% endif %} | ||||||
| 
 | 
 | ||||||
|   </div> |   </div> | ||||||
|  | @ -25,15 +25,15 @@ | ||||||
| 		{% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} | 		{% if request.resolver_match.url_name == "index" or request.resolver_match.url_name == "whydatacenterlight" %} | ||||||
|            <li class="dropdown"> |            <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  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"> | 			<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 menu-url" data-url="#your" href="#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 menu-url" data-url="#our" href="#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="#price" href="#price">{% trans "Order VM" %}</a></li> | ||||||
| 			</ul> | 			</ul> | ||||||
|            </li> |            </li> | ||||||
| 			<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> | ||||||
| 			<li> | 			<li> | ||||||
| 				<a class="url" href="{% url 'datacenterlight:index' %}#contact" data-url="#contact"  >{% trans "Contact" %}</a> | 				<a class="url" href="{% url 'datacenterlight:index' %}#contact" data-url="#contact"  >{% trans "Contact" %}</a> | ||||||
|  | @ -48,11 +48,12 @@ | ||||||
| 				{% endif %} | 				{% endif %} | ||||||
| 				<i class="fa fa-globe" aria-hidden="true"></i> | 				<i class="fa fa-globe" aria-hidden="true"></i> | ||||||
| 				</div> | 				</div> | ||||||
|  | 
 | ||||||
| 				<div class="drop-language"> | 				<div class="drop-language"> | ||||||
| 				{% if LANGUAGE_CODE == 'en-us'%} | 				{% if LANGUAGE_CODE == 'en-us'%} | ||||||
| 				<a class="url" href="{% change_lang 'de' %}">Deutsch</a> | 				<a href="{% change_lang 'de' %}">Deutsch</a> | ||||||
| 				{% else %} | 				{% else %} | ||||||
| 				<a class="url" href="{% change_lang 'en-us' %}" >English</a> | 				<a href="{% change_lang 'en-us' %}" >English</a> | ||||||
| 				{% endif %} | 				{% endif %} | ||||||
| 				</div> | 				</div> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,5 @@ | ||||||
| {% extends "datacenterlight/base.html" %} | {% extends "datacenterlight/base.html" %} | ||||||
| {% load staticfiles i18n%} | {% load staticfiles i18n%} | ||||||
| {% get_current_language as LANGUAGE_CODE %} |  | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| 
 | 
 | ||||||
|  | @ -131,7 +130,7 @@ | ||||||
|             <div class="row text-center"> |             <div class="row text-center"> | ||||||
|                 <div class="col-xs-12 col-md-6 text"> |                 <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> |                     <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> | ||||||
| 
 | 
 | ||||||
|                 <div class="col-xs-12 col-md-6 hero-feature"> |                 <div class="col-xs-12 col-md-6 hero-feature"> | ||||||
|  | @ -139,94 +138,7 @@ | ||||||
|                         <div class="landing card"> |                         <div class="landing card"> | ||||||
|                             <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> |                             <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> | ||||||
|                             <div class="caption"> |                             <div class="caption"> | ||||||
|                                 <form id="order_form" method="POST" action="" data-toggle="validator" role="form"> |                             {% include "datacenterlight/calculator_form.html" %} | ||||||
|                                     {% 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> |  | ||||||
|                             </div> |                             </div> | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|  | @ -254,15 +166,9 @@ | ||||||
|                                 <p>{% trans "Switzerland " %}</p> |                                 <p>{% trans "Switzerland " %}</p> | ||||||
|                             </div> |                             </div> | ||||||
|                             <div class="social"> |                             <div class="social"> | ||||||
|                                 <a target="_blank" class="" href="https://twitter.com/datacenterlight"> |                                 <a target="_blank" class="" href="https://twitter.com/datacenterlight"><i class="fa fa-twitter fa-fw"></i></a> | ||||||
|                                      <i class="fa fa-twitter fa-fw"></i> |                                 <a target="_blank"  class=""  href="https://github.com/ungleich"><i class="fa fa-github fa-fw"></i></a> | ||||||
|                                 </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://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> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|  |  | ||||||
|  | @ -25,21 +25,20 @@ | ||||||
|                     </div> |                     </div> | ||||||
|                     <hr> |                     <hr> | ||||||
|                     <div class="row"> |                     <div class="row"> | ||||||
|                 <div class="col-xs-6"> |                         <div class="col-xs-12 col-sm-6 pull-right order-confirm-date"> | ||||||
|                     <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> |                             <address> | ||||||
|                                 <strong>{% trans "Date"%}:</strong><br> |                                 <strong>{% trans "Date"%}:</strong><br> | ||||||
|                                 <span id="order-created_at">{% now "Y-m-d H:i" %}</span><br><br> |                                 <span id="order-created_at">{% now "Y-m-d H:i" %}</span><br><br> | ||||||
|                             </address> |                             </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> |                     </div> | ||||||
|                     <div class="row"> |                     <div class="row"> | ||||||
|  |  | ||||||
|  | @ -12,7 +12,6 @@ | ||||||
| 		</div> | 		</div> | ||||||
| 
 | 
 | ||||||
| 	</div> | 	</div> | ||||||
|     <script src="{% static 'datacenterlight/js/jquery.js' %}"></script> |  | ||||||
| 
 | 
 | ||||||
| 	<script type="text/javascript"> | 	<script type="text/javascript"> | ||||||
| 		  window.onload=function(){ | 		  window.onload=function(){ | ||||||
|  | @ -30,11 +29,4 @@ | ||||||
| 		   }; | 		   }; | ||||||
| 	</script> | 	</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> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  | @ -1,10 +1,7 @@ | ||||||
| {% extends "datacenterlight/base.html" %} | {% extends "datacenterlight/base.html" %} | ||||||
| {% load staticfiles i18n%} | {% load staticfiles i18n%} | ||||||
| {% get_current_language as LANGUAGE_CODE %} |  | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| 
 |  | ||||||
|      |  | ||||||
|     <!-- Why Data Center Light? --> |     <!-- Why Data Center Light? --> | ||||||
|     <div class="full-whydcl-sec"> |     <div class="full-whydcl-sec"> | ||||||
|         <div class="whydcl-header whydcl-section" id="why_dcl"> |         <div class="whydcl-header whydcl-section" id="why_dcl"> | ||||||
|  | @ -64,7 +61,7 @@ | ||||||
|                         <span class="logo-caption">{% trans "Our awesome juice" %}</span> |                         <span class="logo-caption">{% trans "Our awesome juice" %}</span> | ||||||
|                     </div> |                     </div> | ||||||
|                     <div class="col-xs-12 col-sm-6 col-md-6 col-md-6 logo-wrap"> |                     <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"> |                         <img class="img-responsive btm-space-tayga" src="{% static 'datacenterlight/img/tayga.png' %}" alt="Tayga"> | ||||||
|                         <span class="logo-caption">{% trans "Our NAT64 gateway" %}</span> |                         <span class="logo-caption">{% trans "Our NAT64 gateway" %}</span> | ||||||
|                     </div> |                     </div> | ||||||
|                      |                      | ||||||
|  | @ -91,7 +88,7 @@ | ||||||
|                 <div class="col-xs-12 col-sm-8 col-md-7 text-right"> |                 <div class="col-xs-12 col-sm-8 col-md-7 text-right"> | ||||||
|                         <div class="tech-sub-sec"> |                         <div class="tech-sub-sec"> | ||||||
|                             <h2>{% trans "We believe in giving back to the FOSS community." %}</h2> |                             <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> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|  | @ -107,7 +104,7 @@ | ||||||
|                         <h2>{% trans "We bring the future to you." %}</h2> |                         <h2>{% trans "We bring the future to you." %}</h2> | ||||||
|                     </div> |                     </div> | ||||||
|                     <div class="col-xs-12 col-sm-7 col-md-8 col-lg-8 text-left tech-sub-sec landscape-xs-6"> |                     <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> |                             <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. |                             Your VM needs only IPv6. Data Center Light provides<br> transparent two-way IPv6/IPv4 translation. | ||||||
|                             {% endblocktrans %}</p> |                             {% endblocktrans %}</p> | ||||||
|                     </div> |                     </div> | ||||||
|  | @ -122,13 +119,10 @@ | ||||||
|                     </div> |                     </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 class="col-xs-12 col-sm-5 col-md-4 col-lg-4 text-right tech-sub-sec  padding-vertical landscape-xs-4"> | ||||||
|                         <div> |                         <div> | ||||||
| 							<p class="lead">{% blocktrans %} No more spinning metal plates! Data Center Light uses only SSDs. We keep things faster and lighter. {% endblocktrans %}</p> |                             <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> | ||||||
|                  |  | ||||||
| 				 |  | ||||||
|                  |  | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|         </div> |         </div> | ||||||
|  | @ -142,7 +136,7 @@ | ||||||
|             <div class="row text-center"> |             <div class="row text-center"> | ||||||
|                 <div class="col-xs-12 col-md-6 text"> |                 <div class="col-xs-12 col-md-6 text"> | ||||||
|                     <h2 class="section-heading">{% trans "Starting from only 15CHF per month. Try now." %}</h2> |                     <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> | ||||||
| 
 | 
 | ||||||
|                 <div class="col-xs-12 col-md-6 hero-feature"> |                 <div class="col-xs-12 col-md-6 hero-feature"> | ||||||
|  | @ -150,94 +144,7 @@ | ||||||
|                         <div class="landing card"> |                         <div class="landing card"> | ||||||
|                             <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> |                             <img class="img-beta" src="{% static 'datacenterlight/img/beta-img.png' %}" alt=""> | ||||||
|                             <div class="caption"> |                             <div class="caption"> | ||||||
|                                 <form id="order_form" method="POST" action="" data-toggle="validator" role="form"> |                             {% include "datacenterlight/calculator_form.html" %} | ||||||
|                                     {% 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> |  | ||||||
|                             </div> |                             </div> | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|  | @ -249,6 +156,4 @@ | ||||||
|     </div> |     </div> | ||||||
|      |      | ||||||
|     <!-- End Why Data Center Light? --> |     <!-- End Why Data Center Light? --> | ||||||
| 
 |  | ||||||
|   |  | ||||||
| {% endblock %} | {% endblock %} | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| from django.views.generic import FormView, CreateView, TemplateView, DetailView | from django.views.generic import FormView, CreateView, TemplateView, DetailView | ||||||
| from django.http import HttpResponseRedirect | from django.http import HttpResponseRedirect | ||||||
| from .forms import BetaAccessForm | from .forms import BetaAccessForm | ||||||
| from .models import BetaAccess, BetaAccessVMType, BetaAccessVM | from .models import BetaAccess, BetaAccessVMType, BetaAccessVM, VMTemplate | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
| from django.core.urlresolvers import reverse | from django.core.urlresolvers import reverse | ||||||
| from django.core.mail import EmailMessage | from django.core.mail import EmailMessage | ||||||
|  | @ -21,7 +21,7 @@ from datetime import datetime | ||||||
| from membership.models import CustomUser, StripeCustomer | from membership.models import CustomUser, StripeCustomer | ||||||
| from oca.pool import WrongIdError | from oca.pool import WrongIdError | ||||||
| from opennebula_api.models import OpenNebulaManager | from opennebula_api.models import OpenNebulaManager | ||||||
| from opennebula_api.serializers import VirtualMachineTemplateSerializer, VirtualMachineSerializer | from opennebula_api.serializers import VirtualMachineTemplateSerializer, VirtualMachineSerializer, VMTemplateSerializer | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class LandingProgramView(TemplateView): | class LandingProgramView(TemplateView): | ||||||
|  | @ -195,42 +195,69 @@ class IndexView(CreateView): | ||||||
|     success_url = "/datacenterlight#requestform" |     success_url = "/datacenterlight#requestform" | ||||||
|     success_message = "Thank you, we will contact you as soon as possible" |     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) |     @cache_control(no_cache=True, must_revalidate=True, no_store=True) | ||||||
|     def get(self, request, *args, **kwargs): |     def get(self, request, *args, **kwargs): | ||||||
| 
 | 
 | ||||||
|         for session_var in ['specs', 'user', 'billing_address_data']: |         for session_var in ['specs', 'user', 'billing_address_data']: | ||||||
|             if session_var in request.session: |             if session_var in request.session: | ||||||
|                 del request.session[session_var] |                 del request.session[session_var] | ||||||
|         try: | 
 | ||||||
|             manager = OpenNebulaManager() |         vm_templates = VMTemplate.objects.all() | ||||||
|             templates = manager.get_templates() |  | ||||||
|         context = { |         context = { | ||||||
|                 'templates': VirtualMachineTemplateSerializer(templates, many=True).data |             'templates': vm_templates | ||||||
|             } |  | ||||||
|         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) |         return render(request, self.template_name, context) | ||||||
| 
 | 
 | ||||||
|     def post(self, request): |     def post(self, request): | ||||||
|         cores = request.POST.get('cpu') |         cores = request.POST.get('cpu') | ||||||
|  |         cores_field = forms.IntegerField(validators=[self.validate_cores]) | ||||||
|         memory = request.POST.get('ram') |         memory = request.POST.get('ram') | ||||||
|  |         memory_field = forms.IntegerField(validators=[self.validate_memory]) | ||||||
|         storage = request.POST.get('storage') |         storage = request.POST.get('storage') | ||||||
|  |         storage_field = forms.IntegerField(validators=[self.validate_storage]) | ||||||
|         price = request.POST.get('total') |         price = request.POST.get('total') | ||||||
|         template_id = int(request.POST.get('config')) |         template_id = int(request.POST.get('config')) | ||||||
|         manager = OpenNebulaManager() |         template = VMTemplate.objects.filter(opennebula_vm_template_id=template_id).first() | ||||||
|         template = manager.get_template(template_id) |         template_data = VMTemplateSerializer(template).data | ||||||
|         template_data = VirtualMachineTemplateSerializer(template).data |  | ||||||
| 
 | 
 | ||||||
|         name = request.POST.get('name') |         name = request.POST.get('name') | ||||||
|         email = request.POST.get('email') |         email = request.POST.get('email') | ||||||
|         name_field = forms.CharField() |         name_field = forms.CharField() | ||||||
|         email_field = forms.EmailField() |         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: |         try: | ||||||
|             name = name_field.clean(name) |             name = name_field.clean(name) | ||||||
|         except ValidationError as err: |         except ValidationError as err: | ||||||
|  | @ -315,25 +342,6 @@ class WhyDataCenterLightView(IndexView): | ||||||
|     template_name = "datacenterlight/whydatacenterlight.html" |     template_name = "datacenterlight/whydatacenterlight.html" | ||||||
|     model = BetaAccess |     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): | class PaymentOrderView(FormView): | ||||||
|     template_name = 'hosting/payment.html' |     template_name = 'hosting/payment.html' | ||||||
|  | @ -345,6 +353,7 @@ class PaymentOrderView(FormView): | ||||||
|         if billing_address_data: |         if billing_address_data: | ||||||
|             form_kwargs.update({ |             form_kwargs.update({ | ||||||
|                 'initial': { |                 'initial': { | ||||||
|  |                     'cardholder_name': billing_address_data['cardholder_name'], | ||||||
|                     'street_address': billing_address_data['street_address'], |                     'street_address': billing_address_data['street_address'], | ||||||
|                     'city': billing_address_data['city'], |                     'city': billing_address_data['city'], | ||||||
|                     'postal_code': billing_address_data['postal_code'], |                     'postal_code': billing_address_data['postal_code'], | ||||||
|  |  | ||||||
										
											
												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{ |   p a{ | ||||||
|     color: #ecf0f1; |     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> |   </style> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -132,7 +173,15 @@ | ||||||
|     <section id="services"> |     <section id="services"> | ||||||
|       <div class="container"> |       <div class="container"> | ||||||
|     <div class="row"> |     <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> |         <h2 class="section-heading">In Digital Glarus you can..</h2> | ||||||
|         <hr class="primary"> |         <hr class="primary"> | ||||||
|       </div> |       </div> | ||||||
|  |  | ||||||
|  | @ -45,17 +45,10 @@ | ||||||
|     <script src="{% static 'digitalglarus/https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> |     <script src="{% static 'digitalglarus/https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||||
|     <![endif]--> |     <![endif]--> | ||||||
|     <!-- <link href="css/ungleich.css" rel="stylesheet" type="text/css"></link> --> |     <!-- <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'); |     <!-- Google analytics --> | ||||||
|       ga('send', 'pageview'); |     {% include 'google_analytics.html' %} | ||||||
| 
 |     <!-- End Google Analytics --> | ||||||
|     </script> |  | ||||||
|     <link rel="shortcut icon" href="{% static 'digitalglarus/img/favicon.ico' %}" type="image/x-icon"> |     <link rel="shortcut icon" href="{% static 'digitalglarus/img/favicon.ico' %}" type="image/x-icon"> | ||||||
|     <style id="igtranslator-color" type="text/css"></style> |     <style id="igtranslator-color" type="text/css"></style> | ||||||
|     <style type="text/css"> |     <style type="text/css"> | ||||||
|  |  | ||||||
|  | @ -146,7 +146,6 @@ TEMPLATES = [ | ||||||
|     { |     { | ||||||
|         'BACKEND': 'django.template.backends.django.DjangoTemplates', |         'BACKEND': 'django.template.backends.django.DjangoTemplates', | ||||||
|         'DIRS': [os.path.join(PROJECT_DIR, 'cms_templates/'), |         '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, 'cms_templates/djangocms_blog/'), | ||||||
|                  os.path.join(PROJECT_DIR, 'membership'), |                  os.path.join(PROJECT_DIR, 'membership'), | ||||||
|                  os.path.join(PROJECT_DIR, 'hosting/templates/'), |                  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/djangocms_blog/'), | ||||||
|                  os.path.join(PROJECT_DIR, 'ungleich/templates/cms/ungleichch'), |                  os.path.join(PROJECT_DIR, 'ungleich/templates/cms/ungleichch'), | ||||||
|                  os.path.join(PROJECT_DIR, 'ungleich/templates/ungleich'), |                  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, |         'APP_DIRS': True, | ||||||
|         'OPTIONS': { |         'OPTIONS': { | ||||||
|  | @ -516,8 +515,12 @@ DCL_SUPPORT_FROM_ADDRESS = env('DCL_SUPPORT_FROM_ADDRESS') | ||||||
| 
 | 
 | ||||||
| # Settings for Google analytics | # Settings for Google analytics | ||||||
| GOOGLE_ANALYTICS_PROPERTY_IDS = { | GOOGLE_ANALYTICS_PROPERTY_IDS = { | ||||||
|     'datacenterlight.ch': 'UA-62285904-9', |     'ungleich.ch': 'UA-62285904-1', | ||||||
|     'digitalglarus.ch': 'UA-62285904-2', |     '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', |     '127.0.0.1:8000': 'localhost', | ||||||
|     'dynamicweb-development.ungleich.ch': 'development', |     'dynamicweb-development.ungleich.ch': 'development', | ||||||
|     'dynamicweb-staging.ungleich.ch': 'staging' |     'dynamicweb-staging.ungleich.ch': 'staging' | ||||||
|  |  | ||||||
|  | @ -8,7 +8,7 @@ msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: PACKAGE VERSION\n" | "Project-Id-Version: PACKAGE VERSION\n" | ||||||
| "Report-Msgid-Bugs-To: \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" | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | "Language-Team: LANGUAGE <LL@li.org>\n" | ||||||
|  | @ -18,55 +18,55 @@ msgstr "" | ||||||
| "Content-Transfer-Encoding: 8bit\n" | "Content-Transfer-Encoding: 8bit\n" | ||||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||||
| 
 | 
 | ||||||
| #: forms.py:28 | #: forms.py:25 | ||||||
| msgid "Your account is not activated yet." | msgid "Your account is not activated yet." | ||||||
| msgstr "Dein Account wurde noch nicht aktiviert." | msgstr "Dein Account wurde noch nicht aktiviert." | ||||||
| 
 | 
 | ||||||
| #: forms.py:65 | #: forms.py:62 | ||||||
| msgid "Paste here your public key" | msgid "Paste here your public key" | ||||||
| msgstr "Fügen Sie Ihren public key ein" | msgstr "Fügen Sie Ihren public key ein" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:68 | #: templates/hosting/base_short.html:71 | ||||||
| msgid "My Virtual Machines" | msgid "My Virtual Machines" | ||||||
| msgstr "Meine virtuellen Maschinen" | 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" | msgid "My Orders" | ||||||
| msgstr "Meine Bestellungen" | msgstr "Meine Bestellungen" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:82 | #: templates/hosting/base_short.html:85 | ||||||
| msgid "Keys" | msgid "Keys" | ||||||
| msgstr "Schlüssel" | msgstr "Schlüssel" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:87 | #: templates/hosting/base_short.html:90 | ||||||
| msgid "Notifications " | msgid "Notifications " | ||||||
| msgstr "Benachrichtigungen" | msgstr "Benachrichtigungen" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:90 | #: templates/hosting/base_short.html:93 | ||||||
| msgid "Logout" | msgid "Logout" | ||||||
| msgstr "Abmelden" | msgstr "Abmelden" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:95 | #: templates/hosting/base_short.html:98 | ||||||
| msgid "How it works" | msgid "How it works" | ||||||
| msgstr "So funktioniert es" | msgstr "So funktioniert es" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:98 | #: templates/hosting/base_short.html:101 | ||||||
| msgid "Your infrastructure" | msgid "Your infrastructure" | ||||||
| msgstr "deine Infrastruktur" | msgstr "deine Infrastruktur" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:101 | #: templates/hosting/base_short.html:104 | ||||||
| msgid "Our inftrastructure" | msgid "Our inftrastructure" | ||||||
| msgstr "Unsere Infrastruktur" | msgstr "Unsere Infrastruktur" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:104 | #: templates/hosting/base_short.html:107 | ||||||
| msgid "Pricing" | msgid "Pricing" | ||||||
| msgstr "Preise" | msgstr "Preise" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:107 | #: templates/hosting/base_short.html:110 | ||||||
| msgid "Contact" | msgid "Contact" | ||||||
| msgstr "Kontakt" | msgstr "Kontakt" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/base_short.html:110 | #: templates/hosting/base_short.html:113 | ||||||
| #: templates/hosting/confirm_reset_password.html:38 | #: templates/hosting/confirm_reset_password.html:38 | ||||||
| #: templates/hosting/login.html:17 templates/hosting/login.html.py:26 | #: templates/hosting/login.html:17 templates/hosting/login.html.py:26 | ||||||
| #: templates/hosting/reset_password.html:32 templates/hosting/signup.html:30 | #: templates/hosting/reset_password.html:32 templates/hosting/signup.html:30 | ||||||
|  | @ -185,20 +185,14 @@ msgid "New Virtual Machine" | ||||||
| msgstr "Neue virtuelle Maschine" | msgstr "Neue virtuelle Maschine" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/create_virtual_machine.html:28 | #: templates/hosting/create_virtual_machine.html:28 | ||||||
| #, fuzzy |  | ||||||
| #| msgid "Select VM Template:" |  | ||||||
| msgid "Step 1. Select VM Template:" | msgid "Step 1. Select VM Template:" | ||||||
| msgstr "Wähle eine Vorlage" | msgstr "Wähle eine Vorlage" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/create_virtual_machine.html:42 | #: templates/hosting/create_virtual_machine.html:42 | ||||||
| #, fuzzy |  | ||||||
| #| msgid "Select VM Configuration:" |  | ||||||
| msgid "Step2. Select VM Configuration" | msgid "Step2. Select VM Configuration" | ||||||
| msgstr "Wähle eine Konfiguration" | msgstr "Wähle eine Konfiguration" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/create_virtual_machine.html:59 | #: templates/hosting/create_virtual_machine.html:59 | ||||||
| #, fuzzy |  | ||||||
| #| msgid "Pricing" |  | ||||||
| msgid "Price " | msgid "Price " | ||||||
| msgstr "Preis" | msgstr "Preis" | ||||||
| 
 | 
 | ||||||
|  | @ -239,7 +233,7 @@ msgid "Don't have an account yet ? " | ||||||
| msgstr "Besitzt du kein Benutzerkonto?" | msgstr "Besitzt du kein Benutzerkonto?" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/login.html:37 templates/hosting/signup.html.py:13 | #: 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" | msgid "Sign up" | ||||||
| msgstr "Registrieren" | msgstr "Registrieren" | ||||||
| 
 | 
 | ||||||
|  | @ -295,23 +289,23 @@ msgstr "Bezahlmethode" | ||||||
| msgid "Order summary" | msgid "Order summary" | ||||||
| msgstr "Bestellungsübersicht" | 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 | #: templates/hosting/virtual_machine_detail.html:76 | ||||||
| msgid "Cores" | msgid "Cores" | ||||||
| msgstr "Prozessorkerne" | 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 | #: templates/hosting/virtual_machine_detail.html:82 | ||||||
| msgid "Memory" | msgid "Memory" | ||||||
| msgstr "Arbeitsspeicher" | 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" | msgid "Disk space" | ||||||
| msgstr "Festplattenkapazität" | msgstr "Festplattenkapazität" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/order_detail.html:71 | #: templates/hosting/order_detail.html:71 templates/hosting/payment.html:41 | ||||||
| msgid "Total" | msgid "Total" | ||||||
| msgstr "" | msgstr "Gesamt" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/order_detail.html:77 | #: templates/hosting/order_detail.html:77 | ||||||
| msgid "Finish Configuration" | msgid "Finish Configuration" | ||||||
|  | @ -355,42 +349,97 @@ msgstr "Schliessen" | ||||||
| msgid "Delete" | msgid "Delete" | ||||||
| msgstr "Löschen" | msgstr "Löschen" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/payment.html:12 | #: templates/hosting/payment.html:10 | ||||||
| msgid "Billing Amount" | msgid "Your Order" | ||||||
| msgstr "Rechnungsbetrag" | msgstr "Deine Bestellung" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/payment.html:26 | #: templates/hosting/payment.html:22 | ||||||
| #: templates/hosting/virtual_machine_detail.html:98 | #: templates/hosting/virtual_machine_detail.html:98 | ||||||
| msgid "Configuration" | msgid "Configuration" | ||||||
| msgstr "Konfiguration" | 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" | msgid "Billing Address" | ||||||
| msgstr "Rechnungsadresse" | msgstr "Rechnungsadresse" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/payment.html:52 | #: templates/hosting/payment.html:66 | ||||||
| msgid "Payment Details" | msgid "Credit Card" | ||||||
| msgstr "Rechnungsdetails" | msgstr "Kreditkarte" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/payment.html:65 | #: templates/hosting/payment.html:71 | ||||||
| msgid "Submit Payment" | msgid "" | ||||||
| msgstr "Betrag überweisen" | "\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 | #: templates/hosting/payment.html:90 | ||||||
| msgid "CARD NUMBER" | 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" | msgstr "Kreditkartennummer" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/payment.html:89 | #: templates/hosting/payment.html:117 | ||||||
| msgid "Valid Card Number" | msgid "Expiry Date" | ||||||
| msgstr "Gültige Kreditkartennummer" |  | ||||||
| 
 |  | ||||||
| #: templates/hosting/payment.html:98 |  | ||||||
| msgid "EXPIRATION DATE" |  | ||||||
| msgstr "Ablaufdatum" | msgstr "Ablaufdatum" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/payment.html:109 | #: templates/hosting/payment.html:122 | ||||||
| msgid "CV CODE" | msgid "CVC" | ||||||
| msgstr "CV Code" | 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 | #: templates/hosting/reset_password.html:15 | ||||||
| msgid "Reset your password" | msgid "Reset your password" | ||||||
|  | @ -431,14 +480,10 @@ msgid "Created at" | ||||||
| msgstr "Erstellt am" | msgstr "Erstellt am" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/user_keys.html:43 | #: templates/hosting/user_keys.html:43 | ||||||
| #, fuzzy |  | ||||||
| #| msgid "Delete" |  | ||||||
| msgid "Delete Key" | msgid "Delete Key" | ||||||
| msgstr "Löschen" | msgstr "Löschen" | ||||||
| 
 | 
 | ||||||
| #: templates/hosting/user_keys.html:56 | #: templates/hosting/user_keys.html:56 | ||||||
| #, fuzzy |  | ||||||
| #| msgid "Do You want do delete your order?" |  | ||||||
| msgid "Do You want to delete this key?" | msgid "Do You want to delete this key?" | ||||||
| msgstr "Möchtest Du den Schlüssel löschen?" | msgstr "Möchtest Du den Schlüssel löschen?" | ||||||
| 
 | 
 | ||||||
|  | @ -502,11 +547,11 @@ msgstr "IPv4" | ||||||
| msgid "Ipv6" | msgid "Ipv6" | ||||||
| msgstr "IPv6" | msgstr "IPv6" | ||||||
| 
 | 
 | ||||||
| #: views.py:213 views.py:232 | #: views.py:207 views.py:229 | ||||||
| msgid "login" | msgid "login" | ||||||
| msgstr "einloggen" | msgstr "einloggen" | ||||||
| 
 | 
 | ||||||
| #: views.py:217 | #: views.py:212 | ||||||
| msgid "" | msgid "" | ||||||
| "Thank you for signing up. We have sent an email to you. Please follow the " | "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 " | "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 " | "den Anweisungen um deinen Account zu aktivieren. Danach kannst du dich über " | ||||||
| "diesen" | "diesen" | ||||||
| 
 | 
 | ||||||
| #: views.py:218 views.py:243 | #: views.py:214 views.py:240 | ||||||
| msgid "Go back to" | msgid "Go back to" | ||||||
| msgstr "Zurück" | msgstr "Zurück" | ||||||
| 
 | 
 | ||||||
| #: views.py:233 | #: views.py:230 | ||||||
| msgid "Account activation" | msgid "Account activation" | ||||||
| msgstr "Accountaktivierung" | msgstr "Accountaktivierung" | ||||||
| 
 | 
 | ||||||
| #: views.py:236 | #: views.py:233 | ||||||
| msgid "Your account has been activated." | msgid "Your account has been activated." | ||||||
| msgstr "Dein Account wurde aktiviert." | msgstr "Dein Account wurde aktiviert." | ||||||
| 
 | 
 | ||||||
| #: views.py:237 | #: views.py:234 | ||||||
| msgid "You can now" | msgid "You can now" | ||||||
| msgstr "Du kannst dich nun" | msgstr "Du kannst dich nun" | ||||||
| 
 | 
 | ||||||
| #: views.py:242 | #: views.py:239 | ||||||
| msgid "Sorry. Your request is invalid." | msgid "Sorry. Your request is invalid." | ||||||
| msgstr "Entschuldigung, deine Anfrage ist ungültig." | msgstr "Entschuldigung, deine Anfrage ist ungültig." | ||||||
| 
 | 
 | ||||||
| #: views.py:760 | #: views.py:757 | ||||||
| msgid "" | msgid "" | ||||||
| "We could not find the requested VM. Please                            " | "We could not find the requested VM. Please                            " | ||||||
| "contact Data Center Light Support." | "contact Data Center Light Support." | ||||||
| msgstr "" | 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" | #~ msgid "Home" | ||||||
| #~ msgstr "Home" | #~ msgstr "Home" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,14 +4,15 @@ | ||||||
|  * For details, see http://www.apache.org/licenses/LICENSE-2.0. |  * For details, see http://www.apache.org/licenses/LICENSE-2.0. | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| @font-face { | @font-face { | ||||||
|     font-family: 'Lato-Regular'; |     font-family: 'Lato-Regular'; | ||||||
|     src: url('../fonts/Lato/Lato-Regular.ttf'); |     src: url('../fonts/Lato/Lato-Regular.ttf'); | ||||||
| } | } | ||||||
|  | 
 | ||||||
| @font-face { | @font-face { | ||||||
|     src: url('../fonts/Lato/Lato-Black.ttf'); |     src: url('../fonts/Lato/Lato-Black.ttf'); | ||||||
| } | } | ||||||
|  | 
 | ||||||
| @font-face { | @font-face { | ||||||
|     font-family: 'Lato-Light'; |     font-family: 'Lato-Light'; | ||||||
|     src: url('../fonts/Lato/Lato-Light.ttf'); |     src: url('../fonts/Lato/Lato-Light.ttf'); | ||||||
|  | @ -33,10 +34,35 @@ h6 { | ||||||
|     font-family: 'Lato-Regular', sans-serif; |     font-family: 'Lato-Regular', sans-serif; | ||||||
|     font-weight: 300; |     font-weight: 300; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .topnav { | .topnav { | ||||||
|     font-size: 14px; |     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 { | .lead { | ||||||
|     font-size: 18px; |     font-size: 18px; | ||||||
|     font-weight: 400; |     font-weight: 400; | ||||||
|  | @ -191,11 +217,13 @@ h6 { | ||||||
|     float: right; |     float: right; | ||||||
|     margin-top: 0; |     margin-top: 0; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| /*------Auth section---------*/ | /*------Auth section---------*/ | ||||||
| .auth-container { | .auth-container { | ||||||
|     height: 100vh; |     height: 100vh; | ||||||
|     position: relative; |     position: relative; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-bg { | .auth-bg { | ||||||
|     background: url(../img/auth-bg.jpg); |     background: url(../img/auth-bg.jpg); | ||||||
|     position: fixed; |     position: fixed; | ||||||
|  | @ -209,6 +237,7 @@ h6 { | ||||||
|     background-attachment: fixed; |     background-attachment: fixed; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-bg::before { | .auth-bg::before { | ||||||
|     content: ""; |     content: ""; | ||||||
|     position: absolute; |     position: absolute; | ||||||
|  | @ -219,14 +248,17 @@ h6 { | ||||||
|     background: rgba(75, 75, 101, 0.55); |     background: rgba(75, 75, 101, 0.55); | ||||||
|     z-index: 1; |     z-index: 1; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-container .container { | .auth-container .container { | ||||||
|     z-index: 1000; |     z-index: 1000; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-container .auth-content { | .auth-container .auth-content { | ||||||
|     width: 100%; |     width: 100%; | ||||||
|     margin: 0 auto; |     margin: 0 auto; | ||||||
|     max-width: 390px; |     max-width: 390px; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-container .auth-center { | .auth-container .auth-center { | ||||||
|     position: absolute; |     position: absolute; | ||||||
|     left: 50%; |     left: 50%; | ||||||
|  | @ -238,6 +270,7 @@ h6 { | ||||||
| .auth-container .auth-title { | .auth-container .auth-title { | ||||||
|     margin-bottom: 50px; |     margin-bottom: 50px; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-container .auth-title h2 { | .auth-container .auth-title h2 { | ||||||
|     color: #fff; |     color: #fff; | ||||||
|     font-size: 44px; |     font-size: 44px; | ||||||
|  | @ -247,6 +280,7 @@ h6 { | ||||||
|     margin-bottom: 30px; |     margin-bottom: 30px; | ||||||
|     position: relative; |     position: relative; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-container .auth-title h2::after { | .auth-container .auth-title h2::after { | ||||||
|     content: ""; |     content: ""; | ||||||
|     position: absolute; |     position: absolute; | ||||||
|  | @ -279,34 +313,42 @@ h6 { | ||||||
|     border-radius: 3px 3px 0px 0px; |     border-radius: 3px 3px 0px 0px; | ||||||
|     margin: 0 auto; |     margin: 0 auto; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .form { | .auth-box .form { | ||||||
|     padding: 20px; |     padding: 20px; | ||||||
|     width: 80%; |     width: 80%; | ||||||
|     margin: 0 auto; |     margin: 0 auto; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .form .red { | .auth-box .form .red { | ||||||
|     color: #ea3a3a; |     color: #ea3a3a; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .form .btn { | .auth-box .form .btn { | ||||||
|     box-shadow: 0 0px 9px rgba(0, 0, 0, 0.19), 0 3px 5px rgba(0, 0, 0, 0.23); |     box-shadow: 0 0px 9px rgba(0, 0, 0, 0.19), 0 3px 5px rgba(0, 0, 0, 0.23); | ||||||
|     letter-spacing: 3px; |     letter-spacing: 3px; | ||||||
|     font-size: 17px; |     font-size: 17px; | ||||||
|     text-transform: uppercase; |     text-transform: uppercase; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .form .form-control { | .auth-box .form .form-control { | ||||||
|     height: 44px; |     height: 44px; | ||||||
|     font-size: 16px; |     font-size: 16px; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .auth-footer { | .auth-box .auth-footer { | ||||||
|     text-align: center; |     text-align: center; | ||||||
|     padding: 10px; |     padding: 10px; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .auth-footer .text { | .auth-box .auth-footer .text { | ||||||
|     color: #777; |     color: #777; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .auth-footer .links a { | .auth-box .auth-footer .links a { | ||||||
|     color: #1e94cc; |     color: #1e94cc; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box .auth-footer .links a:hover { | .auth-box .auth-footer .links a:hover { | ||||||
|     color: #1e94cc; |     color: #1e94cc; | ||||||
| } | } | ||||||
|  | @ -314,6 +356,7 @@ h6 { | ||||||
| .auth-box.sign-up { | .auth-box.sign-up { | ||||||
|     padding-bottom: 5px; |     padding-bottom: 5px; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .auth-box.sign-up .form { | .auth-box.sign-up .form { | ||||||
|     padding: 15px 20px 0 20px; |     padding: 15px 20px 0 20px; | ||||||
| } | } | ||||||
|  | @ -325,6 +368,7 @@ h6 { | ||||||
|     line-height: 30px; |     line-height: 30px; | ||||||
|     font-family: 'Lato' !important; |     font-family: 'Lato' !important; | ||||||
| } | } | ||||||
|  | 
 | ||||||
| .sign-up-message a { | .sign-up-message a { | ||||||
|     font-size: 18px; |     font-size: 18px; | ||||||
|     color: #1e94cc !important; |     color: #1e94cc !important; | ||||||
|  | @ -353,38 +397,47 @@ h6 { | ||||||
|     ul.banner-social-buttons > li:last-child { |     ul.banner-social-buttons > li:last-child { | ||||||
|         margin-bottom: 0; |         margin-bottom: 0; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     .auth-box .form { |     .auth-box .form { | ||||||
|         padding: 15px 0px 0 0; |         padding: 15px 0px 0 0; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     .auth-box.sign-up .form { |     .auth-box.sign-up .form { | ||||||
|         padding: 15px 0px 0 0; |         padding: 15px 0px 0 0; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     .auth-box .form .form-control { |     .auth-box .form .form-control { | ||||||
|         height: 44px; |         height: 44px; | ||||||
|         font-size: 13px; |         font-size: 13px; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     .auth-container .auth-title { |     .auth-container .auth-title { | ||||||
|         display: none; |         display: none; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
| @media (max-width: 540px) { | @media (max-width: 540px) { | ||||||
|     .auth-container .auth-title h2 { |     .auth-container .auth-title h2 { | ||||||
|         font-size: 32px; |         font-size: 32px; | ||||||
|         width: 90%; |         width: 90%; | ||||||
|         margin-bottom: 50px; |         margin-bottom: 50px; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     .auth-container.auth-signup .auth-title h2 { |     .auth-container.auth-signup .auth-title h2 { | ||||||
|         font-size: 20px; |         font-size: 20px; | ||||||
|         width: 90%; |         width: 90%; | ||||||
|         margin-bottom: 50px; |         margin-bottom: 50px; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     .auth-box .form { |     .auth-box .form { | ||||||
|         width: 90%; |         width: 90%; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|     .auth-box .section-heading { |     .auth-box .section-heading { | ||||||
|         font-size: 15px; |         font-size: 15px; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
| footer { | footer { | ||||||
|     padding: 2%; |     padding: 2%; | ||||||
|     background-color: #f8f8f8; |     background-color: #f8f8f8; | ||||||
|  | @ -418,3 +471,246 @@ a.unlink:hover { | ||||||
|     color: inherit; |     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,8 +1,27 @@ | ||||||
|  | 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 () { | $(document).ready(function () { | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     $.ajaxSetup({ |     $.ajaxSetup({ | ||||||
|         beforeSend: function (xhr, settings) { |         beforeSend: function (xhr, settings) { | ||||||
|             function getCookie(name) { |             function getCookie(name) { | ||||||
|  | @ -20,6 +39,7 @@ $( document ).ready(function() { | ||||||
|                 } |                 } | ||||||
|                 return cookieValue; |                 return cookieValue; | ||||||
|             } |             } | ||||||
|  | 
 | ||||||
|             if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { |             if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { | ||||||
|                 // Only send the token to relative URLs i.e. locally.
 |                 // Only send the token to relative URLs i.e. locally.
 | ||||||
|                 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); |                 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); | ||||||
|  | @ -31,9 +51,93 @@ $( document ).ready(function() { | ||||||
|     var hasCreditcard = window.hasCreditcard || false; |     var hasCreditcard = window.hasCreditcard || false; | ||||||
|     if (!hasCreditcard) { |     if (!hasCreditcard) { | ||||||
|         var stripe = Stripe(window.stripeKey); |         var stripe = Stripe(window.stripeKey); | ||||||
|         var elements = stripe.elements({locale: window.current_lan}); |         var element_style = { | ||||||
|         var card = elements.create('card', options={hidePostalCode: true}); |             fonts: [{ | ||||||
|         card.mount('#card-element'); |                 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); |     console.log("has creditcard", hasCreditcard); | ||||||
|     // hasCreditcard= true;
 |     // hasCreditcard= true;
 | ||||||
|  | @ -52,63 +156,36 @@ $( document ).ready(function() { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |     var $form_new = $('#payment-form-new'); | ||||||
|  |     $form_new.submit(payWithStripe_new); | ||||||
| 
 | 
 | ||||||
|     var $form = $('#payment-form'); |     function payWithStripe_new(e) { | ||||||
|     $form.submit(payWithStripe); |  | ||||||
| 
 |  | ||||||
|     /* If you're using Stripe for payments */ |  | ||||||
|     function payWithStripe(e) { |  | ||||||
|         e.preventDefault(); |         e.preventDefault(); | ||||||
| 
 | 
 | ||||||
|         function stripeTokenHandler(token) { |         function stripeTokenHandler(token) { | ||||||
|             // Insert the token ID into the form so it gets submitted to the server
 |             // Insert the token ID into the form so it gets submitted to the server
 | ||||||
|           var form = document.getElementById('payment-form'); |             var form = document.getElementById('payment-form-new'); | ||||||
|           var hiddenInput = document.createElement('input'); |  | ||||||
|             $('#id_token').val(token.id); |             $('#id_token').val(token.id); | ||||||
| 
 |  | ||||||
|             $('#billing-form').submit(); |             $('#billing-form').submit(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|         stripe.createToken(card).then(function(result) { |         stripe.createToken(cardNumberElement).then(function (result) { | ||||||
|             if (result.error) { |             if (result.error) { | ||||||
|                 // Inform the user if there was an error
 |                 // Inform the user if there was an error
 | ||||||
|                 var errorElement = document.getElementById('card-errors'); |                 var errorElement = document.getElementById('card-errors'); | ||||||
|                 errorElement.textContent = result.error.message; |                 errorElement.textContent = result.error.message; | ||||||
|             } else { |             } 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
 |                 // Send the token to your server
 | ||||||
|                 stripeTokenHandler(result.token); |                 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 */ |     /* Form validation */ | ||||||
|  | @ -120,7 +197,7 @@ $( document ).ready(function() { | ||||||
|         return this.optional(element) || /^[0-9]{2}$/.test(value); |         return this.optional(element) || /^[0-9]{2}$/.test(value); | ||||||
|     }, "Please specify a valid 2-digit year."); |     }, "Please specify a valid 2-digit year."); | ||||||
| 
 | 
 | ||||||
|     validator = $form.validate({ |     validator = $form_new.validate({ | ||||||
|         rules: { |         rules: { | ||||||
|             cardNumber: { |             cardNumber: { | ||||||
|                 required: true, |                 required: true, | ||||||
|  | @ -150,18 +227,6 @@ $( document ).ready(function() { | ||||||
|             $(element).closest('.form-group').append(error); |             $(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);
 |     // $form.find('[type=submit]').prop('disabled', true);
 | ||||||
|     // var readyInterval = setInterval(function() {
 |     // var readyInterval = setInterval(function() {
 | ||||||
|     //     if (paymentFormReady()) {
 |     //     if (paymentFormReady()) {
 | ||||||
|  |  | ||||||
|  | @ -45,16 +45,10 @@ | ||||||
|     } |     } | ||||||
| </style> | </style> | ||||||
| {% endwith %}    | {% 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'); |     <!-- Google analytics --> | ||||||
|   ga('send', 'pageview'); |     {% include "google_analytics.html" %} | ||||||
| 
 |     <!-- End Google Analytics --> | ||||||
| </script> |  | ||||||
| 
 | 
 | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|  |  | ||||||
|  | @ -41,11 +41,16 @@ | ||||||
|         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> |         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||||
|     <![endif]--> |     <![endif]--> | ||||||
| 
 | 
 | ||||||
|  |     <!-- Google analytics --> | ||||||
|  |     {% include "google_analytics.html" %} | ||||||
|  |     <!-- End Google Analytics --> | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body> | <body> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |     {% block navbar %} | ||||||
|  | 
 | ||||||
|         <!-- Navigation --> |         <!-- Navigation --> | ||||||
| 
 | 
 | ||||||
|         <nav class="navbar navbar-default  navbar-fixed-top topnav" role="navigation"> |         <nav class="navbar navbar-default  navbar-fixed-top topnav" role="navigation"> | ||||||
|  | @ -91,25 +96,6 @@ | ||||||
|                             <li><a href="{% url 'hosting:logout' %}"><i class="glyphicon glyphicon-lock"></i>{% trans "Logout"%} </a></li> |                             <li><a href="{% url 'hosting:logout' %}"><i class="glyphicon glyphicon-lock"></i>{% trans "Logout"%} </a></li> | ||||||
|                           </ul> |                           </ul> | ||||||
|                         </li> |                         </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> |                 </div> | ||||||
|                 {% endif %} |                 {% endif %} | ||||||
|  | @ -117,7 +103,7 @@ | ||||||
|             </div> |             </div> | ||||||
|             <!-- /.container --> |             <!-- /.container --> | ||||||
|         </nav> |         </nav> | ||||||
| 
 |     {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     <div class="content-dashboard"> |     <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/html5shiv/3.7.0/html5shiv.js"></script> | ||||||
|         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> |         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||||
|     <![endif]--> |     <![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'); |     <!-- Google analytics --> | ||||||
|   ga('send', 'pageview'); |     {% include 'google_analytics.html' %} | ||||||
| 
 |     <!-- End Google Analytics --> | ||||||
| </script> |  | ||||||
| 
 | 
 | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -18,7 +18,9 @@ | ||||||
|     <link href="{% static 'hosting/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css"> |     <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 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" /> |     <link rel="shortcut icon" href="{% static 'hosting/img/favicon.ico' %}" type="image/x-icon" /> | ||||||
| 
 |     <!-- Google analytics --> | ||||||
|  |     {% include 'google_analytics.html' %} | ||||||
|  |     <!-- End Google Analytics --> | ||||||
| </head> | </head> | ||||||
| <body> | <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" %} | {% extends "hosting/base_short.html" %} | ||||||
| {% load i18n %} | {% load i18n %} | ||||||
| {% load staticfiles bootstrap3%} | {% load staticfiles bootstrap3%} | ||||||
|  | 
 | ||||||
|  | {% block navbar %} | ||||||
|  |     {% include  'hosting/includes/_navbar_transparent.html' %} | ||||||
|  | {% endblock navbar %} | ||||||
|  | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| 
 | 
 | ||||||
| <div class="auth-container"> | <div class="auth-container"> | ||||||
|  |  | ||||||
|  | @ -24,15 +24,7 @@ | ||||||
|     		</div> |     		</div> | ||||||
|     		<hr> |     		<hr> | ||||||
|     		<div class="row"> |     		<div class="row"> | ||||||
|     			<div class="col-xs-6"> | 				<div class="col-xs-12 col-md-6 pull-right order-confirm-date"> | ||||||
|     				<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"> |  | ||||||
|                     <address> |                     <address> | ||||||
|                         <strong>{% trans "Date"%}:</strong><br> |                         <strong>{% trans "Date"%}:</strong><br> | ||||||
|                         <span id="order-created_at">{{order.created_at|date:'Y-m-d H:i'}}</span><br><br> |                         <span id="order-created_at">{{order.created_at|date:'Y-m-d H:i'}}</span><br><br> | ||||||
|  | @ -44,6 +36,15 @@ | ||||||
|                     </address> |                     </address> | ||||||
| 
 | 
 | ||||||
|                 </div> |                 </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> | ||||||
|     		<div class="row"> |     		<div class="row"> | ||||||
|     			<div class="col-xs-6"> |     			<div class="col-xs-6"> | ||||||
|  |  | ||||||
|  | @ -2,39 +2,56 @@ | ||||||
| {% load staticfiles bootstrap3 i18n %} | {% load staticfiles bootstrap3 i18n %} | ||||||
| {% block content %} | {% block content %} | ||||||
| <!-- Credit card form --> | <!-- Credit card form --> | ||||||
| <div> | <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="payment-container"> | ||||||
|         <div class="row"> |         <div class="row"> | ||||||
| 		    <div class="col-xs-12 col-md-offset-2 col-md-4 summary-box"> |             <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-order-sec"> | ||||||
|             	<form role="form" novalidate> |                 <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="row"> | ||||||
|             			<div class="col-xs-12"> |             <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-billing-sec"> | ||||||
| 								<h3><b>{%trans "Billing Amount" %}</b></h3> |                 <div class="col-xs-12 col-sm-5 col-md-6  billing dcl-billing"> | ||||||
| 							<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> |                     <h3><b>{%trans "Billing Address"%}</b></h3> | ||||||
|                     <hr> |                     <hr> | ||||||
|                     <form role="form" id="billing-form" method="post" action="" novalidate> |                     <form role="form" id="billing-form" method="post" action="" novalidate> | ||||||
|  | @ -45,13 +62,20 @@ | ||||||
|                         {% bootstrap_form_errors form type='non_fields'%} |                         {% bootstrap_form_errors form type='non_fields'%} | ||||||
|                     </form> |                     </form> | ||||||
|                 </div> |                 </div> | ||||||
| 		</div> |                 <div class="col-xs-12 col-sm-7 col-md-6 creditcard-box dcl-creditcard"> | ||||||
| 	    <div class="row"> |                     <h3><b>{%trans "Credit Card"%}</b></h3> | ||||||
| 	    	<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> |                     <hr> | ||||||
|                     <div> |                     <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> |                         <div> | ||||||
|                             {% if credit_card_data.last4 %} |                             {% if credit_card_data.last4 %} | ||||||
|                             <form role="form" id="payment-form-with-creditcard" novalidate> |                             <form role="form" id="payment-form-with-creditcard" novalidate> | ||||||
|  | @ -60,62 +84,67 @@ | ||||||
|                                 <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5> |                                 <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5> | ||||||
|                                 <input type="hidden" name="credit_card_needed" value="false"/> |                                 <input type="hidden" name="credit_card_needed" value="false"/> | ||||||
|                             </form> |                             </form> | ||||||
|                       <div class="col-xs-6"> |                             <div class="row"> | ||||||
|                         <button id="payment_button_with_creditcard" class="btn btn-success btn-sm btn-block" type="submit"> |                                 <div class="col-xs-12"> | ||||||
| 							 {% trans "Submit Payment" %} |                                     <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> |                                         </button> | ||||||
|                                     </div> |                                     </div> | ||||||
|  |                                 </div> | ||||||
|  |                             </div> | ||||||
|  | 
 | ||||||
|                             {% else %} |                             {% else %} | ||||||
| 
 |                             <form action="" id="payment-form-new" method="POST"> | ||||||
| 
 |                                 <input type="hidden" name="token"/> | ||||||
| 	                    <form role="form" id="payment-form" novalidate> |                                 <div class="group"> | ||||||
|                             <div class="row"> |                                     <div class="col-xs-12 col-sm-12 col-md-10 col-lg-9 credit-card-goup"> | ||||||
|                             <div class="form-group"> |                                        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 card-element card-number-element"> | ||||||
|                             <div id="card-element"> |                                            <label>{%trans "Card Number" %}</label> | ||||||
|                               <!-- a Stripe Element will be inserted here. --> |                                            <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> | ||||||
|                                 </div> |                                 </div> | ||||||
|                                 <div id="card-errors" role="alert"></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"> |  | ||||||
| 	                            <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="row" style="display:none;"> | ||||||
|                                     <div class="col-xs-12"> |                                     <div class="col-xs-12"> | ||||||
|                                         <p class="payment-errors"></p> |                                         <p class="payment-errors"></p> | ||||||
|  | @ -130,24 +159,23 @@ | ||||||
|                                     </div> |                                     </div> | ||||||
|                                 </div> |                                 </div> | ||||||
|                                 {% endif %} |                                 {% endif %} | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|                             </form> |                             </form> | ||||||
|  | 
 | ||||||
|                             {% endif %} |                             {% endif %} | ||||||
| 
 |  | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
| 
 |     </div> | ||||||
| </div> | </div> | ||||||
| 
 | 
 | ||||||
| <!-- stripe key data --> | <!-- stripe key data --> | ||||||
| {% if stripe_key %} | {% if stripe_key %} | ||||||
| {% get_current_language as LANGUAGE_CODE %} | {% get_current_language as LANGUAGE_CODE %} | ||||||
| <script type="text/javascript"> | <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.stripeKey = "{{stripe_key}}"; | ||||||
|  | @ -158,13 +186,11 @@ | ||||||
| 
 | 
 | ||||||
| {% if credit_card_data.last4 and credit_card_data.cc_brand %} | {% if credit_card_data.last4 and credit_card_data.cc_brand %} | ||||||
| <script type="text/javascript"> | <script type="text/javascript"> | ||||||
|      (function () {window.hasCreditcard = true;})(); |     (function () { | ||||||
|  |         window.hasCreditcard = true; | ||||||
|  |     })(); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| {%endif%} | {%endif%} | ||||||
| 
 | 
 | ||||||
| {%endblock%} | {%endblock%} | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -2,6 +2,11 @@ | ||||||
| {% load staticfiles bootstrap3%} | {% load staticfiles bootstrap3%} | ||||||
| {% load i18n %} | {% load i18n %} | ||||||
| 
 | 
 | ||||||
|  | {% block navbar %} | ||||||
|  |     {% include  'hosting/includes/_navbar_transparent.html' %} | ||||||
|  | {% endblock navbar %} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container"> | <div class="auth-container"> | ||||||
|    <div class="auth-bg"></div> |    <div class="auth-bg"></div> | ||||||
|  |  | ||||||
|  | @ -1,6 +1,10 @@ | ||||||
| {% extends "hosting/base_short.html" %} | {% extends "hosting/base_short.html" %} | ||||||
| {% load staticfiles bootstrap3 i18n %} | {% load staticfiles bootstrap3 i18n %} | ||||||
| 
 | 
 | ||||||
|  | {% block navbar %} | ||||||
|  |     {% include  'hosting/includes/_navbar_transparent.html' %} | ||||||
|  | {% endblock navbar %} | ||||||
|  | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <div class="auth-container auth-signup"> | <div class="auth-container auth-signup"> | ||||||
|    <div class="auth-bg"></div> |    <div class="auth-bg"></div> | ||||||
|  |  | ||||||
|  | @ -479,6 +479,7 @@ class PaymentVMView(LoginRequiredMixin, FormView): | ||||||
| 
 | 
 | ||||||
|         form_kwargs.update({ |         form_kwargs.update({ | ||||||
|             'initial': { |             'initial': { | ||||||
|  |                 'cardholder_name': current_billing_address.cardholder_name, | ||||||
|                 'street_address': current_billing_address.street_address, |                 'street_address': current_billing_address.street_address, | ||||||
|                 'city': current_billing_address.city, |                 'city': current_billing_address.city, | ||||||
|                 'postal_code': current_billing_address.postal_code, |                 'postal_code': current_billing_address.postal_code, | ||||||
|  |  | ||||||
|  | @ -51,6 +51,8 @@ class MyUserManager(BaseUserManager): | ||||||
|                                 name=name, |                                 name=name, | ||||||
|                                 ) |                                 ) | ||||||
|         user.is_admin = True |         user.is_admin = True | ||||||
|  |         user.is_active = True | ||||||
|  |         user.is_superuser = True | ||||||
|         user.save(using=self._db) |         user.save(using=self._db) | ||||||
|         return user |         return user | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -325,7 +325,7 @@ class OpenNebulaManager(): | ||||||
|             public_templates = [ |             public_templates = [ | ||||||
|                 template |                 template | ||||||
|                 for template in self._get_template_pool() |                 for template in self._get_template_pool() | ||||||
|                 if 'public-' in template.name |                 if template.name.startswith('public-') | ||||||
|             ] |             ] | ||||||
|             return public_templates |             return public_templates | ||||||
|         except ConnectionRefusedError: |         except ConnectionRefusedError: | ||||||
|  |  | ||||||
|  | @ -129,6 +129,12 @@ class VirtualMachineSerializer(serializers.Serializer): | ||||||
|         return obj.name.strip('public-') |         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): | def hexstr2int(string): | ||||||
|     return int(string.replace(':', ''), 16) |     return int(string.replace(':', ''), 16) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -34,6 +34,10 @@ | ||||||
|     {% endblock %} |     {% endblock %} | ||||||
|     {% render_block "external-css" %} |     {% render_block "external-css" %} | ||||||
|     {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} |     {% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %} | ||||||
|  | 
 | ||||||
|  |     <!-- Google analytics --> | ||||||
|  |     {% include "google_analytics.html" %} | ||||||
|  |     <!-- End Google Analytics --> | ||||||
|   </head> |   </head> | ||||||
|   <body> |   <body> | ||||||
| 
 | 
 | ||||||
|  | @ -60,16 +64,7 @@ | ||||||
|     {% bootstrap_javascript %} |     {% bootstrap_javascript %} | ||||||
|     {% endaddtoblock %} |     {% endaddtoblock %} | ||||||
|     {% addtoblock "js" %} |     {% 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/vendor/js/jquery.min.js' %}" type="text/javascript" /> | ||||||
|     <script src="{% static 'blog.ungleich.ch/js/navbar-scroll-up.js' %}" type="text/javascript" /> |     <script src="{% static 'blog.ungleich.ch/js/navbar-scroll-up.js' %}" type="text/javascript" /> | ||||||
|  |  | ||||||
|  | @ -31,26 +31,9 @@ | ||||||
| 
 | 
 | ||||||
|     <link href="{% static 'ungleich_page/css/ungleich.css' %}" rel="stylesheet"> |     <link href="{% static 'ungleich_page/css/ungleich.css' %}" rel="stylesheet"> | ||||||
| 
 | 
 | ||||||
| 
 |     <!-- Google analytics --> | ||||||
|     <!-- Google tracking --> |     {% include "google_analytics.html" %} | ||||||
|     <script src="//www.google-analytics.com/analytics.js" async></script> |     <!-- End Google Analytics --> | ||||||
|     <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> |  | ||||||
|     <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon"> |     <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon"> | ||||||
|     <style id="igtranslator-color" type="text/css"></style> |     <style id="igtranslator-color" type="text/css"></style> | ||||||
| </head> | </head> | ||||||
|  |  | ||||||
|  | @ -5,11 +5,12 @@ from django.core.mail import EmailMultiAlternatives | ||||||
| from django.utils.translation import ugettext_lazy as _ | from django.utils.translation import ugettext_lazy as _ | ||||||
| from django.contrib.auth import authenticate | from django.contrib.auth import authenticate | ||||||
| from membership.models import CustomUser | from membership.models import CustomUser | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # from utils.fields import CountryField | # from utils.fields import CountryField | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SignupFormMixin(forms.ModelForm): | class SignupFormMixin(forms.ModelForm): | ||||||
| 
 |  | ||||||
|     confirm_password = forms.CharField(widget=forms.PasswordInput()) |     confirm_password = forms.CharField(widget=forms.PasswordInput()) | ||||||
|     password = forms.CharField(widget=forms.PasswordInput()) |     password = forms.CharField(widget=forms.PasswordInput()) | ||||||
| 
 | 
 | ||||||
|  | @ -50,8 +51,6 @@ class LoginFormMixin(forms.Form): | ||||||
|             return email |             return email | ||||||
|         except CustomUser.DoesNotExist: |         except CustomUser.DoesNotExist: | ||||||
|             raise forms.ValidationError("User does not exist") |             raise forms.ValidationError("User does not exist") | ||||||
|         else: |  | ||||||
|             return email |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class PasswordResetRequestForm(forms.Form): | class PasswordResetRequestForm(forms.Form): | ||||||
|  | @ -67,8 +66,6 @@ class PasswordResetRequestForm(forms.Form): | ||||||
|             return email |             return email | ||||||
|         except CustomUser.DoesNotExist: |         except CustomUser.DoesNotExist: | ||||||
|             raise forms.ValidationError("User does not exist") |             raise forms.ValidationError("User does not exist") | ||||||
|         else: |  | ||||||
|             return email |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class SetPasswordForm(forms.Form): | class SetPasswordForm(forms.Form): | ||||||
|  | @ -104,8 +101,9 @@ class BillingAddressForm(forms.ModelForm): | ||||||
| 
 | 
 | ||||||
|     class Meta: |     class Meta: | ||||||
|         model = BillingAddress |         model = BillingAddress | ||||||
|         fields = ['street_address', 'city', 'postal_code', 'country'] |         fields = ['cardholder_name', 'street_address', 'city', 'postal_code', 'country'] | ||||||
|         labels = { |         labels = { | ||||||
|  |             'cardholder_name': _('Cardholder Name'), | ||||||
|             'street_address': _('Street Address'), |             'street_address': _('Street Address'), | ||||||
|             'city': _('City'), |             'city': _('City'), | ||||||
|             'postal_code': _('Postal Code'), |             'postal_code': _('Postal Code'), | ||||||
|  |  | ||||||
|  | @ -8,6 +8,7 @@ from .fields import CountryField | ||||||
| # Create your models here. | # Create your models here. | ||||||
| 
 | 
 | ||||||
| class BaseBillingAddress(models.Model): | class BaseBillingAddress(models.Model): | ||||||
|  |     cardholder_name = models.CharField(max_length=100, default="") | ||||||
|     street_address = models.CharField(max_length=100) |     street_address = models.CharField(max_length=100) | ||||||
|     city = models.CharField(max_length=50) |     city = models.CharField(max_length=50) | ||||||
|     postal_code = models.CharField(max_length=50) |     postal_code = models.CharField(max_length=50) | ||||||
|  | @ -18,7 +19,6 @@ class BaseBillingAddress(models.Model): | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class BillingAddress(BaseBillingAddress): | class BillingAddress(BaseBillingAddress): | ||||||
| 
 |  | ||||||
|     def __str__(self): |     def __str__(self): | ||||||
|         return self.street_address |         return self.street_address | ||||||
| 
 | 
 | ||||||
|  | @ -32,6 +32,7 @@ class UserBillingAddress(BaseBillingAddress): | ||||||
| 
 | 
 | ||||||
|     def to_dict(self): |     def to_dict(self): | ||||||
|         return { |         return { | ||||||
|  |             'Cardholder Name': self.cardholder_name, | ||||||
|             'Street Address': self.street_address, |             'Street Address': self.street_address, | ||||||
|             'City': self.city, |             'City': self.city, | ||||||
|             'Postal Code': self.postal_code, |             'Postal Code': self.postal_code, | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue