new files added

legacy
Steve L. Nyemba 4 years ago
parent bf85f3fa5c
commit 2b0209f004

@ -5,7 +5,7 @@ body {
}
.small {font-size:12px; color:gray; font-weight:lighter}
.small {font-size:12px; font-weight:lighter}
.bold {font-weight:bold}
.black {color:#000000}
.fa-times {color:maroon}
@ -52,8 +52,27 @@ body {
margin:4px;
}
.action {
cursor:pointer;
padding:4px;
padding-left:10px;
padding-right:10px;
border-radius:4px;
-webkit-border-radius:4px;
-moz-border-radius:4px;
font-weight:bold;
color:#FFFFFF;
background-color:#4682B4;
border:2px solid #CAD5E0;
}
.action:hover .small {color:#4682B4}
.action:hover { background-color:#FFFFFF; color:#4682B4 ;
border:2px solid #4682B4;
}
.ofooter {
.footer {
display:grid;
grid-template-columns: 115px auto 115px;
gap:2px;

@ -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}

@ -0,0 +1,6 @@
<?xml version="1.0" ?><svg id="Layer_1" style="enable-background:new 0 0 156 128;" version="1.1" viewBox="0 0 156 128" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><style type="text/css">
.st0{clip-path:url(#SVGID_2_);fill:#246EA9;}
.st1{clip-path:url(#SVGID_4_);fill:#FFFFFE;}
.st2{clip-path:url(#SVGID_6_);fill:#FFFFFE;}
.st3{fill:#246EA9;}
</style><g><g><defs><path d="M13.9,29.3c0-3.3,2.7-6,6-6h116c3.3,0,6,2.7,6,6v68c0,3.3-2.7,6-6,6h-116c-3.3,0-6-2.7-6-6V29.3z" id="SVGID_1_"/></defs><clipPath id="SVGID_2_"><use style="overflow:visible;" xlink:href="#SVGID_1_"/></clipPath><path class="st0" d="M13.9,29.3c0-3.3,2.7-6,6-6h116c3.3,0,6,2.7,6,6v68c0,3.3-2.7,6-6,6h-116c-3.3,0-6-2.7-6-6V29.3z"/></g></g><g><defs><path d="M140.5,72.6h-6.4c-0.6,0-1.1,0-1.4,0.3c-0.4,0.2-0.5,0.6-0.5,1.1c0,0.6,0.3,0.9,0.8,1.1 c0.4,0.1,0.8,0.2,1.3,0.2l1.9,0c1.9,0.1,3.2,0.4,4,1.2c0.1,0.1,0.2,0.2,0.3,0.4V72.6z M140.5,82.3c-0.9,1.3-2.5,1.9-4.8,1.9h-6.8 V81h6.8c0.7,0,1.1-0.1,1.4-0.4c0.2-0.2,0.4-0.5,0.4-1c0-0.4-0.2-0.8-0.4-1c-0.3-0.2-0.6-0.3-1.2-0.3c-3.3-0.1-7.4,0.1-7.4-4.6 c0-2.1,1.4-4.4,5-4.4h7v-2.9H134c-2,0-3.4,0.5-4.4,1.2v-1.2h-9.6c-1.5,0-3.3,0.4-4.2,1.2l0-1.2H98.6v1.2c-1.4-1-3.7-1.2-4.7-1.2 H82.5v1.2c-1.1-1-3.5-1.2-5-1.2H64.9L62,69.7l-2.7-3.1H40.3v20.5h18.6l3-3.2l2.8,3.2l11.5,0v-4.8h1.1c1.5,0,3.3,0,4.9-0.7v5.5h9.5 v-5.3h0.5c0.6,0,0.6,0,0.6,0.6v4.7h28.7c1.8,0,3.7-0.5,4.8-1.3v1.3h9.1c1.9,0,3.7-0.3,5.2-0.9V82.3z M126.4,76.4 c0.7,0.7,1.1,1.6,1.1,3.1c0,3.2-2,4.6-5.5,4.6h-6.9V81h6.8c0.7,0,1.1-0.1,1.4-0.4c0.2-0.2,0.4-0.5,0.4-1c0-0.4-0.2-0.8-0.4-1 c-0.3-0.2-0.6-0.3-1.3-0.3c-3.3-0.1-7.4,0.1-7.4-4.6c0-2.1,1.3-4.4,5-4.4h7v3.1h-6.4c-0.7,0-1.1,0-1.4,0.3 c-0.4,0.2-0.5,0.6-0.5,1.1c0,0.6,0.3,0.9,0.8,1.1c0.4,0.1,0.8,0.2,1.4,0.2l1.9,0C124.4,75.3,125.6,75.6,126.4,76.4z M94.7,75.5 c-0.5,0.3-1.1,0.3-1.7,0.3h-4.3v-3.3h4.3c0.6,0,1.3,0,1.7,0.3c0.5,0.2,0.7,0.7,0.7,1.3C95.5,74.7,95.2,75.2,94.7,75.5z M96.9,77.3 c0.8,0.3,1.4,0.8,1.7,1.2c0.5,0.7,0.6,1.4,0.6,2.7v2.9h-3.5v-1.8c0-0.9,0.1-2.2-0.6-2.9c-0.5-0.5-1.3-0.7-2.6-0.7h-3.8v5.4h-3.5 V69.5h8.1c1.8,0,3.1,0.1,4.2,0.7c1.1,0.7,1.8,1.6,1.8,3.3C99.3,75.8,97.8,77,96.9,77.3z M101.3,69.5H113v3.1h-8.2v2.7h8v3h-8v2.9 l8.2,0v3.1h-11.7V69.5z M77.6,76.3H73v-3.7h4.6c1.3,0,2.1,0.5,2.1,1.8C79.8,75.6,78.9,76.3,77.6,76.3z M69.5,82.9l-5.4-6l5.4-5.8 V82.9z M55.6,81.1H47v-2.9h7.7v-3H47v-2.7h8.8l3.8,4.3L55.6,81.1z M83.5,74.3c0,4.1-3,4.9-6.1,4.9H73v4.9h-6.8l-4.3-4.9l-4.5,4.9 H43.5V69.5h14.1l4.3,4.8l4.5-4.8h11.2C80.4,69.5,83.5,70.3,83.5,74.3z" id="SVGID_3_"/></defs><clipPath id="SVGID_4_"><use style="overflow:visible;" xlink:href="#SVGID_3_"/></clipPath><rect class="st1" height="30.5" width="110.2" x="35.3" y="61.6"/></g><g><g><defs><path d="M26.7,52.5l-2.4-5.9l-2.4,5.9H26.7z M79.7,50.2c-0.5,0.3-1.1,0.3-1.7,0.3h-4.3v-3.3H78 c0.6,0,1.3,0,1.7,0.3c0.5,0.2,0.7,0.7,0.7,1.3C80.4,49.5,80.1,50,79.7,50.2z M110.2,52.5l-2.4-5.9l-2.4,5.9H110.2z M53.4,58.9 h-3.6l0-11.5l-5.1,11.5h-3.1l-5.1-11.5v11.5h-7.1L28,55.6h-7.3l-1.4,3.3h-3.8l6.3-14.7H27l6,13.9V44.2h5.7l4.6,10l4.2-10h5.8 V58.9z M67.7,58.9H56V44.2h11.7v3.1h-8.2v2.6h8v3l-8,0v2.9h8.2V58.9z M84.3,48.1c0,2.3-1.6,3.6-2.5,3.9c0.8,0.3,1.4,0.8,1.7,1.2 c0.5,0.7,0.6,1.4,0.6,2.7v2.9h-3.5l0-1.9c0-0.9,0.1-2.2-0.6-2.9c-0.5-0.5-1.3-0.6-2.6-0.6h-3.8v5.3h-3.5V44.2h8.1 c1.8,0,3.1,0.1,4.3,0.7C83.6,45.5,84.3,46.5,84.3,48.1z M86.3,58.9h3.6V44.2h-3.6V58.9z M131.5,58.9h-5l-6.7-11l0,11h-7.2 l-1.4-3.3H104l-1.3,3.3h-4.1c-1.7,0-3.9-0.4-5.1-1.6c-1.2-1.3-1.9-2.9-1.9-5.6c0-2.2,0.4-4.2,1.9-5.7c1.1-1.2,2.9-1.7,5.3-1.7 h3.4v3.1h-3.3c-1.3,0-2,0.2-2.7,0.9c-0.6,0.6-1,1.8-1,3.3c0,1.6,0.3,2.7,1,3.5c0.5,0.6,1.5,0.8,2.4,0.8h1.6l5-11.6h5.3l5.9,13.9 V44.2h5.4l6.2,10.2V44.2h3.6V58.9z M15.4,61.8h6l1.4-3.3h3l1.3,3.3H39v-2.5l1.1,2.5h6.1l1-2.5v2.5h29.4l0-5.4h0.6 c0.4,0,0.5,0.1,0.5,0.7v4.7h15.2v-1.3c1.2,0.7,3.1,1.3,5.6,1.3h6.4l1.4-3.3h3l1.3,3.3h12.3v-3.1l1.9,3.1h9.9V41.3h-9.8v2.4 l-1.4-2.4h-10v2.4l-1.3-2.4H98.7c-2.3,0-4.3,0.3-5.9,1.2v-1.2h-9.3v1.2c-1-0.9-2.4-1.2-4-1.2H45.4l-2.3,5.3l-2.3-5.3H30v2.4 l-1.2-2.4h-9.2L15.4,51V61.8z" id="SVGID_5_"/></defs><clipPath id="SVGID_6_"><use style="overflow:visible;" xlink:href="#SVGID_5_"/></clipPath><rect class="st2" height="30.5" width="129.2" x="10.4" y="36.3"/></g><rect class="st3" height="14.7" width="3.6" x="86.3" y="44.2"/></g></svg>

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 &copy; <span class="year"></span> The Phi Technology LLC</div>
</div>
</body>
Loading…
Cancel
Save