Merge branch 'develop' into order_now
This commit is contained in:
		
				commit
				
					
						df0b4f2629
					
				
			
		
					 15 changed files with 636 additions and 67 deletions
				
			
		| 
						 | 
					@ -7,7 +7,7 @@ class BetaAccessForm(forms.ModelForm):
 | 
				
			||||||
    email = forms.CharField(widget=forms.EmailInput())
 | 
					    email = forms.CharField(widget=forms.EmailInput())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        fields = ['email']
 | 
					        fields = ['name', 'email']
 | 
				
			||||||
        model = BetaAccess
 | 
					        model = BetaAccess
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -84,6 +84,11 @@ h6 {
 | 
				
			||||||
    background-color: rgba(90, 116, 175, 0.8);
 | 
					    background-color: rgba(90, 116, 175, 0.8);
 | 
				
			||||||
    border-color: #5A74AF;
 | 
					    border-color: #5A74AF;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.btn-info:focus {
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					    background-color: rgba(90, 116, 175, 0.8);
 | 
				
			||||||
 | 
					    border-color: #5A74AF;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.btn-lg{
 | 
					.btn-lg{
 | 
				
			||||||
    min-width: 180px;
 | 
					    min-width: 180px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -131,6 +136,9 @@ h6 {
 | 
				
			||||||
    padding: 10px 15px;
 | 
					    padding: 10px 15px;
 | 
				
			||||||
    cursor: pointer;
 | 
					    cursor: pointer;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					.navbar-right {
 | 
				
			||||||
 | 
					    margin-right: 0px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.intro-header {
 | 
					.intro-header {
 | 
				
			||||||
    height: 100vh;
 | 
					    height: 100vh;
 | 
				
			||||||
    text-align: center;
 | 
					    text-align: center;
 | 
				
			||||||
| 
						 | 
					@ -217,6 +225,33 @@ h6 {
 | 
				
			||||||
    font-weight: 300;
 | 
					    font-weight: 300;
 | 
				
			||||||
    font-family: 'Montserrat-Light';
 | 
					    font-family: 'Montserrat-Light';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.intro-pricing{
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					    background: url(../img/pattern.jpg) no-repeat center center;
 | 
				
			||||||
 | 
					    background-size: cover;
 | 
				
			||||||
 | 
					    height: 70vh;
 | 
				
			||||||
 | 
					    max-height: 400px;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.intro-pricing::before{
 | 
				
			||||||
 | 
					    content: "";
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    top: 0;
 | 
				
			||||||
 | 
					    bottom: 0;
 | 
				
			||||||
 | 
					    left: 0;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					    background: rgba(90, 116, 175, 0.7);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.intro-pricing .intro-message .section-heading{
 | 
				
			||||||
 | 
					    font-size: 45px;
 | 
				
			||||||
 | 
					    width: 80%;
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
.split-section {
 | 
					.split-section {
 | 
				
			||||||
    padding: 70px 0;
 | 
					    padding: 70px 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -472,6 +507,115 @@ h6 {
 | 
				
			||||||
    right: 0;
 | 
					    right: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*Pricing page*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.price-calc-section{
 | 
				
			||||||
 | 
					    padding: 80px 40px !important;
 | 
				
			||||||
 | 
					    background: -webkit-linear-gradient(top, #f0f4f7, #fff) no-repeat;
 | 
				
			||||||
 | 
					    background: linear-gradient(to bottom, #f0f4f7, #fff) no-repeat;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .text{
 | 
				
			||||||
 | 
					   width: 50%;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .text .section-heading{
 | 
				
			||||||
 | 
					    font-family: 'Montserrat-Bold';
 | 
				
			||||||
 | 
					    font-size: 50px;
 | 
				
			||||||
 | 
					    line-height: 50px;
 | 
				
			||||||
 | 
					    padding-bottom: 25px;
 | 
				
			||||||
 | 
					    color: #3a3a3a;
 | 
				
			||||||
 | 
					    letter-spacing: 1px;
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    text-align: right;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .text .description{
 | 
				
			||||||
 | 
					    font-size: 20px;
 | 
				
			||||||
 | 
					    text-align: right;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .text .section-heading::before{
 | 
				
			||||||
 | 
					    content: "";
 | 
				
			||||||
 | 
					    position: absolute;
 | 
				
			||||||
 | 
					    bottom: 0;
 | 
				
			||||||
 | 
					    background: #29427A;
 | 
				
			||||||
 | 
					    height: 7px;
 | 
				
			||||||
 | 
					    width: 70px;
 | 
				
			||||||
 | 
					    right: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card{
 | 
				
			||||||
 | 
					    width: 50%;
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    background: #fff;
 | 
				
			||||||
 | 
					    box-shadow: 0 10px 20px rgba(0,0,0,0.19), 0 6px 6px rgba(0,0,0,0.23);
 | 
				
			||||||
 | 
					    padding-bottom: 40px;
 | 
				
			||||||
 | 
					    border-radius: 7px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    /* margin-right: auto; */
 | 
				
			||||||
 | 
					    max-width: 400px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .title{
 | 
				
			||||||
 | 
					    padding: 15px 40px;
 | 
				
			||||||
 | 
					    font-family: 'Montserrat-Medium';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .title h3{
 | 
				
			||||||
 | 
					    font-family: 'Montserrat-Medium';
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .price{
 | 
				
			||||||
 | 
					    background: #5A74AF;
 | 
				
			||||||
 | 
					    padding: 22px;
 | 
				
			||||||
 | 
					    color: #fff;
 | 
				
			||||||
 | 
					    font-size: 32px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .description{
 | 
				
			||||||
 | 
					    padding: 12px;
 | 
				
			||||||
 | 
					    border-bottom: 1px solid rgba(128, 128, 128, 0.3);
 | 
				
			||||||
 | 
					    position: relative;
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    justify-content: center;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .description span{
 | 
				
			||||||
 | 
					    font-size: 20px;
 | 
				
			||||||
 | 
					    margin-left: 4px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .description i{
 | 
				
			||||||
 | 
					    color: #29427A;
 | 
				
			||||||
 | 
					    cursor: pointer;
 | 
				
			||||||
 | 
					    font-size: 24px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .description .left{
 | 
				
			||||||
 | 
					   margin-right: 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .description .right{
 | 
				
			||||||
 | 
					   margin-left: 7px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .descriptions{
 | 
				
			||||||
 | 
					    padding: 10px 30px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .description p{
 | 
				
			||||||
 | 
					    margin: 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .btn{
 | 
				
			||||||
 | 
					    margin-top: 20px;
 | 
				
			||||||
 | 
					    font-size: 20px;
 | 
				
			||||||
 | 
					    width: 200px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .select-configuration select{
 | 
				
			||||||
 | 
					    outline: none;
 | 
				
			||||||
 | 
					    background: #fff;
 | 
				
			||||||
 | 
					    border-color: #d0d0d0;
 | 
				
			||||||
 | 
					    height: 40px;
 | 
				
			||||||
 | 
					    width: 200px;
 | 
				
			||||||
 | 
					    text-align: center;
 | 
				
			||||||
 | 
					    font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.price-calc-section .card .check-ip{
 | 
				
			||||||
 | 
					    font-size: 18px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.price-calc-section .card .check-ip input[type=checkbox]{
 | 
				
			||||||
 | 
					    font-size: 17px;
 | 
				
			||||||
 | 
					    margin: 0 8px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@media(max-width:990px) {
 | 
					@media(max-width:990px) {
 | 
				
			||||||
    .pricing-section .text {
 | 
					    .pricing-section .text {
 | 
				
			||||||
| 
						 | 
					@ -481,6 +625,10 @@ h6 {
 | 
				
			||||||
    .navbar-transparent .navbar-nav>li>a {
 | 
					    .navbar-transparent .navbar-nav>li>a {
 | 
				
			||||||
        font-size: 14px;
 | 
					        font-size: 14px;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    .pricing-section .text .section-heading::before {
 | 
				
			||||||
 | 
					        left: 50%;
 | 
				
			||||||
 | 
					        transform: translate(-50%, 0);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@media(max-width:768px) {
 | 
					@media(max-width:768px) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								datacenterlight/static/datacenterlight/img/pattern.jpg
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								datacenterlight/static/datacenterlight/img/pattern.jpg
									
										
									
									
									
										Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 181 KiB  | 
							
								
								
									
										12
									
								
								datacenterlight/static/datacenterlight/js/form.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								datacenterlight/static/datacenterlight/js/form.js
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -5,7 +5,23 @@
 | 
				
			||||||
    /* ---------------------------------------------
 | 
					    /* ---------------------------------------------
 | 
				
			||||||
     Scripts initialization
 | 
					     Scripts initialization
 | 
				
			||||||
     --------------------------------------------- */
 | 
					     --------------------------------------------- */
 | 
				
			||||||
    
 | 
					    var cardPricing ={
 | 
				
			||||||
 | 
					        'cpu': {
 | 
				
			||||||
 | 
					            'id': 'coreValue',
 | 
				
			||||||
 | 
					            'value': 1,
 | 
				
			||||||
 | 
					            'limit': 48
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        'ram': {
 | 
				
			||||||
 | 
					            'id': 'ramValue',
 | 
				
			||||||
 | 
					            'value': 1,
 | 
				
			||||||
 | 
					            'limit': 200
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        'storage': {
 | 
				
			||||||
 | 
					            'id': 'storageValue',
 | 
				
			||||||
 | 
					            'value': 1,
 | 
				
			||||||
 | 
					            'limit': 500
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    $(window).load(function(){
 | 
					    $(window).load(function(){
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
| 
						 | 
					@ -16,6 +32,7 @@
 | 
				
			||||||
       _navScroll();
 | 
					       _navScroll();
 | 
				
			||||||
       _initScroll();
 | 
					       _initScroll();
 | 
				
			||||||
       _initNavUrl();
 | 
					       _initNavUrl();
 | 
				
			||||||
 | 
					       _initPricing();
 | 
				
			||||||
       
 | 
					       
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -41,7 +58,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    function _navScroll(){
 | 
					    function _navScroll(){
 | 
				
			||||||
       	if($(window).scrollTop() > 10 ){
 | 
					       	if($(window).scrollTop() > 10 ){
 | 
				
			||||||
       		console.log($(window).scrollTop());
 | 
					 | 
				
			||||||
            $(".navbar").removeClass("navbar-transparent");
 | 
					            $(".navbar").removeClass("navbar-transparent");
 | 
				
			||||||
            $(".navbar-default .btn-link").css("color", "#777");
 | 
					            $(".navbar-default .btn-link").css("color", "#777");
 | 
				
			||||||
        }else{
 | 
					        }else{
 | 
				
			||||||
| 
						 | 
					@ -65,6 +81,39 @@
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function _initPricing(){
 | 
				
			||||||
 | 
					        _fetchPricing();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $('.fa-minus-circle.left').click(function(event){
 | 
				
			||||||
 | 
					            var data = $(this).data('minus');
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            if(cardPricing[data].value > 1){
 | 
				
			||||||
 | 
					                cardPricing[data].value --;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            _fetchPricing();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        $('.fa-plus-circle.right').click(function(event){
 | 
				
			||||||
 | 
					            var data = $(this).data('plus');
 | 
				
			||||||
 | 
					            if(cardPricing[data].value < cardPricing[data].limit){
 | 
				
			||||||
 | 
					                cardPricing[data].value ++;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            _fetchPricing();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    function _fetchPricing(){
 | 
				
			||||||
 | 
					        Object.keys(cardPricing).map(function(element){
 | 
				
			||||||
 | 
					            $('#'+cardPricing[element].id).text(cardPricing[element].value);
 | 
				
			||||||
 | 
					            $('input[name='+element+']').val(cardPricing[element].value);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        _calcPricing();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function _calcPricing(){
 | 
				
			||||||
 | 
					        var total = (cardPricing['cpu'].value * 5) + (2* cardPricing['ram'].value) + (0.6* cardPricing['storage'].value) 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $("#total").text(total);
 | 
				
			||||||
 | 
					        $('input[name=total]').val(total);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    function form_success(){
 | 
					    function form_success(){
 | 
				
			||||||
        $('#sucessModal').modal('show');
 | 
					        $('#sucessModal').modal('show');
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										27
									
								
								datacenterlight/templates/datacenterlight/beta_access.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								datacenterlight/templates/datacenterlight/beta_access.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,27 @@
 | 
				
			||||||
 | 
					{% load i18n %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<form novalidate id ="beta_access" class="form-beta" method="POST" action="{% url 'datacenterlight:beta_access'%}">
 | 
				
			||||||
 | 
					  {% csrf_token %}
 | 
				
			||||||
 | 
					  {{ form.non_field_errors }}
 | 
				
			||||||
 | 
					  <div>
 | 
				
			||||||
 | 
						{% for message in messages %}
 | 
				
			||||||
 | 
							<strong>{{ message }}</strong>
 | 
				
			||||||
 | 
						{% endfor %}
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					 <div class="inputs">
 | 
				
			||||||
 | 
						 <div class="form-group">
 | 
				
			||||||
 | 
							<input type="text" name="name" class="form-control" id="name" placeholder="Enter name">
 | 
				
			||||||
 | 
							<span style="color: white">{{ form.name.errors|striptags}}</span>
 | 
				
			||||||
 | 
						  </div>
 | 
				
			||||||
 | 
						  <div class="form-group">
 | 
				
			||||||
 | 
							<input type="email" name="email" class="form-control" id="email" placeholder="Enter email">
 | 
				
			||||||
 | 
							<span style="color: white">{{ form.email.errors|striptags}}</span>
 | 
				
			||||||
 | 
						  </div>
 | 
				
			||||||
 | 
					 </div>
 | 
				
			||||||
 | 
					  <button type="submit" class="btn btn-default btn-transparent btn-lg">{% trans "Request Beta Access" %}</button>
 | 
				
			||||||
 | 
					</form>
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
						$('#beta_access').ajaxForm({
 | 
				
			||||||
 | 
							target: '#beta_access_form', success: function(response) { }
 | 
				
			||||||
 | 
						});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
							
								
								
									
										47
									
								
								datacenterlight/templates/datacenterlight/beta_success.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								datacenterlight/templates/datacenterlight/beta_success.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,47 @@
 | 
				
			||||||
 | 
					{% load i18n %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="modal fade bs-example-modal-sm" style="color:black;"  id="successModal" tabindex="-1" role="dialog">
 | 
				
			||||||
 | 
					    <div class="vertical-alignment-helper">
 | 
				
			||||||
 | 
					        <div class="modal-dialog vertical-align-center">
 | 
				
			||||||
 | 
								<div class="modal-content">
 | 
				
			||||||
 | 
								  <div class="modal-header">
 | 
				
			||||||
 | 
									<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
 | 
				
			||||||
 | 
									<h4 class="modal-title">{% trans "Request Sent" %}</h4>
 | 
				
			||||||
 | 
								  </div>
 | 
				
			||||||
 | 
								  <div class="modal-body">
 | 
				
			||||||
 | 
									<p>{% trans "Thank you, we will contact you as soon as possible" %}</p>
 | 
				
			||||||
 | 
								  </div>
 | 
				
			||||||
 | 
								</div><!-- /.modal-content -->
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					</div><!-- /.modal -->
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
						// Show modal
 | 
				
			||||||
 | 
						$('#successModal').modal('show');
 | 
				
			||||||
 | 
						// close the modal after 3 seconds
 | 
				
			||||||
 | 
						setTimeout(function() {
 | 
				
			||||||
 | 
						    $('#successModal').modal('hide');
 | 
				
			||||||
 | 
						}, 5000);	
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					.vertical-alignment-helper {
 | 
				
			||||||
 | 
					    display:table;
 | 
				
			||||||
 | 
					    height: 100%;
 | 
				
			||||||
 | 
					    width: 100%;
 | 
				
			||||||
 | 
					    pointer-events:none; /* This makes sure that we can still click outside of the modal to close it */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.vertical-align-center {
 | 
				
			||||||
 | 
					    /* To center vertically */
 | 
				
			||||||
 | 
					    display: table-cell;
 | 
				
			||||||
 | 
					    vertical-align: middle;
 | 
				
			||||||
 | 
					    pointer-events:none;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.modal-content {
 | 
				
			||||||
 | 
					    /* Bootstrap sets the size of the modal in the modal-dialog class, we need to inherit it */
 | 
				
			||||||
 | 
					    width:inherit;
 | 
				
			||||||
 | 
					    height:inherit;
 | 
				
			||||||
 | 
					    /* To center horizontally */
 | 
				
			||||||
 | 
					    margin: 0 auto;
 | 
				
			||||||
 | 
					    pointer-events: all;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
| 
						 | 
					@ -43,7 +43,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- Navigation -->
 | 
					    <!-- Navigation -->
 | 
				
			||||||
    <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="topnav">
 | 
				
			||||||
            <!-- Brand and toggle get grouped for better mobile display -->
 | 
					            <!-- Brand and toggle get grouped for better mobile display -->
 | 
				
			||||||
            <div class="navbar-header">
 | 
					            <div class="navbar-header">
 | 
				
			||||||
                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
 | 
					                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
 | 
				
			||||||
| 
						 | 
					@ -113,7 +113,7 @@
 | 
				
			||||||
                                <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 href="#how" class="btn btn-default btn-lg btn-transparent"><i class="#Services"></i> <span class="network-name">{% trans "What is it?" %}</span></a>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                            <li>
 | 
					                            <li>
 | 
				
			||||||
                                <a href="#requestform" class="btn btn-primary btn-lg page-scroll"><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>
 | 
				
			||||||
                            </li>
 | 
					                            </li>
 | 
				
			||||||
                        </ul>
 | 
					                        </ul>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
| 
						 | 
					@ -227,7 +227,7 @@
 | 
				
			||||||
                               <h3>{% trans "VM hosting" %} </h3> 
 | 
					                               <h3>{% trans "VM hosting" %} </h3> 
 | 
				
			||||||
                            </div>
 | 
					                            </div>
 | 
				
			||||||
                          <div class="price">
 | 
					                          <div class="price">
 | 
				
			||||||
                              <span>15CHF</span>
 | 
					                              <span>15CHF/month</span>
 | 
				
			||||||
                          </div>
 | 
					                          </div>
 | 
				
			||||||
                          <div class="descriptions">
 | 
					                          <div class="descriptions">
 | 
				
			||||||
                              <div class="description">
 | 
					                              <div class="description">
 | 
				
			||||||
| 
						 | 
					@ -243,7 +243,7 @@
 | 
				
			||||||
                                <p>{% trans "15 GiB storage(SSD)" %}</p>
 | 
					                                <p>{% trans "15 GiB storage(SSD)" %}</p>
 | 
				
			||||||
                              </div>
 | 
					                              </div>
 | 
				
			||||||
                          </div>
 | 
					                          </div>
 | 
				
			||||||
						  <a href="{% url 'hosting:payment' %}" class="btn btn-primary">{% trans "Order Now!" %}</a>
 | 
											  <a href="{% url 'datacenterlight:pricing' %}" class="btn btn-primary">{% trans "Order Now!" %}</a>
 | 
				
			||||||
                      </div>
 | 
					                      </div>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
| 
						 | 
					@ -252,7 +252,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
        <!-- Configure -->
 | 
					        <!-- Configure -->
 | 
				
			||||||
    <div class="request-section" >
 | 
					    <div class="request-section" id="request">
 | 
				
			||||||
        <div class="container">
 | 
					        <div class="container">
 | 
				
			||||||
            <div class="row">
 | 
					            <div class="row">
 | 
				
			||||||
                <div class="col-sm-6 col-md-6">
 | 
					                <div class="col-sm-6 col-md-6">
 | 
				
			||||||
| 
						 | 
					@ -261,43 +261,9 @@
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="col-sm-6 col-md-6">
 | 
					                <div class="col-sm-6 col-md-6">
 | 
				
			||||||
                    <div class="form">
 | 
										<!-- Beta access form, will be loaded via ajax -->
 | 
				
			||||||
                        <form class="form-beta" method="POST" action="">
 | 
					                    <div class="form" id="beta_access_form">
 | 
				
			||||||
                          {% csrf_token %}
 | 
					 | 
				
			||||||
                          {{ form.non_field_errors }}
 | 
					 | 
				
			||||||
                          {{ form.email.errors|striptags}}
 | 
					 | 
				
			||||||
                          <div>
 | 
					 | 
				
			||||||
                            {% for message in messages %}
 | 
					 | 
				
			||||||
                                <strong>{{ message }}</strong>
 | 
					 | 
				
			||||||
                            {% endfor %}                  
 | 
					 | 
				
			||||||
					</div>
 | 
										</div>
 | 
				
			||||||
                         <div class="inputs">
 | 
					 | 
				
			||||||
                             <div class="form-group">
 | 
					 | 
				
			||||||
                                <input type="text" name="name" class="form-control" id="name" placeholder="Enter name">
 | 
					 | 
				
			||||||
                              </div>
 | 
					 | 
				
			||||||
                              <div class="form-group">
 | 
					 | 
				
			||||||
                                <input type="email" name="email" class="form-control" id="email" placeholder="Enter email">
 | 
					 | 
				
			||||||
                              </div>
 | 
					 | 
				
			||||||
                         </div>
 | 
					 | 
				
			||||||
                          <button type="submit" class="btn btn-default btn-transparent btn-lg">{% trans "Request Beta Access" %}</button>
 | 
					 | 
				
			||||||
                        </form>
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
                     <div class="modal fade bs-example-modal-sm" style="color:black;"  id="sucessModal" 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="Close"><span aria-hidden="true">×</span></button>
 | 
					 | 
				
			||||||
                                <h4 class="modal-title">{% trans "Request Sent" %}</h4>
 | 
					 | 
				
			||||||
                              </div>
 | 
					 | 
				
			||||||
                              <div class="modal-body">
 | 
					 | 
				
			||||||
                                <p>{% trans "Thank you, we will contact you as soon as possible" %}</p>
 | 
					 | 
				
			||||||
                              </div>
 | 
					 | 
				
			||||||
                              <div class="modal-footer text-center">
 | 
					 | 
				
			||||||
                                <button type="submit" class="btn btn-primary" data-dismiss="modal">Ok</button>
 | 
					 | 
				
			||||||
                              </div>
 | 
					 | 
				
			||||||
                            </div><!-- /.modal-content -->
 | 
					 | 
				
			||||||
                          </div><!-- /.modal-dialog -->
 | 
					 | 
				
			||||||
                        </div><!-- /.modal -->
 | 
					 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -389,12 +355,12 @@
 | 
				
			||||||
             windowPadding: 10,
 | 
					             windowPadding: 10,
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var hash = window.location.hash.substr(1);
 | 
					  		$.ajax({
 | 
				
			||||||
        console.log(hash);
 | 
						        url: "{% url 'datacenterlight:beta_access' %}",
 | 
				
			||||||
        if (hash == 'requestform'){
 | 
									context: document.body
 | 
				
			||||||
            $('#reques-success-message').modal('show');
 | 
								}).done(function(response) {
 | 
				
			||||||
        }
 | 
									$('#beta_access_form').html(response);
 | 
				
			||||||
 | 
								});
 | 
				
			||||||
       };
 | 
					       };
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -403,6 +369,8 @@
 | 
				
			||||||
    <!-- Bootstrap Core JavaScript -->
 | 
					    <!-- Bootstrap Core JavaScript -->
 | 
				
			||||||
    <script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script>
 | 
					    <script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script>
 | 
				
			||||||
    <script src="{% static 'datacenterlight/js/main.js' %}"></script>
 | 
					    <script src="{% static 'datacenterlight/js/main.js' %}"></script>
 | 
				
			||||||
 | 
					    <!-- Load form js -->
 | 
				
			||||||
 | 
					    <script src="{% static 'datacenterlight/js/form.js' %}"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</body>
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										234
									
								
								datacenterlight/templates/datacenterlight/pricing.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								datacenterlight/templates/datacenterlight/pricing.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,234 @@
 | 
				
			||||||
 | 
					{% load staticfiles i18n%}
 | 
				
			||||||
 | 
					{% get_current_language as LANGUAGE_CODE %}
 | 
				
			||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <meta charset="utf-8">
 | 
				
			||||||
 | 
					    <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
				
			||||||
 | 
					    <meta name="viewport" content="width=device-width, initial-scale=1">
 | 
				
			||||||
 | 
					    <meta name="description" content="">
 | 
				
			||||||
 | 
					    <meta name="author" content="">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <title>datacenterlight.ch - Featherlight Swiss VM</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Bootstrap Core CSS -->
 | 
				
			||||||
 | 
					    <link href="{% static 'datacenterlight/css/bootstrap.min.css' %}" rel="stylesheet">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Custom Fonts -->
 | 
				
			||||||
 | 
					    <!--Import Google Icon Font-->
 | 
				
			||||||
 | 
					     <link href="//fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
 | 
				
			||||||
 | 
					    <link href="{% static 'datacenterlight/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
 | 
				
			||||||
 | 
					    <link href="//fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css">
 | 
				
			||||||
 | 
					    <link rel="shortcut icon" href="{% static 'datacenterlight/img/favicon.ico' %}" type="image/x-icon" />
 | 
				
			||||||
 | 
					    <link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.min.css" rel="stylesheet">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Custom CSS -->
 | 
				
			||||||
 | 
					    <link href="{% static 'datacenterlight/css/landing-page.css' %}" rel="stylesheet">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
 | 
				
			||||||
 | 
					    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
 | 
				
			||||||
 | 
					    <!--[if lt IE 9]>
 | 
				
			||||||
 | 
					        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
 | 
				
			||||||
 | 
					        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
 | 
				
			||||||
 | 
					    <![endif]-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</head>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Navigation -->
 | 
				
			||||||
 | 
					    <nav class="navbar navbar-default navbar-fixed-top topnav" role="navigation">
 | 
				
			||||||
 | 
					        <div class="topnav">
 | 
				
			||||||
 | 
					            <!-- Brand and toggle get grouped for better mobile display -->
 | 
				
			||||||
 | 
					            <div class="navbar-header">
 | 
				
			||||||
 | 
					                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
 | 
				
			||||||
 | 
					                    <span class="sr-only">Toggle navigation</span>
 | 
				
			||||||
 | 
					                    <span class="icon-bar"></span>
 | 
				
			||||||
 | 
					                    <span class="icon-bar"></span>
 | 
				
			||||||
 | 
					                    <span class="icon-bar"></span>
 | 
				
			||||||
 | 
					                </button>
 | 
				
			||||||
 | 
					                <a id="logoBlack" class="navbar-brand topnav url" href="{% url 'datacenterlight:index' %}" ><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a>
 | 
				
			||||||
 | 
					                <a id="logoWhite" class="navbar-brand topnav url" href="{% url 'datacenterlight:index' %}" ><img src="{% static 'datacenterlight/img/logo_white.svg' %}"></a>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <!-- Collect the nav links, forms, and other content for toggling -->
 | 
				
			||||||
 | 
					            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
 | 
				
			||||||
 | 
					                <ul class="nav navbar-nav navbar-right">
 | 
				
			||||||
 | 
					                 <!--    <li>
 | 
				
			||||||
 | 
					                        <a class="url" href="javascript:void(0)" data-url="#how" >{% trans "What is it" %}</a>
 | 
				
			||||||
 | 
					                    </li>
 | 
				
			||||||
 | 
					                    <li>
 | 
				
			||||||
 | 
					                        <a class="url" href="javascript:void(0)" data-url="#your"  >{% trans "Scale out" %}</a>
 | 
				
			||||||
 | 
					                    </li>
 | 
				
			||||||
 | 
					                   <li>
 | 
				
			||||||
 | 
					                        <a class="url" href="javascript:void(0)" data-url="#our">{% trans "Reliable and light" %}</a>
 | 
				
			||||||
 | 
					                    </li>
 | 
				
			||||||
 | 
					                    <li>
 | 
				
			||||||
 | 
					                        <a class="url" href="javascript:void(0)" data-url="#price" >{% trans "Buy VM" %}</a>
 | 
				
			||||||
 | 
					                    </li>
 | 
				
			||||||
 | 
					                    <li>
 | 
				
			||||||
 | 
					                        <a class="url" href="javascript:void(0)" data-url="#contact"  >{% trans "Contact" %}</a>
 | 
				
			||||||
 | 
					                     </li> -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <select class="selectpicker" data-width="fit" onchange="location = this.value;" style="margin-top:10px;">
 | 
				
			||||||
 | 
					                        {% if LANGUAGE_CODE == 'en-us'%} 
 | 
				
			||||||
 | 
					                            <option selected="selected" value="{{base_url}}/en-us/datacenterlight/">English</option>
 | 
				
			||||||
 | 
					                        {% else %}
 | 
				
			||||||
 | 
					                            <option value="{{base_url}}/en-us/datacenterlight/">English</option>
 | 
				
			||||||
 | 
					                        {% endif %}
 | 
				
			||||||
 | 
					                        {% if LANGUAGE_CODE == 'de'%} 
 | 
				
			||||||
 | 
					                            <option selected="selected" value="{{base_url}}/de/datacenterlight/">Deutsch</option>
 | 
				
			||||||
 | 
					                        {% else %}
 | 
				
			||||||
 | 
					                            <option value="{{base_url}}/de/datacenterlight/">Deutsch</option>
 | 
				
			||||||
 | 
					                        {% endif %}         
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                      </select> 
 | 
				
			||||||
 | 
					                </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <!-- /.navbar-collapse -->
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <!-- /.container -->
 | 
				
			||||||
 | 
					    </nav>
 | 
				
			||||||
 | 
						<div class="intro-pricing">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<div class="intro-message">
 | 
				
			||||||
 | 
								<h2 class="section-heading">{% trans "We are cutting down the costs significantly!" %}</h2>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						<div class="price-calc-section">
 | 
				
			||||||
 | 
							<div class="card">
 | 
				
			||||||
 | 
								 <div class="caption">
 | 
				
			||||||
 | 
					            <form action="POST">
 | 
				
			||||||
 | 
					              
 | 
				
			||||||
 | 
					                <div class="title">
 | 
				
			||||||
 | 
					                   <h3>{% trans "VM hosting" %} </h3> 
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					              <div class="price">
 | 
				
			||||||
 | 
					                  <span id="total">15</span>
 | 
				
			||||||
 | 
					                  <span>CHF</span>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <div class="descriptions">
 | 
				
			||||||
 | 
					                  <div class="description">
 | 
				
			||||||
 | 
					                    <p>{% trans "Based in Switzerland" %}</p>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <div class="description">
 | 
				
			||||||
 | 
					                     <i class="fa fa-minus-circle left" data-minus="cpu" aria-hidden="true"></i>
 | 
				
			||||||
 | 
					                     <span id="coreValue">1</span><span> core</span> 
 | 
				
			||||||
 | 
					                     <i class="fa fa-plus-circle right" data-plus="cpu"  aria-hidden="true"></i>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <div class="description">
 | 
				
			||||||
 | 
					                   <i class="fa fa-minus-circle left" data-minus="ram" aria-hidden="true"></i>
 | 
				
			||||||
 | 
					                    <span id="ramValue">2</span><span> GiB RAM</span>
 | 
				
			||||||
 | 
					                    <i class="fa fa-plus-circle right" data-plus="ram"  aria-hidden="true"></i>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <div class="description">
 | 
				
			||||||
 | 
					                  	<i class="fa fa-minus-circle left" data-minus="storage" aria-hidden="true"></i>
 | 
				
			||||||
 | 
					                    <span id="storageValue">15</span><span>{% trans "GiB storage(SSD)" %}</span>
 | 
				
			||||||
 | 
					                     <i class="fa fa-plus-circle right" data-plus="storage"  aria-hidden="true"></i>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                  <div class="description select-configuration">
 | 
				
			||||||
 | 
					                  	<select name="config" id="">
 | 
				
			||||||
 | 
					                  		<option value="" disabled selected>Configuration</option>
 | 
				
			||||||
 | 
					                  		<option value="CentOS 7">CentOS 7</option>
 | 
				
			||||||
 | 
					                  		<option value="Debian 8">Debian 8</option>
 | 
				
			||||||
 | 
					                  		<option value="Ubuntu 14.04">Ubuntu 14.04</option>
 | 
				
			||||||
 | 
					                  		<option value="Ubuntu 16.04">Ubuntu 16.04</option>
 | 
				
			||||||
 | 
					                  	</select>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					                  <input type="hidden" name="cpu">
 | 
				
			||||||
 | 
					                  <input type="hidden" name="ram">
 | 
				
			||||||
 | 
					                  <input type="hidden" name="storage">
 | 
				
			||||||
 | 
					                  <input type="hidden" name="total">
 | 
				
			||||||
 | 
					                   <div class="description check-ip">
 | 
				
			||||||
 | 
					                  	<input type="checkbox" name="ipv6"> Ipv6 Only<br>
 | 
				
			||||||
 | 
					                  </div>
 | 
				
			||||||
 | 
					              </div>
 | 
				
			||||||
 | 
					              <input type="submit" class="btn btn-primary" value="{% trans 'Buy Now!' %}"></input>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            </form>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							<div class="text">
 | 
				
			||||||
 | 
								<h2 class="section-heading">{% trans "Simple and affordable: Try our virtual machine with featherlight price." %}</h2>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<div class="description">
 | 
				
			||||||
 | 
									<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ab laudantium quis quam nostrum ipsum est nisi asperiores provident recusandae aliquid, reiciendis vitae quisquam error, porro fuga obcaecati maiores dolores repudiandae?</p>
 | 
				
			||||||
 | 
								</div>
 | 
				
			||||||
 | 
							</div>
 | 
				
			||||||
 | 
						</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- /.banner -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Footer -->
 | 
				
			||||||
 | 
					    <footer>
 | 
				
			||||||
 | 
					        <div class="container">
 | 
				
			||||||
 | 
					            <div class="row">
 | 
				
			||||||
 | 
					                <div class="col-lg-12">
 | 
				
			||||||
 | 
					                    <ul class="list-inline">
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="#">{% trans "Home" %}</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="#about">{% trans "How it works" %}</a></li>
 | 
				
			||||||
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="#about">{% trans "Scale out" %}</a></li>
 | 
				
			||||||
 | 
					                        <li>⋅</li>
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="#about">{% trans "Reliable and light" %}</a></li>
 | 
				
			||||||
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="#services">{% trans "Pricing" %}</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                        <li class="footer-menu-divider">⋅</li>
 | 
				
			||||||
 | 
					                        <li>
 | 
				
			||||||
 | 
					                            <a href="#contact">{% trans "Contact" %}</a>
 | 
				
			||||||
 | 
					                        </li>
 | 
				
			||||||
 | 
					                    </ul>
 | 
				
			||||||
 | 
					                    <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. All Rights Reserved</p>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </footer>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- jQuery -->
 | 
				
			||||||
 | 
					    <script src="{% static 'datacenterlight/js/jquery.js' %}"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<script type="text/javascript">
 | 
				
			||||||
 | 
					      window.onload=function(){
 | 
				
			||||||
 | 
					        $('.selectpicker').selectpicker({
 | 
				
			||||||
 | 
					             style: 'btn-link',
 | 
				
			||||||
 | 
					             windowPadding: 10,
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var hash = window.location.hash.substr(1);
 | 
				
			||||||
 | 
					        console.log(hash);
 | 
				
			||||||
 | 
					        if (hash == 'requestform'){
 | 
				
			||||||
 | 
					            $('#reques-success-message').modal('show');
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					       };
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.5.4/bootstrap-select.js"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <!-- Bootstrap Core JavaScript -->
 | 
				
			||||||
 | 
					    <script src="{% static 'datacenterlight/js/bootstrap.min.js' %}"></script>
 | 
				
			||||||
 | 
					    <script src="{% static 'datacenterlight/js/main.js' %}"></script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -1,10 +1,12 @@
 | 
				
			||||||
from django.conf.urls import url
 | 
					from django.conf.urls import url
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .views import IndexView, BetaProgramView, LandingProgramView
 | 
					from .views import IndexView, BetaProgramView, LandingProgramView, BetaAccessView, PricingView
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
urlpatterns = [
 | 
					urlpatterns = [
 | 
				
			||||||
    url(r'^/?$', IndexView.as_view(), name='index'),
 | 
					    url(r'^/?$', IndexView.as_view(), name='index'),
 | 
				
			||||||
    url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'),
 | 
					    url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'),
 | 
				
			||||||
    url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'),
 | 
					    url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'),
 | 
				
			||||||
 | 
					    url(r'^/pricing/?$', PricingView.as_view(), name='pricing'),
 | 
				
			||||||
 | 
					    url(r'^/beta_access?$', BetaAccessView.as_view(), name='beta_access'),
 | 
				
			||||||
]
 | 
					]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ from .models import BetaAccess, BetaAccessVMType, BetaAccessVM
 | 
				
			||||||
from django.contrib import messages
 | 
					from django.contrib import messages
 | 
				
			||||||
from django.core.urlresolvers import reverse_lazy, reverse
 | 
					from django.core.urlresolvers import reverse_lazy, reverse
 | 
				
			||||||
from utils.mailer import BaseEmail
 | 
					from utils.mailer import BaseEmail
 | 
				
			||||||
 | 
					from django.shortcuts import render
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from opennebula_api.models import OpenNebulaManager
 | 
					from opennebula_api.models import OpenNebulaManager
 | 
				
			||||||
from opennebula_api.serializers import VirtualMachineTemplateSerializer
 | 
					from opennebula_api.serializers import VirtualMachineTemplateSerializer
 | 
				
			||||||
| 
						 | 
					@ -12,6 +13,46 @@ from opennebula_api.serializers import VirtualMachineTemplateSerializer
 | 
				
			||||||
class LandingProgramView(TemplateView):
 | 
					class LandingProgramView(TemplateView):
 | 
				
			||||||
    template_name = "datacenterlight/landing.html"
 | 
					    template_name = "datacenterlight/landing.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class PricingView(TemplateView):
 | 
				
			||||||
 | 
					    template_name = "datacenterlight/pricing.html"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class BetaAccessView(FormView):
 | 
				
			||||||
 | 
					    template_name = "datacenterlight/beta_access.html"
 | 
				
			||||||
 | 
					    form_class = BetaAccessForm  
 | 
				
			||||||
 | 
					    success_message = "Thank you, we will contact you as soon as possible"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def form_valid(self, form):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        context = {
 | 
				
			||||||
 | 
					            'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host())
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        email_data = {
 | 
				
			||||||
 | 
					            'subject': 'DatacenterLight Beta Access Request',
 | 
				
			||||||
 | 
					            '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 render(self.request, 'datacenterlight/beta_success.html', {})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BetaProgramView(CreateView):
 | 
					class BetaProgramView(CreateView):
 | 
				
			||||||
    template_name = "datacenterlight/beta.html"
 | 
					    template_name = "datacenterlight/beta.html"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,7 +36,7 @@
 | 
				
			||||||
                                    CORE: {{config.cpu|floatformat}},
 | 
					                                    CORE: {{config.cpu|floatformat}},
 | 
				
			||||||
                                    RAM: {{config.memory|floatformat}} GiB, 
 | 
					                                    RAM: {{config.memory|floatformat}} GiB, 
 | 
				
			||||||
                                    SSD: {{config.disk_size|floatformat}} GiB,
 | 
					                                    SSD: {{config.disk_size|floatformat}} GiB,
 | 
				
			||||||
                                    PRICE: {{config.price|floatformat}} CHF
 | 
					                                    PRICE: {{config.price|floatformat}} CHF/Month
 | 
				
			||||||
                                </option>
 | 
					                                </option>
 | 
				
			||||||
                            {% endfor %}
 | 
					                            {% endfor %}
 | 
				
			||||||
                        </select>
 | 
					                        </select>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -41,11 +41,17 @@
 | 
				
			||||||
									<div class="col-md-12 inline-headers">
 | 
														<div class="col-md-12 inline-headers">
 | 
				
			||||||
									<h3>{{virtual_machine.hosting_company_name}}</h3>
 | 
														<h3>{{virtual_machine.hosting_company_name}}</h3>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
										{% if virtual_machine.ip %}
 | 
															{% if virtual_machine.ipv6 %}
 | 
				
			||||||
											<div class="pull-right right-place">
 | 
																<div class="pull-right right-place">
 | 
				
			||||||
												<button type="link" data-clipboard-text="{{virtual_machine.ip}}" id="copy_vm_id" class="to_copy btn btn-link"
 | 
																	<button type="link"
 | 
				
			||||||
 | 
										data-clipboard-text="{{virtual_machine.ipv4}}" id="copy_vm_id" class="to_copy btn btn-link"
 | 
				
			||||||
													data-toggle="tooltip"  data-placement="bottom" title="Copied"  data-trigger="click">
 | 
																		data-toggle="tooltip"  data-placement="bottom" title="Copied"  data-trigger="click">
 | 
				
			||||||
														Ip: {{virtual_machine.ip}} <i class="fa fa-files-o" aria-hidden="true"></i> 
 | 
																			Ipv4: {{virtual_machine.ipv4}} <i class="fa fa-files-o" aria-hidden="true"></i> 
 | 
				
			||||||
 | 
																	</button>
 | 
				
			||||||
 | 
																	<button type="link"
 | 
				
			||||||
 | 
										data-clipboard-text="{{virtual_machine.ipv6}}" id="copy_vm_id" class="to_copy btn btn-link"
 | 
				
			||||||
 | 
																		data-toggle="tooltip"  data-placement="bottom" title="Copied"  data-trigger="click">
 | 
				
			||||||
 | 
																			Ipv6: {{virtual_machine.ipv6}} <i class="fa fa-files-o" aria-hidden="true"></i> 
 | 
				
			||||||
												</button>
 | 
																	</button>
 | 
				
			||||||
											</div>
 | 
																</div>
 | 
				
			||||||
										{% else %}
 | 
															{% else %}
 | 
				
			||||||
| 
						 | 
					@ -98,7 +104,7 @@
 | 
				
			||||||
				            	<div class="row ">
 | 
									            	<div class="row ">
 | 
				
			||||||
									<div class="col-md-12 inline-headers">
 | 
														<div class="col-md-12 inline-headers">
 | 
				
			||||||
										<h3>{% trans "Current pricing"%}</h3>
 | 
															<h3>{% trans "Current pricing"%}</h3>
 | 
				
			||||||
										<span class="h3 pull-right"><strong>{{virtual_machine.price|floatformat}} CHF</strong>/mo</span> 
 | 
															<span class="h3 pull-right"><strong>{{virtual_machine.price|floatformat}} CHF</strong>/month</span> 
 | 
				
			||||||
										<hr>
 | 
															<hr>
 | 
				
			||||||
									</div>
 | 
														</div>
 | 
				
			||||||
				            	</div>
 | 
									            	</div>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,7 +26,8 @@
 | 
				
			||||||
				<thead> 
 | 
									<thead> 
 | 
				
			||||||
				<tr> 
 | 
									<tr> 
 | 
				
			||||||
					<th>{% trans "ID"%}</th>
 | 
										<th>{% trans "ID"%}</th>
 | 
				
			||||||
					<th>{% trans "Amount"%}</th>
 | 
					                    <th>{% trans "Ipv4"%}</th>
 | 
				
			||||||
 | 
										<th>{% trans "Ipv6"%}</th>
 | 
				
			||||||
					<th>{% trans "Status"%}</th>
 | 
										<th>{% trans "Status"%}</th>
 | 
				
			||||||
					<th></th>
 | 
										<th></th>
 | 
				
			||||||
				</tr>
 | 
									</tr>
 | 
				
			||||||
| 
						 | 
					@ -35,7 +36,12 @@
 | 
				
			||||||
					{% for vm in vms %}
 | 
										{% for vm in vms %}
 | 
				
			||||||
					<tr>
 | 
										<tr>
 | 
				
			||||||
						<td scope="row">{{vm.vm_id}}</td> 
 | 
											<td scope="row">{{vm.vm_id}}</td> 
 | 
				
			||||||
						<td>{{vm.price}} CHF</td> 
 | 
					                        {% if vm.ipv6  %}
 | 
				
			||||||
 | 
											  <td>{{vm.ipv4}}</td> 
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                          <td>{{vm.ipv6}}</td> 
 | 
				
			||||||
 | 
					                        {% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						<td>
 | 
											<td>
 | 
				
			||||||
                           
 | 
					                           
 | 
				
			||||||
							{% if vm.state == 'ACTIVE' %}
 | 
												{% if vm.state == 'ACTIVE' %}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,5 @@
 | 
				
			||||||
import oca
 | 
					import oca
 | 
				
			||||||
 | 
					import ipaddress
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from rest_framework import serializers
 | 
					from rest_framework import serializers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,8 +74,7 @@ class VirtualMachineTemplateSerializer(serializers.Serializer):
 | 
				
			||||||
        return int(obj.template.memory)/1024
 | 
					        return int(obj.template.memory)/1024
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_name(self, obj):
 | 
					    def get_name(self, obj):
 | 
				
			||||||
        # TODO: Filter public- away
 | 
					        return obj.name.strip('public-')
 | 
				
			||||||
        return obj.name
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VirtualMachineSerializer(serializers.Serializer):
 | 
					class VirtualMachineSerializer(serializers.Serializer):
 | 
				
			||||||
    """Serializer to map the virtual machine instance into JSON format."""
 | 
					    """Serializer to map the virtual machine instance into JSON format."""
 | 
				
			||||||
| 
						 | 
					@ -87,9 +87,8 @@ class VirtualMachineSerializer(serializers.Serializer):
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    disk_size   = serializers.SerializerMethodField()
 | 
					    disk_size   = serializers.SerializerMethodField()
 | 
				
			||||||
    ip          = serializers.CharField(read_only=True,
 | 
					    ipv4          = serializers.SerializerMethodField()
 | 
				
			||||||
                                        source='user_template.ungleich_public_ip',
 | 
					    ipv6          = serializers.SerializerMethodField()
 | 
				
			||||||
                                        default='-')
 | 
					 | 
				
			||||||
    vm_id       = serializers.IntegerField(read_only=True, source='id')
 | 
					    vm_id       = serializers.IntegerField(read_only=True, source='id')
 | 
				
			||||||
    state       = serializers.CharField(read_only=True, source='str_state')
 | 
					    state       = serializers.CharField(read_only=True, source='str_state')
 | 
				
			||||||
    price       = serializers.SerializerMethodField()
 | 
					    price       = serializers.SerializerMethodField()
 | 
				
			||||||
| 
						 | 
					@ -152,4 +151,34 @@ class VirtualMachineSerializer(serializers.Serializer):
 | 
				
			||||||
    def get_configuration(self, obj):
 | 
					    def get_configuration(self, obj):
 | 
				
			||||||
        template_id = obj.template.template_id
 | 
					        template_id = obj.template.template_id
 | 
				
			||||||
        template = OpenNebulaManager().get_template(template_id)
 | 
					        template = OpenNebulaManager().get_template(template_id)
 | 
				
			||||||
        return template.name
 | 
					        return template.name.strip('public-')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_ipv4(self, obj):
 | 
				
			||||||
 | 
					        nic = obj.template.nics[0]
 | 
				
			||||||
 | 
					        if 'vm-ipv6-nat64-ipv4' in nic.network and is_in_v4_range(nic.mac):
 | 
				
			||||||
 | 
					            return str(v4_from_mac(nic.mac))
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return '-'
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    def get_ipv6(self, obj):
 | 
				
			||||||
 | 
					        nic = obj.template.nics[0]
 | 
				
			||||||
 | 
					        return nic.ip6_global
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def hexstr2int(string):
 | 
				
			||||||
 | 
					    return int(string.replace(':', ''), 16)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FIRST_MAC = hexstr2int('02:00:b3:39:79:4d')
 | 
				
			||||||
 | 
					FIRST_V4  = ipaddress.ip_address('185.203.112.2')
 | 
				
			||||||
 | 
					COUNT     = 1000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def v4_from_mac(mac):
 | 
				
			||||||
 | 
					    """Calculates the IPv4 address from a MAC address.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    mac: string (the colon-separated representation)
 | 
				
			||||||
 | 
					    returns: ipaddress.ip_address object with the v4 address
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    return FIRST_V4 + (hexstr2int(mac) - FIRST_MAC)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def is_in_v4_range(mac):
 | 
				
			||||||
 | 
					    return FIRST_MAC <= hexstr2int(mac) < FIRST_MAC + 1000
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue