parent
							
								
									bf85f3fa5c
								
							
						
					
					
						commit
						2b0209f004
					
				@ -0,0 +1,107 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					img {width:48px}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.default {font-size:16px;
 | 
				
			||||||
 | 
					    font-family: sans-serif;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.store-button {
 | 
				
			||||||
 | 
					    width:auto;
 | 
				
			||||||
 | 
					    padding:6px;
 | 
				
			||||||
 | 
					    font-weight:bold;
 | 
				
			||||||
 | 
					    border-radius:8px;
 | 
				
			||||||
 | 
					    border:2px solid #4682b4;
 | 
				
			||||||
 | 
					    background-color:#4682b4;
 | 
				
			||||||
 | 
					    color:white;
 | 
				
			||||||
 | 
					    cursor:pointer;
 | 
				
			||||||
 | 
					    text-align:center;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.store-button .text {color:#ffffff}
 | 
				
			||||||
 | 
					.store-button:hover {
 | 
				
			||||||
 | 
					    background-color:#ffffff;
 | 
				
			||||||
 | 
					    color:#4682b4;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.store-button:hover .text { color :#4682B4;}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.active {
 | 
				
			||||||
 | 
					    padding:4px;
 | 
				
			||||||
 | 
					    cursor:pointer;
 | 
				
			||||||
 | 
					    border-bottom:2px solid transparent ;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.active:hover { border-bottom:2px solid #4682B4}
 | 
				
			||||||
 | 
					.current-plan {
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    border-color: #20B2AA #20B2AA transparent transparent;
 | 
				
			||||||
 | 
					    border-style: solid;
 | 
				
			||||||
 | 
					    border-width: 15px 15px 15px 15px;
 | 
				
			||||||
 | 
					    height: 0px;
 | 
				
			||||||
 | 
					    width: 0px;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.bold { font-weight:bold; }
 | 
				
			||||||
 | 
					.caption {
 | 
				
			||||||
 | 
					    font-size:28px; font-weight:bold ;
 | 
				
			||||||
 | 
					    font-family:sans-serif;
 | 
				
			||||||
 | 
					    text-transform:capitalize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					.medium-caption {
 | 
				
			||||||
 | 
					    font-size:18px;
 | 
				
			||||||
 | 
					    font-weight:lighter;
 | 
				
			||||||
 | 
					    font-family:sans-serif ;
 | 
				
			||||||
 | 
					    text-transform:capitalize;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.plan {		
 | 
				
			||||||
 | 
					    padding:4px;
 | 
				
			||||||
 | 
					    margin:4px;
 | 
				
			||||||
 | 
					    border-radius: 4px;
 | 
				
			||||||
 | 
					    border:1px solid #CAD5E0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.pricing  {
 | 
				
			||||||
 | 
					    display:grid;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    grid-template-columns: repeat(auto-fit,minmax(250px, 1fr) );
 | 
				
			||||||
 | 
					    ;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /* align-content:center; */
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					 .header {
 | 
				
			||||||
 | 
					    display:grid;
 | 
				
			||||||
 | 
					    grid-template-columns: 50% auto;
 | 
				
			||||||
 | 
					    grid-template-rows: 100px;
 | 
				
			||||||
 | 
					    gap:2px;
 | 
				
			||||||
 | 
					    align-items: center;
 | 
				
			||||||
 | 
					    margin-left:25%;
 | 
				
			||||||
 | 
					    margin-right:25%;
 | 
				
			||||||
 | 
					    margin-bottom:2%;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.header img {width:100px}
 | 
				
			||||||
 | 
					.pricing-frame {
 | 
				
			||||||
 | 
					    display:grid;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    margin-left:10%;
 | 
				
			||||||
 | 
					    margin-right:10%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    height:70%;
 | 
				
			||||||
 | 
					    align-content:center;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.footer {
 | 
				
			||||||
 | 
					    bottom:10px;
 | 
				
			||||||
 | 
					    position:fixed;
 | 
				
			||||||
 | 
					    width: 80%;
 | 
				
			||||||
 | 
					    padding:8spx;
 | 
				
			||||||
 | 
					    text-align:center;
 | 
				
			||||||
 | 
					    display:grid;
 | 
				
			||||||
 | 
					    grid-template-columns: 10% auto 10%;
 | 
				
			||||||
 | 
					    grid-gap: 2px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.plan .title { 
 | 
				
			||||||
 | 
					    display:grid;
 | 
				
			||||||
 | 
					    grid-template-columns: auto 32px; 
 | 
				
			||||||
 | 
					    grid-gap:2px;
 | 
				
			||||||
 | 
					    font-size:24px; font-family:verdana; text-transform: capitalize; border-bottom:1px solid #CAD5E0;  }
 | 
				
			||||||
 | 
					.plan .feature {display:grid; grid-template-columns: 60% 40%; grid-gap:2px; margin:2px;}
 | 
				
			||||||
 | 
					.plan .feature .label {text-transform: uppercase; grid-column:1; font-size:14px;}
 | 
				
			||||||
 | 
					.plan .feature .status {font-size:20px; text-align: right; font-size:14px;}
 | 
				
			||||||
@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					.theme-raspberry{
 | 
				
			||||||
 | 
					    background: #00B4DB;  /* fallback for old browsers */
 | 
				
			||||||
 | 
					    background: -webkit-linear-gradient(to bottom, #0083B0, #00B4DB);  /* Chrome 10-25, Safari 5.1-6 */
 | 
				
			||||||
 | 
					    background: linear-gradient(to bottom, #0083B0, #00B4DB); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
 | 
				
			||||||
 | 
					    color:#ffffff;
 | 
				
			||||||
 | 
					    font-family:verdana;
 | 
				
			||||||
 | 
					    font-weight:lighter;
 | 
				
			||||||
 | 
					    text-transform:capitalize;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.theme-dark-ocean {
 | 
				
			||||||
 | 
					    background: #373B44;  /* fallback for old browsers */
 | 
				
			||||||
 | 
					    background: -webkit-linear-gradient(to bottom, #4682B4, #d3d3d3);  /* Chrome 10-25, Safari 5.1-6 */
 | 
				
			||||||
 | 
					    background: linear-gradient(to bottom, #4682B4, #d3d3d3); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
 | 
				
			||||||
 | 
					    color:#f3f3f3;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.theme-gray {
 | 
				
			||||||
 | 
					    background: #bdc3c7;  /* fallback for old browsers */
 | 
				
			||||||
 | 
					    background: -webkit-linear-gradient(to bottom, #2c3e50, #bdc3c7);  /* Chrome 10-25, Safari 5.1-6 */
 | 
				
			||||||
 | 
					    background: linear-gradient(to bottom, #2c3e50, #bdc3c7); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
 | 
				
			||||||
 | 
					    color:#f3f3f3f3;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.theme-clouds {
 | 
				
			||||||
 | 
					    background: #ECE9E6;  /* fallback for old browsers */
 | 
				
			||||||
 | 
					    background: -webkit-linear-gradient(to bottom, #FFFFFF, #D3D3D3);  /* Chrome 10-25, Safari 5.1-6 */
 | 
				
			||||||
 | 
					    background: linear-gradient(to bottom, #FFFFFF, #D3D3D3); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.theme-dark-ocean .fa-check {color:green; font-size:18px}
 | 
				
			||||||
| 
		 After Width: | Height: | Size: 4.3 KiB  | 
@ -0,0 +1,462 @@
 | 
				
			|||||||
 | 
					<meta charset="UTF-8">
 | 
				
			||||||
 | 
					<meta http-equiv="cache-control" content="no-cache">
 | 
				
			||||||
 | 
					<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1">
 | 
				
			||||||
 | 
					{% if product.images|length > 0 %}
 | 
				
			||||||
 | 
						<link rel="shortcut icon" href="{{product.images[0]}}">
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
						<link rel="shortcut icon" href="{{context}}/static/img/logo-0.png">
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="{{context}}/static/css/default.css" type="text/css">
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="{{context}}/static/css/borders.css" type="text/css">
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="{{context}}/static/css/dialog.css" type="text/css">
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="{{context}}/static/css/themes.css" type="text/css">
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="{{context}}/static/css/plans.css" type="text/css">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<!-- <script src="https://kit.fontawesome.com/ab15160345.js" crossorigin="anonymous"></script> -->
 | 
				
			||||||
 | 
					<link href="{{context}}/static/css/fa/css/all.css" type="text/css" rel="stylesheet">
 | 
				
			||||||
 | 
					<script src="{{context}}/static/css/fa/js/all.js"></script>
 | 
				
			||||||
 | 
					<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
 | 
				
			||||||
 | 
					<!--
 | 
				
			||||||
 | 
					<link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.css" />
 | 
				
			||||||
 | 
					<link type="text/css" rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid-theme.min.css" /> 
 | 
				
			||||||
 | 
					<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.js"></script>
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{ context }}/static/js/jquery/jquery.min.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{ context }}/static/js/jx/rpc.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{ context }}/static/js/jx/utils.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{ context }}/static/js/jx/dom.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{ context }}/static/js/jx/ext/modal.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{ context }}/static/js/jx/ext/math.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{ context }}/static/js/jx/ext/cloud-view.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript" src="{{context}}/static/js/payment.js"></script>
 | 
				
			||||||
 | 
					<script src="{{context}}/static/js/jsgrid/jsgrid.js"></script>
 | 
				
			||||||
 | 
					<link href="{{context}}/static/js/jsgrid/jsgrid.css" type="text/css" rel="stylesheet">
 | 
				
			||||||
 | 
					<link href="{{context}}/static/js/jsgrid/jsgrid-theme.css" type="text/css" rel="stylesheet">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style>
 | 
				
			||||||
 | 
					    .layout {
 | 
				
			||||||
 | 
					        display:grid;
 | 
				
			||||||
 | 
					        gap:2px;
 | 
				
			||||||
 | 
					        grid-template-columns: 30% auto;
 | 
				
			||||||
 | 
					        margin-left:20%;
 | 
				
			||||||
 | 
					        margin-right:20%;
 | 
				
			||||||
 | 
					        height:85%;
 | 
				
			||||||
 | 
					        margin-top:5%;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    body {
 | 
				
			||||||
 | 
					        font-size:18px;
 | 
				
			||||||
 | 
					        font-family:sans-serif;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .plan img {width:100px}
 | 
				
			||||||
 | 
					    .plan-info { margin:2px; padding:2px;}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    .active {border-bottom:2px solid transparent}
 | 
				
			||||||
 | 
					    .active:hover {border-bottom:2px solid #FF6500;}
 | 
				
			||||||
 | 
					    .amount {font-family: 'Courier New', Courier, monospace;}
 | 
				
			||||||
 | 
					    .transaction {
 | 
				
			||||||
 | 
					        display:grid;
 | 
				
			||||||
 | 
					        grid-template-columns: 120px 300px 200px auto;
 | 
				
			||||||
 | 
					        gap:2px;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        margin:4px;
 | 
				
			||||||
 | 
					        font-size:14px;
 | 
				
			||||||
 | 
					        text-transform: capitalize;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .transaction :nth-child(2){
 | 
				
			||||||
 | 
					        white-space: nowrap;
 | 
				
			||||||
 | 
					        overflow:hidden;
 | 
				
			||||||
 | 
					        text-overflow: ellipsis;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .transaction :nth-child(4){text-align:center}
 | 
				
			||||||
 | 
					    #payments > div:nth-child(odd){
 | 
				
			||||||
 | 
					        background-color:#f3f3f3;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .history { height:500px; overflow:none; overflow-y:auto; scrollbar-width: thin;}
 | 
				
			||||||
 | 
					    .transaction div {
 | 
				
			||||||
 | 
					        padding:4px;
 | 
				
			||||||
 | 
					        border-left:1px solid #cad5e0;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .transaction :nth-child(1){
 | 
				
			||||||
 | 
					        border-color:transparent;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .stdout {
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        padding:4px;
 | 
				
			||||||
 | 
					        width:99%;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        overflow:hidden;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .stdout .slider {
 | 
				
			||||||
 | 
					        width:299% ;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        display:grid;
 | 
				
			||||||
 | 
					        grid-template-columns: repeat(3,33%);
 | 
				
			||||||
 | 
					        gap:1%;
 | 
				
			||||||
 | 
					        align-items:top;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    input{
 | 
				
			||||||
 | 
					        border:2px solid transparent;
 | 
				
			||||||
 | 
					        background-color:#f3f3f3;
 | 
				
			||||||
 | 
					        padding:8px;
 | 
				
			||||||
 | 
					        outline: 0px;
 | 
				
			||||||
 | 
					        color:#000000;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    input:focus{
 | 
				
			||||||
 | 
					        border-left-color: #FF6500;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .user-info{
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        display:grid;
 | 
				
			||||||
 | 
					        gap:2px;
 | 
				
			||||||
 | 
					        ;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .error {border-color:maroon;}
 | 
				
			||||||
 | 
					    .button {
 | 
				
			||||||
 | 
					        width:auto;
 | 
				
			||||||
 | 
					        padding:6px;
 | 
				
			||||||
 | 
					        font-weight:bold;
 | 
				
			||||||
 | 
					        border-radius:0px;
 | 
				
			||||||
 | 
					        border:2px solid transparent;
 | 
				
			||||||
 | 
					        background-color:#FF6500;
 | 
				
			||||||
 | 
					        color:#ffffff;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        cursor:pointer;
 | 
				
			||||||
 | 
					        text-align:center;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .button .fa-times {color:#ffffff}
 | 
				
			||||||
 | 
					    .button:hover .fa-times {color:maroon}
 | 
				
			||||||
 | 
					    .button .text {color:#ffffff}
 | 
				
			||||||
 | 
					    .button:hover {
 | 
				
			||||||
 | 
					        background-color:#ffffff;
 | 
				
			||||||
 | 
					        color:#FF6500;
 | 
				
			||||||
 | 
					        border-color:#FF6500
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .button:hover .text { color :#FF6500;}
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
 | 
					<script>
 | 
				
			||||||
 | 
					    var me = {}
 | 
				
			||||||
 | 
					    me.plan = {}
 | 
				
			||||||
 | 
					    me.plan.cancel = function(){
 | 
				
			||||||
 | 
					        var httpclient = HttpClient.instance()
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        var url = "{{context}}/{{product.name}}/cancel"
 | 
				
			||||||
 | 
					        httpclient.post(url,function(x){
 | 
				
			||||||
 | 
					            //alert(x.responseText)
 | 
				
			||||||
 | 
					            //if(x.responseText.match(/1/)){
 | 
				
			||||||
 | 
					              window.location.reload()
 | 
				
			||||||
 | 
					            //}else{
 | 
				
			||||||
 | 
					                //
 | 
				
			||||||
 | 
					                // Provide an error message
 | 
				
			||||||
 | 
					            //}
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    me.logout = function(){
 | 
				
			||||||
 | 
					        //var url = "{{context}}/me/logout"
 | 
				
			||||||
 | 
					        var url = ([sessionStorage.store_context,"me/logout"]).join("/")
 | 
				
			||||||
 | 
					        var http = HttpClient.instance()
 | 
				
			||||||
 | 
					        http.post(url,function(x){
 | 
				
			||||||
 | 
					            //window.location = "{{context}}/{{product.name}}/plans"
 | 
				
			||||||
 | 
					            window.location = ([sessionStorage.store_context, sessionStorage.product_name,"plans"]).join("/")
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    me.plan.upgrade = function(){
 | 
				
			||||||
 | 
					        var url = window.location.href.replace(/me$/,'{{product.name}}/plans')
 | 
				
			||||||
 | 
					        window.open(url,'_self')
 | 
				
			||||||
 | 
					        //jx.modal.show(url)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    me.update_card = function(){
 | 
				
			||||||
 | 
					        var inputs = $('input')
 | 
				
			||||||
 | 
					        var values = jx.utils.patterns.visitor(inputs,function(item){
 | 
				
			||||||
 | 
					            return payment.validate({target:item})
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if (jx.math.sum(values) != inputs.length){
 | 
				
			||||||
 | 
					            ;
 | 
				
			||||||
 | 
					        }else{
 | 
				
			||||||
 | 
					            payment.dialog('{{product.metadata.label}}','Updating Card Information','PROGRESS')
 | 
				
			||||||
 | 
					            var url = '{{context}}/me/card'
 | 
				
			||||||
 | 
					            var body = JSON.parse(sessionStorage.customer).info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var http = HttpClient.instance()
 | 
				
			||||||
 | 
					            http.setData(body,"application/json")
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            http.post(url,function(x){
 | 
				
			||||||
 | 
					                if(x.responseText="1"){
 | 
				
			||||||
 | 
					                    window.open("{{context}}/me",'_self')
 | 
				
			||||||
 | 
					                }else{
 | 
				
			||||||
 | 
					                    jx.modal.hide()
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    var plot = function(){
 | 
				
			||||||
 | 
					        var data = {{user.usage|tojson}}
 | 
				
			||||||
 | 
					        var value = parseFloat(100* (data.used / data.size).toFixed(2))        
 | 
				
			||||||
 | 
					        var label = 'Space Used'
 | 
				
			||||||
 | 
					        var options = {
 | 
				
			||||||
 | 
					            series: [value],
 | 
				
			||||||
 | 
					            chart: {
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            type: 'radialBar',
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          plotOptions: {       radialBar: {
 | 
				
			||||||
 | 
					              hollow: {
 | 
				
			||||||
 | 
					                size: '70%',
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          labels: [label]
 | 
				
			||||||
 | 
					          };
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					          var chart = new ApexCharts($('.chart')[0], options);
 | 
				
			||||||
 | 
					          chart.render();    
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    var logs = function(){
 | 
				
			||||||
 | 
					        var options = {}
 | 
				
			||||||
 | 
					        var data = {{payments|tojson}}
 | 
				
			||||||
 | 
					        var m ={}
 | 
				
			||||||
 | 
					        m.date= function(value) { var date =  new Date(value)
 | 
				
			||||||
 | 
					            var div = jx.dom.get.instance('DIV')
 | 
				
			||||||
 | 
					            _months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']            
 | 
				
			||||||
 | 
					            div.innerHTML = ([date.getFullYear(),_months[date.getMonth()],date.getDate()]).join('-')
 | 
				
			||||||
 | 
					            return div
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        m.amount = function(value){
 | 
				
			||||||
 | 
					            var div = jx.dom.get.instance('DIV')
 | 
				
			||||||
 | 
					            div.align='right'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var _amount =  parseFloat((value/100).toFixed(2))
 | 
				
			||||||
 | 
					            div.innerHTML = _amount == 0? '0.00':_amount
 | 
				
			||||||
 | 
					            return div
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        m.status = function(value){ 
 | 
				
			||||||
 | 
					            var _name = value.match(/paid/i)? 'fas fa-check': 'fas fa-times'
 | 
				
			||||||
 | 
					            var icon = jx.dom.get.instance('I')
 | 
				
			||||||
 | 
					            icon.className = _name
 | 
				
			||||||
 | 
					            var div = jx.dom.get.instance('DIV')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            div.append(icon)
 | 
				
			||||||
 | 
					            return div
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        m.default = function(value){
 | 
				
			||||||
 | 
					            var div = jx.dom.get.instance('DIV')
 | 
				
			||||||
 | 
					            div.innerHTML = value
 | 
				
			||||||
 | 
					            return div
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        jx.utils.patterns.visitor(data,function(item){
 | 
				
			||||||
 | 
					            frame = jx.dom.get.instance('DIV')
 | 
				
			||||||
 | 
					            jx.utils.patterns.visitor(['date','label','amount','status'],function(key){
 | 
				
			||||||
 | 
					                var value = item[key]
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                var div = m[key] == null ? m.default(value) : m[key](value)
 | 
				
			||||||
 | 
					                frame.append(div)
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					            if (item.label.match(/{{product.name}}/i) == null){
 | 
				
			||||||
 | 
					                return 
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            frame.className = 'transaction active'
 | 
				
			||||||
 | 
					            frame.data = item
 | 
				
			||||||
 | 
					            frame.onclick = function(){
 | 
				
			||||||
 | 
					                window.open(this.data.hosted,"invoice")
 | 
				
			||||||
 | 
					                //jx.modal.show({url:this.data.pdf})
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            jx.dom.append('payments',frame)
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    $(document).ready(function(){
 | 
				
			||||||
 | 
					        sessionStorage.store_context = "{{context}}"
 | 
				
			||||||
 | 
					        sessionStorage.customer = JSON.stringify({info:{}})
 | 
				
			||||||
 | 
					        var date = new Date()
 | 
				
			||||||
 | 
					        $('.year').html(date.getFullYear())
 | 
				
			||||||
 | 
					        plot()
 | 
				
			||||||
 | 
					        logs()
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					<title style="text-transform: capitalize">Store Front</title>
 | 
				
			||||||
 | 
					<body>
 | 
				
			||||||
 | 
					    <div class="layout">
 | 
				
			||||||
 | 
					        <div class="user">
 | 
				
			||||||
 | 
					            <div class="bold name">{{user.uii}}</div>
 | 
				
			||||||
 | 
					            <div class="email small">{{user.uid}}</div>
 | 
				
			||||||
 | 
					            <p>
 | 
				
			||||||
 | 
					                <div class="border-round border">
 | 
				
			||||||
 | 
					                    <div class="active bold" onclick="$('.slider').animate({marginLeft:0})">
 | 
				
			||||||
 | 
					                        <i class="far fa-folder-open" style="color:green"></i>
 | 
				
			||||||
 | 
					                        Manage Plan
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="active bold" onclick="$('.slider').animate({marginLeft:'-101%'})">
 | 
				
			||||||
 | 
					                        <i class="fas fa-history" style="color:#4682B4;"></i>
 | 
				
			||||||
 | 
					                            Billing History
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <div class="active bold" onclick="$('.slider').animate({marginLeft:'-201%'})">
 | 
				
			||||||
 | 
					                        <i class="fas fa-credit-card"></i>
 | 
				
			||||||
 | 
					                        Payment Method</div>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					                    <div class="active bold" style="color:maroon" onclick="me.logout()">
 | 
				
			||||||
 | 
					                        <i class="fas fa-times" ></i>
 | 
				
			||||||
 | 
					                        Logout</div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					            </p>
 | 
				
			||||||
 | 
					            <div class="cloud border-round border">
 | 
				
			||||||
 | 
					                <div class="bold" align="center" style="text-transform: capitalize;">{{user.sid.replace('-',' ')}}</div>
 | 
				
			||||||
 | 
					                <div class="chart"></div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div style="display:grid; grid-template-rows:64px auto; gap:22px">
 | 
				
			||||||
 | 
					            <div align="center" >
 | 
				
			||||||
 | 
					                <div class="caption">
 | 
				
			||||||
 | 
					                    {% if product.metadata.label %}
 | 
				
			||||||
 | 
					                        {{product.metadata.label}}
 | 
				
			||||||
 | 
					                    {% else %}
 | 
				
			||||||
 | 
					                        {{product.name}}
 | 
				
			||||||
 | 
					                    {% endif %}
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="small border-top">Store Front Management</div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="stdout">
 | 
				
			||||||
 | 
					                <div class="slider">
 | 
				
			||||||
 | 
					                    <div class="plan-management">
 | 
				
			||||||
 | 
					                        <!-- PANE 0: Managing Plan -->
 | 
				
			||||||
 | 
					                        <div class="border-bottom" style="display:grid; grid-template-columns:100px auto; gap:2px; align-items:center">
 | 
				
			||||||
 | 
					                            <img src="{{product.images[0]}}"  style="height:100px; width:auto"/>
 | 
				
			||||||
 | 
					                            <div>
 | 
				
			||||||
 | 
					                                <div class="bold">Current Plan</div>
 | 
				
			||||||
 | 
					                                {% if plan %}
 | 
				
			||||||
 | 
					                                    <div class="caption">{{plan.nickname}}</div>
 | 
				
			||||||
 | 
					                                {% else %}
 | 
				
			||||||
 | 
					                                    <div><i class="fas fa-times"></i> No Subscription Available</div>
 | 
				
			||||||
 | 
					                                {% endif %}
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <div class="" style="margin-left:32px; margin-top:32px; display:grid; grid-template-columns: auto auto; gap:2px; align-items:center" align="left">
 | 
				
			||||||
 | 
					                            {% if plan %}
 | 
				
			||||||
 | 
					                                <div class=""> $ <span class="bold amount">{{'%0.2f'| format(plan.amount/100|float)}}</span> per <span class="" style="text-transform: capitalize;">{{plan.recurring.interval[:]}}</span></div>
 | 
				
			||||||
 | 
					                            {% else %}
 | 
				
			||||||
 | 
					                                <div></div>
 | 
				
			||||||
 | 
					                            {% endif %}
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <p></p>
 | 
				
			||||||
 | 
					                        {% if plan %}
 | 
				
			||||||
 | 
					                            <div style="margin-left:50%">
 | 
				
			||||||
 | 
					                                <div class="small" align="center">Plan</div>
 | 
				
			||||||
 | 
					                                <div style="display:grid; grid-template-columns:50% 50%; gap:4px;">
 | 
				
			||||||
 | 
					                                    <div class="button" align="center" onclick="me.plan.cancel()">
 | 
				
			||||||
 | 
					                                        <i class="fas fa-times"></i> Cancel
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					                                    <div class="button" align="center" onclick="me.plan.upgrade()">
 | 
				
			||||||
 | 
					                                        <i class="fas fa-upload"></i> Upgrade
 | 
				
			||||||
 | 
					                                    </div>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        {% else %}
 | 
				
			||||||
 | 
					                            <div style="margin-left:75%">
 | 
				
			||||||
 | 
					                                <div class="button" onclick="me.plan.upgrade()" style="margin:4px">
 | 
				
			||||||
 | 
					                                    <i class="fas fa-user-plus"></i>
 | 
				
			||||||
 | 
					                                    Signup
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        {% endif %}
 | 
				
			||||||
 | 
					                        <p>
 | 
				
			||||||
 | 
					                            <ul class="small" style="margin-top:15%; color:maroon; align-items:flex-end">
 | 
				
			||||||
 | 
					                                <li type="square">Cancellation of plans will be prorated</li>
 | 
				
			||||||
 | 
					                            </ul>
 | 
				
			||||||
 | 
					                        </p>
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="billing-history">
 | 
				
			||||||
 | 
					                        <!-- PANE 1: BILLING HISTORY -->
 | 
				
			||||||
 | 
					                        <div class="bold">Billing History</div><p></p>
 | 
				
			||||||
 | 
					                            <div class="border" style="padding:0px">
 | 
				
			||||||
 | 
					                                <div class="transaction  bold" style="">
 | 
				
			||||||
 | 
					                                    <div style="border-color:transparent" align="center">Date</div>
 | 
				
			||||||
 | 
					                                    <div  align="center">label</div>
 | 
				
			||||||
 | 
					                                    <div  align="center">Amount</div>
 | 
				
			||||||
 | 
					                                    <div  align="center">Status</div>
 | 
				
			||||||
 | 
					                                    
 | 
				
			||||||
 | 
					                                </div>  
 | 
				
			||||||
 | 
					                            </div>                      
 | 
				
			||||||
 | 
					                            <div class="history border" style="border-top-color:transparent; padding:0px;">
 | 
				
			||||||
 | 
					                                <div class="history" style="height:98%">
 | 
				
			||||||
 | 
					                                    <div id="payments"></div>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                                    
 | 
				
			||||||
 | 
					                                
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div>
 | 
				
			||||||
 | 
					                        <!-- PANE 2: Card/Payment Info-->
 | 
				
			||||||
 | 
					                        <div class="bold">Payment</div> <p></p>
 | 
				
			||||||
 | 
					                        <div>
 | 
				
			||||||
 | 
					                            
 | 
				
			||||||
 | 
					                            <div class="user-info">
 | 
				
			||||||
 | 
					                                <input type="text" class="email" value="{{user.uid|safe}}" disabled data-pattern="^[-!#-'*+\/-9=?^-~]+(?:\.[-!#-'*+\/-9=?^-~]+)*@[-!#-'*+\/-9=?^-~]+(?:\.[-!#-'*+\/-9=?^-~]+)+$" onkeyup="payment.validate(event)"/>
 | 
				
			||||||
 | 
					                                <input type="text" class="name" placeholder="Name on Card" value="{{user.uii|safe}}" data-pattern="^[a-z,A-Z,-]{3,}\x20{1,}[a-z,A-Z,-]{3,}$" onkeyup="payment.validate(event)"/>
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <br>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                            <div class="card-info">
 | 
				
			||||||
 | 
					                                <div class="number" style="margin-top:2px; margin-bottom:2px; display:grid; gap:2px; grid-template-columns:64px auto;">
 | 
				
			||||||
 | 
					                                    {% if cards %}
 | 
				
			||||||
 | 
					                                        <div class="" style="background:#f3f3f3; display:grid; align-items:center; justify-items:center">
 | 
				
			||||||
 | 
					                                            <img id="pay-icon" src="{{context}}/static/img/cards/{{cards[0].type.lower().replace(' ','-')}}.svg" style="width:32px; vertical-align:middle"/>
 | 
				
			||||||
 | 
					                                        </div>
 | 
				
			||||||
 | 
					                                        <input type="text" style="text-align:right" placeholder="Card Number" class="number" data-pattern="card" onkeyup="payment.validate(event)" value=" *** {{cards[0].number}}"/>
 | 
				
			||||||
 | 
					                                    {% else %}
 | 
				
			||||||
 | 
					                                        <div class="" style="background:#f3f3f3; display:grid; align-items:center; justify-items:center">
 | 
				
			||||||
 | 
					                                            <img id="pay-icon" src="" style="width:32px; vertical-align:middle"/>
 | 
				
			||||||
 | 
					                                        </div>
 | 
				
			||||||
 | 
					                                        <input type="text" style="text-align:right" placeholder="Card Number" class="number" data-pattern="card" onkeyup="payment.validate(event)" value=""/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                    {% endif %}
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                                <div class="expire" style="display:grid; grid-template-columns:50% auto; gap:2px;">
 | 
				
			||||||
 | 
					                                    <input type="text" placeholder="MM/YYYY" class="exp" data-pattern="^(0[1-9]|1[0-2])/20[2-9][0-9]$" onkeyup="payment.validate(event)"/>
 | 
				
			||||||
 | 
					                                    <input type="text" placeholder="CVC" class="cvc" data-pattern="^[0-9]{3,}$" onkeyup="payment.validate(event)"/>
 | 
				
			||||||
 | 
					                                </div>
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <p></p>
 | 
				
			||||||
 | 
					                        <div style="margin-left:75%;">
 | 
				
			||||||
 | 
					                            <div class="button" align="center" style="margin:4px;" onclick="me.update_card()">Update</div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <p></p>
 | 
				
			||||||
 | 
					                        <!--
 | 
				
			||||||
 | 
					                            Add something to signal cards on file  only keep one not more
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        -->
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                        
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="small border-top" style="padding:4px; margin-top:4px;">
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        <div align="center">ALL Rights Reserved © <span class="year"></span> The Phi Technology LLC</div>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</body>
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue