Merged master into feature/manualorder
11
Changelog
|
@ -1,3 +1,14 @@
|
||||||
|
1.0.5: 2017-06-06
|
||||||
|
* [all] General cleanup
|
||||||
|
* [datacenterlight] Add German translations
|
||||||
|
* [datacenterlight] Change beta access to subscriptions
|
||||||
|
* [hosting] Add German translations
|
||||||
|
* [blog] Add German translation for header
|
||||||
|
* [opennebula_api] Improve testing, add ssh key functions
|
||||||
|
* [opennebula_api] Remove template views
|
||||||
|
* [datacenterlight] Allow user to have multiple ssh keys
|
||||||
|
* [datacenterlight] Changed stripe.js v2 to v3
|
||||||
|
* [datacenterlight] Added support for stripe payment errors on current user language
|
||||||
1.0.4: 2017-06-05
|
1.0.4: 2017-06-05
|
||||||
* [all] Added new Domains to accept
|
* [all] Added new Domains to accept
|
||||||
1.0.3: 2017-06-02
|
1.0.3: 2017-06-02
|
||||||
|
|
|
@ -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-04-11 22:34-0500\n"
|
"POT-Creation-Date: 2017-05-30 13:47+0000\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,88 +18,137 @@ 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"
|
||||||
|
|
||||||
#: templates/alplora/index.html:13
|
#: alplora/templates/alplora/contact.html:6
|
||||||
|
msgid "New message"
|
||||||
|
msgstr "Neue Nachricht"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:13
|
||||||
|
msgid "Name:"
|
||||||
|
msgstr "Name:"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:15
|
||||||
|
msgid "What is your name ?"
|
||||||
|
msgstr "Was ist Dein Name?"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:19
|
||||||
|
msgid "From:"
|
||||||
|
msgstr "Von:"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:21
|
||||||
|
msgid "You email"
|
||||||
|
msgstr "Deine Email"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:25
|
||||||
|
msgid "Message:"
|
||||||
|
msgstr "Nachricht:"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:27
|
||||||
|
msgid "Leave us your message"
|
||||||
|
msgstr "Schreibe hier Deine Nachricht"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:32
|
||||||
|
msgid "Close"
|
||||||
|
msgstr "schliessen"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact.html:33
|
||||||
|
msgid "Send message"
|
||||||
|
msgstr "Nachricht senden"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact_success.html:6
|
||||||
|
msgid "Message Sent"
|
||||||
|
msgstr "Nachricht gesendet"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/contact_success.html:9
|
||||||
|
msgid "Thank you, we will contact you as soon as possible"
|
||||||
|
msgstr "Dankeschön! Wir melden uns sobald wie möglich!"
|
||||||
|
|
||||||
|
#: alplora/templates/alplora/index.html:13
|
||||||
msgid "Find your animal anywhere, anytime"
|
msgid "Find your animal anywhere, anytime"
|
||||||
msgstr "Finde deine Tiere"
|
msgstr "Finde deine Tiere"
|
||||||
|
|
||||||
#: templates/alplora/index.html:100 templates/alplora/index.html.py:513
|
#: alplora/templates/alplora/index.html:99
|
||||||
|
#: alplora/templates/alplora/index.html:463
|
||||||
msgid "About"
|
msgid "About"
|
||||||
msgstr "Über"
|
msgstr "Über"
|
||||||
|
|
||||||
#: templates/alplora/index.html:103 templates/alplora/index.html.py:249
|
#: alplora/templates/alplora/index.html:102
|
||||||
#: templates/alplora/index.html:519
|
#: alplora/templates/alplora/index.html:248
|
||||||
|
#: alplora/templates/alplora/index.html:469
|
||||||
msgid "Why Alplora?"
|
msgid "Why Alplora?"
|
||||||
msgstr "Warum Alplora?"
|
msgstr "Warum Alplora?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:106 templates/alplora/index.html.py:516
|
#: alplora/templates/alplora/index.html:105
|
||||||
|
#: alplora/templates/alplora/index.html:466
|
||||||
msgid "Usecase"
|
msgid "Usecase"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/alplora/index.html:109 templates/alplora/index.html.py:359
|
#: alplora/templates/alplora/index.html:108
|
||||||
|
#: alplora/templates/alplora/index.html:358
|
||||||
msgid "Testimonials"
|
msgid "Testimonials"
|
||||||
msgstr "Referenzen"
|
msgstr "Referenzen"
|
||||||
|
|
||||||
#: templates/alplora/index.html:112 templates/alplora/index.html.py:422
|
#: alplora/templates/alplora/index.html:111
|
||||||
#: templates/alplora/index.html:527
|
#: alplora/templates/alplora/index.html:423
|
||||||
|
#: alplora/templates/alplora/index.html:477
|
||||||
msgid "Contact"
|
msgid "Contact"
|
||||||
msgstr "Kontakt"
|
msgstr "Kontakt"
|
||||||
|
|
||||||
#: templates/alplora/index.html:115
|
#: alplora/templates/alplora/index.html:114
|
||||||
msgid "Login"
|
msgid "Login"
|
||||||
msgstr "Login"
|
msgstr "Login"
|
||||||
|
|
||||||
#: templates/alplora/index.html:138
|
#: alplora/templates/alplora/index.html:137
|
||||||
msgid "Find your herd anytime, anywhere"
|
msgid "Find your herd anytime, anywhere"
|
||||||
msgstr "Finde deine Herde jederzeit und überall"
|
msgstr "Finde deine Herde jederzeit und überall"
|
||||||
|
|
||||||
#: templates/alplora/index.html:139
|
#: alplora/templates/alplora/index.html:138
|
||||||
msgid "Perfect fit for Swiss Alps"
|
msgid "Perfect fit for Swiss Alps"
|
||||||
msgstr "Perfekt für die Schweizer Alpen"
|
msgstr "Perfekt für die Schweizer Alpen"
|
||||||
|
|
||||||
#: templates/alplora/index.html:164
|
#: alplora/templates/alplora/index.html:163
|
||||||
msgid "What is Alplora?"
|
msgid "What is Alplora?"
|
||||||
msgstr "Was ist Alplora?"
|
msgstr "Was ist Alplora?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:165
|
#: alplora/templates/alplora/index.html:164
|
||||||
msgid ""
|
msgid ""
|
||||||
"Alplora is an animal tracker made for outdoor grazing animals in Swiss Alps."
|
"Alplora is an animal tracker made for outdoor grazing animals in Swiss Alps."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Alplora ist ein Sender, der speziell für Weidetiere in den Schweizer Alpen "
|
"Alplora ist ein Sender, der speziell für Weidetiere in den Schweizer Alpen "
|
||||||
"entwickelt wurde."
|
"entwickelt wurde."
|
||||||
|
|
||||||
#: templates/alplora/index.html:166
|
#: alplora/templates/alplora/index.html:165
|
||||||
msgid "Alplora is just like a cattle bell, but much better."
|
msgid "Alplora is just like a cattle bell, but much better."
|
||||||
msgstr "Alplora ist wie eine Kuhglocke, nur viel besser."
|
msgstr "Alplora ist wie eine Kuhglocke, nur viel besser."
|
||||||
|
|
||||||
#: templates/alplora/index.html:175
|
#: alplora/templates/alplora/index.html:174
|
||||||
msgid "LOST"
|
msgid "LOST"
|
||||||
msgstr "VERLOREN"
|
msgstr "VERLOREN"
|
||||||
|
|
||||||
#: templates/alplora/index.html:177
|
#: alplora/templates/alplora/index.html:176
|
||||||
msgid "When an animal gets separated from the herd and is lost."
|
msgid "When an animal gets separated from the herd and is lost."
|
||||||
msgstr "Wenn ein Tier sich von der Herde absondert und verloren geht."
|
msgstr "Wenn ein Tier sich von der Herde absondert und verloren geht."
|
||||||
|
|
||||||
#: templates/alplora/index.html:185
|
#: alplora/templates/alplora/index.html:184
|
||||||
msgid "WOLF"
|
msgid "WOLF"
|
||||||
msgstr "WOLF"
|
msgstr "WOLF"
|
||||||
|
|
||||||
#: templates/alplora/index.html:187
|
#: alplora/templates/alplora/index.html:186
|
||||||
msgid "When a wolf gets close to the herd."
|
msgid "When a wolf gets close to the herd."
|
||||||
msgstr "Wenn ein Wolf sich der Herde nähert."
|
msgstr "Wenn ein Wolf sich der Herde nähert."
|
||||||
|
|
||||||
#: templates/alplora/index.html:194
|
#: alplora/templates/alplora/index.html:193
|
||||||
msgid "INJURED"
|
msgid "INJURED"
|
||||||
msgstr "VERLETZT"
|
msgstr "VERLETZT"
|
||||||
|
|
||||||
#: templates/alplora/index.html:196
|
#: alplora/templates/alplora/index.html:195
|
||||||
msgid "When one of the animals is hurt."
|
msgid "When one of the animals is hurt."
|
||||||
msgstr "Wenn eins der Tiere verletzt ist."
|
msgstr "Wenn eins der Tiere verletzt ist."
|
||||||
|
|
||||||
#: templates/alplora/index.html:206
|
#: alplora/templates/alplora/index.html:205
|
||||||
msgid "How does Alplora track my animals?"
|
msgid "How does Alplora track my animals?"
|
||||||
msgstr "Wie kann Alplora meine Tiere verfolgen und ausfindig machen ?"
|
msgstr "Wie kann Alplora meine Tiere verfolgen und ausfindig machen ?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:207
|
#: alplora/templates/alplora/index.html:206
|
||||||
msgid ""
|
msgid ""
|
||||||
"Each animal will be wearing a small tracker,<P></P>and the tracker will be "
|
"Each animal will be wearing a small tracker,<P></P>and the tracker will be "
|
||||||
"sending a signal every 30 to 60 minutes."
|
"sending a signal every 30 to 60 minutes."
|
||||||
|
@ -107,33 +156,33 @@ msgstr ""
|
||||||
"Jedes Tier wird einen kleinen Sender tragen, <P></P> welcher alle 30 bis 60 "
|
"Jedes Tier wird einen kleinen Sender tragen, <P></P> welcher alle 30 bis 60 "
|
||||||
"Minuten ein Signal senden wird."
|
"Minuten ein Signal senden wird."
|
||||||
|
|
||||||
#: templates/alplora/index.html:216
|
#: alplora/templates/alplora/index.html:215
|
||||||
msgid "Access app"
|
msgid "Access app"
|
||||||
msgstr "Zugang zur App"
|
msgstr "Zugang zur App"
|
||||||
|
|
||||||
#: templates/alplora/index.html:218
|
#: alplora/templates/alplora/index.html:217
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can see the animal locations on a map by logging into our Alplora app."
|
"You can see the animal locations on a map by logging into our Alplora app."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Du kannst den Standort deiner Tiere jederzeit auf einer Karte verfolgen, "
|
"Du kannst den Standort deiner Tiere jederzeit auf einer Karte verfolgen, "
|
||||||
"indem du dich in unsere Alplora App einloggst."
|
"indem du dich in unsere Alplora App einloggst."
|
||||||
|
|
||||||
#: templates/alplora/index.html:226
|
#: alplora/templates/alplora/index.html:225
|
||||||
msgid "Get an alarm"
|
msgid "Get an alarm"
|
||||||
msgstr "Erhalte ein Warnsignal"
|
msgstr "Erhalte ein Warnsignal"
|
||||||
|
|
||||||
#: templates/alplora/index.html:228
|
#: alplora/templates/alplora/index.html:227
|
||||||
msgid ""
|
msgid ""
|
||||||
"When certain signals for danger are detected, Alplora sends an alarm to you."
|
"When certain signals for danger are detected, Alplora sends an alarm to you."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Wenn Anzeichen von Gefahr bestehen, sendet dir die Alplora App einen "
|
"Wenn Anzeichen von Gefahr bestehen, sendet dir die Alplora App einen "
|
||||||
"Warnsignal."
|
"Warnsignal."
|
||||||
|
|
||||||
#: templates/alplora/index.html:236
|
#: alplora/templates/alplora/index.html:235
|
||||||
msgid "Find your animal"
|
msgid "Find your animal"
|
||||||
msgstr "Finde deine Tiere"
|
msgstr "Finde deine Tiere"
|
||||||
|
|
||||||
#: templates/alplora/index.html:239
|
#: alplora/templates/alplora/index.html:238
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can locate the animal in trouble on the realtime map and can take "
|
"You can locate the animal in trouble on the realtime map and can take "
|
||||||
"actions for keeping the animal safe."
|
"actions for keeping the animal safe."
|
||||||
|
@ -141,11 +190,11 @@ msgstr ""
|
||||||
"Du kannst dein Tier in Notsituationen auf einer Echtzeit-Karte lokalisieren "
|
"Du kannst dein Tier in Notsituationen auf einer Echtzeit-Karte lokalisieren "
|
||||||
"und hast die Möglichkeit es in Sicherheit zu bringen."
|
"und hast die Möglichkeit es in Sicherheit zu bringen."
|
||||||
|
|
||||||
#: templates/alplora/index.html:256
|
#: alplora/templates/alplora/index.html:255
|
||||||
msgid "Perfect fit for Swiss mountains"
|
msgid "Perfect fit for Swiss mountains"
|
||||||
msgstr "Perfekt für die Schweizer Alpen"
|
msgstr "Perfekt für die Schweizer Alpen"
|
||||||
|
|
||||||
#: templates/alplora/index.html:258
|
#: alplora/templates/alplora/index.html:257
|
||||||
msgid ""
|
msgid ""
|
||||||
"Alplora is made and tested for Swiss Alps. It is a perfect fit for Swiss "
|
"Alplora is made and tested for Swiss Alps. It is a perfect fit for Swiss "
|
||||||
"environment."
|
"environment."
|
||||||
|
@ -153,11 +202,11 @@ msgstr ""
|
||||||
"Alplora wurde speziell für die Schweizer Alpen entwickelt und vor Ort "
|
"Alplora wurde speziell für die Schweizer Alpen entwickelt und vor Ort "
|
||||||
"getestet. Das Produkt passt perfekt in die Schweiz!"
|
"getestet. Das Produkt passt perfekt in die Schweiz!"
|
||||||
|
|
||||||
#: templates/alplora/index.html:264
|
#: alplora/templates/alplora/index.html:263
|
||||||
msgid "Energy efficient"
|
msgid "Energy efficient"
|
||||||
msgstr "Energieeffizient"
|
msgstr "Energieeffizient"
|
||||||
|
|
||||||
#: templates/alplora/index.html:266
|
#: alplora/templates/alplora/index.html:265
|
||||||
msgid ""
|
msgid ""
|
||||||
"Alplora uses the latest wireless technology, our batteries last the whole "
|
"Alplora uses the latest wireless technology, our batteries last the whole "
|
||||||
"alp season."
|
"alp season."
|
||||||
|
@ -165,11 +214,11 @@ msgstr ""
|
||||||
"Alplora arbeitet mit den neuesten Technologien, so dass der Akku die gesamte "
|
"Alplora arbeitet mit den neuesten Technologien, so dass der Akku die gesamte "
|
||||||
"Alpsaison überdauert."
|
"Alpsaison überdauert."
|
||||||
|
|
||||||
#: templates/alplora/index.html:272
|
#: alplora/templates/alplora/index.html:271
|
||||||
msgid "Made with love"
|
msgid "Made with love"
|
||||||
msgstr "Mit Liebe gemacht"
|
msgstr "Mit Liebe gemacht"
|
||||||
|
|
||||||
#: templates/alplora/index.html:274
|
#: alplora/templates/alplora/index.html:273
|
||||||
msgid ""
|
msgid ""
|
||||||
"With a lot of love and respect for Swiss agriculture and nature, Alplora is "
|
"With a lot of love and respect for Swiss agriculture and nature, Alplora is "
|
||||||
"made by a Swiss company."
|
"made by a Swiss company."
|
||||||
|
@ -177,61 +226,61 @@ msgstr ""
|
||||||
"Alplora wurde mit viel Liebe und Respekt für die Schweizer Natur und "
|
"Alplora wurde mit viel Liebe und Respekt für die Schweizer Natur und "
|
||||||
"Landwirtschaft von einer Schweizer Firma entwickelt."
|
"Landwirtschaft von einer Schweizer Firma entwickelt."
|
||||||
|
|
||||||
#: templates/alplora/index.html:286
|
#: alplora/templates/alplora/index.html:285
|
||||||
msgid "Who needs Alplora?"
|
msgid "Who needs Alplora?"
|
||||||
msgstr "Wer benötigt Alplora?"
|
msgstr "Wer benötigt Alplora?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:302
|
#: alplora/templates/alplora/index.html:301
|
||||||
msgid " Are your animals..."
|
msgid " Are your animals..."
|
||||||
msgstr "Sind deine Tiere..."
|
msgstr "Sind deine Tiere..."
|
||||||
|
|
||||||
#: templates/alplora/index.html:305
|
#: alplora/templates/alplora/index.html:304
|
||||||
msgid "sheep, goats, cows or llamas living freely in the Alps?"
|
msgid "sheep, goats, cows or llamas living freely in the Alps?"
|
||||||
msgstr "Schafe, Ziegen, Kühe oder Lamas, die frei in den Alpen leben?"
|
msgstr "Schafe, Ziegen, Kühe oder Lamas, die frei in den Alpen leben?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:307
|
#: alplora/templates/alplora/index.html:306
|
||||||
msgid "wearing bells?"
|
msgid "wearing bells?"
|
||||||
msgstr "solche, die Glocken tragen?"
|
msgstr "solche, die Glocken tragen?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:309
|
#: alplora/templates/alplora/index.html:308
|
||||||
msgid ""
|
msgid ""
|
||||||
"sometimes getting confused and going too far away from where they are "
|
"sometimes getting confused and going too far away from where they are "
|
||||||
"supposed to be?"
|
"supposed to be?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"manchmal verwirrt und entfernen sich zu weit von ihrem vorgesehenen Standort?"
|
"manchmal verwirrt und entfernen sich zu weit von ihrem vorgesehenen Standort?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:333
|
#: alplora/templates/alplora/index.html:332
|
||||||
msgid "Do you..."
|
msgid "Do you..."
|
||||||
msgstr "Möchtest du..."
|
msgstr "Möchtest du..."
|
||||||
|
|
||||||
#: templates/alplora/index.html:336
|
#: alplora/templates/alplora/index.html:335
|
||||||
msgid "have animals which are staying outdoor during some time of the year?"
|
msgid "have animals which are staying outdoor during some time of the year?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"deine Tiere, die eine längere Zeit im Jahr unbeobachtet Draussen verbringen, "
|
"deine Tiere, die eine längere Zeit im Jahr unbeobachtet Draussen verbringen, "
|
||||||
"schützen und überwachen können?"
|
"schützen und überwachen können?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:338
|
#: alplora/templates/alplora/index.html:337
|
||||||
msgid "want to get an alarm when your animal is hurt, or in danger?"
|
msgid "want to get an alarm when your animal is hurt, or in danger?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"alarmiert werden, wenn sich eines deiner Tiere verletzt oder in Gefahr "
|
"alarmiert werden, wenn sich eines deiner Tiere verletzt oder in Gefahr "
|
||||||
"befindet ?"
|
"befindet ?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:340
|
#: alplora/templates/alplora/index.html:339
|
||||||
msgid "want to see where your animals are on your cell phone map?"
|
msgid "want to see where your animals are on your cell phone map?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"mit deinem Smartphone auf einer Karte sehen können, wo sich deine Tiere "
|
"mit deinem Smartphone auf einer Karte sehen können, wo sich deine Tiere "
|
||||||
"befinden? "
|
"befinden? "
|
||||||
|
|
||||||
#: templates/alplora/index.html:342
|
#: alplora/templates/alplora/index.html:341
|
||||||
msgid "want to make sure 24/7 that your animals are safe?"
|
msgid "want to make sure 24/7 that your animals are safe?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"sicherstellen, dass sich deine Tiere rund um die Uhr in Sicherheit befinden?"
|
"sicherstellen, dass sich deine Tiere rund um die Uhr in Sicherheit befinden?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:360
|
#: alplora/templates/alplora/index.html:359
|
||||||
msgid "What our customers say"
|
msgid "What our customers say"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/alplora/index.html:380
|
#: alplora/templates/alplora/index.html:379
|
||||||
msgid ""
|
msgid ""
|
||||||
"“Alplora is an innovation in looking after my cows. I can check where my "
|
"“Alplora is an innovation in looking after my cows. I can check where my "
|
||||||
"cows have been in the higher mountain all day while doing other works at the "
|
"cows have been in the higher mountain all day while doing other works at the "
|
||||||
|
@ -243,11 +292,11 @@ msgstr ""
|
||||||
"selben Zeit andereDinge auf dem Hof unten im Dorf erledigen. Dank Alplora "
|
"selben Zeit andereDinge auf dem Hof unten im Dorf erledigen. Dank Alplora "
|
||||||
"kann ich meinen Kühenmehr Sicherheit gewährleisten."
|
"kann ich meinen Kühenmehr Sicherheit gewährleisten."
|
||||||
|
|
||||||
#: templates/alplora/index.html:383
|
#: alplora/templates/alplora/index.html:382
|
||||||
msgid "Farmer in canton Glarus"
|
msgid "Farmer in canton Glarus"
|
||||||
msgstr "Bauern im Kanton Glarus"
|
msgstr "Bauern im Kanton Glarus"
|
||||||
|
|
||||||
#: templates/alplora/index.html:389
|
#: alplora/templates/alplora/index.html:388
|
||||||
msgid ""
|
msgid ""
|
||||||
"\"Alplora is exactly what I was waiting for. I have lost my sheep almost "
|
"\"Alplora is exactly what I was waiting for. I have lost my sheep almost "
|
||||||
"every year. Finally I have a way when I want to locate them.\""
|
"every year. Finally I have a way when I want to locate them.\""
|
||||||
|
@ -256,11 +305,11 @@ msgstr ""
|
||||||
"Schafe fastjedes Jahr aus den Augen verloren. Nun habe ich endlich die "
|
"Schafe fastjedes Jahr aus den Augen verloren. Nun habe ich endlich die "
|
||||||
"Möglichkeit, sie zulokalisieren.\""
|
"Möglichkeit, sie zulokalisieren.\""
|
||||||
|
|
||||||
#: templates/alplora/index.html:392
|
#: alplora/templates/alplora/index.html:391
|
||||||
msgid "Owner of 50 sheep "
|
msgid "Owner of 50 sheep "
|
||||||
msgstr "Besitzerin von 50 Schafen"
|
msgstr "Besitzerin von 50 Schafen"
|
||||||
|
|
||||||
#: templates/alplora/index.html:398
|
#: alplora/templates/alplora/index.html:397
|
||||||
msgid ""
|
msgid ""
|
||||||
"\"I have a farm down all the way down in the village and y goats are always "
|
"\"I have a farm down all the way down in the village and y goats are always "
|
||||||
"freely grazing in the Alps. There are times that I am worried about them but "
|
"freely grazing in the Alps. There are times that I am worried about them but "
|
||||||
|
@ -274,74 +323,30 @@ msgstr ""
|
||||||
"noch um meineanderen Tiere kümmern muss. Mit Alplora kann ich nun ohne "
|
"noch um meineanderen Tiere kümmern muss. Mit Alplora kann ich nun ohne "
|
||||||
"Probleme beides tun.\""
|
"Probleme beides tun.\""
|
||||||
|
|
||||||
#: templates/alplora/index.html:402
|
#: alplora/templates/alplora/index.html:401
|
||||||
msgid "Farmer at Berner Oberland"
|
msgid "Farmer at Berner Oberland"
|
||||||
msgstr "Bauer aus dem Berner Oberland"
|
msgstr "Bauer aus dem Berner Oberland"
|
||||||
|
|
||||||
#: templates/alplora/index.html:419
|
#: alplora/templates/alplora/index.html:418
|
||||||
msgid "How do I get Alplora?"
|
msgid "How do I get Alplora?"
|
||||||
msgstr "Wie kriege ich Zugriff zu Alplora?"
|
msgstr "Wie kriege ich Zugriff zu Alplora?"
|
||||||
|
|
||||||
#: templates/alplora/index.html:420
|
#: alplora/templates/alplora/index.html:419
|
||||||
msgid "Click the button below and leave us your contact."
|
msgid "Click the button below and leave us your contact."
|
||||||
msgstr "Klicke unten auf Kontakt und hinterlasse uns deine Angaben."
|
msgstr "Klicke unten auf Kontakt und hinterlasse uns deine Angaben."
|
||||||
|
|
||||||
#: templates/alplora/index.html:420
|
#: alplora/templates/alplora/index.html:419
|
||||||
msgid "Team Alplora will contact you and visit you with a tracking device."
|
msgid "Team Alplora will contact you and visit you with a tracking device."
|
||||||
msgstr "Das Alpora Team wird sich mit Dir schnellstens in Verbindung setzen."
|
msgstr "Das Alpora Team wird sich mit Dir schnellstens in Verbindung setzen."
|
||||||
|
|
||||||
#: templates/alplora/index.html:437
|
#: alplora/templates/alplora/index.html:459
|
||||||
msgid "New message"
|
|
||||||
msgstr "Neue Nachricht"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:445
|
|
||||||
msgid "Name:"
|
|
||||||
msgstr "Name:"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:446
|
|
||||||
msgid "What is your name ?"
|
|
||||||
msgstr "Was ist Dein Name?"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:449
|
|
||||||
msgid "From:"
|
|
||||||
msgstr "Von:"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:450
|
|
||||||
msgid "You email"
|
|
||||||
msgstr "Deine Email"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:454
|
|
||||||
msgid "Message:"
|
|
||||||
msgstr "Nachricht:"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:455
|
|
||||||
msgid "Leave us your message"
|
|
||||||
msgstr "Schreibe hier Deine Nachricht"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:460
|
|
||||||
msgid "Close"
|
|
||||||
msgstr "schliessen"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:461
|
|
||||||
msgid "Send message"
|
|
||||||
msgstr "Nachricht senden"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:474
|
|
||||||
msgid "Message Sent"
|
|
||||||
msgstr "Nachricht gesendet"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:477
|
|
||||||
msgid "Thank you, we will contact you as soon as possible"
|
|
||||||
msgstr "Dankeschön! Wir melden uns sobald wie möglich!"
|
|
||||||
|
|
||||||
#: templates/alplora/index.html:509
|
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Startseite"
|
msgstr "Startseite"
|
||||||
|
|
||||||
#: templates/alplora/index.html:522
|
#: alplora/templates/alplora/index.html:472
|
||||||
msgid "Testimonials "
|
msgid "Testimonials "
|
||||||
msgstr "Referenzen"
|
msgstr "Referenzen"
|
||||||
|
|
||||||
#: views.py:14
|
#: alplora/views.py:24
|
||||||
msgid "Message Successfully Sent"
|
msgid "Message Successfully Sent"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
{% render_model post "abstract" "" "" 'truncatewords_html:10' %}
|
{% render_model post "abstract" "" "" 'truncatewords_html:10' %}
|
||||||
</h2>
|
</h2>
|
||||||
<span class="meta">
|
<span class="meta">
|
||||||
Posted on {{ post.date_published|date:"DATE_FORMAT" }}
|
{% trans "Posted on"%} {{ post.date_published|date:"DATE_FORMAT" }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
user www-data;
|
|
||||||
worker_processes 2;
|
|
||||||
pid /var/run/nginx.pid;
|
|
||||||
daemon off;
|
|
||||||
|
|
||||||
events {
|
|
||||||
worker_connections 512;
|
|
||||||
# multi_accept on;
|
|
||||||
}
|
|
||||||
|
|
||||||
http {
|
|
||||||
sendfile on;
|
|
||||||
tcp_nopush on;
|
|
||||||
tcp_nodelay on;
|
|
||||||
keepalive_timeout 65;
|
|
||||||
types_hash_max_size 2048;
|
|
||||||
server_tokens off;
|
|
||||||
port_in_redirect on;
|
|
||||||
|
|
||||||
server_names_hash_bucket_size 128;
|
|
||||||
server_name_in_redirect off;
|
|
||||||
|
|
||||||
client_max_body_size 60m;
|
|
||||||
|
|
||||||
include /etc/nginx/mime.types;
|
|
||||||
default_type application/octet-stream;
|
|
||||||
|
|
||||||
send_timeout 300;
|
|
||||||
client_body_timeout 300;
|
|
||||||
client_header_timeout 300;
|
|
||||||
|
|
||||||
access_log /logs/access.log;
|
|
||||||
error_log /logs/error.log;
|
|
||||||
|
|
||||||
gzip on;
|
|
||||||
gzip_disable "msie6";
|
|
||||||
gzip_vary on;
|
|
||||||
gzip_proxied any;
|
|
||||||
gzip_comp_level 6;
|
|
||||||
gzip_buffers 16 8k;
|
|
||||||
gzip_http_version 1.1;
|
|
||||||
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
|
|
||||||
|
|
||||||
upstream django {
|
|
||||||
server 127.0.0.1:8000;
|
|
||||||
}
|
|
||||||
|
|
||||||
server {
|
|
||||||
listen 80 default;
|
|
||||||
server_name localhost;
|
|
||||||
location / {
|
|
||||||
proxy_pass http://django;
|
|
||||||
include proxy_params;
|
|
||||||
}
|
|
||||||
location /media/ {
|
|
||||||
root /data;
|
|
||||||
expires max;
|
|
||||||
access_log off;
|
|
||||||
}
|
|
||||||
location /static/ {
|
|
||||||
root /data;
|
|
||||||
expires max;
|
|
||||||
access_log off;
|
|
||||||
}
|
|
||||||
location ~ /\.ht { deny all; }
|
|
||||||
location ~ /\.hg { deny all; }
|
|
||||||
location ~ /\.svn { deny all; }
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name dynamicweb-staging.ungleich.ch;
|
|
||||||
|
|
||||||
location /static {
|
|
||||||
alias /home/app/django/dynamicweb/static/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location /media {
|
|
||||||
alias /home/app/django/dynamicweb/media/;
|
|
||||||
}
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_pass http://127.0.0.1:8000/;
|
|
||||||
proxy_pass_header Server;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
proxy_set_header X-Forwarded-Host $host;
|
|
||||||
proxy_redirect off;
|
|
||||||
proxy_set_header X-Real-IP $remote_addr;
|
|
||||||
proxy_set_header X-Scheme $scheme;
|
|
||||||
proxy_connect_timeout 600;
|
|
||||||
proxy_send_timeout 600;
|
|
||||||
proxy_read_timeout 600;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -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-06-06 23:53+0530\n"
|
"POT-Creation-Date: 2017-05-30 13:47+0000\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,41 +18,51 @@ 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"
|
||||||
|
|
||||||
#: templates/datacenterlight/beta_access.html:21
|
#: datacenterlight/templates/datacenterlight/beta_access.html:13
|
||||||
msgid "Request Beta Access"
|
msgid "Enter name"
|
||||||
msgstr "Beantrage Beta-Zugang"
|
msgstr "Name"
|
||||||
|
|
||||||
#: templates/datacenterlight/beta_success.html:9
|
#: datacenterlight/templates/datacenterlight/beta_access.html:17
|
||||||
#, fuzzy
|
msgid "Enter email"
|
||||||
#| msgid "Request Beta Access"
|
msgstr "E-Mail-Adresse"
|
||||||
|
|
||||||
|
#: datacenterlight/templates/datacenterlight/beta_access.html:21
|
||||||
|
msgid "Request Newsletter"
|
||||||
|
msgstr "Newsletter abonnieren"
|
||||||
|
|
||||||
|
#: datacenterlight/templates/datacenterlight/beta_success.html:9
|
||||||
msgid "Request Sent"
|
msgid "Request Sent"
|
||||||
msgstr "Anfrage verschickt"
|
msgstr "Anfrage verschickt"
|
||||||
|
|
||||||
#: templates/datacenterlight/beta_success.html:12
|
#: datacenterlight/templates/datacenterlight/beta_success.html:12
|
||||||
msgid "Thank you, we will contact you as soon as possible"
|
msgid ""
|
||||||
msgstr "Vielen Dank, wir werden Sie sobald als möglich kontaktieren."
|
"Thank you for your subscription! You will receive a confirmation mail from "
|
||||||
|
"our team"
|
||||||
|
msgstr ""
|
||||||
|
"Vielen dank für Ihre Anmeldung. Sie erhalten in kürze eine Bestätigungsmail "
|
||||||
|
"von unserem Team"
|
||||||
|
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.html:99
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.html:99
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.txt:99
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.txt:99
|
||||||
msgid "Thank you for your request."
|
msgid "Thank you for your request."
|
||||||
msgstr "Vielen Dank für Ihre Anfrage."
|
msgstr "Vielen Dank für Ihre Anfrage."
|
||||||
|
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.html:104
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.html:104
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.txt:104
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.txt:104
|
||||||
msgid "You are one step away from being our beta tester!"
|
msgid "You are one step away from being our beta tester!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Sie sind nur noch einen Schritt davon entfernt, unser Beta-Tester zu werden!"
|
"Sie sind nur noch einen Schritt davon entfernt, unser Beta-Tester zu werden!"
|
||||||
|
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.html:105
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.html:105
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.txt:105
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.txt:105
|
||||||
msgid ""
|
msgid ""
|
||||||
"Currently we are running our tests to make sure everything runs perfectly."
|
"Currently we are running our tests to make sure everything runs perfectly."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Momentan testen wir die Beta-Umgebung um sie für Ihren Gebrauch "
|
"Momentan testen wir die Beta-Umgebung um sie für Ihren Gebrauch "
|
||||||
"sicherzustellen."
|
"sicherzustellen."
|
||||||
|
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.html:106
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.html:106
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.txt:106
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.txt:106
|
||||||
msgid ""
|
msgid ""
|
||||||
"In the meantime, we would like to ask you a little patience<br/> until our "
|
"In the meantime, we would like to ask you a little patience<br/> until our "
|
||||||
"team contacts you with beta access."
|
"team contacts you with beta access."
|
||||||
|
@ -60,95 +70,77 @@ msgstr ""
|
||||||
"Wir werden dann sobald als möglich Ihren Beta-Zugang erstellen und Sie "
|
"Wir werden dann sobald als möglich Ihren Beta-Zugang erstellen und Sie "
|
||||||
"daraufhin kontaktieren.Bis dahin bitten wir Sie um etwas Geduld."
|
"daraufhin kontaktieren.Bis dahin bitten wir Sie um etwas Geduld."
|
||||||
|
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.html:107
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.html:107
|
||||||
#: templates/datacenterlight/emails/request_access_confirmation.txt:107
|
#: datacenterlight/templates/datacenterlight/emails/request_access_confirmation.txt:107
|
||||||
msgid "Thank you!"
|
msgid "Thank you!"
|
||||||
msgstr "Vielen Dank!"
|
msgstr "Vielen Dank!"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:62
|
#: datacenterlight/templates/datacenterlight/index.html:62
|
||||||
#: templates/datacenterlight/order.html:62
|
#: datacenterlight/templates/datacenterlight/index.html:160
|
||||||
#: templates/datacenterlight/pricing.html:62
|
#: datacenterlight/templates/datacenterlight/index.html:346
|
||||||
#: templates/datacenterlight/success.html:62
|
#: datacenterlight/templates/datacenterlight/pricing.html:62
|
||||||
|
#: datacenterlight/templates/datacenterlight/pricing.html:190
|
||||||
msgid "What is it"
|
msgid "What is it"
|
||||||
msgstr "Was ist es?"
|
msgstr "Was ist es?"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:65
|
#: datacenterlight/templates/datacenterlight/index.html:65
|
||||||
#: templates/datacenterlight/index.html:171
|
#: datacenterlight/templates/datacenterlight/index.html:189
|
||||||
#: templates/datacenterlight/index.html:331
|
#: datacenterlight/templates/datacenterlight/index.html:349
|
||||||
#: templates/datacenterlight/order.html:65
|
#: datacenterlight/templates/datacenterlight/pricing.html:65
|
||||||
#: templates/datacenterlight/order.html:198
|
#: datacenterlight/templates/datacenterlight/pricing.html:193
|
||||||
#: templates/datacenterlight/pricing.html:65
|
|
||||||
#: templates/datacenterlight/pricing.html:201
|
|
||||||
#: templates/datacenterlight/success.html:65
|
|
||||||
msgid "Scale out"
|
msgid "Scale out"
|
||||||
msgstr "Skalierung"
|
msgstr "Skalierung"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:68
|
#: datacenterlight/templates/datacenterlight/index.html:68
|
||||||
#: templates/datacenterlight/index.html:197
|
#: datacenterlight/templates/datacenterlight/index.html:215
|
||||||
#: templates/datacenterlight/index.html:334
|
#: datacenterlight/templates/datacenterlight/index.html:352
|
||||||
#: templates/datacenterlight/order.html:68
|
#: datacenterlight/templates/datacenterlight/pricing.html:68
|
||||||
#: templates/datacenterlight/order.html:201
|
#: datacenterlight/templates/datacenterlight/pricing.html:196
|
||||||
#: templates/datacenterlight/pricing.html:68
|
|
||||||
#: templates/datacenterlight/pricing.html:204
|
|
||||||
#: templates/datacenterlight/success.html:68
|
|
||||||
msgid "Reliable and light"
|
msgid "Reliable and light"
|
||||||
msgstr "Zuverlässig und leicht"
|
msgstr "Zuverlässig und leicht"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:71
|
#: datacenterlight/templates/datacenterlight/index.html:71
|
||||||
#: templates/datacenterlight/order.html:71
|
msgid "Order VM"
|
||||||
#: templates/datacenterlight/pricing.html:71
|
msgstr "VM bestellen"
|
||||||
#: templates/datacenterlight/success.html:71
|
|
||||||
msgid "Buy VM"
|
|
||||||
msgstr "VM Kaufen"
|
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:74
|
#: datacenterlight/templates/datacenterlight/index.html:74
|
||||||
#: templates/datacenterlight/index.html:341
|
#: datacenterlight/templates/datacenterlight/index.html:359
|
||||||
#: templates/datacenterlight/order.html:74
|
#: datacenterlight/templates/datacenterlight/pricing.html:74
|
||||||
#: templates/datacenterlight/order.html:208
|
#: datacenterlight/templates/datacenterlight/pricing.html:203
|
||||||
#: templates/datacenterlight/pricing.html:74
|
|
||||||
#: templates/datacenterlight/pricing.html:211
|
|
||||||
#: templates/datacenterlight/success.html:74
|
|
||||||
msgid "Contact"
|
msgid "Contact"
|
||||||
msgstr "Kontakt"
|
msgstr "Kontakt"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:109
|
#: datacenterlight/templates/datacenterlight/index.html:127
|
||||||
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:113
|
#: datacenterlight/templates/datacenterlight/index.html:131
|
||||||
msgid "What is it?"
|
msgid "What is it?"
|
||||||
msgstr "Was ist es?"
|
msgstr "Was ist es?"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:116
|
#: datacenterlight/templates/datacenterlight/index.html:134
|
||||||
msgid "I want it!"
|
msgid "I want it!"
|
||||||
msgstr "Das will ich haben!"
|
msgstr "Das will ich haben!"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:142
|
#: datacenterlight/templates/datacenterlight/index.html:165
|
||||||
#: templates/datacenterlight/index.html:328
|
|
||||||
#: templates/datacenterlight/order.html:195
|
|
||||||
#: templates/datacenterlight/pricing.html:198
|
|
||||||
msgid "How it works"
|
|
||||||
msgstr "Wie es funktioniert"
|
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:147
|
|
||||||
msgid "Reuse existing factory halls intead of building an expensive building."
|
msgid "Reuse existing factory halls intead of building an expensive building."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Nachhaltigkeit: Wiederverwendung ehemaliger Fabrikhallen an Stelle der "
|
"Nachhaltigkeit: Wiederverwendung ehemaliger Fabrikhallen an Stelle der "
|
||||||
"Errichtung eines neuen Gebäudes"
|
"Errichtung eines neuen Gebäudes"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:150
|
#: datacenterlight/templates/datacenterlight/index.html:168
|
||||||
msgid "Being creative, using modern and alternative design for a datacenter."
|
msgid "Being creative, using modern and alternative design for a datacenter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Kreativität: Verwendung eines modernen und alternativen Designs für unser "
|
"Kreativität: Verwendung eines modernen und alternativen Designs für unser "
|
||||||
"Datencenter"
|
"Datencenter"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:152
|
#: datacenterlight/templates/datacenterlight/index.html:170
|
||||||
msgid "Being open: Using FOSS exclusively, we can save money for licenses."
|
msgid "Being open: Using FOSS exclusively, we can save money for licenses."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Offene Verfahrensweise: Die Benutzung eines eigenen Frameworks, FOSS, "
|
"Offene Verfahrensweise: Die Benutzung eines eigenen Frameworks, FOSS, "
|
||||||
"erspart Lizenzgebühren"
|
"erspart Lizenzgebühren"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:174
|
#: datacenterlight/templates/datacenterlight/index.html:192
|
||||||
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 "
|
||||||
|
@ -158,7 +150,7 @@ msgstr ""
|
||||||
"erschwingliche Systeme. Bei grösserer Auslastung werden mehr Standard "
|
"erschwingliche Systeme. Bei grösserer Auslastung werden mehr Standard "
|
||||||
"komponenten hinzugekauft und skalieren so das Datencenter."
|
"komponenten hinzugekauft und skalieren so das Datencenter."
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:200
|
#: datacenterlight/templates/datacenterlight/index.html:218
|
||||||
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 "
|
||||||
|
@ -168,106 +160,123 @@ 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:218
|
#: datacenterlight/templates/datacenterlight/index.html:236
|
||||||
#: templates/datacenterlight/order.html:101
|
#: datacenterlight/templates/datacenterlight/pricing.html:106
|
||||||
#: templates/datacenterlight/pricing.html:101
|
|
||||||
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 Sie signifikant abnehmen"
|
msgstr "Wir sorgen dafür, dass die Kosten für Sie signifikant abnehmen"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:219
|
#: datacenterlight/templates/datacenterlight/index.html:237
|
||||||
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:220
|
#: datacenterlight/templates/datacenterlight/index.html:238
|
||||||
msgid "More Info"
|
msgid "More Info"
|
||||||
msgstr "Weitere Informationen"
|
msgstr "Weitere Informationen"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:227
|
#: datacenterlight/templates/datacenterlight/index.html:245
|
||||||
#: templates/datacenterlight/order.html:114
|
#: datacenterlight/templates/datacenterlight/pricing.html:119
|
||||||
#: templates/datacenterlight/pricing.html:114
|
|
||||||
msgid "VM hosting"
|
msgid "VM hosting"
|
||||||
msgstr ""
|
msgstr "VM Hosting"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:234
|
#: datacenterlight/templates/datacenterlight/index.html:252
|
||||||
msgid "Based in Switzerland"
|
msgid "Based in Switzerland"
|
||||||
msgstr "Standort des Datacenters ist in der Schweiz"
|
msgstr "Standort des Datacenters ist in der Schweiz"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:243
|
#: datacenterlight/templates/datacenterlight/index.html:261
|
||||||
#, fuzzy
|
|
||||||
#| msgid "15 GB Storage (SSD)"
|
|
||||||
msgid "10 GB Storage (SSD)"
|
msgid "10 GB Storage (SSD)"
|
||||||
msgstr "15 GB Storage (SSD)"
|
msgstr "10 GB Storage (SSD)"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:246
|
#: datacenterlight/templates/datacenterlight/index.html:264
|
||||||
#: templates/datacenterlight/order.html:166
|
#: datacenterlight/templates/datacenterlight/pricing.html:161
|
||||||
#: templates/datacenterlight/pricing.html:166
|
|
||||||
msgid "Order Now!"
|
msgid "Order Now!"
|
||||||
msgstr "Bestelle jetzt!"
|
msgstr "Bestelle jetzt!"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:262
|
#: datacenterlight/templates/datacenterlight/index.html:280
|
||||||
#| msgid "I want to try!"
|
msgid "Want to know more? Subscribe to our newsletter!"
|
||||||
msgid "I want to have it!"
|
msgstr "Willst du mehr wissen? Abonniere unseren Newsletter!"
|
||||||
msgstr "Das möchte ich haben"
|
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:289
|
#: datacenterlight/templates/datacenterlight/index.html:307
|
||||||
msgid "Switzerland "
|
msgid "Switzerland "
|
||||||
msgstr "Schweiz"
|
msgstr "Schweiz"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:306
|
#: datacenterlight/templates/datacenterlight/index.html:324
|
||||||
msgid "Questions?"
|
msgid "Questions?"
|
||||||
msgstr "Fragen?"
|
msgstr "Fragen?"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:306
|
#: datacenterlight/templates/datacenterlight/index.html:324
|
||||||
msgid "Contact us!"
|
msgid "Contact us!"
|
||||||
msgstr "Kontaktiere uns!"
|
msgstr "Kontaktiere uns!"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:324
|
#: datacenterlight/templates/datacenterlight/index.html:342
|
||||||
#: templates/datacenterlight/order.html:191
|
#: datacenterlight/templates/datacenterlight/pricing.html:186
|
||||||
#: templates/datacenterlight/pricing.html:194
|
|
||||||
msgid "Home"
|
msgid "Home"
|
||||||
msgstr "Home"
|
msgstr "Home"
|
||||||
|
|
||||||
#: templates/datacenterlight/index.html:337
|
#: datacenterlight/templates/datacenterlight/index.html:355
|
||||||
#: templates/datacenterlight/order.html:204
|
#: datacenterlight/templates/datacenterlight/pricing.html:199
|
||||||
#: templates/datacenterlight/pricing.html:207
|
|
||||||
msgid "Pricing"
|
msgid "Pricing"
|
||||||
msgstr "Preise"
|
msgstr "Preise"
|
||||||
|
|
||||||
#: templates/datacenterlight/order.html:122
|
#: datacenterlight/templates/datacenterlight/pricing.html:71
|
||||||
#: templates/datacenterlight/pricing.html:122
|
msgid "Buy VM"
|
||||||
#, fuzzy
|
msgstr "VM Kaufen"
|
||||||
#| msgid "Based in Switzerland"
|
|
||||||
|
#: datacenterlight/templates/datacenterlight/pricing.html:127
|
||||||
msgid "Hosted in Switzerland"
|
msgid "Hosted in Switzerland"
|
||||||
msgstr "Standort des Datacenters ist in der Schweiz"
|
msgstr "Standort des Datacenters ist in der Schweiz"
|
||||||
|
|
||||||
#: templates/datacenterlight/order.html:139
|
#: datacenterlight/templates/datacenterlight/pricing.html:144
|
||||||
#: templates/datacenterlight/pricing.html:139
|
|
||||||
msgid "GB Storage (SSD)"
|
msgid "GB Storage (SSD)"
|
||||||
msgstr "GB Storage (SSD)"
|
msgstr "GB Storage (SSD)"
|
||||||
|
|
||||||
#: templates/datacenterlight/order.html:173
|
#: datacenterlight/templates/datacenterlight/pricing.html:168
|
||||||
#: templates/datacenterlight/pricing.html:176
|
|
||||||
msgid "Simple and affordable: Try our virtual machine with featherlight price."
|
msgid "Simple and affordable: Try our virtual machine with featherlight price."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Simpel und bezahlbar: Testen Sie unsere virtuelen Machinen mit "
|
||||||
|
"federleichten Preisen"
|
||||||
|
|
||||||
#: templates/datacenterlight/success.html:101
|
#: datacenterlight/templates/datacenterlight/pricing.html:171
|
||||||
msgid "Thank you for order! Our team will contact you via email"
|
msgid ""
|
||||||
|
"Our VMs are hosted in Glarus, Switzerland, and our website is currently "
|
||||||
|
"running in BETA mode. If you want more information that you did not find on "
|
||||||
|
"our website, or if your order is more detailed, or if you encounter any "
|
||||||
|
"technical hiccups, please contact us at support@datacenterlight.ch, our team "
|
||||||
|
"will get in touch with you asap."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vielen Dank für die Bestellung. Unser Team setzt sich sobald wie möglich mit "
|
"Unsere VMs werden in der Schweiz im Kanton Glarus gehostet und befinden sich "
|
||||||
"Ihnen via E-Mail in Verbindung."
|
"zur Zeit noch in der BETA-Phase. Möchtest du mehr über uns erfahren und hast "
|
||||||
|
"auf unserer Website nicht genügend Informationen gefunden? Möchtest eine "
|
||||||
|
"detailliertere Bestellung aufgeben? Bist du auf technische Probleme "
|
||||||
|
"gestossen, die du uns mitteilen möchtest? Dann zögere nicht und kontaktiere "
|
||||||
|
"uns unter support@datacenterlight.ch. Unser Team wird sich umgehend um dein "
|
||||||
|
"Anliegen kümmern!"
|
||||||
|
|
||||||
#: templates/datacenterlight/success.html:103
|
#~ msgid "How it works"
|
||||||
msgid "as soon as possible!"
|
#~ msgstr "Wie es funktioniert"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#~ msgid "Want to know more? Subscribe to our newsletter!"
|
#~ msgid "Our VMs are hosted in Glarus, Switzerland."
|
||||||
#~ msgstr "Willst du mehr wissen? Abonniere unseren Newsletter!"
|
#~ msgstr "Standort des Datacenters ist in der Schweiz"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ " WARNING: We are currently running in BETA mode. We hope you won't "
|
||||||
|
#~ "encounter any hiccups, but if you do, please let us know at "
|
||||||
|
#~ "support@datacenterlight.ch"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ " Achtung: Wir befinden uns zurzeit im Beta-Release. Wir hoffen, dass Sie "
|
||||||
|
#~ "davon nichts mitbekommen, falls doch melden Sie sich bitte via "
|
||||||
|
#~ "support@datacenterlight.ch"
|
||||||
|
|
||||||
|
#~ msgid "Request Beta Access"
|
||||||
|
#~ msgstr "Beantrage Beta-Zugang"
|
||||||
|
|
||||||
|
#~ msgid "Thank you, we will contact you as soon as possible"
|
||||||
|
#~ msgstr "Vielen Dank, wir werden Sie sobald als möglich kontaktieren."
|
||||||
|
|
||||||
#~ msgid "Buy Now!"
|
#~ msgid "Buy Now!"
|
||||||
#~ msgstr "Kaufe jetzt!"
|
#~ msgstr "Kaufe jetzt!"
|
||||||
|
|
||||||
#~ msgid "How it works:"
|
#~ msgid "I want to try!"
|
||||||
#~ msgstr "Warum können wir diese Leistung so günstig anbieten:"
|
#~ msgstr "Das möchte ich haben"
|
||||||
|
|
||||||
#~ msgid "Email address"
|
#~ msgid "Email address"
|
||||||
#~ msgstr "E-Mail Adresse"
|
#~ msgstr "E-Mail Adresse"
|
||||||
|
|
|
@ -136,7 +136,7 @@ h6 {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.navbar-right {
|
.navbar-right {
|
||||||
margin-right: 0px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
.navbar-default .btn-link {
|
.navbar-default .btn-link {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
@ -144,6 +144,52 @@ h6 {
|
||||||
.navbar-default .btn-link:hover {
|
.navbar-default .btn-link:hover {
|
||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
}
|
}
|
||||||
|
.nav-language{
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.nav-language .select-language{
|
||||||
|
padding: 15px 10px;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
.navbar-transparent .nav-language .select-language{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nav-language .select-language span{
|
||||||
|
margin-left: 5px;
|
||||||
|
margin-right: 5px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.nav-language .drop-language{
|
||||||
|
position: absolute;
|
||||||
|
top: 45px;
|
||||||
|
left: -8px;
|
||||||
|
background: #fff;
|
||||||
|
width: 100px;
|
||||||
|
height: 40px;
|
||||||
|
padding: 9px 10px;
|
||||||
|
-webkit-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1);
|
||||||
|
-moz-box-shadow: -8px 13px 31px -8px rgba(77,77,77,1);
|
||||||
|
box-shadow: -8px 13px 31px -8px rgba(77,77,77,1);
|
||||||
|
display: none;
|
||||||
|
z-index: 100;
|
||||||
|
/* margin-left: 10px; */
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.nav-language .drop-language a{
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.navbar-transparent .nav-language .drop-language{
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid #fff;
|
||||||
|
}
|
||||||
|
.navbar-transparent .nav-language .drop-language a{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.nav-language:hover .drop-language{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
.intro-header {
|
.intro-header {
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -699,6 +745,14 @@ h6 {
|
||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
.intro-pricing .intro-message .section-heading {
|
||||||
|
font-size: 35px;
|
||||||
|
width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.intro-pricing .intro-message {
|
||||||
|
padding-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
ul.intro-social-buttons > li:last-child {
|
ul.intro-social-buttons > li:last-child {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
@ -722,6 +776,23 @@ h6 {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
color: #777;
|
color: #777;
|
||||||
}
|
}
|
||||||
|
.nav-language:hover{
|
||||||
|
height: 80px;
|
||||||
|
}
|
||||||
|
.navbar-transparent .nav-language .select-language {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
.navbar-transparent .nav-language .drop-language a {
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
.navbar-transparent .nav-language .drop-language {
|
||||||
|
background: #fff;
|
||||||
|
/* border: 1px solid #fff; */
|
||||||
|
z-index: 100000;
|
||||||
|
left: 9px;
|
||||||
|
border: 1px solid rgba(119, 119, 119, 0.4);
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
.split-section {
|
.split-section {
|
||||||
padding: 10px 0;
|
padding: 10px 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,15 +10,15 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="inputs">
|
<div class="inputs">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="text" name="name" class="form-control" id="name" placeholder="Enter name">
|
<input type="text" name="name" class="form-control" id="name" placeholder="{% trans 'Enter name' %}">
|
||||||
<span style="color: white">{{ form.name.errors|striptags}}</span>
|
<span style="color: white">{{ form.name.errors|striptags}}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<input type="email" name="email" class="form-control" id="email" placeholder="Enter email">
|
<input type="email" name="email" class="form-control" id="email" placeholder="{% trans 'Enter email' %}">
|
||||||
<span style="color: white">{{ form.email.errors|striptags}}</span>
|
<span style="color: white">{{ form.email.errors|striptags}}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<button type="submit" class="btn btn-default btn-transparent btn-lg">{% trans "Request Beta Access" %}</button>
|
<button type="submit" class="btn btn-default btn-transparent btn-lg">{% trans "Request Newsletter" %}</button>
|
||||||
</form>
|
</form>
|
||||||
<script>
|
<script>
|
||||||
$('#beta_access').ajaxForm({
|
$('#beta_access').ajaxForm({
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<h4 class="modal-title">{% trans "Request Sent" %}</h4>
|
<h4 class="modal-title">{% trans "Request Sent" %}</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<p>{% trans "Thank you, we will contact you as soon as possible" %}</p>
|
<p>{% trans "Thank you for your subscription! You will receive a confirmation mail from our team" %}</p>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.modal-content -->
|
</div><!-- /.modal-content -->
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -68,13 +68,13 @@
|
||||||
<a class="url" href="javascript:void(0)" data-url="#our">{% trans "Reliable and light" %}</a>
|
<a class="url" href="javascript:void(0)" data-url="#our">{% trans "Reliable and light" %}</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="url" href="javascript:void(0)" data-url="#price" >{% trans "Buy VM" %}</a>
|
<a class="url" href="javascript:void(0)" data-url="#price" >{% trans "Order VM" %}</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="url" href="javascript:void(0)" data-url="#contact" >{% trans "Contact" %}</a>
|
<a class="url" href="javascript:void(0)" data-url="#contact" >{% trans "Contact" %}</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<select class="selectpicker" data-width="fit" onchange="location = this.value;" style="margin-top:10px;">
|
<!-- <select class="selectpicker" data-width="fit" onchange="location = this.value;" style="margin-top:10px;">
|
||||||
{% if LANGUAGE_CODE == 'en-us'%}
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
<option selected="selected" value="{{base_url}}/en-us/datacenterlight/">English</option>
|
<option selected="selected" value="{{base_url}}/en-us/datacenterlight/">English</option>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
@ -86,7 +86,25 @@
|
||||||
<option value="{{base_url}}/de/datacenterlight/">Deutsch</option>
|
<option value="{{base_url}}/de/datacenterlight/">Deutsch</option>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</select>
|
</select> -->
|
||||||
|
<li class="nav-language">
|
||||||
|
<div class="select-language">
|
||||||
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
|
<span>English</span>
|
||||||
|
{% else %}
|
||||||
|
<span>Deutsch</span>
|
||||||
|
{% endif %}
|
||||||
|
<i class="fa fa-globe" aria-hidden="true"></i>
|
||||||
|
</div>
|
||||||
|
<div class="drop-language">
|
||||||
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
|
<a class="url" href="{{base_url}}/de/datacenterlight" >Deutsch</a>
|
||||||
|
{% else %}
|
||||||
|
<a class="url" href="{{base_url}}/en-us/datacenterlight" >English</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
@ -110,7 +128,7 @@
|
||||||
<hr class="intro-divider">
|
<hr class="intro-divider">
|
||||||
<ul class="list-inline intro-social-buttons">
|
<ul class="list-inline intro-social-buttons">
|
||||||
<li>
|
<li>
|
||||||
<a href="#how" class="btn btn-default btn-lg btn-transparent"><i class="#Services"></i> <span class="network-name">{% trans "What is it?" %}</span></a>
|
<a class="btn btn-default btn-lg btn-transparent url" href="javascript:void(0)" data-url="#how" ><i class="#Services"></i> <span class="network-name">{% trans "What is it?" %}</span></a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="btn btn-primary btn-lg page-scroll url" href="javascript:void(0)" data-url="#request" ><span class="network-name">{% trans "I want it!" %}</span></a>
|
<a class="btn btn-primary btn-lg page-scroll url" href="javascript:void(0)" data-url="#request" ><span class="network-name">{% trans "I want it!" %}</span></a>
|
||||||
|
@ -139,7 +157,7 @@
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6">
|
<div class="col-xs-12 col-sm-6 col-md-6">
|
||||||
<div class="split-text">
|
<div class="split-text">
|
||||||
<div class="split-title">
|
<div class="split-title">
|
||||||
<h2>{% trans "How it works" %}</h2>
|
<h2>{% trans "What is it" %}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="split-description">
|
<div class="split-description">
|
||||||
<ul class="fa-ul">
|
<ul class="fa-ul">
|
||||||
|
@ -217,7 +235,6 @@
|
||||||
<div class="col-xs-12 col-md-6 text">
|
<div class="col-xs-12 col-md-6 text">
|
||||||
<h2 class="section-heading">{% trans "We are cutting down the costs significantly!" %}</h2>
|
<h2 class="section-heading">{% trans "We are cutting down the costs significantly!" %}</h2>
|
||||||
<p class="lead">{% trans "Affordable VM hosting based in Switzerland" %}</p>
|
<p class="lead">{% trans "Affordable VM hosting based in Switzerland" %}</p>
|
||||||
<a href="#" class="btn btn-info btn-lg">{% trans "More Info" %}</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-xs-12 col-md-6 hero-feature">
|
<div class="col-xs-12 col-md-6 hero-feature">
|
||||||
|
@ -325,7 +342,7 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="footer-menu-divider">⋅</li>
|
<li class="footer-menu-divider">⋅</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#about">{% trans "How it works" %}</a></li>
|
<a href="#about">{% trans "What is it" %}</a></li>
|
||||||
<li class="footer-menu-divider">⋅</li>
|
<li class="footer-menu-divider">⋅</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#about">{% trans "Scale out" %}</a></li>
|
<a href="#about">{% trans "Scale out" %}</a></li>
|
||||||
|
|
|
@ -74,19 +74,24 @@
|
||||||
<a class="url" href="javascript:void(0)" data-url="#contact" >{% trans "Contact" %}</a>
|
<a class="url" href="javascript:void(0)" data-url="#contact" >{% trans "Contact" %}</a>
|
||||||
</li> -->
|
</li> -->
|
||||||
|
|
||||||
<select class="selectpicker" data-width="fit" onchange="location = this.value;" style="margin-top:10px;">
|
<li class="nav-language">
|
||||||
|
<div class="select-language">
|
||||||
{% if LANGUAGE_CODE == 'en-us'%}
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
<option selected="selected" value="{{base_url}}/en-us/datacenterlight/">English</option>
|
<span>English</span>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option value="{{base_url}}/en-us/datacenterlight/">English</option>
|
<span>Deutsch</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if LANGUAGE_CODE == 'de'%}
|
<i class="fa fa-globe" aria-hidden="true"></i>
|
||||||
<option selected="selected" value="{{base_url}}/de/datacenterlight/">Deutsch</option>
|
</div>
|
||||||
|
<div class="drop-language">
|
||||||
|
{% if LANGUAGE_CODE == 'en-us'%}
|
||||||
|
<a class="url" href="{{base_url}}/de/datacenterlight/pricing" >Deutsch</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<option value="{{base_url}}/de/datacenterlight/">Deutsch</option>
|
<a class="url" href="{{base_url}}/en-us/datacenterlight/pricing" >English</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</select>
|
</div>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
@ -176,7 +181,7 @@
|
||||||
<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>
|
||||||
|
|
||||||
<div class="description">
|
<div class="description">
|
||||||
<p>Our VMs are hosted in Glarus, Switzerland. WARNING: We are currently running in BETA mode, especially our website We hope you will not encounter any hiccups, but if you, please let us know at support@datacenterlight.ch</p>
|
<p>{% trans "Our VMs are hosted in Glarus, Switzerland, and our website is currently running in BETA mode. If you want more information that you did not find on our website, or if your order is more detailed, or if you encounter any technical hiccups, please contact us at support@datacenterlight.ch, our team will get in touch with you asap." %}</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -195,7 +200,7 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="footer-menu-divider">⋅</li>
|
<li class="footer-menu-divider">⋅</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#about">{% trans "How it works" %}</a></li>
|
<a href="#about">{% trans "What is it" %}</a></li>
|
||||||
<li class="footer-menu-divider">⋅</li>
|
<li class="footer-menu-divider">⋅</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#about">{% trans "Scale out" %}</a></li>
|
<a href="#about">{% trans "Scale out" %}</a></li>
|
||||||
|
|
|
@ -32,8 +32,8 @@ class PricingView(TemplateView):
|
||||||
}
|
}
|
||||||
except:
|
except:
|
||||||
messages.error( request,
|
messages.error( request,
|
||||||
'We could not load the VM templates due to a backend connection \
|
'We have a temporary problem to connect to our backend. \
|
||||||
error. Please try again in a few minutes'
|
Please try again in a few minutes'
|
||||||
)
|
)
|
||||||
context = {
|
context = {
|
||||||
'error' : 'connection'
|
'error' : 'connection'
|
||||||
|
@ -41,7 +41,6 @@ class PricingView(TemplateView):
|
||||||
|
|
||||||
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')
|
||||||
|
@ -182,43 +181,6 @@ class BetaProgramView(CreateView):
|
||||||
|
|
||||||
messages.add_message(self.request, messages.SUCCESS, self.success_message)
|
messages.add_message(self.request, messages.SUCCESS, self.success_message)
|
||||||
return HttpResponseRedirect(self.get_success_url())
|
return HttpResponseRedirect(self.get_success_url())
|
||||||
# return super(BetaProgramView, self).form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# def form_valid(self, form):
|
|
||||||
|
|
||||||
# context = {
|
|
||||||
# 'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host())
|
|
||||||
# }
|
|
||||||
|
|
||||||
# email_data = {
|
|
||||||
# 'subject': 'DatacenterLight Beta Access Request',
|
|
||||||
# 'to': form.cleaned_data.get('email'),
|
|
||||||
# 'context': context,
|
|
||||||
# 'template_name': 'request_access_confirmation',
|
|
||||||
# 'template_path': 'datacenterlight/emails/'
|
|
||||||
# }
|
|
||||||
# email = BaseEmail(**email_data)
|
|
||||||
# email.send()
|
|
||||||
|
|
||||||
# context.update({
|
|
||||||
# 'email': form.cleaned_data.get('email')
|
|
||||||
# })
|
|
||||||
|
|
||||||
# email_data = {
|
|
||||||
# 'subject': 'DatacenterLight Beta Access Request',
|
|
||||||
# 'to': 'info@ungleich.ch',
|
|
||||||
# 'context': context,
|
|
||||||
# 'template_name': 'request_access_notification',
|
|
||||||
# 'template_path': 'datacenterlight/emails/'
|
|
||||||
# }
|
|
||||||
# email = BaseEmail(**email_data)
|
|
||||||
# email.send()
|
|
||||||
|
|
||||||
# messages.add_message(self.request, messages.SUCCESS, self.success_message)
|
|
||||||
# return super(IndexView, self).form_valid(form)
|
|
||||||
|
|
||||||
|
|
||||||
class IndexView(CreateView):
|
class IndexView(CreateView):
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
</h2>
|
</h2>
|
||||||
</a>
|
</a>
|
||||||
<p class="post-meta" style="font-size:0.9em;">
|
<p class="post-meta" style="font-size:0.9em;">
|
||||||
Posted on {{ post.date_published|date:"DATE_FORMAT" }}
|
{% trans "Posted on" %}{{ post.date_published|date:"DATE_FORMAT" }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="post-subtitle">
|
<p class="post-subtitle">
|
||||||
|
|
|
@ -1,423 +0,0 @@
|
||||||
"""
|
|
||||||
Copyright 2015 ungleich.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
|
||||||
import os
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
# dotenv
|
|
||||||
import dotenv
|
|
||||||
|
|
||||||
gettext = lambda s: s
|
|
||||||
|
|
||||||
|
|
||||||
def env(env_name):
|
|
||||||
return os.environ.get(env_name)
|
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
PROJECT_DIR = os.path.abspath(
|
|
||||||
os.path.join(os.path.dirname(__file__), "../.."),
|
|
||||||
)
|
|
||||||
|
|
||||||
# load .env file
|
|
||||||
dotenv.read_dotenv("{0}/.env".format(PROJECT_DIR))
|
|
||||||
|
|
||||||
# Quick-start development settings - unsuitable for production
|
|
||||||
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
|
|
||||||
|
|
||||||
SITE_ID = 1
|
|
||||||
|
|
||||||
APP_ROOT_ENDPOINT = "/"
|
|
||||||
|
|
||||||
LOGIN_URL = None
|
|
||||||
LOGOUT_URL = None
|
|
||||||
LOGIN_REDIRECT_URL = None
|
|
||||||
|
|
||||||
EMAIL_HOST = "localhost"
|
|
||||||
EMAIL_PORT = 25
|
|
||||||
|
|
||||||
SECRET_KEY = env('DJANGO_SECRET_KEY')
|
|
||||||
|
|
||||||
# Application definition
|
|
||||||
|
|
||||||
INSTALLED_APPS = (
|
|
||||||
'djangocms_admin_style',
|
|
||||||
'django.contrib.admin',
|
|
||||||
'django.contrib.auth',
|
|
||||||
'django.contrib.contenttypes',
|
|
||||||
'django.contrib.sessions',
|
|
||||||
'django.contrib.messages',
|
|
||||||
'django.contrib.staticfiles',
|
|
||||||
'django.contrib.sites',
|
|
||||||
'cms', # django CMS itself
|
|
||||||
'treebeard', # utilities for implementing a tree
|
|
||||||
'menus', # helper for model independent hierarchical website navigation
|
|
||||||
'sekizai', # for javascript and css management
|
|
||||||
# django-cms plugins
|
|
||||||
'djangocms_flash',
|
|
||||||
'djangocms_googlemap',
|
|
||||||
'djangocms_inherit',
|
|
||||||
'djangocms_link',
|
|
||||||
'djangocms_snippet',
|
|
||||||
'djangocms_teaser',
|
|
||||||
'djangocms_page_meta',
|
|
||||||
# django-filer
|
|
||||||
'cmsplugin_filer_file',
|
|
||||||
'cmsplugin_filer_folder',
|
|
||||||
'cmsplugin_filer_link',
|
|
||||||
'cmsplugin_filer_teaser',
|
|
||||||
'cmsplugin_filer_video',
|
|
||||||
# versioning
|
|
||||||
'reversion',
|
|
||||||
# ck-editor
|
|
||||||
'djangocms_text_ckeditor',
|
|
||||||
# djangocms-blog
|
|
||||||
'filer',
|
|
||||||
'easy_thumbnails',
|
|
||||||
'cmsplugin_filer_image',
|
|
||||||
'parler',
|
|
||||||
'taggit',
|
|
||||||
'taggit_autosuggest',
|
|
||||||
'django_select2',
|
|
||||||
'meta',
|
|
||||||
'meta_mixin',
|
|
||||||
# 'admin_enhancer',
|
|
||||||
'djangocms_blog',
|
|
||||||
'bootstrap3',
|
|
||||||
'compressor',
|
|
||||||
# ungleich
|
|
||||||
'ungleich',
|
|
||||||
'hosting',
|
|
||||||
'digitalglarus',
|
|
||||||
)
|
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = (
|
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
||||||
'django.middleware.common.CommonMiddleware',
|
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
||||||
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
|
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
|
||||||
'django.middleware.locale.LocaleMiddleware',
|
|
||||||
# django-cms middlewares
|
|
||||||
'cms.middleware.user.CurrentUserMiddleware',
|
|
||||||
'cms.middleware.page.CurrentPageMiddleware',
|
|
||||||
'cms.middleware.toolbar.ToolbarMiddleware',
|
|
||||||
'cms.middleware.language.LanguageCookieMiddleware',
|
|
||||||
)
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'dynamicweb.urls'
|
|
||||||
|
|
||||||
TEMPLATES = [
|
|
||||||
{
|
|
||||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
|
||||||
'DIRS': [],
|
|
||||||
'APP_DIRS': True,
|
|
||||||
'OPTIONS': {
|
|
||||||
'context_processors': [
|
|
||||||
'django.template.context_processors.debug',
|
|
||||||
'django.template.context_processors.request',
|
|
||||||
'django.contrib.auth.context_processors.auth',
|
|
||||||
'django.contrib.messages.context_processors.messages',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
WSGI_APPLICATION = 'dynamicweb.wsgi.application'
|
|
||||||
|
|
||||||
# Deprecated since version 1.8.
|
|
||||||
# callables take a request object as their argument and return a dictionary of
|
|
||||||
# items to be merged into the context.
|
|
||||||
TEMPLATE_CONTEXT_PROCESSORS = (
|
|
||||||
"django.contrib.auth.context_processors.auth",
|
|
||||||
"django.core.context_processors.debug",
|
|
||||||
"django.core.context_processors.i18n",
|
|
||||||
"django.core.context_processors.media",
|
|
||||||
"django.core.context_processors.static",
|
|
||||||
"django.core.context_processors.tz",
|
|
||||||
"django.contrib.messages.context_processors.messages",
|
|
||||||
"django.core.context_processors.request",
|
|
||||||
'sekizai.context_processors.sekizai',
|
|
||||||
'cms.context_processors.cms_settings',
|
|
||||||
)
|
|
||||||
|
|
||||||
TEMPLATE_DIRS = (
|
|
||||||
os.path.join(PROJECT_DIR, 'templates'),
|
|
||||||
)
|
|
||||||
|
|
||||||
CMS_TEMPLATES_DIR = {
|
|
||||||
1: os.path.join(TEMPLATE_DIRS[0], 'cms/'),
|
|
||||||
}
|
|
||||||
|
|
||||||
# Database
|
|
||||||
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
|
|
||||||
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
|
||||||
'NAME': 'app',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Internationalization
|
|
||||||
# https://docs.djangoproject.com/en/1.7/topics/i18n/
|
|
||||||
|
|
||||||
TIME_ZONE = 'UTC'
|
|
||||||
|
|
||||||
USE_I18N = True
|
|
||||||
|
|
||||||
USE_L10N = True
|
|
||||||
|
|
||||||
USE_TZ = True
|
|
||||||
|
|
||||||
LANGUAGES = (
|
|
||||||
('en-us', _('English')),
|
|
||||||
('de', _('Deutsch')),
|
|
||||||
)
|
|
||||||
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
|
||||||
|
|
||||||
CMS_PLACEHOLDER_CONF = {
|
|
||||||
'logo_image': {
|
|
||||||
'name': 'Logo Image',
|
|
||||||
'plugins': ['FilerImagePlugin'],
|
|
||||||
'limits': {
|
|
||||||
'global': 1,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'page-title': {
|
|
||||||
'name': 'Page Title',
|
|
||||||
'plugins': ['TextPlugin'],
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {
|
|
||||||
'body': 'Page Title...'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'limits': {
|
|
||||||
'global': 1,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'page-subtitle': {
|
|
||||||
'name': 'Page Subtitle',
|
|
||||||
'inherit': 'page-title',
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {
|
|
||||||
'body': 'Page subtitle...'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'footer_copyright': {
|
|
||||||
'name': 'Copyright',
|
|
||||||
'inherit': 'page-title',
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {
|
|
||||||
'body': 'Copyright...'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'content': {
|
|
||||||
'name': _('Content'),
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {'body': '<p></p>'},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
'post_content': {
|
|
||||||
'name': _('Content'),
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {'body': '<p></p>'},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
CACHES = {
|
|
||||||
'default': {
|
|
||||||
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
|
|
||||||
'LOCATION': '127.0.0.1:11211',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if LOGIN_URL is None:
|
|
||||||
LOGIN_URL = APP_ROOT_ENDPOINT + 'accounts/login/'
|
|
||||||
if LOGOUT_URL is None:
|
|
||||||
LOGOUT_URL = APP_ROOT_ENDPOINT + 'accounts/logout/'
|
|
||||||
if LOGIN_REDIRECT_URL is None:
|
|
||||||
LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT
|
|
||||||
|
|
||||||
# Static files (CSS, JavaScript, Images)
|
|
||||||
# https://docs.djangoproject.com/en/1.7/howto/static-files/
|
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
|
||||||
|
|
||||||
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
|
|
||||||
|
|
||||||
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
|
|
||||||
MEDIA_URL = APP_ROOT_ENDPOINT + 'media/'
|
|
||||||
FILE_UPLOAD_PERMISSIONS = 0o644
|
|
||||||
|
|
||||||
# Templates confs
|
|
||||||
TEMPLATE_DIRS = (
|
|
||||||
os.path.join(PROJECT_DIR, "templates"),
|
|
||||||
)
|
|
||||||
|
|
||||||
META_SITE_PROTOCOL = 'http'
|
|
||||||
META_USE_SITES = True
|
|
||||||
|
|
||||||
MIGRATION_MODULES = {
|
|
||||||
'cms': 'cms.migrations',
|
|
||||||
'filer': 'filer.migrations_django',
|
|
||||||
'menus': 'menus.migrations_django',
|
|
||||||
'djangocms_flash': 'djangocms_flash.migrations_django',
|
|
||||||
'djangocms_googlemap': 'djangocms_googlemap.migrations_django',
|
|
||||||
'djangocms_inherit': 'djangocms_inherit.migrations_django',
|
|
||||||
'djangocms_link': 'djangocms_link.migrations_django',
|
|
||||||
'djangocms_snippet': 'djangocms_snippet.migrations_django',
|
|
||||||
'djangocms_teaser': 'djangocms_teaser.migrations_django',
|
|
||||||
'djangocms_column': 'djangocms_column.migrations_django',
|
|
||||||
'djangocms_flash': 'djangocms_flash.migrations_django',
|
|
||||||
'djangocms_googlemap': 'djangocms_googlemap.migrations_django',
|
|
||||||
'djangocms_inherit': 'djangocms_inherit.migrations_django',
|
|
||||||
'djangocms_style': 'djangocms_style.migrations_django',
|
|
||||||
'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django',
|
|
||||||
'cmsplugin_filer_file': 'cmsplugin_filer_file.migrations_django',
|
|
||||||
'cmsplugin_filer_folder': 'cmsplugin_filer_folder.migrations_django',
|
|
||||||
'cmsplugin_filer_link': 'cmsplugin_filer_link.migrations_django',
|
|
||||||
'cmsplugin_filer_teaser': 'cmsplugin_filer_teaser.migrations_django',
|
|
||||||
'cmsplugin_filer_utils': 'cmsplugin_filer_utils.migrations_django',
|
|
||||||
'cmsplugin_filer_video': 'cmsplugin_filer_video.migrations_django',
|
|
||||||
'djangocms_text_ckeditor': 'djangocms_text_ckeditor.migrations',
|
|
||||||
}
|
|
||||||
|
|
||||||
STATICFILES_FINDERS = (
|
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
|
||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
|
||||||
'compressor.finders.CompressorFinder',
|
|
||||||
)
|
|
||||||
|
|
||||||
COMPRESS_PRECOMPILERS = (
|
|
||||||
('text/less', 'lesscpy {infile}'),
|
|
||||||
)
|
|
||||||
|
|
||||||
THUMBNAIL_PROCESSORS = (
|
|
||||||
'easy_thumbnails.processors.colorspace',
|
|
||||||
'easy_thumbnails.processors.autocrop',
|
|
||||||
'filer.thumbnail_processors.scale_and_crop_with_subject_location',
|
|
||||||
'easy_thumbnails.processors.filters',
|
|
||||||
)
|
|
||||||
|
|
||||||
# django-cms-text-ckeditor
|
|
||||||
TEXT_SAVE_IMAGE_FUNCTION = (
|
|
||||||
'cmsplugin_filer_image.integrations.ckeditor.create_image_plugin'
|
|
||||||
)
|
|
||||||
TEXT_ADDITIONAL_TAGS = ('iframe',)
|
|
||||||
TEXT_ADDITIONAL_ATTRIBUTES = ('scrolling', 'allowfullscreen', 'frameborder')
|
|
||||||
USE_X_FORWARDED_HOST = True
|
|
||||||
|
|
||||||
# Django Bootstrap - Settings
|
|
||||||
# Added Configuration for bootstrap static files to load over https.
|
|
||||||
BOOTSTRAP3 = {
|
|
||||||
|
|
||||||
# The URL to the jQuery JavaScript file
|
|
||||||
'jquery_url': '//code.jquery.com/jquery.min.js',
|
|
||||||
|
|
||||||
# The Bootstrap base URL
|
|
||||||
'base_url': '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/',
|
|
||||||
|
|
||||||
# The complete URL to the Bootstrap CSS file
|
|
||||||
# (None means derive it from base_url)
|
|
||||||
'css_url': None,
|
|
||||||
|
|
||||||
# The complete URL to the Bootstrap CSS file (None means no theme)
|
|
||||||
'theme_url': None,
|
|
||||||
|
|
||||||
# The complete URL to the Bootstrap JavaScript file
|
|
||||||
# (None means derive it from base_url)
|
|
||||||
'javascript_url': None,
|
|
||||||
|
|
||||||
# Put JavaScript in the HEAD section of the HTML document
|
|
||||||
# (only relevant if you use bootstrap3.html)
|
|
||||||
'javascript_in_head': False,
|
|
||||||
|
|
||||||
# Include jQuery with Bootstrap JavaScript
|
|
||||||
# (affects django-bootstrap3 template tags)
|
|
||||||
'include_jquery': False,
|
|
||||||
|
|
||||||
# Label class to use in horizontal forms
|
|
||||||
'horizontal_label_class': 'col-md-3',
|
|
||||||
|
|
||||||
# Field class to use in horizontal forms
|
|
||||||
'horizontal_field_class': 'col-md-9',
|
|
||||||
|
|
||||||
# Set HTML required attribute on required fields
|
|
||||||
'set_required': True,
|
|
||||||
|
|
||||||
# Set HTML disabled attribute on disabled fields
|
|
||||||
'set_disabled': False,
|
|
||||||
|
|
||||||
# Set placeholder attributes to label if no placeholder is provided
|
|
||||||
'set_placeholder': True,
|
|
||||||
|
|
||||||
# Class to indicate required (better to set this in your Django form)
|
|
||||||
'required_css_class': '',
|
|
||||||
|
|
||||||
# Class to indicate error (better to set this in your Django form)
|
|
||||||
'error_css_class': 'has-error',
|
|
||||||
|
|
||||||
# Class to indicate success, meaning the field has valid input
|
|
||||||
# (better to set this in your Django form)
|
|
||||||
'success_css_class': 'has-success',
|
|
||||||
|
|
||||||
# Renderers (only set these if you have studied the source and understand
|
|
||||||
# the inner workings)
|
|
||||||
'formset_renderers': {
|
|
||||||
'default': 'bootstrap3.renderers.FormsetRenderer',
|
|
||||||
},
|
|
||||||
'form_renderers': {
|
|
||||||
'default': 'bootstrap3.renderers.FormRenderer',
|
|
||||||
},
|
|
||||||
'field_renderers': {
|
|
||||||
'default': 'bootstrap3.renderers.FieldRenderer',
|
|
||||||
'inline': 'bootstrap3.renderers.InlineFieldRenderer',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
# djangocms_blog config
|
|
||||||
|
|
||||||
BLOG_ENABLE_COMMENTS = False
|
|
||||||
BLOG_USE_PLACEHOLDER = True
|
|
||||||
BLOG_IMAGE_THUMBNAIL_SIZE = {'size': '120x120', 'crop': True, 'upscale': False}
|
|
||||||
BLOG_IMAGE_FULL_SIZE = {'size': '640x120', 'crop': True, 'upscale': False}
|
|
||||||
BLOG_PAGINATION = 4
|
|
||||||
BLOG_LATEST_POSTS = BLOG_PAGINATION
|
|
||||||
BLOG_POSTS_LIST_TRUNCWORDS_COUNT = 100
|
|
||||||
BLOG_MULTISITE = True
|
|
||||||
BLOG_AUTHOR_DEFAULT = True
|
|
||||||
|
|
||||||
# django-meta
|
|
||||||
META_SITE_PROTOCOL = "https"
|
|
||||||
META_SITE_DOMAIN = "ungleich.ch"
|
|
||||||
META_SITE_TYPE = "website"
|
|
||||||
META_SITE_NAME = "ungleich"
|
|
||||||
META_INCLUDE_KEYWORDS = ["ungleich", "hosting", "switzerland",
|
|
||||||
"Schweiz", "Swiss", "cdist"]
|
|
||||||
META_USE_SITES = True
|
|
||||||
|
|
||||||
PARLER_LANGUAGES = {1: ({'code': 'en-us'}, {'code': 'de'}, )}
|
|
|
@ -1,441 +0,0 @@
|
||||||
"""
|
|
||||||
Copyright 2015 ungleich.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
|
||||||
import os
|
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
# dotenv
|
|
||||||
import dotenv
|
|
||||||
|
|
||||||
gettext = lambda s: s
|
|
||||||
|
|
||||||
|
|
||||||
def env(env_name):
|
|
||||||
return os.environ.get(env_name)
|
|
||||||
|
|
||||||
|
|
||||||
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
||||||
|
|
||||||
PROJECT_DIR = os.path.abspath(
|
|
||||||
os.path.join(os.path.dirname(__file__), "../.."),
|
|
||||||
)
|
|
||||||
|
|
||||||
# load .env file
|
|
||||||
dotenv.read_dotenv("{0}/.env".format(PROJECT_DIR))
|
|
||||||
|
|
||||||
# Quick-start development settings - unsuitable for production
|
|
||||||
# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/
|
|
||||||
|
|
||||||
SITE_ID = 1
|
|
||||||
|
|
||||||
APP_ROOT_ENDPOINT = "/"
|
|
||||||
|
|
||||||
LOGIN_URL = None
|
|
||||||
LOGOUT_URL = None
|
|
||||||
LOGIN_REDIRECT_URL = None
|
|
||||||
|
|
||||||
EMAIL_HOST = "localhost"
|
|
||||||
EMAIL_PORT = 25
|
|
||||||
|
|
||||||
SECRET_KEY = env('DJANGO_SECRET_KEY')
|
|
||||||
|
|
||||||
# Application definition
|
|
||||||
|
|
||||||
INSTALLED_APPS = (
|
|
||||||
#1st migrate
|
|
||||||
'membership',
|
|
||||||
'django.contrib.admin',
|
|
||||||
'django.contrib.auth',
|
|
||||||
'django.contrib.contenttypes',
|
|
||||||
'django.contrib.sessions',
|
|
||||||
'django.contrib.messages',
|
|
||||||
'django.contrib.staticfiles',
|
|
||||||
'django.contrib.sites',
|
|
||||||
'easy_thumbnails',
|
|
||||||
'mptt',
|
|
||||||
'parler',
|
|
||||||
'taggit',
|
|
||||||
'taggit_autosuggest',
|
|
||||||
'django_select2',
|
|
||||||
'meta',
|
|
||||||
'meta_mixin',
|
|
||||||
# 'admin_enhancer',
|
|
||||||
'djangocms_blog',
|
|
||||||
'bootstrap3',
|
|
||||||
'compressor',
|
|
||||||
'filer',
|
|
||||||
'djangocms_blog',
|
|
||||||
'cms', # django CMS itself
|
|
||||||
'treebeard', # utilities for implementing a tree
|
|
||||||
'sekizai', # for javascript and css management
|
|
||||||
'menus', # helper for model independent hierarchical website navigation
|
|
||||||
'cmsplugin_filer_image',
|
|
||||||
|
|
||||||
#2nd migrate
|
|
||||||
# django-cms plugins
|
|
||||||
'djangocms_file',
|
|
||||||
'djangocms_picture',
|
|
||||||
'djangocms_video',
|
|
||||||
'djangocms_flash',
|
|
||||||
|
|
||||||
'djangocms_googlemap',
|
|
||||||
'djangocms_inherit',
|
|
||||||
'djangocms_link',
|
|
||||||
'djangocms_teaser',
|
|
||||||
'djangocms_page_meta',
|
|
||||||
'djangocms_text_ckeditor',
|
|
||||||
'djangocms_admin_style',
|
|
||||||
'cmsplugin_filer_file',
|
|
||||||
'cmsplugin_filer_folder',
|
|
||||||
'cmsplugin_filer_link',
|
|
||||||
'cmsplugin_filer_teaser',
|
|
||||||
'cmsplugin_filer_video',
|
|
||||||
#
|
|
||||||
#blog
|
|
||||||
# versioning
|
|
||||||
'reversion',
|
|
||||||
# ungleich
|
|
||||||
'ungleich',
|
|
||||||
'hosting',
|
|
||||||
'digitalglarus',
|
|
||||||
'django_extensions',
|
|
||||||
'debug_toolbar'
|
|
||||||
)
|
|
||||||
|
|
||||||
MIDDLEWARE_CLASSES = (
|
|
||||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
|
||||||
'django.middleware.common.CommonMiddleware',
|
|
||||||
'django.middleware.csrf.CsrfViewMiddleware',
|
|
||||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
|
||||||
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
|
|
||||||
'django.contrib.messages.middleware.MessageMiddleware',
|
|
||||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
|
||||||
'django.middleware.locale.LocaleMiddleware',
|
|
||||||
# django-cms middlewares
|
|
||||||
'cms.middleware.user.CurrentUserMiddleware',
|
|
||||||
'cms.middleware.page.CurrentPageMiddleware',
|
|
||||||
'cms.middleware.toolbar.ToolbarMiddleware',
|
|
||||||
'cms.middleware.language.LanguageCookieMiddleware',
|
|
||||||
)
|
|
||||||
|
|
||||||
ROOT_URLCONF = 'dynamicweb.urls'
|
|
||||||
|
|
||||||
TEMPLATES = [
|
|
||||||
{
|
|
||||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
|
||||||
'DIRS': [
|
|
||||||
os.path.join(PROJECT_DIR, 'membership/'), # membership template
|
|
||||||
os.path.join(PROJECT_DIR, 'templates/'),
|
|
||||||
os.path.join(PROJECT_DIR, 'templates/digitalglarus/partials'),
|
|
||||||
os.path.join(PROJECT_DIR, 'templates/cms'),
|
|
||||||
os.path.join(PROJECT_DIR, 'templates/digitalglarus'),
|
|
||||||
],
|
|
||||||
'APP_DIRS': True,
|
|
||||||
'OPTIONS': {
|
|
||||||
'context_processors': [
|
|
||||||
'django.template.context_processors.debug',
|
|
||||||
'django.template.context_processors.request',
|
|
||||||
'django.contrib.auth.context_processors.auth',
|
|
||||||
'django.contrib.messages.context_processors.messages',
|
|
||||||
"django.core.context_processors.media",
|
|
||||||
"django.core.context_processors.static",
|
|
||||||
"django.core.context_processors.tz",
|
|
||||||
"django.contrib.messages.context_processors.messages",
|
|
||||||
'sekizai.context_processors.sekizai',
|
|
||||||
'cms.context_processors.cms_settings',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
WSGI_APPLICATION = 'dynamicweb.wsgi.application'
|
|
||||||
|
|
||||||
TDIR = os.path.join(PROJECT_DIR, 'templates')
|
|
||||||
|
|
||||||
CMS_TEMPLATES_DIR = {
|
|
||||||
1: os.path.join(TDIR, '')
|
|
||||||
}
|
|
||||||
|
|
||||||
DATABASES = {
|
|
||||||
'default': {
|
|
||||||
'ENGINE': 'django.db.backends.postgresql_psycopg2',
|
|
||||||
'NAME': 'app',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Internationalization
|
|
||||||
# https://docs.djangoproject.com/en/1.7/topics/i18n/
|
|
||||||
|
|
||||||
TIME_ZONE = 'UTC'
|
|
||||||
|
|
||||||
USE_I18N = True
|
|
||||||
|
|
||||||
USE_L10N = True
|
|
||||||
|
|
||||||
USE_TZ = True
|
|
||||||
|
|
||||||
LANGUAGES = (
|
|
||||||
('en-us', _('English')),
|
|
||||||
('de', _('Deutsch')),
|
|
||||||
)
|
|
||||||
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
|
||||||
|
|
||||||
CMS_PLACEHOLDER_CONF = {
|
|
||||||
'logo_image': {
|
|
||||||
'name': 'Logo Image',
|
|
||||||
'plugins': ['FilerImagePlugin'],
|
|
||||||
'limits': {
|
|
||||||
'global': 1,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'page-title': {
|
|
||||||
'name': 'Page Title',
|
|
||||||
'plugins': ['TextPlugin'],
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {
|
|
||||||
'body': 'Page Title...'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'limits': {
|
|
||||||
'global': 1,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
'page-subtitle': {
|
|
||||||
'name': 'Page Subtitle',
|
|
||||||
'inherit': 'page-title',
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {
|
|
||||||
'body': 'Page subtitle...'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'footer_copyright': {
|
|
||||||
'name': 'Copyright',
|
|
||||||
'inherit': 'page-title',
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {
|
|
||||||
'body': 'Copyright...'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'content': {
|
|
||||||
'name': _('Content'),
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {'body': '<p></p>'},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
'post_content': {
|
|
||||||
'name': _('Content'),
|
|
||||||
'default_plugins': [
|
|
||||||
{
|
|
||||||
'plugin_type': 'TextPlugin',
|
|
||||||
'values': {'body': '<p></p>'},
|
|
||||||
},
|
|
||||||
]
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
CACHES = {
|
|
||||||
'default': {
|
|
||||||
'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
|
|
||||||
'LOCATION': '127.0.0.1:11211',
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if LOGIN_URL is None:
|
|
||||||
LOGIN_URL = APP_ROOT_ENDPOINT + 'accounts/login/'
|
|
||||||
if LOGOUT_URL is None:
|
|
||||||
LOGOUT_URL = APP_ROOT_ENDPOINT + 'accounts/logout/'
|
|
||||||
if LOGIN_REDIRECT_URL is None:
|
|
||||||
LOGIN_REDIRECT_URL = APP_ROOT_ENDPOINT
|
|
||||||
|
|
||||||
# Static files (CSS, JavaScript, Images)
|
|
||||||
# https://docs.djangoproject.com/en/1.7/howto/static-files/
|
|
||||||
|
|
||||||
STATIC_URL = '/static/'
|
|
||||||
|
|
||||||
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
|
|
||||||
|
|
||||||
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
|
|
||||||
MEDIA_URL = APP_ROOT_ENDPOINT + 'media/'
|
|
||||||
FILE_UPLOAD_PERMISSIONS = 0o644
|
|
||||||
|
|
||||||
META_SITE_PROTOCOL = 'http'
|
|
||||||
META_USE_SITES = True
|
|
||||||
MIGRATION_MODULES = {
|
|
||||||
'cms': 'cms.migrations',
|
|
||||||
# 'filer': 'filer.migrations_django',
|
|
||||||
# 'menus': 'menus.migrations_django',
|
|
||||||
'djangocms_flash': 'djangocms_flash.migrations_django',
|
|
||||||
'djangocms_googlemap': 'djangocms_googlemap.migrations_django',
|
|
||||||
'djangocms_inherit': 'djangocms_inherit.migrations_django',
|
|
||||||
'djangocms_link': 'djangocms_link.migrations_django',
|
|
||||||
'djangocms_teaser': 'djangocms_teaser.migrations_django',
|
|
||||||
'djangocms_column': 'djangocms_column.migrations_django',
|
|
||||||
'djangocms_flash': 'djangocms_flash.migrations_django',
|
|
||||||
'djangocms_googlemap': 'djangocms_googlemap.migrations_django',
|
|
||||||
'djangocms_inherit': 'djangocms_inherit.migrations_django',
|
|
||||||
'djangocms_style': 'djangocms_style.migrations_django',
|
|
||||||
'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django',
|
|
||||||
'cmsplugin_filer_file': 'cmsplugin_filer_file.migrations_django',
|
|
||||||
'cmsplugin_filer_folder': 'cmsplugin_filer_folder.migrations_django',
|
|
||||||
'cmsplugin_filer_link': 'cmsplugin_filer_link.migrations_django',
|
|
||||||
'cmsplugin_filer_teaser': 'cmsplugin_filer_teaser.migrations_django',
|
|
||||||
'cmsplugin_filer_utils': 'cmsplugin_filer_utils.migrations_django',
|
|
||||||
'cmsplugin_filer_video': 'cmsplugin_filer_video.migrations_django',
|
|
||||||
'djangocms_text_ckeditor': 'djangocms_text_ckeditor.migrations',
|
|
||||||
}
|
|
||||||
|
|
||||||
STATICFILES_FINDERS = (
|
|
||||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
|
||||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
|
||||||
'compressor.finders.CompressorFinder',
|
|
||||||
)
|
|
||||||
|
|
||||||
#COMPRESS_PRECOMPILERS = (
|
|
||||||
# ('text/less', 'lesscpy {infile}'),
|
|
||||||
#)
|
|
||||||
|
|
||||||
THUMBNAIL_PROCESSORS = (
|
|
||||||
'easy_thumbnails.processors.colorspace',
|
|
||||||
'easy_thumbnails.processors.autocrop',
|
|
||||||
'filer.thumbnail_processors.scale_and_crop_with_subject_location',
|
|
||||||
'easy_thumbnails.processors.filters',
|
|
||||||
)
|
|
||||||
|
|
||||||
# django-cms-text-ckeditor
|
|
||||||
TEXT_SAVE_IMAGE_FUNCTION = (
|
|
||||||
'cmsplugin_filer_image.integrations.ckeditor.create_image_plugin'
|
|
||||||
)
|
|
||||||
TEXT_ADDITIONAL_TAGS = ('iframe',)
|
|
||||||
TEXT_ADDITIONAL_ATTRIBUTES = ('scrolling', 'allowfullscreen', 'frameborder')
|
|
||||||
USE_X_FORWARDED_HOST = True
|
|
||||||
|
|
||||||
# Django Bootstrap - Settings
|
|
||||||
# Added Configuration for bootstrap static files to load over https.
|
|
||||||
BOOTSTRAP3 = {
|
|
||||||
|
|
||||||
# The URL to the jQuery JavaScript file
|
|
||||||
'jquery_url': '//code.jquery.com/jquery.min.js',
|
|
||||||
|
|
||||||
# The Bootstrap base URL
|
|
||||||
'base_url': '//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/',
|
|
||||||
|
|
||||||
# The complete URL to the Bootstrap CSS file
|
|
||||||
# (None means derive it from base_url)
|
|
||||||
'css_url': None,
|
|
||||||
|
|
||||||
# The complete URL to the Bootstrap CSS file (None means no theme)
|
|
||||||
'theme_url': None,
|
|
||||||
|
|
||||||
# The complete URL to the Bootstrap JavaScript file
|
|
||||||
# (None means derive it from base_url)
|
|
||||||
'javascript_url': None,
|
|
||||||
|
|
||||||
# Put JavaScript in the HEAD section of the HTML document
|
|
||||||
# (only relevant if you use bootstrap3.html)
|
|
||||||
'javascript_in_head': False,
|
|
||||||
|
|
||||||
# Include jQuery with Bootstrap JavaScript
|
|
||||||
# (affects django-bootstrap3 template tags)
|
|
||||||
'include_jquery': False,
|
|
||||||
|
|
||||||
# Label class to use in horizontal forms
|
|
||||||
'horizontal_label_class': 'col-md-3',
|
|
||||||
|
|
||||||
# Field class to use in horizontal forms
|
|
||||||
'horizontal_field_class': 'col-md-9',
|
|
||||||
|
|
||||||
# Set HTML required attribute on required fields
|
|
||||||
'set_required': True,
|
|
||||||
|
|
||||||
# Set HTML disabled attribute on disabled fields
|
|
||||||
'set_disabled': False,
|
|
||||||
|
|
||||||
# Set placeholder attributes to label if no placeholder is provided
|
|
||||||
'set_placeholder': True,
|
|
||||||
|
|
||||||
# Class to indicate required (better to set this in your Django form)
|
|
||||||
'required_css_class': '',
|
|
||||||
|
|
||||||
# Class to indicate error (better to set this in your Django form)
|
|
||||||
'error_css_class': 'has-error',
|
|
||||||
|
|
||||||
# Class to indicate success, meaning the field has valid input
|
|
||||||
# (better to set this in your Django form)
|
|
||||||
'success_css_class': 'has-success',
|
|
||||||
|
|
||||||
# Renderers (only set these if you have studied the source and understand
|
|
||||||
# the inner workings)
|
|
||||||
'formset_renderers': {
|
|
||||||
'default': 'bootstrap3.renderers.FormsetRenderer',
|
|
||||||
},
|
|
||||||
'form_renderers': {
|
|
||||||
'default': 'bootstrap3.renderers.FormRenderer',
|
|
||||||
},
|
|
||||||
'field_renderers': {
|
|
||||||
'default': 'bootstrap3.renderers.FieldRenderer',
|
|
||||||
'inline': 'bootstrap3.renderers.InlineFieldRenderer',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
# djangocms_blog config
|
|
||||||
|
|
||||||
BLOG_ENABLE_COMMENTS = False
|
|
||||||
BLOG_USE_PLACEHOLDER = True
|
|
||||||
BLOG_IMAGE_THUMBNAIL_SIZE = {'size': '120x120', 'crop': True, 'upscale': False}
|
|
||||||
BLOG_IMAGE_FULL_SIZE = {'size': '640x120', 'crop': True, 'upscale': False}
|
|
||||||
BLOG_PAGINATION = 4
|
|
||||||
BLOG_LATEST_POSTS = BLOG_PAGINATION
|
|
||||||
BLOG_POSTS_LIST_TRUNCWORDS_COUNT = 100
|
|
||||||
BLOG_MULTISITE = True
|
|
||||||
BLOG_AUTHOR_DEFAULT = True
|
|
||||||
|
|
||||||
# django-meta
|
|
||||||
META_SITE_PROTOCOL = "https"
|
|
||||||
META_SITE_DOMAIN = "ungleich.ch"
|
|
||||||
META_SITE_TYPE = "website"
|
|
||||||
META_SITE_NAME = "ungleich"
|
|
||||||
META_INCLUDE_KEYWORDS = ["ungleich", "hosting", "switzerland",
|
|
||||||
"Schweiz", "Swiss", "cdist"]
|
|
||||||
META_USE_SITES = True
|
|
||||||
|
|
||||||
PARLER_LANGUAGES = {1: ({'code': 'en-us'}, {'code': 'de'},)}
|
|
||||||
AUTH_USER_MODEL = 'membership.CustomUser'
|
|
||||||
|
|
||||||
|
|
||||||
# PAYMENT
|
|
||||||
|
|
||||||
STRIPE_API_PUBLIC_KEY = 'pk_test_uvWyHNJgVL2IB8kjfgJkGjg4' # used in frontend to call from user browser
|
|
||||||
STRIPE_API_PRIVATE_KEY = 'sk_test_uIPMdgXoRGydrcD7fkwcn7dj' # used in backend payment
|
|
||||||
STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services"
|
|
||||||
|
|
||||||
# EMAIL MESSAGES
|
|
||||||
REGISTRATION_MESSAGE = {'subject': "Validation mail",
|
|
||||||
'message': 'Please validate Your account under this link http://localhost:8000/en-us/validate/{}',
|
|
||||||
'from': 'test@test.com'}
|
|
||||||
|
|
||||||
|
|
||||||
#dont migrate test
|
|
||||||
# SOUTH_TESTS_MIGRATE = False
|
|
||||||
|
|
||||||
STRIPE_API_PUBLIC_KEY = 'pk_test_uvWyHNJgVL2IB8kjfgJkGjg4' # used in frontend to call from user browser
|
|
||||||
STRIPE_API_PRIVATE_KEY = 'sk_test_uIPMdgXoRGydrcD7fkwcn7dj' # used in backend payment
|
|
||||||
STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services"
|
|
|
@ -1,12 +1,8 @@
|
||||||
from .base import *
|
from .base import *
|
||||||
|
|
||||||
ADMINS = (
|
# List of people that get admin messages
|
||||||
('Nico Schottelius', 'nico.schottelius@ungleich.ch'),
|
ADMINS = ( (x, x + "@ungleich.ch") for x in ["web-team"] )
|
||||||
('Raul Ascencio', 'raul.ascencio@yandex.com'),
|
|
||||||
('Web team', 'web-team@ungleich.ch')
|
|
||||||
|
|
||||||
)
|
|
||||||
# ('Sanghee Kim', 'sanghee.kim@ungleich.ch'),
|
|
||||||
DEBUG=False
|
DEBUG=False
|
||||||
|
|
||||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
|
|
|
@ -4,6 +4,7 @@ from django import forms
|
||||||
from membership.models import CustomUser
|
from membership.models import CustomUser
|
||||||
from django.contrib.auth import authenticate
|
from django.contrib.auth import authenticate
|
||||||
|
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from utils.stripe_utils import StripeUtils
|
from utils.stripe_utils import StripeUtils
|
||||||
|
|
||||||
|
@ -57,21 +58,19 @@ class HostingUserSignupForm(forms.ModelForm):
|
||||||
|
|
||||||
|
|
||||||
class UserHostingKeyForm(forms.ModelForm):
|
class UserHostingKeyForm(forms.ModelForm):
|
||||||
private_key = forms.CharField(widget=forms.PasswordInput(), required=False)
|
private_key = forms.CharField(widget=forms.HiddenInput(), required=False)
|
||||||
public_key = forms.CharField(widget=forms.PasswordInput(), required=False)
|
public_key = forms.CharField(widget=forms.Textarea(), required=False,
|
||||||
user = forms.models.ModelChoiceField(queryset=CustomUser.objects.all(), required=False)
|
help_text=_('Paste here your public key'))
|
||||||
name = forms.CharField(required=False)
|
user = forms.models.ModelChoiceField(queryset=CustomUser.objects.all(),
|
||||||
|
required=False, widget=forms.HiddenInput())
|
||||||
|
name = forms.CharField(required=True)
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.request = kwargs.pop("request")
|
self.request = kwargs.pop("request")
|
||||||
super(UserHostingKeyForm, self).__init__(*args, **kwargs)
|
super(UserHostingKeyForm, self).__init__(*args, **kwargs)
|
||||||
# self.initial['user'].initial = self.request.user.id
|
|
||||||
# print(self.fields)
|
|
||||||
|
|
||||||
def clean_name(self):
|
def clean_name(self):
|
||||||
return "dcl-priv-key-%s" % (
|
return self.data.get('name')
|
||||||
''.join(random.choice(string.ascii_lowercase) for i in range(7))
|
|
||||||
)
|
|
||||||
|
|
||||||
def clean_user(self):
|
def clean_user(self):
|
||||||
return self.request.user
|
return self.request.user
|
||||||
|
@ -90,4 +89,4 @@ class UserHostingKeyForm(forms.ModelForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UserHostingKey
|
model = UserHostingKey
|
||||||
fields = ['user', 'public_key', 'name']
|
fields = ['user', 'name', 'public_key']
|
||||||
|
|
|
@ -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: 2016-07-17 11:34-0500\n"
|
"POT-Creation-Date: 2017-06-01 21:03+0000\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,342 +18,515 @@ 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"
|
||||||
|
|
||||||
#: templates/emails/password_reset_email.html:2
|
#: hosting/forms.py:63
|
||||||
#: templates/emails/password_reset_email.txt:2
|
msgid "Paste here your public key"
|
||||||
|
msgstr "Fügen Sie Ihren public key ein"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:68
|
||||||
|
#: hosting/templates/hosting/base_short.html:139
|
||||||
|
msgid "My Virtual Machines"
|
||||||
|
msgstr "Meine virtuellen Maschinen"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:73
|
||||||
|
#: hosting/templates/hosting/base_short.html:145
|
||||||
|
#: hosting/templates/hosting/orders.html:12
|
||||||
|
msgid "My Orders"
|
||||||
|
msgstr "Meine Bestellungen"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:78
|
||||||
|
#: hosting/templates/hosting/base_short.html:152
|
||||||
|
msgid "Keys"
|
||||||
|
msgstr "Schlüssel"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:83
|
||||||
|
#: hosting/templates/hosting/base_short.html:158
|
||||||
|
msgid "Notifications "
|
||||||
|
msgstr "Benachrichtigungen"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:90
|
||||||
|
msgid "Logout"
|
||||||
|
msgstr "Abmeleden"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:95
|
||||||
|
msgid "How it works"
|
||||||
|
msgstr "Wie es funktioniert"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:98
|
||||||
|
msgid "Your infrastructure"
|
||||||
|
msgstr "Ihre Infrastruktur"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:101
|
||||||
|
msgid "Our inftrastructure"
|
||||||
|
msgstr "Unsere Infrastruktur"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:104
|
||||||
|
msgid "Pricing"
|
||||||
|
msgstr "Preise"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:107
|
||||||
|
msgid "Contact"
|
||||||
|
msgstr "Kontakt"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:110
|
||||||
|
#: hosting/templates/hosting/login.html:32
|
||||||
|
#: hosting/templates/hosting/login.html:41
|
||||||
|
#: hosting/templates/hosting/reset_password.html:31
|
||||||
|
#: hosting/templates/hosting/signup.html:30
|
||||||
|
msgid "Login"
|
||||||
|
msgstr "Anmelden"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/base_short.html:134
|
||||||
|
msgid "Home"
|
||||||
|
msgstr "Home"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:11
|
||||||
|
#: hosting/templates/hosting/order_detail.html:10
|
||||||
|
msgid "Invoice"
|
||||||
|
msgstr "Rechnung"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:11
|
||||||
|
#: hosting/templates/hosting/order_detail.html:10
|
||||||
|
msgid "Order #"
|
||||||
|
msgstr "Rechnung #"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:25
|
||||||
|
msgid "ungleich GmbH"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:26
|
||||||
|
msgid "buchhaltung@ungleich.ch"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:27
|
||||||
|
msgid "Hauptstrasse 14"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:28
|
||||||
|
msgid "CH-8775 Luchsingen"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:29
|
||||||
|
msgid "Mwst-Nummer: CHE-109.549.333 MWST"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:60
|
||||||
|
msgid "Total:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:68
|
||||||
|
#, python-format
|
||||||
|
msgid "Alles Preise in CHF mit 8%% Mehrwertsteuer."
|
||||||
|
msgstr "All prices in CHF including 8%% VAT"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:69
|
||||||
|
msgid "Betrag zahlbar innerhalb von 30 Tagen ab Rechnungseingang."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:70
|
||||||
|
msgid "Kontoverbindung:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:73
|
||||||
|
msgid "IBAN:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:76
|
||||||
|
msgid "BIC:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:81
|
||||||
|
msgid "CH02 0900 0000 6071 8848 8"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bill_detail.html:84
|
||||||
|
msgid "POFICHBEXXX"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bills.html:12
|
||||||
|
msgid "Customers"
|
||||||
|
msgstr "Kunden"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bills.html:16
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:42
|
||||||
|
msgid "Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bills.html:17
|
||||||
|
msgid "Email"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bills.html:28
|
||||||
|
msgid "View Bill"
|
||||||
|
msgstr "Rechnung anzeigen"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bills.html:41
|
||||||
|
#: hosting/templates/hosting/orders.html:83
|
||||||
|
#: hosting/templates/hosting/virtual_machines.html:70
|
||||||
|
msgid "previous"
|
||||||
|
msgstr "vorherige"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/bills.html:47
|
||||||
|
#: hosting/templates/hosting/orders.html:89
|
||||||
|
#: hosting/templates/hosting/virtual_machines.html:76
|
||||||
|
msgid "next"
|
||||||
|
msgstr "nächste"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/confirm_reset_password.html:19
|
||||||
|
msgid "Set your new password"
|
||||||
|
msgstr "Setzen Ihr neues Passwort"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/confirm_reset_password.html:28
|
||||||
|
#: hosting/templates/hosting/reset_password.html:22
|
||||||
|
msgid "Reset"
|
||||||
|
msgstr "Zurücksetzen"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/confirm_reset_password.html:32
|
||||||
|
#: hosting/templates/hosting/reset_password.html:28
|
||||||
|
#: hosting/templates/hosting/signup.html:27
|
||||||
|
msgid "Already have an account ?"
|
||||||
|
msgstr "Besitzen sie bereits ein Bentzerkonto"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/confirm_reset_password.html:32
|
||||||
|
msgid "Log in"
|
||||||
|
msgstr "Anmelden"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/create_virtual_machine.html:19
|
||||||
|
msgid "New Virtual Machine"
|
||||||
|
msgstr "Neue virtuelle Maschine"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/create_virtual_machine.html:24
|
||||||
|
msgid "Select VM Template:"
|
||||||
|
msgstr "Wählen Sie eine Vorlage"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/create_virtual_machine.html:32
|
||||||
|
msgid "Select VM Configuration:"
|
||||||
|
msgstr "Wählen Sie eine Konfiguration"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/create_virtual_machine.html:39
|
||||||
|
msgid "CHF/Month"
|
||||||
|
msgstr "CHF/Monat"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/create_virtual_machine.html:45
|
||||||
|
msgid "Start VM"
|
||||||
|
msgstr "Start VM"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/emails/password_reset_email.html:2
|
||||||
|
#: hosting/templates/hosting/emails/password_reset_email.txt:2
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"You're receiving this email because you requested a password reset for your "
|
"You're receiving this email because you requested a password reset for your "
|
||||||
"user account at %(site_name)s."
|
"user account at %(site_name)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/emails/password_reset_email.html:4
|
#: hosting/templates/hosting/emails/password_reset_email.html:4
|
||||||
#: templates/emails/password_reset_email.txt:4
|
#: hosting/templates/hosting/emails/password_reset_email.txt:4
|
||||||
msgid "Please go to the following page and choose a new password:"
|
msgid "Please go to the following page and choose a new password:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/emails/password_reset_email.html:9
|
#: hosting/templates/hosting/emails/password_reset_email.html:9
|
||||||
#: templates/emails/password_reset_email.txt:9
|
#: hosting/templates/hosting/emails/password_reset_email.txt:9
|
||||||
msgid "Thanks for using our site!"
|
msgid "Thanks for using our site!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/emails/password_reset_email.html:11
|
#: hosting/templates/hosting/emails/password_reset_email.html:11
|
||||||
#: templates/emails/password_reset_email.txt:11
|
#: hosting/templates/hosting/emails/password_reset_email.txt:11
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The %(site_name)s team"
|
msgid "The %(site_name)s team"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:67
|
#: hosting/templates/hosting/login.html:10
|
||||||
msgid "My Virtual Machines"
|
#: hosting/templates/hosting/reset_password.html:10
|
||||||
msgstr ""
|
#: hosting/templates/hosting/signup.html:9
|
||||||
|
msgid "Your VM hosted in Switzerland"
|
||||||
|
msgstr "Ihre VM gehostet in der Schweiz"
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:72 templates/hosting/orders.html.py:12
|
#: hosting/templates/hosting/login.html:26
|
||||||
msgid "My Orders"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:77
|
|
||||||
msgid "Notifications "
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:84
|
|
||||||
msgid "Logout"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:89 templates/hosting/base_short.html:131
|
|
||||||
msgid "How it works"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:92 templates/hosting/base_short.html:134
|
|
||||||
msgid "Your infrastructure"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:95 templates/hosting/base_short.html:137
|
|
||||||
msgid "Our inftrastructure"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:98 templates/hosting/base_short.html:140
|
|
||||||
msgid "Pricing"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:101 templates/hosting/base_short.html:144
|
|
||||||
msgid "Contact"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:104 templates/hosting/login.html.py:29
|
|
||||||
#: templates/hosting/login.html:38 templates/hosting/reset_password.html:24
|
|
||||||
#: templates/hosting/signup.html:24
|
|
||||||
msgid "Login"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/base_short.html:127
|
|
||||||
msgid "Home"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/confirm_reset_password.html:19
|
|
||||||
msgid "Set your new password"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/confirm_reset_password.html:28
|
|
||||||
#: templates/hosting/reset_password.html:20
|
|
||||||
msgid "Reset"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/confirm_reset_password.html:32
|
|
||||||
#: templates/hosting/reset_password.html:24 templates/hosting/signup.html:24
|
|
||||||
msgid "Already have an account ?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/confirm_reset_password.html:32
|
|
||||||
msgid "Log in"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/login.html:22
|
|
||||||
msgid "You haven been logged out"
|
msgid "You haven been logged out"
|
||||||
msgstr ""
|
msgstr "Sie wurden abgmeldet"
|
||||||
|
|
||||||
#: templates/hosting/login.html:42
|
#: hosting/templates/hosting/login.html:49
|
||||||
msgid "Don't have an account yet ? "
|
msgid "Don't have an account yet ? "
|
||||||
msgstr ""
|
msgstr "Besitzen Sie kein Benutzerkonto?"
|
||||||
|
|
||||||
#: templates/hosting/login.html:42 templates/hosting/signup.html.py:11
|
#: hosting/templates/hosting/login.html:52
|
||||||
#: templates/hosting/signup.html:20
|
#: hosting/templates/hosting/signup.html:13
|
||||||
|
#: hosting/templates/hosting/signup.html:21
|
||||||
msgid "Sign up"
|
msgid "Sign up"
|
||||||
msgstr ""
|
msgstr "Registrieren"
|
||||||
|
|
||||||
#: templates/hosting/login.html:44
|
#: hosting/templates/hosting/login.html:54
|
||||||
msgid "Forgot your password ? "
|
msgid "Forgot your password ? "
|
||||||
msgstr ""
|
msgstr "Passwort vergessen?"
|
||||||
|
|
||||||
#: templates/hosting/notifications.html:9
|
#: hosting/templates/hosting/notifications.html:9
|
||||||
msgid "Notifications"
|
msgid "Notifications"
|
||||||
msgstr ""
|
msgstr "Benachrichtigungen"
|
||||||
|
|
||||||
#: templates/hosting/notifications.html:16
|
#: hosting/templates/hosting/notifications.html:16
|
||||||
msgid "Unread"
|
msgid "Unread"
|
||||||
msgstr ""
|
msgstr "Ungelesen"
|
||||||
|
|
||||||
#: templates/hosting/notifications.html:26
|
#: hosting/templates/hosting/notifications.html:26
|
||||||
msgid "All"
|
msgid "All"
|
||||||
msgstr ""
|
msgstr "Alle"
|
||||||
|
|
||||||
#: templates/hosting/notifications.html:38
|
#: hosting/templates/hosting/notifications.html:38
|
||||||
msgid "Unread notifications"
|
msgid "Unread notifications"
|
||||||
msgstr ""
|
msgstr "Ungelesene Benachrichtigungen"
|
||||||
|
|
||||||
#: templates/hosting/notifications.html:48
|
#: hosting/templates/hosting/notifications.html:48
|
||||||
msgid "Mark as read"
|
msgid "Mark as read"
|
||||||
msgstr ""
|
msgstr "Als gelesen markieren"
|
||||||
|
|
||||||
#: templates/hosting/notifications.html:59
|
#: hosting/templates/hosting/notifications.html:59
|
||||||
msgid "All notifications"
|
msgid "All notifications"
|
||||||
msgstr ""
|
msgstr "Alle Benachrichtigungen"
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:10
|
#: hosting/templates/hosting/order_detail.html:16
|
||||||
msgid "Invoice"
|
#: hosting/templates/hosting/order_detail.html:24
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:10
|
|
||||||
msgid "Order #"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:16
|
|
||||||
#: templates/hosting/order_detail.html:24
|
|
||||||
msgid "Billed To:"
|
msgid "Billed To:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:26
|
#: hosting/templates/hosting/order_detail.html:26
|
||||||
msgid "Status:"
|
msgid "Status:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:38
|
#: hosting/templates/hosting/order_detail.html:38
|
||||||
msgid "Payment Method:"
|
msgid "Payment Method:"
|
||||||
msgstr ""
|
msgstr "Bezahlmethode"
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:49
|
#: hosting/templates/hosting/order_detail.html:49
|
||||||
msgid "Order summary"
|
msgid "Order summary"
|
||||||
msgstr ""
|
msgstr "Bestellungsübersicht"
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:52
|
#: hosting/templates/hosting/order_detail.html:52
|
||||||
msgid "Type"
|
#: hosting/templates/hosting/payment.html:17
|
||||||
msgstr ""
|
#: hosting/templates/hosting/virtual_machine_detail.html:75
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:54
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:96
|
|
||||||
msgid "Configuration"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:56
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:75
|
|
||||||
msgid "Cores"
|
msgid "Cores"
|
||||||
msgstr ""
|
msgstr "Prozessorkerne"
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:58
|
#: hosting/templates/hosting/order_detail.html:54
|
||||||
#: templates/hosting/virtual_machine_detail.html:81
|
#: hosting/templates/hosting/payment.html:20
|
||||||
|
#: hosting/templates/hosting/virtual_machine_detail.html:81
|
||||||
msgid "Memory"
|
msgid "Memory"
|
||||||
msgstr ""
|
msgstr "Arbeitsspeicher"
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:60
|
#: hosting/templates/hosting/order_detail.html:56
|
||||||
|
#: hosting/templates/hosting/payment.html:23
|
||||||
msgid "Disk space"
|
msgid "Disk space"
|
||||||
msgstr ""
|
msgstr "Festplattenkapazität"
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:62
|
#: hosting/templates/hosting/order_detail.html:58
|
||||||
msgid "Total"
|
msgid "Total"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/hosting/order_detail.html:68
|
#: hosting/templates/hosting/order_detail.html:64
|
||||||
msgid "Finish Configuration"
|
msgid "Finish Configuration"
|
||||||
msgstr ""
|
msgstr "Konfiguration beenden"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:17
|
#: hosting/templates/hosting/orders.html:17
|
||||||
#: templates/hosting/virtual_machine_detail.html:121
|
|
||||||
msgid "Date"
|
msgid "Date"
|
||||||
msgstr ""
|
msgstr "Datum"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:18
|
#: hosting/templates/hosting/orders.html:18
|
||||||
#: templates/hosting/virtual_machine_detail.html:122
|
|
||||||
#: templates/hosting/virtual_machines.html:15
|
|
||||||
msgid "Amount"
|
msgid "Amount"
|
||||||
msgstr ""
|
msgstr "Betrag"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:19
|
#: hosting/templates/hosting/orders.html:19
|
||||||
#: templates/hosting/virtual_machine_detail.html:36
|
#: hosting/templates/hosting/virtual_machine_detail.html:30
|
||||||
#: templates/hosting/virtual_machine_detail.html:123
|
#: hosting/templates/hosting/virtual_machine_key.html:44
|
||||||
#: templates/hosting/virtual_machines.html:16
|
#: hosting/templates/hosting/virtual_machines.html:31
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/hosting/orders.html:30
|
#: hosting/templates/hosting/orders.html:30
|
||||||
#: templates/hosting/virtual_machine_detail.html:134
|
|
||||||
msgid "Approved"
|
msgid "Approved"
|
||||||
msgstr ""
|
msgstr "Akzeptiert"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:32
|
#: hosting/templates/hosting/orders.html:32
|
||||||
#: templates/hosting/virtual_machine_detail.html:136
|
|
||||||
msgid "Declined"
|
msgid "Declined"
|
||||||
msgstr ""
|
msgstr "Abgelehnt"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:37
|
#: hosting/templates/hosting/orders.html:37
|
||||||
#: templates/hosting/virtual_machine_detail.html:140
|
#: hosting/templates/hosting/virtual_machines.html:58
|
||||||
#: templates/hosting/virtual_machines.html:38
|
|
||||||
msgid "View Detail"
|
msgid "View Detail"
|
||||||
msgstr ""
|
msgstr "Details anzeigen"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:41
|
#: hosting/templates/hosting/orders.html:41
|
||||||
msgid "Cancel Order"
|
msgid "Cancel Order"
|
||||||
msgstr ""
|
msgstr "Bestellung stornieren"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:56
|
#: hosting/templates/hosting/orders.html:56
|
||||||
msgid "Do You want do delete your order?"
|
msgid "Do You want do delete your order?"
|
||||||
msgstr ""
|
msgstr "Wollen Sie ihre Bestellung löschen?"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:64
|
#: hosting/templates/hosting/orders.html:64
|
||||||
msgid "Close"
|
msgid "Close"
|
||||||
msgstr ""
|
msgstr "Schliessen"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:66
|
#: hosting/templates/hosting/orders.html:66
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Löschen"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:83 templates/hosting/virtual_machines.html:49
|
#: hosting/templates/hosting/payment.html:12
|
||||||
msgid "previous"
|
msgid "Billing Amount"
|
||||||
msgstr ""
|
msgstr "Rechnungsbetrag"
|
||||||
|
|
||||||
#: templates/hosting/orders.html:89 templates/hosting/virtual_machines.html:55
|
#: hosting/templates/hosting/payment.html:35
|
||||||
msgid "next"
|
msgid "Billing Address"
|
||||||
msgstr ""
|
msgstr "Rechnungsadresse"
|
||||||
|
|
||||||
#: templates/hosting/reset_password.html:11
|
#: hosting/templates/hosting/payment.html:49
|
||||||
|
msgid "Payment Details"
|
||||||
|
msgstr "Rechnungsdetails"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/payment.html:61
|
||||||
|
#: hosting/templates/hosting/payment.html:103
|
||||||
|
msgid "Submit Payment"
|
||||||
|
msgstr "Betrag überweisen"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/payment.html:70
|
||||||
|
msgid "CARD NUMBER"
|
||||||
|
msgstr "Kreditkartennummer"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/payment.html:75
|
||||||
|
msgid "Valid Card Number"
|
||||||
|
msgstr "Gültige Kreditkartennummer"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/payment.html:84
|
||||||
|
msgid "EXPIRATION DATE"
|
||||||
|
msgstr "Ablaufdatum"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/payment.html:95
|
||||||
|
msgid "CV CODE"
|
||||||
|
msgstr "CV Code"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/reset_password.html:14
|
||||||
msgid "Reset your password"
|
msgid "Reset your password"
|
||||||
msgstr ""
|
msgstr "Passwort zurücksetzen"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:19
|
#: hosting/templates/hosting/virtual_machine_detail.html:19
|
||||||
msgid "Settings"
|
msgid "Settings"
|
||||||
msgstr ""
|
msgstr "Einstellungen"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:25
|
#: hosting/templates/hosting/virtual_machine_detail.html:25
|
||||||
msgid "Billing"
|
msgid "Billing"
|
||||||
msgstr ""
|
msgstr "Abrechnungen"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:31
|
#: hosting/templates/hosting/virtual_machine_detail.html:60
|
||||||
msgid "Orders"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:60
|
|
||||||
msgid "Ip not assigned yet"
|
msgid "Ip not assigned yet"
|
||||||
msgstr ""
|
msgstr "Ip nicht zugewiesen"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:87
|
#: hosting/templates/hosting/virtual_machine_detail.html:87
|
||||||
msgid "Disk"
|
msgid "Disk"
|
||||||
msgstr ""
|
msgstr "Festplatte"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:106
|
#: hosting/templates/hosting/virtual_machine_detail.html:96
|
||||||
|
msgid "Configuration"
|
||||||
|
msgstr "Konfiguration"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machine_detail.html:106
|
||||||
msgid "Current pricing"
|
msgid "Current pricing"
|
||||||
msgstr ""
|
msgstr "Aktueller Preis"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:152
|
#: hosting/templates/hosting/virtual_machine_detail.html:115
|
||||||
msgid "Current status"
|
msgid "Current status"
|
||||||
msgstr ""
|
msgstr "Aktueller Status"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:172
|
#: hosting/templates/hosting/virtual_machine_detail.html:140
|
||||||
msgid "Cancel Virtual Machine"
|
msgid "Terminate Virtual Machine"
|
||||||
msgstr ""
|
msgstr "Virtuelle Maschine beenden"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:181
|
#: hosting/templates/hosting/virtual_machine_detail.html:161
|
||||||
msgid "Cancel your Virtual Machine"
|
msgid "Terminate your Virtual Machine"
|
||||||
msgstr ""
|
msgstr "Ihre virtuelle Maschine beenden"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:184
|
#: hosting/templates/hosting/virtual_machine_detail.html:164
|
||||||
msgid "Are you sure do you want to cancel your Virtual Machine "
|
msgid "Are you sure do you want to cancel your Virtual Machine "
|
||||||
msgstr ""
|
msgstr "Sind Sie sicher, dass Sie ihre virtuelle Maschine beenden wollen "
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:184
|
#: hosting/templates/hosting/virtual_machine_detail.html:167
|
||||||
msgid "plan?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_detail.html:187
|
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr "Beenden"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_key.html:10
|
#: hosting/templates/hosting/virtual_machine_key.html:11
|
||||||
msgid "SSH Private Key"
|
msgid "Access Key"
|
||||||
msgstr ""
|
msgstr "Zugriffsschlüssel"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_key.html:15
|
#: hosting/templates/hosting/virtual_machine_key.html:25
|
||||||
#: templates/hosting/virtual_machine_key.html:29
|
msgid "Upload your own key. "
|
||||||
msgid "Warning!"
|
msgstr "Laden Sie ihren Schlüssel hoch"
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_key.html:15
|
#: hosting/templates/hosting/virtual_machine_key.html:29
|
||||||
|
msgid "Upload Key"
|
||||||
|
msgstr "Schlüssel hochladen"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:33
|
||||||
|
msgid "Or generate a new key pair."
|
||||||
|
msgstr "Oder erstellen Sie ein neues Schlüsselpaar"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:31
|
||||||
|
msgid "Generate Key Pair"
|
||||||
|
msgstr "Schlüsselpaar generieren"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:40
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can view your SSH private key once. Copy it or if it wasn't downloaded "
|
"Use your created key to access to the machine. If you lost it, contact us."
|
||||||
"automatically, just click on Download to start it."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Verwenden Sie Ihren privaten SSH Schlüssel um sich mit Ihren Maschinen zu "
|
||||||
|
"verbinden. Falls Sie ihn verloren haben kontaktieren Sie uns."
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_key.html:24
|
#: hosting/templates/hosting/virtual_machine_key.html:43
|
||||||
|
msgid "Created at"
|
||||||
|
msgstr "Erstellt am"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:66
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:79
|
||||||
|
msgid "Warning!"
|
||||||
|
msgstr "Achtung!"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:66
|
||||||
|
msgid "You can download your SSH private key once. Don't lost your key"
|
||||||
|
msgstr ""
|
||||||
|
"Sie können ihren privaten SSH Schlüssel nur einmal herunterladen. Bewaren "
|
||||||
|
"Sie ihn sicher auf."
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machine_key.html:74
|
||||||
msgid "Copy to Clipboard"
|
msgid "Copy to Clipboard"
|
||||||
msgstr ""
|
msgstr "Kopieren"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_key.html:25
|
#: hosting/templates/hosting/virtual_machine_key.html:75
|
||||||
msgid "Download"
|
msgid "Download"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_key.html:29
|
#: hosting/templates/hosting/virtual_machine_key.html:79
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your SSH private key was already generated and downloaded, if you lost it, "
|
"Your SSH private key was already generated and downloaded, if you lost it, "
|
||||||
"contact us. "
|
"contact us. "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Ihr privater SSH Schlüssel wurde bereits generiert und heruntergeladen, "
|
||||||
|
"falls Sie ihn verloren haben kontaktieren Sie uns."
|
||||||
|
|
||||||
#: templates/hosting/virtual_machine_key.html:32
|
#: hosting/templates/hosting/virtual_machine_key.html:82
|
||||||
msgid "Go to my Virtual Machine Dashboard"
|
msgid "Generate my key"
|
||||||
msgstr ""
|
msgstr "Generiere meinen Schlüssel"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machines.html:9
|
#: hosting/templates/hosting/virtual_machines.html:9
|
||||||
msgid "Virtual Machines"
|
msgid "Virtual Machines"
|
||||||
msgstr ""
|
msgstr "Virtuelle Maschinen"
|
||||||
|
|
||||||
#: templates/hosting/virtual_machines.html:13
|
#: hosting/templates/hosting/virtual_machines.html:22
|
||||||
|
msgid "Create VM"
|
||||||
|
msgstr "Neue VM"
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machines.html:28
|
||||||
msgid "ID"
|
msgid "ID"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/hosting/virtual_machines.html:14
|
#: hosting/templates/hosting/virtual_machines.html:29
|
||||||
msgid "Location"
|
msgid "Ipv4"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: hosting/templates/hosting/virtual_machines.html:30
|
||||||
|
msgid "Ipv6"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
.dashboard-container {
|
.dashboard-container {
|
||||||
padding-top:5%; padding-bottom: 11%;
|
padding-top:70px; padding-bottom: 11%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.borderless td {
|
.borderless td {
|
||||||
|
|
|
@ -82,24 +82,25 @@ h6 {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #f8f8f8;
|
color: #f8f8f8;
|
||||||
position: relative;
|
position: relative;
|
||||||
padding-bottom: 25%;
|
|
||||||
padding-top: 10%;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.intro-login {
|
.intro-login {
|
||||||
background: url(../img/login-bg.jpg) no-repeat center center;
|
background: url(../img/intro-bg.jpg) no-repeat center center;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.intro-signup {
|
.intro-signup {
|
||||||
background: url(../img/signup-bg.png) no-repeat center center;
|
background: url(../img/intro-bg.jpg) no-repeat center center;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.intro-reset-password {
|
.intro-reset-password {
|
||||||
background: url(../img/signup-bg.png) no-repeat center center;
|
background: url(../img/intro-bg.jpg) no-repeat center center;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
@ -193,6 +194,128 @@ h6 {
|
||||||
float: right;
|
float: right;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
}
|
}
|
||||||
|
/*------Auth section---------*/
|
||||||
|
.auth-container{
|
||||||
|
height: 100vh;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.auth-bg{
|
||||||
|
background: url(../img/auth-bg.jpg);
|
||||||
|
position: fixed;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100vh;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center center;
|
||||||
|
background-size: cover;
|
||||||
|
background-attachment: fixed;
|
||||||
|
|
||||||
|
}
|
||||||
|
.auth-bg::before{
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: rgba(75, 75, 101, 0.55);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
.auth-container .container{
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
.auth-container .auth-content{
|
||||||
|
width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 390px;
|
||||||
|
margin-top: 60px;
|
||||||
|
|
||||||
|
}
|
||||||
|
.auth-container .auth-title{
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
.auth-container .auth-title h2{
|
||||||
|
color: #fff;
|
||||||
|
font-family: 'Montserrat-Bold';
|
||||||
|
font-size: 44px;
|
||||||
|
text-align: center;
|
||||||
|
width: 425px;
|
||||||
|
margin: 0 auto;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.auth-container .auth-title h2::after{
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: -20px;
|
||||||
|
background: #fff;
|
||||||
|
height: 7px;
|
||||||
|
width: 70px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translate(-50%, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-box{
|
||||||
|
background: #fff;
|
||||||
|
padding: 0;
|
||||||
|
padding-bottom: 30px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);
|
||||||
|
border-radius: 4px;
|
||||||
|
z-index: 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-box .section-heading{
|
||||||
|
color: #5a5a5a;
|
||||||
|
padding-top: 20px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
text-align: center;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 3px;
|
||||||
|
font-size: 20px;
|
||||||
|
border-radius: 3px 3px 0px 0px;
|
||||||
|
margin: 0 auto;
|
||||||
|
font-family: 'Montserrat-Medium';
|
||||||
|
}
|
||||||
|
.auth-box .form{
|
||||||
|
padding: 20px;
|
||||||
|
width: 80%;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
.auth-box .form .red{
|
||||||
|
color: #ea3a3a;
|
||||||
|
}
|
||||||
|
.auth-box .form .btn{
|
||||||
|
box-shadow: 0 0px 9px rgba(0,0,0,0.19), 0 3px 5px rgba(0,0,0,0.23);
|
||||||
|
letter-spacing: 3px;
|
||||||
|
font-size: 17px;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
.auth-box .form .form-control{
|
||||||
|
height: 44px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
.auth-box .auth-footer {
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
.auth-box .auth-footer .text{
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
.auth-box .auth-footer .links a{
|
||||||
|
color: #1e94cc;
|
||||||
|
}
|
||||||
|
.auth-box .auth-footer .links a:hover{
|
||||||
|
color: #1e94cc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.auth-box.sign-up{
|
||||||
|
padding-bottom: 5px;
|
||||||
|
}
|
||||||
|
.auth-box.sign-up .form{
|
||||||
|
padding: 15px 20px 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 1199px) {
|
@media (max-width: 1199px) {
|
||||||
ul.banner-social-buttons {
|
ul.banner-social-buttons {
|
||||||
|
@ -218,7 +341,17 @@ h6 {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@media (max-width: 540px) {
|
||||||
|
.auth-container .auth-title h2{
|
||||||
|
font-size: 32px;
|
||||||
|
width: 90%;
|
||||||
|
margin-bottom: 50px;
|
||||||
|
}
|
||||||
|
.auth-box .form {
|
||||||
|
padding: 15px;
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
}
|
||||||
footer {
|
footer {
|
||||||
padding: 2%;
|
padding: 2%;
|
||||||
background-color: #f8f8f8;
|
background-color: #f8f8f8;
|
||||||
|
@ -251,3 +384,4 @@ a.unlink {
|
||||||
a.unlink:hover {
|
a.unlink:hover {
|
||||||
color: inherit;
|
color: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.order-detail-container {padding-top:5%; padding-bottom: 11%;}
|
.order-detail-container {padding-top: 70px; padding-bottom: 11%;}
|
||||||
|
|
||||||
.order-detail-container .invoice-title h2, .invoice-title h3 {
|
.order-detail-container .invoice-title h2, .invoice-title h3 {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
.orders-container {padding-top:5%; padding-bottom: 11%;}
|
.orders-container {padding-top:70px; padding-bottom: 11%;}
|
||||||
|
|
||||||
.orders-container .table > tbody > tr > td {
|
.orders-container .table > tbody > tr > td {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
.payment-container {padding-top:5%; padding-bottom: 11%;}
|
.payment-container {padding-top:70px; padding-bottom: 11%;}
|
||||||
.creditcard-box .panel-title {display: inline;font-weight: bold; font-size:17px;}
|
.creditcard-box .panel-title {display: inline;font-weight: bold; font-size:17px;}
|
||||||
.creditcard-box .checkbox.pull-right { margin: 0; }
|
.creditcard-box .checkbox.pull-right { margin: 0; }
|
||||||
.creditcard-box .pl-ziro { padding-left: 0px; }
|
.creditcard-box .pl-ziro { padding-left: 0px; }
|
||||||
|
|
BIN
hosting/static/hosting/img/auth-bg.jpg
Normal file
After Width: | Height: | Size: 685 KiB |
|
@ -1,5 +1,8 @@
|
||||||
$( document ).ready(function() {
|
$( document ).ready(function() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
$.ajaxSetup({
|
$.ajaxSetup({
|
||||||
beforeSend: function(xhr, settings) {
|
beforeSend: function(xhr, settings) {
|
||||||
function getCookie(name) {
|
function getCookie(name) {
|
||||||
|
@ -26,6 +29,12 @@ $( document ).ready(function() {
|
||||||
|
|
||||||
|
|
||||||
var hasCreditcard = window.hasCreditcard || false;
|
var hasCreditcard = window.hasCreditcard || false;
|
||||||
|
if (!hasCreditcard){
|
||||||
|
var stripe = Stripe(window.stripeKey);
|
||||||
|
var elements = stripe.elements({locale: window.current_lan});
|
||||||
|
var card = elements.create('card', options={hidePostalCode: true});
|
||||||
|
card.mount('#card-element');
|
||||||
|
}
|
||||||
console.log("has creditcard", hasCreditcard);
|
console.log("has creditcard", hasCreditcard);
|
||||||
// hasCreditcard= true;
|
// hasCreditcard= true;
|
||||||
|
|
||||||
|
@ -38,10 +47,8 @@ $( document ).ready(function() {
|
||||||
console.log("creditcard sdasd");
|
console.log("creditcard sdasd");
|
||||||
// if (hasCreditcard) {
|
// if (hasCreditcard) {
|
||||||
$('#billing-form').submit();
|
$('#billing-form').submit();
|
||||||
console.log("has creditcard2");
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// $form.submit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,33 +60,55 @@ $( document ).ready(function() {
|
||||||
function payWithStripe(e) {
|
function payWithStripe(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
/* Visual feedback */
|
function stripeTokenHandler(token) {
|
||||||
$form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
|
// Insert the token ID into the form so it gets submitted to the server
|
||||||
|
var form = document.getElementById('payment-form');
|
||||||
|
var hiddenInput = document.createElement('input');
|
||||||
|
$('#id_token').val(token.id);
|
||||||
|
|
||||||
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();
|
$('#billing-form').submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
stripe.createToken(card).then(function(result) {
|
||||||
|
if (result.error) {
|
||||||
|
// Inform the user if there was an error
|
||||||
|
var errorElement = document.getElementById('card-errors');
|
||||||
|
errorElement.textContent = result.error.message;
|
||||||
|
} else {
|
||||||
|
$form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
|
||||||
|
// Send the token to your server
|
||||||
|
stripeTokenHandler(result.token);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// /* Visual feedback */
|
||||||
|
// $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
|
||||||
|
|
||||||
|
// var PublishableKey = window.stripeKey;
|
||||||
|
// Stripe.setPublishableKey(PublishableKey);
|
||||||
|
// Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
|
||||||
|
// if (response.error) {
|
||||||
|
// /* Visual feedback */
|
||||||
|
// $form.find('[type=submit]').html('Try again');
|
||||||
|
// /* Show Stripe errors on the form */
|
||||||
|
// $form.find('.payment-errors').text(response.error.message);
|
||||||
|
// $form.find('.payment-errors').closest('.row').show();
|
||||||
|
// } else {
|
||||||
|
// /* Visual feedback */
|
||||||
|
// $form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
|
||||||
|
// /* Hide Stripe errors on the form */
|
||||||
|
// $form.find('.payment-errors').closest('.row').hide();
|
||||||
|
// $form.find('.payment-errors').text("");
|
||||||
|
// // response contains id and card, which contains additional card details
|
||||||
|
// var token = response.id;
|
||||||
|
// // AJAX
|
||||||
|
|
||||||
|
// //set token on a hidden input
|
||||||
|
// $('#id_token').val(token);
|
||||||
|
// $('#billing-form').submit();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Form validation */
|
/* Form validation */
|
||||||
|
@ -131,7 +160,7 @@ $( document ).ready(function() {
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// $form.find('[type=submit]').prop('disabled', true);
|
// $form.find('[type=submit]').prop('disabled', true);
|
||||||
// var readyInterval = setInterval(function() {
|
// var readyInterval = setInterval(function() {
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
|
|
||||||
|
|
||||||
<!-- Navigation -->
|
<!-- Navigation -->
|
||||||
|
{% if request.user.is_authenticated %}
|
||||||
<nav class="navbar navbar-default navbar-fixed-top topnav" role="navigation">
|
<nav class="navbar navbar-default navbar-fixed-top topnav" role="navigation">
|
||||||
<div class="container topnav">
|
<div class="container topnav">
|
||||||
<!-- Brand and toggle get grouped for better mobile display -->
|
<!-- Brand and toggle get grouped for better mobile display -->
|
||||||
|
@ -61,7 +62,7 @@
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
|
||||||
|
|
||||||
{% if request.user.is_authenticated %}
|
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'hosting:virtual_machines' %}">
|
<a href="{% url 'hosting:virtual_machines' %}">
|
||||||
<i class="fa fa-server" aria-hidden="true"></i> {% trans "My Virtual Machines"%}
|
<i class="fa fa-server" aria-hidden="true"></i> {% trans "My Virtual Machines"%}
|
||||||
|
@ -84,13 +85,13 @@
|
||||||
<ul id="g-account-menu" class="dropdown-menu" role="menu">
|
<ul id="g-account-menu" class="dropdown-menu" role="menu">
|
||||||
<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>
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'hosting:key_pair' %}">
|
<a href="{% url 'hosting:ssh_keys' %}">
|
||||||
<i class="fa fa-key"></i> {% trans "Keys"%}
|
<i class="fa fa-key"></i> {% trans "Keys"%}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% else %}
|
<!--
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ request.session.hosting_url}}#how">{% trans "How it works"%}</a>
|
<a href="{{ request.session.hosting_url}}#how">{% trans "How it works"%}</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -108,8 +109,7 @@
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'hosting:login' %}?next={{request.current_path}}">{% trans "Login"%}</a>
|
<a href="{% url 'hosting:login' %}?next={{request.current_path}}">{% trans "Login"%}</a>
|
||||||
</li>
|
</li> -->
|
||||||
{% endif %}
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<!-- /.navbar-collapse -->
|
<!-- /.navbar-collapse -->
|
||||||
|
@ -117,6 +117,7 @@
|
||||||
<!-- /.container -->
|
<!-- /.container -->
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<!-- Header -->
|
<!-- Header -->
|
||||||
<a name="about"></a>
|
<a name="about"></a>
|
||||||
|
@ -124,6 +125,7 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
<!-- Footer -->
|
<!-- Footer -->
|
||||||
|
{% if request.user.is_authenticated %}
|
||||||
<footer class="navbar-fixed-bottom">
|
<footer class="navbar-fixed-bottom">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@ -134,20 +136,28 @@
|
||||||
</li>
|
</li>
|
||||||
<li class="footer-menu-divider">⋅</li>
|
<li class="footer-menu-divider">⋅</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ request.session.hosting_url}}#how">{% trans "How it works"%}</a>
|
<a href="{% url 'hosting:virtual_machines' %}">
|
||||||
<li class="footer-menu-divider">⋅</li>
|
{% trans "My Virtual Machines"%}
|
||||||
<li>
|
</a>
|
||||||
<a href="{{ request.session.hosting_url }}#your">{% trans "Your infrastructure"%}</a></li>
|
|
||||||
<li>⋅</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ request.session.hosting_url }}#our">{% trans "Our inftrastructure"%}</a></li>
|
|
||||||
<li class="footer-menu-divider">⋅</li>
|
|
||||||
<li>
|
|
||||||
<a href="{{ request.session.hosting_url }}#services">{% trans "Pricing"%}</a>
|
|
||||||
</li>
|
</li>
|
||||||
<li class="footer-menu-divider">⋅</li>
|
<li class="footer-menu-divider">⋅</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ request.session.hosting_url }}#contact">{% trans "Contact"%}</a>
|
<a href="{% url 'hosting:orders' %}">
|
||||||
|
{% trans "My Orders"%}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li>⋅</li>
|
||||||
|
<li>
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'hosting:ssh_keys' %}">
|
||||||
|
{% trans "Keys"%}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="footer-menu-divider">⋅</li>
|
||||||
|
<li>
|
||||||
|
<a href="{% url 'hosting:notifications' %}">
|
||||||
|
{% trans "Notifications "%}
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -156,7 +166,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
|
{% endif %}
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="{% static 'hosting/js/jquery.js' %}"></script>
|
<script src="{% static 'hosting/js/jquery.js' %}"></script>
|
||||||
<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.validation/1.13.1/jquery.validate.min.js"></script>
|
<script type="text/javascript" src="//cdn.jsdelivr.net/jquery.validation/1.13.1/jquery.validate.min.js"></script>
|
||||||
|
@ -174,8 +184,9 @@
|
||||||
<!-- Init JavaScript -->
|
<!-- Init JavaScript -->
|
||||||
<script src="{% static 'hosting/js/initial.js' %}"></script>
|
<script src="{% static 'hosting/js/initial.js' %}"></script>
|
||||||
|
|
||||||
|
<script src="https://js.stripe.com/v3/"></script>
|
||||||
|
<script src="https://js.stripe.com/v2/"></script>
|
||||||
<!-- Stripe Lib -->
|
<!-- Stripe Lib -->
|
||||||
<script type="text/javascript" src="//js.stripe.com/v2/"></script>
|
|
||||||
|
|
||||||
<!-- Proccess payment lib -->
|
<!-- Proccess payment lib -->
|
||||||
<script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script>
|
<script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<form method="POST" action="">
|
<form method="POST" action="">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
Select VM Template:
|
{% trans "Select VM Template:" %}
|
||||||
<select name="vm_template_id">
|
<select name="vm_template_id">
|
||||||
{% for template in templates %}
|
{% for template in templates %}
|
||||||
<option value="{{template.id}}">{{template.name}} </option>
|
<option value="{{template.id}}">{{template.name}} </option>
|
||||||
|
@ -29,14 +29,14 @@
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
Select VM Configuration:
|
{% trans "Select VM Configuration:" %}
|
||||||
<select name="configuration">
|
<select name="configuration">
|
||||||
{% for config in configuration_options %}
|
{% for config in configuration_options %}
|
||||||
<option value="{{config.id}}">
|
<option value="{{config.id}}">
|
||||||
CORE: {{config.cpu|floatformat}},
|
CORE: {{config.cpu|floatformat}},
|
||||||
RAM: {{config.memory|floatformat}} GiB,
|
RAM: {{config.memory|floatformat}} GB,
|
||||||
SSD: {{config.disk_size|floatformat}} GiB,
|
SSD: {{config.disk_size|floatformat}} GB,
|
||||||
PRICE: {{config.price|floatformat}} CHF/Month
|
PRICE: {{config.price|floatformat}} {% trans "CHF/Month" %}
|
||||||
</option>
|
</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|
|
@ -3,12 +3,16 @@
|
||||||
{% load staticfiles bootstrap3%}
|
{% load staticfiles bootstrap3%}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
<div class="intro-auth intro-login">
|
<div class="auth-container">
|
||||||
|
<div class="auth-bg"></div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="col-md-4 col-md-offset-4">
|
<div class="auth-title">
|
||||||
|
<h2>{% trans "Your VM hosted in Switzerland"%}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="auth-content">
|
||||||
|
|
||||||
{% if messages %}
|
{% if messages %}
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled" style="color: #fff">
|
||||||
{% for message in messages %}
|
{% for message in messages %}
|
||||||
<li>{{ message }}</li>
|
<li>{{ message }}</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -24,30 +28,32 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
<div class="intro-message auth-box">
|
||||||
<div class="intro-message">
|
|
||||||
<h2 class="section-heading">{% trans "Login"%}</h2>
|
<h2 class="section-heading">{% trans "Login"%}</h2>
|
||||||
<form action="{% url 'hosting:login' %}" method="post" class="form" novalidated>
|
<form action="{% url 'hosting:login' %}" method="post" class="form" novalidated>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% for field in form %}
|
{% for field in form %}
|
||||||
{% bootstrap_field field show_label=False type='fields'%}
|
{% bootstrap_field field show_label=False type='fields'%}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<p>{{form.non_field_errors|striptags}}</p>
|
<p class="red">{{form.non_field_errors|striptags}}</p>
|
||||||
{% buttons %}
|
{% buttons %}
|
||||||
<button type="submit" class="btn btn-default">
|
<button type="submit" class="btn btn-block btn-success">
|
||||||
{% trans "Login"%}
|
{% trans "Login"%}
|
||||||
</button>
|
</button>
|
||||||
{% endbuttons %}
|
{% endbuttons %}
|
||||||
|
|
||||||
<input type='hidden' name='next' value='{{request.GET.next}}'/>
|
<input type='hidden' name='next' value='{{request.GET.next}}'/>
|
||||||
</form>
|
</form>
|
||||||
<span>{% trans "Don't have an account yet ? "%}<a class="unlink" href="{% url 'hosting:signup' %}">{% trans "Sign up"%}</a></span>
|
<div class="auth-footer">
|
||||||
<br/>
|
<div class="text">
|
||||||
<span> <a class="unlink" href="{% url 'hosting:reset_password' %}">{% trans "Forgot your password ? "%}</a></span>
|
<span>{% trans "Don't have an account yet ? "%}</span>
|
||||||
|
</div>
|
||||||
<ul class="list-inline intro-social-buttons">
|
<div class="links">
|
||||||
|
<a class="unlink" href="{% url 'hosting:signup' %}">{% trans "Sign up"%}</a>
|
||||||
</ul>
|
<span class="text"> or </span>
|
||||||
|
<a class="unlink" href="{% url 'hosting:reset_password' %}">{% trans "Forgot your password ? "%}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want do delete your order?"%}</h4>
|
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want to delete your order?"%}</h4>
|
||||||
|
|
||||||
<form method="post"
|
<form method="post"
|
||||||
action="{% url 'hosting:delete_order' order.id %}">
|
action="{% url 'hosting:delete_order' order.id %}">
|
||||||
|
|
|
@ -9,18 +9,18 @@
|
||||||
<form role="form" novalidate>
|
<form role="form" novalidate>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-12">
|
||||||
<h3><b>Billing Amount</b></h3>
|
<h3><b>{%trans "Billing Amount" %}</b></h3>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<!-- <p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.location_code}}</span></p> -->
|
<!-- <p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.location_code}}</span></p> -->
|
||||||
<!-- <hr> -->
|
<!-- <hr> -->
|
||||||
<p><b>Cores</b> <span
|
<p><b>{%trans "Cores"%}</b> <span
|
||||||
class="pull-right">{{request.session.specs.cpu|floatformat}}</span></p>
|
class="pull-right">{{request.session.specs.cpu|floatformat}}</span></p>
|
||||||
<hr>
|
<hr>
|
||||||
<p><b>Memory</b> <span
|
<p><b>{%trans "Memory"%}</b> <span
|
||||||
class="pull-right">{{request.session.specs.memory|floatformat}} GiB</span></p>
|
class="pull-right">{{request.session.specs.memory|floatformat}} GiB</span></p>
|
||||||
<hr>
|
<hr>
|
||||||
<p><b>Disk space</b> <span
|
<p><b>{%trans "Disk space"%}</b> <span
|
||||||
class="pull-right">{{request.session.specs.disk_size|floatformat}} GiB</span></p>
|
class="pull-right">{{request.session.specs.disk_size|floatformat}} GiB</span></p>
|
||||||
<hr>
|
<hr>
|
||||||
<h4>Total<p
|
<h4>Total<p
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-12 col-md-4 billing">
|
<div class="col-xs-12 col-md-4 billing">
|
||||||
<h3><b>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>
|
||||||
{% for field in form %}
|
{% for field in form %}
|
||||||
|
@ -46,7 +46,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12 col-md-offset-2 col-md-4 "></div>
|
<div class="col-xs-12 col-md-offset-2 col-md-4 "></div>
|
||||||
<div class="col-xs-12 col-md-4 creditcard-box">
|
<div class="col-xs-12 col-md-4 creditcard-box">
|
||||||
<h3><b>Payment Details</b></h3>
|
<h3><b>{%trans "Payment Details"%}</b></h3>
|
||||||
<hr>
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
<div>
|
<div>
|
||||||
|
@ -57,17 +57,33 @@
|
||||||
<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>
|
||||||
<button id="payment_button_with_creditcard" class="btn btn-success btn-lg btn-block" type="submit">Submit Payment</button>
|
<div class="col-xs-6">
|
||||||
|
<button id="payment_button_with_creditcard" class="btn btn-success btn-sm btn-block" type="submit">
|
||||||
|
{% trans "Submit Payment" %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
|
||||||
<form role="form" id="payment-form" novalidate>
|
<form role="form" id="payment-form" novalidate>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
<div class="form-group">
|
||||||
|
<div id="card-element">
|
||||||
|
<!-- a Stripe Element will be inserted here. -->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="card-errors" role="alert"></div>
|
||||||
|
|
||||||
|
<!-- <div class="row">
|
||||||
<div class="col-xs-9 col-md-12">
|
<div class="col-xs-9 col-md-12">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label class="control-label" for="cardNumber">CARD NUMBER</label>
|
<label class="control-label" for="cardNumber">{%trans "CARD NUMBER"%}</label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="text" class="form-control" name="cardNumber" placeholder="Valid Card Number" required autofocus data-stripe="number" />
|
<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>
|
<span class="input-group-addon"><i class="fa fa-credit-card"></i></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -76,7 +92,7 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-6 col-md-7">
|
<div class="col-xs-6 col-md-7">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="expMonth">EXPIRATION DATE</label><br/>
|
<label for="expMonth">{%trans "EXPIRATION DATE"%}</label><br/>
|
||||||
<div class="col-xs-6 col-lg-6 col-md-6 pl-ziro">
|
<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" />
|
<input type="text" class="form-control" name="expMonth" placeholder="MM" required data-stripe="exp_month" />
|
||||||
</div>
|
</div>
|
||||||
|
@ -87,14 +103,14 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-4 col-md-5 pull-right">
|
<div class="col-xs-4 col-md-5 pull-right">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="cvCode">CV CODE</label>
|
<label for="cvCode">{%trans "CV CODE"%}</label>
|
||||||
<input type="password" class="form-control" name="cvCode" placeholder="CV" required data-stripe="cvc" />
|
<input type="password" class="form-control" name="cvCode" placeholder="CV" required data-stripe="cvc" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> -->
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-12">
|
<div class="col-xs-6 float-right">
|
||||||
<button class="btn btn-success btn-lg btn-block" type="submit">Submit Payment</button>
|
<button class="btn btn-success btn-sm btn-block" type="submit">Submit Payment</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row" style="display:none;">
|
<div class="row" style="display:none;">
|
||||||
|
@ -115,6 +131,7 @@
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -125,8 +142,14 @@
|
||||||
|
|
||||||
<!-- stripe key data -->
|
<!-- stripe key data -->
|
||||||
{% if stripe_key %}
|
{% if stripe_key %}
|
||||||
|
{% get_current_language as LANGUAGE_CODE %}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
(function () {window.stripeKey = "{{stripe_key}}";})();
|
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
window.stripeKey = "{{stripe_key}}";
|
||||||
|
window.current_lan = "{{LANGUAGE_CODE}}";
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
{%endif%}
|
{%endif%}
|
||||||
|
|
||||||
|
|
|
@ -3,27 +3,34 @@
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="intro-auth intro-reset-password">
|
<div class="auth-container">
|
||||||
|
<div class="auth-bg"></div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="col-md-4"> </div>
|
<div class="auth-title">
|
||||||
<div class="col-md-4">
|
<h2>{% trans "Your VM hosted in Switzerland"%}</h2>
|
||||||
<div class="intro-message">
|
</div>
|
||||||
|
<div class="auth-content">
|
||||||
|
<div class="intro-message auth-box sign-up">
|
||||||
<h2 class="section-heading">{% trans "Reset your password"%}</h2>
|
<h2 class="section-heading">{% trans "Reset your password"%}</h2>
|
||||||
|
|
||||||
<form action="{% url 'hosting:reset_password' %}" method="post" class="form" novalidate>
|
<form action="{% url 'hosting:reset_password' %}" method="post" class="form" novalidate>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% for field in form %}
|
{% for field in form %}
|
||||||
{% bootstrap_field field show_label=False %}
|
{% bootstrap_field field show_label=False %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% buttons %}
|
{% buttons %}
|
||||||
<button type="submit" class="btn btn-default">
|
<button type="submit" class="btn btn-block btn-success">
|
||||||
{% trans "Reset"%}
|
{% trans "Reset"%}
|
||||||
</button>
|
</button>
|
||||||
{% endbuttons %}
|
{% endbuttons %}
|
||||||
</form>
|
</form>
|
||||||
<span>{% trans "Already have an account ?"%} <a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login"%} </a></span>
|
<div class="auth-footer">
|
||||||
<ul class="list-inline intro-social-buttons">
|
<div class="text">
|
||||||
</ul>
|
<span>{% trans "Already have an account ?"%}</span>
|
||||||
|
</div>
|
||||||
|
<div class="links">
|
||||||
|
<a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login"%}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,27 +2,34 @@
|
||||||
{% load staticfiles bootstrap3 i18n %}
|
{% load staticfiles bootstrap3 i18n %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<div class="intro-auth intro-signup">
|
<div class="auth-container">
|
||||||
|
<div class="auth-bg"></div>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="col-md-4 col-sm-4 col-xs-4"> </div>
|
<div class="auth-title">
|
||||||
<div class="col-md-4 col-sm-6 col-xs-6">
|
<h2>{% trans "Your VM hosted in Switzerland"%}</h2>
|
||||||
<div class="intro-message">
|
</div>
|
||||||
|
<div class="auth-content">
|
||||||
|
<div class="intro-message auth-box sign-up">
|
||||||
<h2 class="section-heading">{% trans "Sign up"%}</h2>
|
<h2 class="section-heading">{% trans "Sign up"%}</h2>
|
||||||
|
|
||||||
<form action="{% url 'hosting:signup' %}" method="post" class="form" novalidate>
|
<form action="{% url 'hosting:signup' %}" method="post" class="form" novalidate>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% for field in form %}
|
{% for field in form %}
|
||||||
{% bootstrap_field field show_label=False %}
|
{% bootstrap_field field show_label=False %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% buttons %}
|
{% buttons %}
|
||||||
<button type="submit" class="btn btn-default">
|
<button type="submit" class="btn btn-block btn-info">
|
||||||
{% trans "Sign up"%}
|
{% trans "Sign up"%}
|
||||||
</button>
|
</button>
|
||||||
{% endbuttons %}
|
{% endbuttons %}
|
||||||
</form>
|
</form>
|
||||||
<span>{% trans "Already have an account ?"%} <a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login"%}</a></span>
|
<div class="auth-footer">
|
||||||
<ul class="list-inline intro-social-buttons">
|
<div class="text">
|
||||||
</ul>
|
<span>{% trans "Already have an account ?"%}</span>
|
||||||
|
</div>
|
||||||
|
<div class="links">
|
||||||
|
<a class="unlink" href="{% url 'hosting:login' %}">{% trans "Login"%}</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
92
hosting/templates/hosting/user_key.html
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
{% extends "hosting/base_short.html" %}
|
||||||
|
{% load staticfiles bootstrap3 i18n %}
|
||||||
|
{% block content %}
|
||||||
|
<div>
|
||||||
|
<div class="container virtual-machine-container dashboard-container ">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-9 col-md-offset-2">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<form method="POST" action="" novalidate>
|
||||||
|
{% csrf_token %}
|
||||||
|
<h3><i class="fa fa-key" aria-hidden="true"></i>{% trans "Access Key"%} </h3>
|
||||||
|
{% if messages %}
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
{% for message in messages %}
|
||||||
|
<span>{{ message }}</span>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% for field in form %}
|
||||||
|
{% bootstrap_field field %}
|
||||||
|
{% endfor %}
|
||||||
|
{% buttons %}
|
||||||
|
<button type="submit" class="btn btn-success">
|
||||||
|
{% trans "Upload your own key. "%}
|
||||||
|
</button>
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
{% trans "Or generate a new key pair."%} <br />
|
||||||
|
<br />
|
||||||
|
<button class="btn btn-success">{% trans "Generate Key Pair"%} </a>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
{% endbuttons %}
|
||||||
|
</form>
|
||||||
|
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
|
||||||
|
|
||||||
|
{% if private_key %}
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
|
||||||
|
<strong>{% trans "Warning!"%}</strong>{% trans "You can download your SSH private key once. Don't lost your key"%}
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<textarea class="form-control" rows="6" id="ssh_key" type="hidden" style="display:none">{{private_key}}</textarea>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if private_key %}
|
||||||
|
<!-- Force to download ssh key on page load -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
var key = window.document.getElementById('ssh_key');
|
||||||
|
|
||||||
|
var a = window.document.createElement('a');
|
||||||
|
|
||||||
|
a.href = window.URL.createObjectURL(new Blob([key.value], {type: 'text'}));
|
||||||
|
a.download = '{{key_name}}.pem';
|
||||||
|
|
||||||
|
// Append anchor to body.
|
||||||
|
document.body.appendChild(a);
|
||||||
|
a.click();
|
||||||
|
|
||||||
|
// Remove anchor from body
|
||||||
|
document.body.removeChild(a);
|
||||||
|
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{%endif%}
|
||||||
|
|
||||||
|
{% if next_url %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.location.href = '{{next_url}}';
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{%endblock%}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
96
hosting/templates/hosting/user_keys.html
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
{% extends "hosting/base_short.html" %}
|
||||||
|
{% load staticfiles bootstrap3 i18n %}
|
||||||
|
{% block content %}
|
||||||
|
<div>
|
||||||
|
<div class="container virtual-machine-container dashboard-container ">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-9 col-md-offset-2">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<h3><i class="fa fa-key" aria-hidden="true"></i>{% trans "Access Key"%} </h3>
|
||||||
|
{% if messages %}
|
||||||
|
<div class="alert alert-warning">
|
||||||
|
{% for message in messages %}
|
||||||
|
<span>{{ message }}</span>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
<p class="pull-right">
|
||||||
|
<a class="btn btn-success" href="{% url 'hosting:create_ssh_key' %}" >{% trans "Add Key"%} </a>
|
||||||
|
</p>
|
||||||
|
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
|
||||||
|
<table class="table borderless table-hover">
|
||||||
|
<br/>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{% trans "Name"%}</th>
|
||||||
|
<th>{% trans "Created at"%} </th>
|
||||||
|
<th>{% trans "Status"%} </th>
|
||||||
|
<th></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for user_key in keys %}
|
||||||
|
<tr>
|
||||||
|
<td scope="row">{{user_key.name}}</td>
|
||||||
|
<td>{{user_key.created_at}}</td>
|
||||||
|
<td>
|
||||||
|
<span class="h3 label label-success"><strong>Active</strong></span>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<button type="button" class="btn btn-default" data-toggle="modal"
|
||||||
|
data-target="#Modal{{ user_key.id }}"><a
|
||||||
|
href="#">{% trans "Delete Key"%}</a>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="modal fade" id="Modal{{user_key.id }}" tabindex="-1" role="dialog">
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal"
|
||||||
|
aria-label="Confirm"><span
|
||||||
|
aria-hidden="true">×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<h4 class="modal-title" id="ModalLabel">{% trans "Do You want to delete this key?"%}</h4>
|
||||||
|
|
||||||
|
<form method="post" action="{% url 'hosting:delete_ssh_key' user_key.id %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-default"
|
||||||
|
data-dismiss="modal">
|
||||||
|
{% trans "Close"%}
|
||||||
|
</button>
|
||||||
|
<button type="submit" class="btn btn-primary">{% trans "Delete"%}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="clearfix"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if next_url %}
|
||||||
|
<script type="text/javascript">
|
||||||
|
window.location.href = '{{next_url}}';
|
||||||
|
</script>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{%endblock%}
|
||||||
|
|
|
@ -161,7 +161,7 @@
|
||||||
{% trans "Terminate your Virtual Machine"%}
|
{% trans "Terminate your Virtual Machine"%}
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
{% trans "Are you sure do you want to cancel your Virtual Machine "%} {{virtual_machine.name}} {% trans "plan?"%}
|
{% trans "Are you sure do you want to cancel your Virtual Machine "%} {{virtual_machine.name}} ?
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Cancel"%}</button>
|
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Cancel"%}</button>
|
||||||
|
|
|
@ -1,130 +0,0 @@
|
||||||
{% extends "hosting/base_short.html" %}
|
|
||||||
{% load staticfiles bootstrap3 i18n %}
|
|
||||||
{% block content %}
|
|
||||||
<div>
|
|
||||||
<div class="container virtual-machine-container dashboard-container ">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-9 col-md-offset-2">
|
|
||||||
<div class="col-sm-12">
|
|
||||||
<form method="POST" action="" >
|
|
||||||
{% csrf_token %}
|
|
||||||
<h3><i class="fa fa-key" aria-hidden="true"></i>{% trans "Access Key"%} </h3>
|
|
||||||
{% if messages %}
|
|
||||||
<div class="alert alert-warning">
|
|
||||||
{% for message in messages %}
|
|
||||||
<span>{{ message }}</span>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
<hr/>
|
|
||||||
{% if not user_key %}
|
|
||||||
<h3>
|
|
||||||
{% trans "Upload your own key. "%}
|
|
||||||
</h3>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="comment">Paste here your public key</label>
|
|
||||||
<textarea class="form-control" rows="6" name="public_key"></textarea>
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<button class="btn btn-success">{% trans "Upload Key"%} </a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h3>
|
|
||||||
{% trans "Or generate a new key pair."%}
|
|
||||||
|
|
||||||
</h3>
|
|
||||||
<div class="form-group">
|
|
||||||
<button class="btn btn-success">{% trans "Generate Key Pair"%} </a>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<h5> Use your created key to access to the machine. If you lost it, contact us. </h5>
|
|
||||||
<table class="table borderless table-hover">
|
|
||||||
<br/>
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>{% trans "Name"%}</th>
|
|
||||||
<th>{% trans "Created at"%} </th>
|
|
||||||
<th>{% trans "Status"%} </th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td scope="row">{{user_key.name}}</td>
|
|
||||||
<td>{{user_key.created_at}}</td>
|
|
||||||
<td>
|
|
||||||
<span class="h3 label label-success"><strong>Active</strong></span>
|
|
||||||
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
{% endif %}
|
|
||||||
</form>
|
|
||||||
|
|
||||||
{% if private_key %}
|
|
||||||
<div class="alert alert-warning">
|
|
||||||
|
|
||||||
<strong>{% trans "Warning!"%}</strong>{% trans "You can download your SSH private key once. Don't lost your key"%}
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<textarea class="form-control" rows="6" id="ssh_key" type="hidden" style="display:none">{{private_key}}</textarea>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<!-- <div class="form-group pull-right">
|
|
||||||
<button type="button" id="copy_to_clipboard" data-clipboard-target="#ssh_key" class="btn btn-warning"
|
|
||||||
data-toggle="tooltip" data-placement="bottom" title="Copied" data-trigger="click">{% trans "Copy to Clipboard"%}</button>
|
|
||||||
<button type="button" id="download_ssh_key" class="btn btn-warning">{% trans "Download"%}</button>
|
|
||||||
</div> -->
|
|
||||||
{% else %}
|
|
||||||
<!-- <div class="alert alert-warning">
|
|
||||||
<strong>{% trans "Warning!"%}</strong>{% trans "Your SSH private key was already generated and downloaded, if you lost it, contact us. "%}
|
|
||||||
</div>
|
|
||||||
--> {% endif %}
|
|
||||||
<!-- <a class="btn btn-success" href="{% url 'hosting:virtual_machines' %}">{% trans "Generate my key"%} </a> -->
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% if private_key %}
|
|
||||||
<!-- Force to download ssh key on page load -->
|
|
||||||
<script type="text/javascript">
|
|
||||||
|
|
||||||
var key = window.document.getElementById('ssh_key');
|
|
||||||
|
|
||||||
var a = window.document.createElement('a');
|
|
||||||
|
|
||||||
a.href = window.URL.createObjectURL(new Blob([key.value], {type: 'text'}));
|
|
||||||
a.download = '{{key_name}}.pem';
|
|
||||||
|
|
||||||
// Append anchor to body.
|
|
||||||
document.body.appendChild(a);
|
|
||||||
a.click();
|
|
||||||
|
|
||||||
// Remove anchor from body
|
|
||||||
document.body.removeChild(a);
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
|
||||||
{%endif%}
|
|
||||||
|
|
||||||
{% if next_url %}
|
|
||||||
<script type="text/javascript">
|
|
||||||
window.location.href = '{{next_url}}';
|
|
||||||
</script>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{%endblock%}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
|
|
||||||
# Create your tests here.
|
# Create your tests here.
|
||||||
|
|
||||||
|
test_user_can_add_ssh_key()
|
||||||
|
|
||||||
|
test_user_can_delete_ssh_ke()
|
||||||
|
|
|
@ -3,9 +3,10 @@ from django.conf.urls import url
|
||||||
from .views import DjangoHostingView, RailsHostingView, PaymentVMView,\
|
from .views import DjangoHostingView, RailsHostingView, PaymentVMView,\
|
||||||
NodeJSHostingView, LoginView, SignupView, IndexView, \
|
NodeJSHostingView, LoginView, SignupView, IndexView, \
|
||||||
OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\
|
OrdersHostingListView, OrdersHostingDetailView, VirtualMachinesPlanListView,\
|
||||||
VirtualMachineView, GenerateVMSSHKeysView, OrdersHostingDeleteView, NotificationsView, \
|
VirtualMachineView, OrdersHostingDeleteView, NotificationsView, \
|
||||||
MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView, HostingPricingView,\
|
MarkAsReadNotificationView, PasswordResetView, PasswordResetConfirmView, HostingPricingView,\
|
||||||
CreateVirtualMachinesView, HostingBillListView, HostingBillDetailView
|
CreateVirtualMachinesView, HostingBillListView, HostingBillDetailView, \
|
||||||
|
SSHKeyDeleteView, SSHKeyCreateView, SSHKeyListView
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'index/?$', IndexView.as_view(), name='index'),
|
url(r'index/?$', IndexView.as_view(), name='index'),
|
||||||
|
@ -23,10 +24,12 @@ urlpatterns = [
|
||||||
url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'),
|
url(r'my-virtual-machines/?$', VirtualMachinesPlanListView.as_view(), name='virtual_machines'),
|
||||||
url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineView.as_view(),
|
url(r'my-virtual-machines/(?P<pk>\d+)/?$', VirtualMachineView.as_view(),
|
||||||
name='virtual_machines'),
|
name='virtual_machines'),
|
||||||
# url(r'my-virtual-machines/(?P<pk>\d+)/delete/?$', VirtualMachineCancelView.as_view(),
|
url(r'ssh_keys/?$', SSHKeyListView.as_view(),
|
||||||
# name='virtual_machines_cancel'),
|
name='ssh_keys'),
|
||||||
url(r'vm-key-pair/?$', GenerateVMSSHKeysView.as_view(),
|
url(r'delete_ssh_key/(?P<pk>\d+)/?$', SSHKeyDeleteView.as_view(),
|
||||||
name='key_pair'),
|
name='delete_ssh_key'),
|
||||||
|
url(r'create_ssh_key/?$', SSHKeyCreateView.as_view(),
|
||||||
|
name='create_ssh_key'),
|
||||||
url(r'^notifications/$', NotificationsView.as_view(), name='notifications'),
|
url(r'^notifications/$', NotificationsView.as_view(), name='notifications'),
|
||||||
url(r'^notifications/(?P<pk>\d+)/?$', MarkAsReadNotificationView.as_view(),
|
url(r'^notifications/(?P<pk>\d+)/?$', MarkAsReadNotificationView.as_view(),
|
||||||
name='read_notification'),
|
name='read_notification'),
|
||||||
|
|
131
hosting/views.py
|
@ -188,7 +188,7 @@ class SignupView(CreateView):
|
||||||
template_name = 'hosting/signup.html'
|
template_name = 'hosting/signup.html'
|
||||||
form_class = HostingUserSignupForm
|
form_class = HostingUserSignupForm
|
||||||
model = CustomUser
|
model = CustomUser
|
||||||
success_url = reverse_lazy('hosting:key_pair')
|
success_url = reverse_lazy('hosting:ssh_keys')
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
next_url = self.request.session.get(
|
next_url = self.request.session.get(
|
||||||
|
@ -288,35 +288,58 @@ class MarkAsReadNotificationView(LoginRequiredMixin, UpdateView):
|
||||||
return HttpResponseRedirect(reverse('hosting:notifications'))
|
return HttpResponseRedirect(reverse('hosting:notifications'))
|
||||||
|
|
||||||
|
|
||||||
class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
|
class SSHKeyDeleteView(LoginRequiredMixin, DeleteView):
|
||||||
|
login_url = reverse_lazy('hosting:login')
|
||||||
|
success_url = reverse_lazy('hosting:ssh_keys')
|
||||||
|
model = UserHostingKey
|
||||||
|
|
||||||
|
def delete(self, request, *args, **kwargs):
|
||||||
|
owner = self.request.user
|
||||||
|
manager = OpenNebulaManager()
|
||||||
|
pk = self.kwargs.get('pk')
|
||||||
|
# Get user ssh key
|
||||||
|
public_key = UserHostingKey.objects.get(pk=pk)
|
||||||
|
# Add ssh key to user
|
||||||
|
try:
|
||||||
|
manager.remove_public_key(user=owner, public_key=public_key)
|
||||||
|
except ConnectionError:
|
||||||
|
pass
|
||||||
|
except WrongNameError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return super(SSHKeyDeleteView, self).delete(request, *args, **kwargs)
|
||||||
|
|
||||||
|
class SSHKeyListView(LoginRequiredMixin, ListView):
|
||||||
|
template_name = "hosting/user_keys.html"
|
||||||
|
login_url = reverse_lazy('hosting:login')
|
||||||
|
context_object_name = "keys"
|
||||||
|
model = UserHostingKey
|
||||||
|
paginate_by = 10
|
||||||
|
ordering = '-id'
|
||||||
|
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
user = self.request.user
|
||||||
|
self.queryset = UserHostingKey.objects.filter(user=user)
|
||||||
|
return super(SSHKeyListView, self).get_queryset()
|
||||||
|
|
||||||
|
def render_to_response(self, context, **response_kwargs):
|
||||||
|
if not self.queryset:
|
||||||
|
return HttpResponseRedirect(reverse('hosting:create_ssh_key'))
|
||||||
|
return super(SSHKeyListView, self).render_to_response(context, **response_kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class SSHKeyCreateView(LoginRequiredMixin, FormView):
|
||||||
form_class = UserHostingKeyForm
|
form_class = UserHostingKeyForm
|
||||||
model = UserHostingKey
|
model = UserHostingKey
|
||||||
template_name = 'hosting/virtual_machine_key.html'
|
template_name = 'hosting/user_key.html'
|
||||||
login_url = reverse_lazy('hosting:login')
|
login_url = reverse_lazy('hosting:login')
|
||||||
context_object_name = "virtual_machine"
|
context_object_name = "virtual_machine"
|
||||||
|
success_url = reverse_lazy('hosting:ssh_keys')
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
|
||||||
context = super(
|
|
||||||
GenerateVMSSHKeysView,
|
|
||||||
self
|
|
||||||
).get_context_data(**kwargs)
|
|
||||||
|
|
||||||
try:
|
|
||||||
user_key = UserHostingKey.objects.get(
|
|
||||||
user=self.request.user
|
|
||||||
)
|
|
||||||
|
|
||||||
except UserHostingKey.DoesNotExist:
|
|
||||||
user_key = None
|
|
||||||
|
|
||||||
context.update({
|
|
||||||
'user_key': user_key
|
|
||||||
})
|
|
||||||
|
|
||||||
return context
|
|
||||||
|
|
||||||
def get_form_kwargs(self):
|
def get_form_kwargs(self):
|
||||||
kwargs = super(GenerateVMSSHKeysView, self).get_form_kwargs()
|
kwargs = super(SSHKeyCreateView, self).get_form_kwargs()
|
||||||
kwargs.update({'request': self.request})
|
kwargs.update({'request': self.request})
|
||||||
return kwargs
|
return kwargs
|
||||||
|
|
||||||
|
@ -343,32 +366,22 @@ class GenerateVMSSHKeysView(LoginRequiredMixin, FormView):
|
||||||
})
|
})
|
||||||
|
|
||||||
owner = self.request.user
|
owner = self.request.user
|
||||||
# Create OpenNebulaManager
|
manager = OpenNebulaManager()
|
||||||
manager = OpenNebulaManager(email=owner.email,
|
|
||||||
password=owner.password)
|
|
||||||
# Get OpenNebula user id
|
|
||||||
user_pool = manager._get_user_pool()
|
|
||||||
opennebula_user = user_pool.get_by_name(owner.email)
|
|
||||||
|
|
||||||
# Get user ssh key
|
# Get user ssh key
|
||||||
user_key = UserHostingKey.objects.get(user=owner)
|
public_key = form.cleaned_data.get('public_key')
|
||||||
# Add ssh key to user
|
# Add ssh key to user
|
||||||
manager.oneadmin_client.call('user.update', opennebula_user.id,
|
|
||||||
'<CONTEXT><SSH_PUBLIC_KEY>{ssh_key}</SSH_PUBLIC_KEY></CONTEXT>'.format(ssh_key=user_key.public_key))
|
|
||||||
|
|
||||||
return render(self.request, self.template_name, context)
|
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
UserHostingKey.objects.get(
|
manager.add_public_key(user=owner, public_key=public_key, merge=True)
|
||||||
user=self.request.user
|
except ConnectionError:
|
||||||
)
|
pass
|
||||||
return HttpResponseRedirect(reverse('hosting:key_pair'))
|
except WrongNameError:
|
||||||
|
|
||||||
except UserHostingKey.DoesNotExist:
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
return HttpResponseRedirect(self.success_url)
|
||||||
|
|
||||||
|
def post(self, request, *args, **kwargs):
|
||||||
|
print(self.request.POST.dict())
|
||||||
form = self.get_form()
|
form = self.get_form()
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
return self.form_valid(form)
|
return self.form_valid(form)
|
||||||
|
@ -421,16 +434,12 @@ class PaymentVMView(LoginRequiredMixin, FormView):
|
||||||
return context
|
return context
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
try:
|
if not UserHostingKey.objects.filter( user=self.request.user).exists():
|
||||||
UserHostingKey.objects.get(
|
|
||||||
user=self.request.user
|
|
||||||
)
|
|
||||||
except UserHostingKey.DoesNotExist:
|
|
||||||
messages.success(
|
messages.success(
|
||||||
request,
|
request,
|
||||||
'In order to create a VM, you create/upload your SSH KEY first.'
|
'In order to create a VM, you create/upload your SSH KEY first.'
|
||||||
)
|
)
|
||||||
return HttpResponseRedirect(reverse('hosting:key_pair'))
|
return HttpResponseRedirect(reverse('hosting:ssh_keys'))
|
||||||
|
|
||||||
if 'next' in request.session:
|
if 'next' in request.session:
|
||||||
del request.session['next']
|
del request.session['next']
|
||||||
|
@ -487,13 +496,15 @@ class PaymentVMView(LoginRequiredMixin, FormView):
|
||||||
manager = OpenNebulaManager(email=owner.email,
|
manager = OpenNebulaManager(email=owner.email,
|
||||||
password=owner.password)
|
password=owner.password)
|
||||||
# Get user ssh key
|
# Get user ssh key
|
||||||
try:
|
if not UserHostingKey.objects.filter( user=self.request.user).exists():
|
||||||
user_key = UserHostingKey.objects.get(
|
context.update({
|
||||||
user=self.request.user
|
'sshError': 'error',
|
||||||
)
|
'form': form
|
||||||
|
})
|
||||||
except UserHostingKey.DoesNotExist:
|
return render(request, self.template_name, context)
|
||||||
pass
|
# For now just get first one
|
||||||
|
user_key = UserHostingKey.objects.filter(
|
||||||
|
user=self.request.user).first()
|
||||||
|
|
||||||
# Create a vm using logged user
|
# Create a vm using logged user
|
||||||
vm_id = manager.create_vm(
|
vm_id = manager.create_vm(
|
||||||
|
@ -639,16 +650,12 @@ class CreateVirtualMachinesView(LoginRequiredMixin, View):
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
|
|
||||||
try:
|
if not UserHostingKey.objects.filter( user=self.request.user).exists():
|
||||||
UserHostingKey.objects.get(
|
|
||||||
user=self.request.user
|
|
||||||
)
|
|
||||||
except UserHostingKey.DoesNotExist:
|
|
||||||
messages.success(
|
messages.success(
|
||||||
request,
|
request,
|
||||||
'In order to create a VM, you need to create/upload your SSH KEY first.'
|
'In order to create a VM, you need to create/upload your SSH KEY first.'
|
||||||
)
|
)
|
||||||
return HttpResponseRedirect(reverse('hosting:key_pair'))
|
return HttpResponseRedirect(reverse('hosting:ssh_keys'))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
manager = OpenNebulaManager()
|
manager = OpenNebulaManager()
|
||||||
|
|
Before Width: | Height: | Size: 507 KiB |
Before Width: | Height: | Size: 380 KiB |
Before Width: | Height: | Size: 910 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 358 KiB |
Before Width: | Height: | Size: 285 KiB |
Before Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 482 KiB |
Before Width: | Height: | Size: 291 KiB |
Before Width: | Height: | Size: 196 KiB |
Before Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 541 KiB |
Before Width: | Height: | Size: 441 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 190 KiB |
Before Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 283 KiB |
Before Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 3.5 MiB |
Before Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 384 KiB |
Before Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 252 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 303 KiB |
Before Width: | Height: | Size: 195 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 2.8 MiB |
Before Width: | Height: | Size: 447 B |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 328 KiB |
Before Width: | Height: | Size: 980 KiB |
Before Width: | Height: | Size: 503 KiB |
Before Width: | Height: | Size: 942 KiB |
Before Width: | Height: | Size: 1.3 MiB |
Before Width: | Height: | Size: 557 KiB |
Before Width: | Height: | Size: 3.2 MiB |
Before Width: | Height: | Size: 833 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 893 KiB |
Before Width: | Height: | Size: 280 KiB |
Before Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 265 KiB |
Before Width: | Height: | Size: 3.4 MiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 415 KiB |
Before Width: | Height: | Size: 438 KiB |
Before Width: | Height: | Size: 2.1 MiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 824 KiB |
Before Width: | Height: | Size: 2.4 MiB |
|
@ -1,71 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
|
||||||
<svg version="1.0" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
width="250px" height="70px" viewBox="0 0 250 70" enable-background="new 0 0 250 70" xml:space="preserve">
|
|
||||||
<g>
|
|
||||||
<path fill="#010101" d="M72.846,59.448c0-0.947,0.333-1.869,1.003-2.77c0.67-0.899,1.625-1.709,2.866-2.425v-0.201
|
|
||||||
c-0.649-0.356-1.224-0.854-1.717-1.492c-0.486-0.638-0.732-1.463-0.732-2.474c0-0.784,0.254-1.577,0.762-2.379
|
|
||||||
c0.502-0.8,1.216-1.511,2.133-2.13V45.38c-0.853-0.619-1.572-1.446-2.161-2.476c-0.584-1.028-0.878-2.262-0.878-3.697
|
|
||||||
c0-1.341,0.259-2.542,0.782-3.605c0.523-1.062,1.227-1.965,2.11-2.719c0.881-0.752,1.901-1.323,3.062-1.717
|
|
||||||
c1.158-0.391,2.392-0.586,3.7-0.586c1.338,0,2.547,0.195,3.628,0.586h9.849v3.677h-5.979c0.493,0.523,0.932,1.17,1.323,1.935
|
|
||||||
c0.394,0.771,0.589,1.629,0.589,2.576c0,1.309-0.244,2.472-0.734,3.479c-0.49,1.016-1.161,1.871-2.011,2.574
|
|
||||||
c-0.852,0.703-1.846,1.232-2.988,1.59c-1.143,0.359-2.369,0.543-3.677,0.543c-0.586,0-1.216-0.066-1.889-0.198
|
|
||||||
c-0.667-0.127-1.328-0.328-1.983-0.589c-1.112,0.721-1.666,1.552-1.666,2.501c0,0.881,0.409,1.521,1.224,1.912
|
|
||||||
c0.815,0.394,1.993,0.589,3.529,0.589h5.096c3.142,0,5.464,0.452,6.988,1.346c1.518,0.899,2.277,2.383,2.277,4.438
|
|
||||||
c0,1.146-0.32,2.222-0.955,3.234c-0.641,1.014-1.546,1.903-2.723,2.675c-1.175,0.764-2.597,1.37-4.266,1.811
|
|
||||||
c-1.663,0.444-3.527,0.663-5.586,0.663c-3.4,0-6.076-0.548-8.036-1.646C73.827,63.184,72.846,61.57,72.846,59.448z M76.958,58.861
|
|
||||||
c0,1.143,0.63,2.062,1.89,2.768c1.259,0.703,3.08,1.055,5.464,1.055c1.274,0,2.425-0.123,3.456-0.367
|
|
||||||
c1.03-0.244,1.912-0.569,2.647-0.98c0.737-0.409,1.295-0.876,1.691-1.396c0.391-0.521,0.586-1.076,0.586-1.668
|
|
||||||
c0-1.043-0.434-1.736-1.297-2.08c-0.866-0.346-2.166-0.516-3.897-0.516h-4.215c-0.751,0-1.419-0.023-2.006-0.074
|
|
||||||
c-0.591-0.048-1.147-0.153-1.668-0.318c-0.983,0.556-1.666,1.13-2.062,1.716C77.159,57.586,76.958,58.204,76.958,58.861z
|
|
||||||
M83.773,44.4c1.374,0,2.547-0.454,3.532-1.37c0.978-0.917,1.47-2.188,1.47-3.821c0-1.572-0.493-2.829-1.47-3.775
|
|
||||||
c-0.985-0.948-2.158-1.423-3.532-1.423s-2.549,0.475-3.529,1.423c-0.978,0.946-1.47,2.203-1.47,3.775
|
|
||||||
c0,1.633,0.493,2.905,1.47,3.821C81.225,43.946,82.399,44.4,83.773,44.4z"/>
|
|
||||||
</g>
|
|
||||||
<path fill="#010101" d="M36.09,55.784h-4.107l-0.404-4.104h-0.203c-1.219,1.42-2.546,2.559-3.98,3.424
|
|
||||||
c-1.438,0.857-3.101,1.289-4.994,1.289c-2.94,0-5.088-0.851-6.439-2.559c-1.353-1.707-2.027-4.2-2.027-7.479V33.906l-6.562-0.127
|
|
||||||
l11.632-4.478l-0.051,3.382v13.013c0,2.199,0.389,3.812,1.168,4.842c0.777,1.033,2.11,1.549,4.004,1.549
|
|
||||||
c1.285,0,2.458-0.314,3.524-0.941c1.063-0.625,2.207-1.682,3.423-3.166V30.993h5.02L36.09,55.784L36.09,55.784z"/>
|
|
||||||
<path fill="#010101" d="M44.406,30.992h4.106l0.405,4.007h0.2c1.252-1.287,2.604-2.376,4.059-3.271
|
|
||||||
c1.449-0.896,3.144-1.343,5.07-1.343c2.905,0,5.038,0.863,6.389,2.584c1.351,1.722,2.028,4.21,2.028,7.455v15.359h-5.021V41.082
|
|
||||||
c0-2.161-0.387-3.761-1.163-4.789c-0.777-1.033-2.113-1.551-4.007-1.551c-1.32,0-2.501,0.335-3.551,0.99
|
|
||||||
c-1.046,0.66-2.217,1.646-3.499,2.968v17.083h-5.017V30.992L44.406,30.992z"/>
|
|
||||||
<path fill="#010101" d="M122.687,43.416c0-2.029,0.355-3.848,1.064-5.452c0.71-1.604,1.654-2.976,2.841-4.106
|
|
||||||
c1.181-1.132,2.532-1.996,4.058-2.587c1.52-0.591,3.093-0.886,4.71-0.886c1.828,0,3.439,0.287,4.849,0.863
|
|
||||||
c1.397,0.574,2.592,1.374,3.571,2.402c0.982,1.036,1.726,2.268,2.23,3.708c0.507,1.435,0.763,3.014,0.763,4.737
|
|
||||||
c0,0.513-0.026,0.988-0.078,1.445c-0.051,0.46-0.107,0.838-0.178,1.14h-18.66c0.17,2.435,1.074,4.338,2.717,5.706
|
|
||||||
c1.639,1.369,3.705,2.052,6.208,2.052c1.354,0,2.61-0.186,3.778-0.56c1.168-0.368,2.31-0.891,3.42-1.565l1.774,3.191
|
|
||||||
c-1.279,0.812-2.729,1.495-4.332,2.055c-1.606,0.557-3.375,0.834-5.302,0.834c-1.86,0-3.604-0.293-5.243-0.886
|
|
||||||
c-1.644-0.591-3.066-1.44-4.285-2.559c-1.22-1.115-2.175-2.478-2.866-4.083C123.033,47.258,122.687,45.441,122.687,43.416z
|
|
||||||
M142.105,41.237c0-2.234-0.577-3.941-1.725-5.126c-1.15-1.182-2.789-1.771-4.918-1.771c-1.859,0-3.517,0.589-4.97,1.771
|
|
||||||
c-1.455,1.186-2.351,2.892-2.686,5.126H142.105z"/>
|
|
||||||
<path fill="#010101" d="M163.271,30.208l0.015,26.086h-5.02V37.248h-9.415L163.271,30.208z M160.344,25.094
|
|
||||||
c-1.084,0-1.978-0.323-2.688-0.962c-0.707-0.643-1.062-1.506-1.062-2.587s0.354-1.95,1.062-2.61c0.711-0.66,1.604-0.988,2.688-0.988
|
|
||||||
c1.08,0,1.979,0.328,2.688,0.988c0.709,0.66,1.066,1.529,1.066,2.61s-0.357,1.945-1.066,2.587
|
|
||||||
C162.322,24.771,161.424,25.094,160.344,25.094z"/>
|
|
||||||
<path fill="#010101" d="M170.242,43.921c0-2.062,0.373-3.905,1.117-5.524c0.744-1.625,1.76-2.991,3.045-4.111
|
|
||||||
c1.281-1.112,2.761-1.955,4.437-2.532c1.675-0.574,3.455-0.86,5.349-0.86c2.028,0,3.802,0.345,5.324,1.036
|
|
||||||
c1.521,0.693,2.791,1.534,3.804,2.511l-2.434,3.194c-0.981-0.812-1.998-1.444-3.047-1.901c-1.043-0.457-2.179-0.684-3.396-0.684
|
|
||||||
c-1.313,0-2.531,0.211-3.648,0.635c-1.112,0.422-2.071,1.021-2.862,1.799c-0.793,0.778-1.409,1.716-1.853,2.815
|
|
||||||
c-0.438,1.097-0.657,2.31-0.657,3.623c0,1.318,0.211,2.529,0.635,3.628c0.422,1.098,1.028,2.034,1.824,2.812
|
|
||||||
c0.795,0.773,1.732,1.38,2.814,1.801c1.081,0.419,2.279,0.63,3.6,0.63c1.521,0,2.892-0.285,4.105-0.858
|
|
||||||
c1.217-0.576,2.312-1.267,3.297-2.08l2.13,3.246c-1.419,1.217-2.976,2.155-4.666,2.812c-1.688,0.658-3.448,0.988-5.272,0.988
|
|
||||||
c-1.926,0-3.726-0.287-5.398-0.861c-1.674-0.571-3.117-1.419-4.337-2.536c-1.216-1.118-2.171-2.476-2.864-4.083
|
|
||||||
C170.59,47.818,170.242,45.984,170.242,43.921z"/>
|
|
||||||
<path fill="#010101" d="M194.072,20.488l10.513-5.213v14.603l-0.306,5.576c1.252-1.282,2.603-2.366,4.06-3.245
|
|
||||||
c1.453-0.876,3.144-1.315,5.069-1.315c2.904,0,5.035,0.86,6.388,2.584c1.351,1.724,2.026,4.209,2.026,7.456v15.36h-5.02V41.587
|
|
||||||
c0-2.163-0.39-3.76-1.168-4.789c-0.774-1.03-2.107-1.549-4.002-1.549c-1.317,0-2.504,0.33-3.55,0.99
|
|
||||||
c-1.049,0.659-2.217,1.647-3.5,2.968v17.085h-5.021l-0.104-36.017L194.072,20.488z"/>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#070404" points="222.766,9.28 221.074,12.812 242.092,12.901 243.783,9.3 "/>
|
|
||||||
<polygon fill="#070404" points="221.103,16.986 219.357,20.693 240.404,20.736 242.092,17.07 "/>
|
|
||||||
<polygon fill="#070404" points="225.205,24.898 234.847,4.372 238.561,4.425 229.031,24.903 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#010101" d="M110.112,47.722c0,1.663,0.416,2.867,1.251,3.604c0.833,0.732,1.917,1.104,3.258,1.104
|
|
||||||
c0.652,0,1.325-0.084,2.012-0.248c0.686-0.164,1.455-0.425,2.304-0.785l1.176,3.631c-0.557,0.192-1.088,0.371-1.593,0.539
|
|
||||||
c-0.512,0.162-1.021,0.297-1.544,0.412c-0.522,0.117-1.069,0.215-1.641,0.295c-0.574,0.08-1.202,0.125-1.888,0.125
|
|
||||||
c-2.681,0-4.715-0.768-6.104-2.307c-1.389-1.536-2.081-3.755-2.081-6.665V14.792H97.42l12.691-8.943"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 6.6 KiB |