merge SM codes

This commit is contained in:
Abhishek Sinha 2020-09-07 14:38:10 +05:30
commit 540e3db424
6 changed files with 5401 additions and 3397 deletions

3088
components.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,6 @@ body {
background: var(--foreground-color); background: var(--foreground-color);
color: rgba(var(--text-color), 1); color: rgba(var(--text-color), 1);
font-size: 16px; font-size: 16px;
margin: 1.5rem;
} }
a { a {
@ -52,9 +51,13 @@ h5 {
font-size: 0.8rem; font-size: 0.8rem;
} }
h1, h2, h3, h4, h5 { h1,
font-family: "Manrope", sans-serif; h2,
font-weight: 700; h3,
h4,
h5 {
font-family: "Poppins", sans-serif;
font-weight: 600;
} }
p { p {
@ -70,7 +73,7 @@ button {
justify-content: center; justify-content: center;
text-transform: capitalize; text-transform: capitalize;
padding: 0.6rem 1.2rem; padding: 0.6rem 1.2rem;
font-weight: 700; font-weight: 600;
cursor: pointer; cursor: pointer;
border-radius: 0.3rem; border-radius: 0.3rem;
color: var(--accent-color); color: var(--accent-color);
@ -78,7 +81,7 @@ button {
border: none; border: none;
background: rgba(var(--text-color), 0.1); background: rgba(var(--text-color), 0.1);
-webkit-tap-highlight-color: transparent; -webkit-tap-highlight-color: transparent;
font-family: "Manrope", sans-serif; font-family: "Poppins", sans-serif;
} }
button:focus { button:focus {
outline: thin solid rgba(var(--text-color-light), 0.4); outline: thin solid rgba(var(--text-color-light), 0.4);
@ -158,6 +161,18 @@ input:invalid {
gap: 1em; gap: 1em;
} }
.align-center {
align-items: center;
}
.direction-column {
flex-direction: column;
}
.space-between {
justify-content: space-between;
}
.label { .label {
margin-bottom: 0.4rem; margin-bottom: 0.4rem;
} }
@ -474,28 +489,35 @@ form {
margin-bottom: 1.5rem !important; margin-bottom: 1.5rem !important;
} }
#confirmation, #prompt { #confirmation,
#prompt {
flex-direction: column; flex-direction: column;
} }
#confirmation p, #prompt p { #confirmation p,
#prompt p {
margin: 1rem; margin: 1rem;
} }
#confirmation h4, #prompt h4 { #confirmation h4,
#prompt h4 {
font-weight: 500; font-weight: 500;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
#confirmation .input, #prompt .input { #confirmation .input,
#prompt .input {
margin-bottom: 1rem; margin-bottom: 1rem;
} }
#confirmation .btns, #prompt .btns { #confirmation .btns,
#prompt .btns {
display: flex; display: flex;
justify-content: right; justify-content: right;
width: 100%; width: 100%;
} }
#confirmation .btns button, #prompt .btns button { #confirmation .btns button,
#prompt .btns button {
background: none; background: none;
} }
#confirmation .btns button:first-of-type, #prompt .btns button:first-of-type { #confirmation .btns button:first-of-type,
#prompt .btns button:first-of-type {
margin-right: 0.6em; margin-right: 0.6em;
} }
@ -530,21 +552,11 @@ form {
#main_header { #main_header {
align-items: center; align-items: center;
padding: 1em 0; padding: 1rem;
justify-content: space-between; justify-content: space-between;
} }
#main_header #display_balance {
display: grid; #display_balance .icon {
grid-template-columns: 1fr auto;
grid-template-areas: "title title" " . .";
gap: 0.3rem 0.5rem;
align-items: center;
text-align: right;
}
#main_header #display_balance h5 {
grid-area: title;
}
#main_header #display_balance .icon {
height: 1.4rem; height: 1.4rem;
width: 1.4rem; width: 1.4rem;
padding: 0.3rem; padding: 0.3rem;
@ -607,66 +619,114 @@ form {
stroke-width: 4; stroke-width: 4;
} }
#home_page h1 { #home_page {
margin-bottom: 0; padding: 1rem 0 4rem 0;
font-weight: 800; }
#home_page .left h4 {
padding: 0 1.5rem;
}
#home_page sm-carousel::part(carousel) {
padding: 0 1.5rem;
} }
#home_page p { #home_page p {
margin-bottom: 3rem; margin-bottom: 3rem;
} }
#home_page h2 {
margin-bottom: 1rem; #user_panel {
position: relative;
padding: 1.5rem;
margin: 0 1.5rem;
border-radius: 0.6rem;
background: linear-gradient(160deg, #ffffff10 50%, #00000040 80%), linear-gradient(-120deg, #ffffff10 50%, #00000040 10%), rgba(var(--text-color), 0.8);
box-shadow: 0 0.1rem 0.6rem #00000020;
color: rgba(var(--foreground-color), 1);
}
#user_panel .icon {
stroke: rgba(var(--foreground-color), 1);
}
#user_panel::before, #user_panel::after {
content: "";
position: absolute;
height: 2rem;
bottom: 0.8rem;
box-shadow: 0 1rem 0.2rem #00000030;
z-index: -1;
border-radius: 0.4rem;
}
#user_panel::before {
left: 0;
right: 50%;
transform: rotate(-3deg);
}
#user_panel::after {
left: 50%;
right: 0;
transform: rotate(3deg);
}
#user_panel .copy-row {
margin-bottom: 1.5rem;
}
#user_panel .grid {
margin-top: 0.5rem;
grid-template-columns: 1fr 1fr;
}
#user_panel .grid h5 {
font-weight: 500;
color: rgba(var(--foreground-color), 0.8);
}
#user_type {
font-weight: 500;
color: rgba(var(--foreground-color), 0.9);
} }
.options-tab { .options-tab {
display: flex; margin: 1rem 0;
margin-top: 1rem;
margin-bottom: 1rem;
flex-wrap: wrap;
} }
.options-tab .option { .options-tab .option {
display: inline-flex; position: relative;
display: flex;
flex-direction: column; flex-direction: column;
align-items: center;
text-align: center;
border-radius: 0.4rem; border-radius: 0.4rem;
padding: 1.5rem;
margin-right: 1rem; margin-right: 1rem;
margin-bottom: 1rem; margin-bottom: 1rem;
width: 10rem; width: 5rem;
box-shadow: 0 1px 0.1rem #00000030, 0 0 0.4rem #00000016; min-width: 5rem;
text-transform: capitalize; text-transform: capitalize;
transition: transform 0.3s; transition: transform 0.3s;
cursor: pointer; cursor: pointer;
} }
.options-tab .option .icon { .options-tab .option .icon {
height: 2.8rem; height: 3rem;
width: 2.8rem; width: 3rem;
padding: 0.8rem; padding: 0.8rem;
border-radius: 2rem; border-radius: 4rem;
margin-bottom: 1rem; margin-bottom: 0.5rem;
stroke: rgba(var(--text-color), 0.4); stroke: rgba(var(--foreground-color), 1);
}
.options-tab .option h4 {
font-size: 0.9rem;
font-weight: 500;
} }
.options-tab .option:active { .options-tab .option:active {
transform: scale(0.95); transform: scale(0.95);
} }
.options-tab .option:nth-of-type(1) .icon { .options-tab .option:nth-of-type(1) .icon {
background: #ffe5ea; background: #D32F2F;
stroke: #af0f2c;
} }
.options-tab .option:nth-of-type(2) .icon { .options-tab .option:nth-of-type(2) .icon {
background: #fff9d5; background: #7B1FA2;
stroke: #e69620;
} }
.options-tab .option:nth-of-type(3) .icon { .options-tab .option:nth-of-type(3) .icon {
background: #e5ffe3; background: #303F9F;
stroke: #189b0f;
} }
.options-tab .option:nth-of-type(4) .icon { .options-tab .option:nth-of-type(4) .icon {
background: #e4fbff; background: #1976D2;
stroke: #0b8ea5;
} }
.options-tab .option:nth-of-type(5) .icon { .options-tab .option:nth-of-type(5) .icon {
background: #efe5ff; background: #388E3C;
stroke: #10359b;
} }
.notification-dot::after { .notification-dot::after {
@ -686,7 +746,8 @@ form {
transform: scale(0); transform: scale(0);
} }
#deposit .container-header, #withdraw .container-header { #deposit .container-header,
#withdraw .container-header {
background: linear-gradient(rgba(var(--foreground-color), 1) 90%, transparent); background: linear-gradient(rgba(var(--foreground-color), 1) 90%, transparent);
} }
@ -708,7 +769,8 @@ sm-tab-header {
margin-bottom: 0.2rem; margin-bottom: 0.2rem;
text-transform: capitalize; text-transform: capitalize;
} }
.request h3, .request h4 { .request h3,
.request h4 {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
.request h4:last-of-type { .request h4:last-of-type {
@ -763,11 +825,11 @@ sm-tab-header {
display: grid; display: grid;
gap: 1em; gap: 1em;
width: 100%; width: 100%;
grid-template-columns: 1fr; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr));
} }
.page { .page {
padding: 2rem 0; padding: 1rem 1.5rem;
padding-bottom: 4rem; padding-bottom: 4rem;
} }
.page .container-header { .page .container-header {
@ -850,7 +912,8 @@ sm-tab-header {
.complaint .unprocessed { .complaint .unprocessed {
color: #d43125; color: #d43125;
} }
.complaint .processed, .complaint .unprocessed { .complaint .processed,
.complaint .unprocessed {
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
} }
.complaint button .icon { .complaint button .icon {
@ -874,7 +937,8 @@ sm-tab-header {
.complaint-placeholder { .complaint-placeholder {
animation: pulse infinite 0.6s alternate; animation: pulse infinite 0.6s alternate;
} }
.complaint-placeholder h4, .complaint-placeholder h5 { .complaint-placeholder h4,
.complaint-placeholder h5 {
border-radius: 0.2rem; border-radius: 0.2rem;
} }
.complaint-placeholder h5 { .complaint-placeholder h5 {
@ -897,14 +961,56 @@ sm-tab-header {
opacity: 1; opacity: 1;
} }
} }
#main_loader {
box-shadow: none;
background: none;
text-align: center;
align-items: center;
flex-direction: column;
}
#main_loader button {
margin-left: 0;
margin-top: 1.5rem;
}
#main_loader svg {
height: 2rem;
width: 2rem;
stroke: var(--accent-color);
stroke-width: 6;
fill: none;
overflow: visible;
stroke-linecap: round;
stroke-dashoffset: 210;
stroke-dasharray: 210;
justify-self: center;
align-self: center;
margin-bottom: 2rem;
}
#main_loader h3 {
width: 100%;
text-transform: uppercase;
font-weight: 400;
word-spacing: 0.16em;
}
@media only screen and (max-width: 640px) { @media only screen and (max-width: 640px) {
#home_page {
display: grid;
gap: 1.5rem;
grid-template-areas: "." "left";
grid-template-columns: minmax(0, 1fr);
}
#home_page .left {
grid-area: left;
}
sm-select { sm-select {
width: 100%; width: 100%;
} }
} }
@media only screen and (min-width: 640px) { @media only screen and (min-width: 640px) {
body { body {
padding: 1rem 6vw; padding: 0 2rem;
margin-left: 6rem; margin-left: 6rem;
} }
@ -920,10 +1026,6 @@ sm-tab-header {
width: 24rem; width: 24rem;
} }
.container {
grid-template-columns: repeat(2, 1fr);
}
#navbar { #navbar {
justify-content: center; justify-content: center;
flex-direction: column; flex-direction: column;
@ -968,52 +1070,21 @@ sm-tab-header {
#sign_in_popup { #sign_in_popup {
width: 24rem; width: 24rem;
} }
}
#profile_page .copy-row { #profile_page .copy-row {
display: inline-flex; display: inline-flex;
} }
#main_loader { #home_page {
box-shadow: none; display: grid;
background: none; gap: 1.5rem;
text-align: center; grid-template-columns: minmax(0, 1fr) 24rem;
align-items: center;
flex-direction: column;
} }
#main_loader button {
margin-left: 0;
margin-top: 1.5rem;
}
#main_loader svg {
height: 2rem;
width: 2rem;
stroke: var(--accent-color);
stroke-width: 6;
fill: none;
overflow: visible;
stroke-linecap: round;
stroke-dashoffset: 210;
stroke-dasharray: 210;
justify-self: center;
align-self: center;
margin-bottom: 2rem;
}
#main_loader h3 {
width: 100%;
text-transform: uppercase;
font-weight: 400;
word-spacing: 0.16em;
}
#activity_page sm-tab-header { #activity_page sm-tab-header {
margin-bottom: 1rem; margin-bottom: 1rem;
} }
@media only screen and (min-width: 800px) {
.container {
grid-template-columns: repeat(3, 1fr);
} }
@media only screen and (min-width: 800px) {
.complaint { .complaint {
gap: 0 1.5rem; gap: 0 1.5rem;
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
@ -1034,25 +1105,14 @@ sm-tab-header {
flex-direction: column; flex-direction: column;
} }
} }
@media only screen and (min-width: 1280px) {
body {
padding: 1rem 12vw;
}
}
@media only screen and (min-width: 1920px) { @media only screen and (min-width: 1920px) {
body { body {
font-size: 24px; font-size: 24px;
padding: 2rem 20vw;
}
.container {
grid-template-columns: repeat(4, 1fr);
} }
} }
@media only screen and (min-width: 2048px) { @media only screen and (min-width: 2048px) {
body { body {
font-size: 24px; font-size: 24px;
padding: 2rem 30vw;
} }
} }
@media only screen and (max-width: 320px) { @media only screen and (max-width: 320px) {

2
css/main.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

1832
index.html

File diff suppressed because it is too large Load Diff

View File

@ -5,9 +5,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Blockchain UPI</title> <title>Blockchain UPI</title>
<link <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;800;900&family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
href="https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700;800&family=Roboto:wght@400;500;700&display=swap"
rel="stylesheet">
<link rel="stylesheet" href="css/main.css"> <link rel="stylesheet" href="css/main.css">
</head> </head>
@ -45,7 +43,7 @@
<title>Loader</title> <title>Loader</title>
<path d="M72.5,36.5c0,19.88-16.12,36-36,36s-36-16.12-36-36s16.12-36,36-36S72.5,16.62,72.5,36.5" /> <path d="M72.5,36.5c0,19.88-16.12,36-36,36s-36-16.12-36-36s16.12-36,36-36S72.5,16.62,72.5,36.5" />
</svg> </svg>
<h4 id="tip_container">Loading BLOCKCHAIN UPI </h4> <h4 id="tip_container">Loading Blockchain UPI </h4>
<button onclick="signOut()">Reset</button> <button onclick="signOut()">Reset</button>
</div> </div>
</div> </div>
@ -76,10 +74,10 @@
<line x1="64" y1="0" x2="0" y2="64" /> <line x1="64" y1="0" x2="0" y2="64" />
<line x1="64" y1="64" x2="0" y2="0" /> <line x1="64" y1="64" x2="0" y2="0" />
</svg> </svg>
<h4>Transfer Rupee</h4> <h4>Send Rupee</h4>
<button id="send_tokens_btn" class="action expand" type="submit" disabled> <button id="send_tokens_btn" class="action expand" type="submit" disabled>
<h4 class="expand primary-btn"> <h4 class="expand primary-btn">
transfer Send
</h4> </h4>
<svg viewBox="0 0 73 73" class="loader"> <svg viewBox="0 0 73 73" class="loader">
<path <path
@ -88,8 +86,8 @@
</button> </button>
</div> </div>
<p> <p>
Transfer your deposited Rupee tokens to any FLO address.<br> Send Rupees to any FLO address.<br>
*Requires token to be deposited first. *Requires Rupee to be deposited first.
</p> </p>
<form autocomplete="off" onsubmit="return false"> <form autocomplete="off" onsubmit="return false">
<label class="input"> <label class="input">
@ -123,16 +121,31 @@
</button> </button>
</div> </div>
<form id="deposit_amount_section" autocomplete="off" onsubmit="return false"> <form id="deposit_amount_section" autocomplete="off" onsubmit="return false">
<<<<<<< HEAD
<p> <p>
Deposit rupee through UPI to use as Digital currency powered by blockchain. Deposit rupee through UPI to use as Digital currency powered by blockchain.
</p> </p>
<label class="input"> <label class="input">
=======
<p>
Deposit rupee through UPI to use as digital currency powered by FLO blockchain.
</p>
<label class="input">
>>>>>>> 0e71a98c861cee522e666f8addb47b4806510ee0
<input id="token_amount_to_buy" inputmode="numeric" type="number" min="1" required> <input id="token_amount_to_buy" inputmode="numeric" type="number" min="1" required>
<div class="placeholder">Amount</div> <div class="placeholder">Amount</div>
</label> </label>
</form> </form>
<form id="upi_txId_section" class="hide-completely top-padding" autocomplete="off" onsubmit="return false"> <form id="upi_txId_section" class="hide-completely top-padding" autocomplete="off" onsubmit="return false">
<p id="send_cash_to_deposit"></p> <p id="send_amount_to_deposit"></p>
<div class="copy-row">
<h4 id="send_cash_to_deposit" class="copy"></h4>
<svg class="icon" onclick="copyToClipboard(this.parentNode)" viewBox="0 0 64 64">
<title>Copy</title>
<rect x="16" y="16" width="48" height="48" rx="6" />
<path d="M.5,47.52V6.5a6,6,0,0,1,6-6h41" />
</svg>
</div>
<label class="input"> <label class="input">
<input id="deposited_rupee_txId" required disabled> <input id="deposited_rupee_txId" required disabled>
<div class="placeholder">UPI TxID</div> <div class="placeholder">UPI TxID</div>
@ -160,7 +173,7 @@
</button> </button>
</div> </div>
<p> <p>
Withdraw or redeem your rupee tokens back to your specified UPI address. Withdraw or redeem your Rupee back to your specified UPI address.
</p> </p>
<form autocomplete="off" onsubmit="return false"> <form autocomplete="off" onsubmit="return false">
<label class="input"> <label class="input">
@ -194,7 +207,7 @@
</button> </button>
</div> </div>
<p> <p>
Request for rupee tokens from other's using FLO address. Request Rupee from other's using FLO address.
</p> </p>
<form autocomplete="off" onsubmit="return false"> <form autocomplete="off" onsubmit="return false">
<label class="input"> <label class="input">
@ -228,8 +241,8 @@
</button> </button>
</div> </div>
<p> <p>
Don't have enough token balance? Pay to our cashier through UPI and your cash will be Don't have enough Rupee balance? Pay to our cashier through UPI and your cash will be
transfered as Rupee tokens. sent as Rupee.
</p> </p>
<p id="pay_cashier_info"></p> <p id="pay_cashier_info"></p>
<form autocomplete="off" onsubmit="return false"> <form autocomplete="off" onsubmit="return false">
@ -285,15 +298,6 @@
<h4>BLOCKCHAIN UPI</h4> <h4>BLOCKCHAIN UPI</h4>
</span> </span>
</div> </div>
<div id="display_balance">
<h5>Rupee Balance</h5>
<h4 id="token_balance">0</h4>
<svg class="icon" onclick="refresh_balance(this)" viewBox="0 0 64 64">
<title>refresh balance</title>
<path d="M60.94,43.13A30.87,30.87,0,1,1,59,17.93" />
<polyline points="63.09 0.1 59.3 18.87 40.49 15.08" />
</svg>
</div>
</header> </header>
<nav id="navbar" class="hide-completely"> <nav id="navbar" class="hide-completely">
<div title="homepage" id="home_page_btn" class="user-option navbar-item active" <div title="homepage" id="home_page_btn" class="user-option navbar-item active"
@ -379,7 +383,7 @@
</svg> </svg>
<h5>Complaints</h5> <h5>Complaints</h5>
</div> </div>
<div title="profile page" class="navbar-item" onclick="showPage(this, 'profile_page')"> <div title="profile page" class="navbar-item" onclick="showPage(this, 'settings_page')">
<svg class="icon" id="profile_pic" viewBox="0 0 49.54 61.12"> <svg class="icon" id="profile_pic" viewBox="0 0 49.54 61.12">
<path <path
d="M49.34,19.94c7.73,0,13.26,5.26,13.26,14S58.18,50.14,49.71,50.08,36.82,42.66,36.82,33.93s5.53-14,13.26-14" d="M49.34,19.94c7.73,0,13.26,5.26,13.26,14S58.18,50.14,49.71,50.08,36.82,42.66,36.82,33.93s5.53-14,13.26-14"
@ -388,27 +392,24 @@
d="M43.83,52c-2.34,4.38-9.77,6.64-15.31,9.06-2.29,1-4.11,13-1.53,13a46.06,46.06,0,0,0,23.51,6,40.48,40.48,0,0,0,22.51-6c2.58,0,.76-12-1.53-13-5.54-2.42-13-4.68-15.31-9.06" d="M43.83,52c-2.34,4.38-9.77,6.64-15.31,9.06-2.29,1-4.11,13-1.53,13a46.06,46.06,0,0,0,23.51,6,40.48,40.48,0,0,0,22.51-6c2.58,0,.76-12-1.53-13-5.54-2.42-13-4.68-15.31-9.06"
transform="translate(-25.23 -19.44)" /> transform="translate(-25.23 -19.44)" />
</svg> </svg>
<h5 id="user_type">Cashier</h5> <h5>Settings</h5>
</div> </div>
</nav> </nav>
<main class="hide-completely"> <main class="hide-completely">
<section class="page hide-completely" id="home_page"> <section class="page hide-completely" id="home_page">
<h1>What is Blockchain UPI?</h1> <!--<h1>What is Blockchain UPI?</h1>
<p> <p>
Your Rupee balance is digital footprint of actual cash.<br> Deposit, Withdraw or Pay Rupee digitally Your Rupee balance is digital representation of actual cash on FLO Blockchain.
using a FLO Blockchain address. </p>-->
</p>
<h4>Go ahead and try something</h4> <div class="left">
<h4>Rupee actions</h4>
<div class="options-tab"> <sm-carousel class="options-tab">
<div class="option" onclick="showPopup('cash_transfer')"> <div class="option" onclick="showPopup('cash_transfer')">
<svg class="icon" viewBox="0 0 64 64"> <svg class="icon" viewBox="0 0 64 64">
<title>transfer</title> <path d="M47.28,16.8,29.6,34.64a3.3,3.3,0,0,1-3.59.71L2.5,25.42a3.28,3.28,0,0,1,.26-6.13L59.21.87A3.28,3.28,0,0,1,63.32,5l-18.93,56a3.26,3.26,0,0,1-6.12.18l-6.4-15.68"/>
<polyline
points="17.04 35.97 14.57 33.5 40.15 7.9 32.75 0.5 55.52 0.5 55.52 23.28 48.12 15.87 23.86 40.14 15.88 48.13 8.48 40.72 8.48 63.5 31.25 63.5 23.85 56.1 49.43 30.5 46.96 28.03" />
</svg> </svg>
<h4>Transfer Rupee</h4> <h4>Send</h4>
</div> </div>
<div class="option" onclick="showPopup('deposit_rupee')"> <div class="option" onclick="showPopup('deposit_rupee')">
<svg class="icon banking" viewBox="0 0 52 51.5"> <svg class="icon banking" viewBox="0 0 52 51.5">
@ -421,7 +422,7 @@
<rect x="1" y="6" width="6" height="13.5" rx="2.76" /> <rect x="1" y="6" width="6" height="13.5" rx="2.76" />
<rect x="1" y="28" width="6" height="13.5" rx="2.76" /> <rect x="1" y="28" width="6" height="13.5" rx="2.76" />
</svg> </svg>
<h4>deposit rupee</h4> <h4>deposit</h4>
</div> </div>
<div class="option" onclick="showPopup('withdraw_rupee')"> <div class="option" onclick="showPopup('withdraw_rupee')">
<svg class="icon banking" viewBox="0 0 52 60"> <svg class="icon banking" viewBox="0 0 52 60">
@ -439,7 +440,7 @@
d="M31.06,39.32c0,2.31-1.19,4.2-2.64,4.23s-2.62-1.79-2.62-4.08S27,35.3,28.42,35.24,31.06,37,31.06,39.32Z" d="M31.06,39.32c0,2.31-1.19,4.2-2.64,4.23s-2.62-1.79-2.62-4.08S27,35.3,28.42,35.24,31.06,37,31.06,39.32Z"
transform="translate(-6 -2)" /> transform="translate(-6 -2)" />
</svg> </svg>
<h4>Withdraw rupee</h4> <h4>Withdraw</h4>
</div> </div>
<div class="option" onclick="showPopup('request_rupee')"> <div class="option" onclick="showPopup('request_rupee')">
<svg class="icon" viewBox="0 0 64 64"> <svg class="icon" viewBox="0 0 64 64">
@ -450,7 +451,7 @@
<path <path
d="M32,.5h0A31.5,31.5,0,0,1,63.5,32v0A31.5,31.5,0,0,1,32,63.5H2.48a2,2,0,0,1-2-2V32A31.5,31.5,0,0,1,32,.5Z" /> d="M32,.5h0A31.5,31.5,0,0,1,63.5,32v0A31.5,31.5,0,0,1,32,63.5H2.48a2,2,0,0,1-2-2V32A31.5,31.5,0,0,1,32,.5Z" />
</svg> </svg>
<h4>Request rupee</h4> <h4>Request</h4>
</div> </div>
<div class="option" onclick="showPopup('pay_anyone')"> <div class="option" onclick="showPopup('pay_anyone')">
<svg class="icon" viewBox="0 0 64 64"> <svg class="icon" viewBox="0 0 64 64">
@ -460,6 +461,37 @@
<h4>pay through cashier</h4> <h4>pay through cashier</h4>
</a> </a>
</div> </div>
</sm-carousel>
</div>
<div class="right">
<div id="user_panel">
<h4 id="user_type">User</h4>
<div class="copy-row">
<h4 id="user_flo_id" class="copy"></h4>
<svg class="icon" onclick="copyToClipboard(this.parentNode)" viewBox="0 0 64 64">
<title>Copy</title>
<rect x="16" y="16" width="48" height="48" rx="6" />
<path d="M.5,47.52V6.5a6,6,0,0,1,6-6h41" />
</svg>
</div>
<div class="flex align-items space-between">
<h4>Balance</h4>
<svg class="icon" onclick="refresh_balance(this)" viewBox="0 0 64 64">
<title>refresh balance</title>
<polyline points="42.99 0.16 50.25 21.23 28.78 27.7"/>
<path d="M56.61,44.63A24.65,24.65,0,0,1,50,56.24a25.1,25.1,0,0,1-35.31,0,24.67,24.67,0,0,1,0-35,25.1,25.1,0,0,1,35.31,0"/>
</svg>
</div>
<div id="display_balance" class="grid grid-2">
<div class="balance">
<h5>Rupee</h5>
<h3 id="token_balance">0</h3>
</div>
<div class="balance">
<h5>FLO</h5>
<h3 id="flo_balance">0</h3>
</div>
</div>
</div> </div>
</section> </section>
<section id="deposit" class="page hide-completely"> <section id="deposit" class="page hide-completely">
@ -712,18 +744,9 @@
</sm-panel> </sm-panel>
</sm-tab-panels> </sm-tab-panels>
</section> </section>
<section id="profile_page" class="page hide-completely"> <section id="settings_page" class="page hide-completely">
<div class="container-header"> <div class="container-header">
<h2>Profile</h2> <h2>Settings</h2>
</div>
<h5>FLO ID</h5>
<div class="copy-row">
<h4 id="user_flo_id" class="copy"></h4>
<svg class="icon" onclick="copyToClipboard(this.parentNode)" viewBox="0 0 64 64">
<title>Copy</title>
<rect x="16" y="16" width="48" height="48" rx="6" />
<path d="M.5,47.52V6.5a6,6,0,0,1,6-6h41" />
</svg>
</div> </div>
<button class="primary-btn top-margin" onclick="signOut()">Sign out</button> <button class="primary-btn top-margin" onclick="signOut()">Sign out</button>
</section> </section>
@ -759,6 +782,7 @@
generalVC: {} generalVC: {}
} }
</script> </script>
<<<<<<< HEAD
<script> <script>
// tab // tab
const smTab = document.createElement("template"); const smTab = document.createElement("template");
@ -2182,6 +2206,9 @@ background-color: transparent;
} }
); );
</script> </script>
=======
<script src="components.js"></script>
>>>>>>> 0e71a98c861cee522e666f8addb47b4806510ee0
<script id="onLoadStartUp"> <script id="onLoadStartUp">
function onLoadStartUp() { function onLoadStartUp() {
showPopup('main_loader', 'no') showPopup('main_loader', 'no')
@ -2220,11 +2247,7 @@ background-color: transparent;
withdrawRequest(txid, upiId, floId) { withdrawRequest(txid, upiId, floId) {
let card = document.createElement('div'); let card = document.createElement('div');
card.classList.add('request') card.classList.add('request')
setAttributes(card, { setAttributes(card, { 'data-txid': txid, 'data-user-flo-id': floId, 'data-upi': upiId })
'data-txid': txid,
'data-user-flo-id': floId,
'data-upi': upiId
})
card.innerHTML = ` <h5>FLO ID</h5> card.innerHTML = ` <h5>FLO ID</h5>
<h4 class="breakable">${floId}</h4> <h4 class="breakable">${floId}</h4>
<h5>UPI ID</h5> <h5>UPI ID</h5>
@ -2239,12 +2262,7 @@ background-color: transparent;
payRequest(sender, txid, floId, amount) { payRequest(sender, txid, floId, amount) {
let card = document.createElement('div'); let card = document.createElement('div');
card.classList.add('request') card.classList.add('request')
setAttributes(card, { setAttributes(card, { 'data-sender': sender, 'data-receiver-flo-id': floId, 'data-txid': txid, 'data-amount': amount })
'data-sender': sender,
'data-receiver-flo-id': floId,
'data-txid': txid,
'data-amount': amount
})
card.innerHTML = ` <h5>Transaction ID</h5> card.innerHTML = ` <h5>Transaction ID</h5>
<h4 class="breakable">${txid}</h4> <h4 class="breakable">${txid}</h4>
<h5>Receiver's FLO ID</h5> <h5>Receiver's FLO ID</h5>
@ -2260,10 +2278,7 @@ background-color: transparent;
let card = document.createElement('div'), let card = document.createElement('div'),
time = parseInt(vectorClock.split('_')[0]) time = parseInt(vectorClock.split('_')[0])
card.classList.add('request') card.classList.add('request')
setAttributes(card, { setAttributes(card, { 'data-vector-clock': vectorClock, 'data-type': 'deposit' })
'data-vector-clock': vectorClock,
'data-type': 'deposit'
})
card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5> card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5>
<h5>UPI Transanction ID</h5> <h5>UPI Transanction ID</h5>
<div class="copy-row"> <div class="copy-row">
@ -2288,10 +2303,7 @@ background-color: transparent;
time = parseInt(vectorClock.split('_')[0]) time = parseInt(vectorClock.split('_')[0])
card.classList.add('request') card.classList.add('request')
let timeFrag = time.toString().split(' '); let timeFrag = time.toString().split(' ');
setAttributes(card, { setAttributes(card, { 'data-vector-clock': vectorClock, 'data-type': 'withdraw' })
'data-vector-clock': vectorClock,
'data-type': 'withdraw'
})
card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5> card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5>
<h5>Transanction ID</h5> <h5>Transanction ID</h5>
<div class="copy-row"> <div class="copy-row">
@ -2318,10 +2330,7 @@ background-color: transparent;
time = parseInt(vectorClock.split('_')[0]) time = parseInt(vectorClock.split('_')[0])
card.classList.add('request') card.classList.add('request')
let timeFrag = time.toString().split(' '); let timeFrag = time.toString().split(' ');
setAttributes(card, { setAttributes(card, { 'data-vector-clock': vectorClock, 'data-type': 'pay_thru_cashier' })
'data-vector-clock': vectorClock,
'data-type': 'pay_thru_cashier'
})
card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5> card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5>
<h5>UPI Transanction ID</h5> <h5>UPI Transanction ID</h5>
<div class="copy-row"> <div class="copy-row">
@ -2354,11 +2363,7 @@ background-color: transparent;
let card = document.createElement('div') let card = document.createElement('div')
card.classList.add('request') card.classList.add('request')
setAttributes(card, { setAttributes(card, { 'data-sender-address': senderAddress, 'data-amount': amount, 'data-payment-request-id': id })
'data-sender-address': senderAddress,
'data-amount': amount,
'data-payment-request-id': id
})
card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5> card.innerHTML = ` <h5 class="time">${formatedTime(time)}</h5>
<h5>Request by</h5> <h5>Request by</h5>
<div class="copy-row"> <div class="copy-row">
@ -2389,18 +2394,10 @@ background-color: transparent;
}, },
depositComplaint(userData, cashierData, udc) { depositComplaint(userData, cashierData, udc) {
let card = document.createElement('div'), let card = document.createElement('div'),
{ { depositedAmount, customMsg, sender, vectorClock } = userData,
depositedAmount,
customMsg,
sender,
vectorClock
} = userData,
composition = ``; composition = ``;
card.classList.add('request', 'complaint') card.classList.add('request', 'complaint')
setAttributes(card, { setAttributes(card, { 'data-type': 'deposit', 'data-udc': JSON.stringify(udc) })
'data-type': 'deposit',
'data-udc': JSON.stringify(udc)
})
composition = ` composition = `
<div class="left"> <div class="left">
@ -2423,10 +2420,7 @@ background-color: transparent;
</div>` </div>`
if (cashierData.processed) { if (cashierData.processed) {
let { let { time, floTxId } = cashierData
time,
floTxId
} = cashierData
composition += ` composition += `
<div class="right"> <div class="right">
<h4 class="processed">Cashier processed the request on ${formatedTime(time)}</h4> <h4 class="processed">Cashier processed the request on ${formatedTime(time)}</h4>
@ -2460,18 +2454,10 @@ background-color: transparent;
}, },
withdrawComplaint(userData, cashierData, udc) { withdrawComplaint(userData, cashierData, udc) {
let card = document.createElement('div'), let card = document.createElement('div'),
{ { withdrawnAmount, customMsg, sender, vectorClock } = userData,
withdrawnAmount,
customMsg,
sender,
vectorClock
} = userData,
composition = ``; composition = ``;
card.classList.add('request', 'complaint') card.classList.add('request', 'complaint')
setAttributes(card, { setAttributes(card, { 'data-type': 'withdraw', 'data-udc': JSON.stringify(udc) })
'data-type': 'withdraw',
'data-udc': JSON.stringify(udc)
})
composition = ` composition = `
<div class="left"> <div class="left">
<h5>Sender</h5> <h5>Sender</h5>
@ -2493,10 +2479,7 @@ background-color: transparent;
</div>` </div>`
if (cashierData.processed) { if (cashierData.processed) {
let { let { time, floTxId } = cashierData
time,
floTxId
} = cashierData
composition += ` composition += `
<div class="right"> <div class="right">
<h4 class="processed">Cashier processed the request on ${formatedTime(time)}</h4> <h4 class="processed">Cashier processed the request on ${formatedTime(time)}</h4>
@ -2530,19 +2513,10 @@ background-color: transparent;
}, },
payCashierComplaint(userData, cashierData, udc) { payCashierComplaint(userData, cashierData, udc) {
let card = document.createElement('div'), let card = document.createElement('div'),
{ { amount, customMsg, sender, receiver, vectorClock } = userData,
amount,
customMsg,
sender,
receiver,
vectorClock
} = userData,
composition = ``; composition = ``;
card.classList.add('request', 'complaint') card.classList.add('request', 'complaint')
setAttributes(card, { setAttributes(card, { 'data-type': 'withdraw', 'data-udc': JSON.stringify(udc) })
'data-type': 'withdraw',
'data-udc': JSON.stringify(udc)
})
composition = ` composition = `
<div class="left"> <div class="left">
<h5>Sender</h5> <h5>Sender</h5>
@ -2573,10 +2547,7 @@ background-color: transparent;
</div>` </div>`
if (cashierData.processed) { if (cashierData.processed) {
let { let { time, floTxId } = cashierData
time,
floTxId
} = cashierData
composition += ` composition += `
<div class="right"> <div class="right">
<h4 class="processed">Cashier processed the request on ${formatedTime(time)}</h4> <h4 class="processed">Cashier processed the request on ${formatedTime(time)}</h4>
@ -2667,10 +2638,7 @@ background-color: transparent;
let thisPopup = document.getElementById(popup); let thisPopup = document.getElementById(popup);
thisPopup.parentNode.classList.remove('hide'); thisPopup.parentNode.classList.remove('hide');
thisPopup.classList.add('no-transformations'); thisPopup.classList.add('no-transformations');
popupStack.push({ popupStack.push({ popup, permission })
popup,
permission
})
zIndex++; zIndex++;
thisPopup.parentNode.setAttribute('style', `z-index: ${zIndex}`) thisPopup.parentNode.setAttribute('style', `z-index: ${zIndex}`)
document.getElementById('main_page') document.getElementById('main_page')
@ -2698,10 +2666,7 @@ background-color: transparent;
}, 300); }, 300);
if (popupStack.peek() === undefined) if (popupStack.peek() === undefined)
return; return;
let { let { popup, permission } = popupStack.pop();
popup,
permission
} = popupStack.pop();
thisPopup = document.getElementById(popup); thisPopup = document.getElementById(popup);
thisPopup.closest('.popup-container').classList.add('hide'); thisPopup.closest('.popup-container').classList.add('hide');
thisPopup.closest('.popup').classList.remove('no-transformations'); thisPopup.closest('.popup').classList.remove('no-transformations');
@ -2739,8 +2704,7 @@ background-color: transparent;
} }
addEventListener('mousedown', e => { addEventListener('mousedown', e => {
if (e.target.classList.contains('popup-container') && popupStack.peek() !== undefined && popupStack if (e.target.classList.contains('popup-container') && popupStack.peek() !== undefined && popupStack.peek().permission !== 'no') {
.peek().permission !== 'no') {
hidePopup() hidePopup()
} }
}) })
@ -2846,8 +2810,8 @@ background-color: transparent;
year = timeFrag[3], year = timeFrag[3],
minutes = new Date(parseInt(time)).getMinutes(), minutes = new Date(parseInt(time)).getMinutes(),
hours = new Date(parseInt(time)).getHours() hours = new Date(parseInt(time)).getHours()
minutes = minutes.length === 1 ? `0${minutes}` : minutes minutes = minutes < 10 ? `0${minutes}` : minutes
let finalHours = hours - 12 > 0 ? `${hours - 12}:${minutes} pm` : `${hours}:${minutes} am` let finalHours = hours > 12 ? `${hours - 12}:${minutes} PM` : `${hours}:${minutes} AM`
return `${finalHours} ${month} ${date} ${year}`; return `${finalHours} ${month} ${date} ${year}`;
} catch (e) { } catch (e) {
console.error(e); console.error(e);
@ -2920,8 +2884,7 @@ background-color: transparent;
form.addEventListener('keyup', (e) => { form.addEventListener('keyup', (e) => {
if (e.target.closest('.input')) { if (e.target.closest('.input')) {
if (e.key === 'Enter') { if (e.key === 'Enter') {
e.target.closest('.popup').querySelector("button[type='submit']") e.target.closest('.popup').querySelector("button[type='submit']").click();
.click();
} }
} }
}) })
@ -2941,8 +2904,7 @@ background-color: transparent;
if (e.target.closest('.confirm-deposit-btn')) if (e.target.closest('.confirm-deposit-btn'))
if (await confirmation('Confirm this deposit request?')) { if (await confirmation('Confirm this deposit request?')) {
let depositRequest = e.target.closest('.request'), let depositRequest = e.target.closest('.request'),
status = await transfer_token(depositRequest.dataset.userFloId, status = await transfer_token(depositRequest.dataset.userFloId, depositRequest.dataset.txid)
depositRequest.dataset.txid)
if (status) { if (status) {
refresh_balance() refresh_balance()
depositRequest.remove() depositRequest.remove()
@ -2955,8 +2917,7 @@ background-color: transparent;
if (e.target.closest('.confirm-withdraw-btn')) if (e.target.closest('.confirm-withdraw-btn'))
if (await confirmation('Confirm this withdraw request?')) { if (await confirmation('Confirm this withdraw request?')) {
let withdrawRequest = e.target.closest('.request'), let withdrawRequest = e.target.closest('.request'),
status = await cash_sent(withdrawRequest.dataset.txid, withdrawRequest status = await cash_sent(withdrawRequest.dataset.txid, withdrawRequest.dataset.userFloId, withdrawRequest.dataset.upi)
.dataset.userFloId, withdrawRequest.dataset.upi)
if (status) { if (status) {
refresh_balance() refresh_balance()
withdrawRequest.remove() withdrawRequest.remove()
@ -2968,9 +2929,7 @@ background-color: transparent;
if (e.target.closest('.confirm-pay-btn')) if (e.target.closest('.confirm-pay-btn'))
if (await confirmation('Confirm this pay request?')) { if (await confirmation('Confirm this pay request?')) {
let payRequest = e.target.closest('.request'), let payRequest = e.target.closest('.request'),
status = await pay_as_cashier(payRequest.dataset.sender, payRequest status = await pay_as_cashier(payRequest.dataset.sender, payRequest.dataset.receiverFloId, payRequest.dataset.txid, payRequest.dataset.amount)
.dataset.receiverFloId, payRequest.dataset.txid, payRequest.dataset
.amount)
if (status) { if (status) {
refresh_balance() refresh_balance()
payRequest.remove() payRequest.remove()
@ -2987,11 +2946,8 @@ background-color: transparent;
// Function for reporting complain // Function for reporting complain
document.getElementById('report_btn').addEventListener('click', async (e) => { document.getElementById('report_btn').addEventListener('click', async (e) => {
let customMsg = document.getElementById('complaint_field').value let customMsg = document.getElementById('complaint_field').value
if (await confirmation( if (await confirmation('It may take upto 12hrs to complete your request, are you sure to report this issue?')) {
'It may take upto 12hrs to complete your request, are you sure to report this issue?' file_complaint(currentRequest.dataset.type, currentRequest.dataset.vectorClock, customMsg)
)) {
file_complaint(currentRequest.dataset.type, currentRequest.dataset.vectorClock,
customMsg)
} }
}) })
// Function for requesting rupee // Function for requesting rupee
@ -3248,8 +3204,7 @@ background-color: transparent;
for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) { for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {
if (imod4 == 0) continue; if (imod4 == 0) continue;
bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & (Math.pow(2, -2 * imod4 + bytes.push(((base64map.indexOf(base64.charAt(i - 1)) & (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2)) |
8) - 1)) << (imod4 * 2)) |
(base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2))); (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2)));
} }
@ -3798,13 +3753,11 @@ background-color: transparent;
// browser plugin details: ~16.2 to ~21.8 bits // browser plugin details: ~16.2 to ~21.8 bits
var pluginsStr = ""; var pluginsStr = "";
for (var i = 0; i < navigator.plugins.length; i++) { for (var i = 0; i < navigator.plugins.length; i++) {
pluginsStr += navigator.plugins[i].name + " " + navigator.plugins[i].filename + " " + navigator pluginsStr += navigator.plugins[i].name + " " + navigator.plugins[i].filename + " " + navigator.plugins[i].description + " " + navigator.plugins[i].version + ", ";
.plugins[i].description + " " + navigator.plugins[i].version + ", ";
} }
var mimeTypesStr = ""; var mimeTypesStr = "";
for (var i = 0; i < navigator.mimeTypes.length; i++) { for (var i = 0; i < navigator.mimeTypes.length; i++) {
mimeTypesStr += navigator.mimeTypes[i].description + " " + navigator.mimeTypes[i].type + " " + mimeTypesStr += navigator.mimeTypes[i].description + " " + navigator.mimeTypes[i].type + " " + navigator.mimeTypes[i].suffixes + ", ";
navigator.mimeTypes[i].suffixes + ", ";
} }
entropyStr += pluginsStr + mimeTypesStr; entropyStr += pluginsStr + mimeTypesStr;
// cookies and storage: 1 bit // cookies and storage: 1 bit
@ -3816,9 +3769,7 @@ background-color: transparent;
// location // location
entropyStr += window.location; entropyStr += window.location;
var entropyBytes = Crypto.SHA256(entropyStr, { var entropyBytes = Crypto.SHA256(entropyStr, { asBytes: true });
asBytes: true
});
for (var i = 0; i < entropyBytes.length; i++) { for (var i = 0; i < entropyBytes.length; i++) {
sr.seedInt8(entropyBytes[i]); sr.seedInt8(entropyBytes[i]);
} }
@ -5491,8 +5442,7 @@ background-color: transparent;
for (var i = 0; i < this.m.t; ++i) { for (var i = 0; i < this.m.t; ++i) {
// faster way of calculating u0 = x[i]*mp mod DV // faster way of calculating u0 = x[i]*mp mod DV
var j = x[i] & 0x7fff; var j = x[i] & 0x7fff;
var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;
.DM;
// use am to combine the multiply-shift-add into one call // use am to combine the multiply-shift-add into one call
j = i + this.m.t; j = i + this.m.t;
x[j] += this.m.am(0, u0, x, i, 0, this.m.t); x[j] += this.m.am(0, u0, x, i, 0, this.m.t);
@ -5677,8 +5627,7 @@ background-color: transparent;
// p mod 4 == 3 // p mod 4 == 3
if (this.q.testBit(1)) { if (this.q.testBit(1)) {
// z = g^(u+1) + p, p = 4u + 3 // z = g^(u+1) + p, p = 4u + 3
var z = new ec.FieldElementFp(this.q, this.x.modPow(this.q.shiftRight(2).add(BigInteger var z = new ec.FieldElementFp(this.q, this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),
.ONE),
this.q)); this.q));
return z.square().equals(this) ? z : null; return z.square().equals(this) ? z : null;
} }
@ -5806,8 +5755,7 @@ background-color: transparent;
var b = message.pop(); var b = message.pop();
if (b == 0x80) return; if (b == 0x80) return;
if (b != 0x00) { if (b != 0x00) {
throw new Error("ISO-7816 padding byte must be 0, not 0x" + b.toString( throw new Error("ISO-7816 padding byte must be 0, not 0x" + b.toString(16) +
16) +
". Wrong cipher specification or key used?"); ". Wrong cipher specification or key used?");
} }
} }
@ -12502,7 +12450,6 @@ background-color: transparent;
} }
</script> </script>
<<<<<<< HEAD
<script> <script>
const token_app = { const token_app = {
master_configurations: {}, master_configurations: {},
@ -12565,72 +12512,6 @@ background-color: transparent;
let text = ''; let text = '';
let tx_cmnt_arr = []; let tx_cmnt_arr = [];
for (txt of master_data.txs) {
if (txt.vin[0].addr === token_app.masterFLOAddress) {
if (txt.floData.length === 0) break;
tx_cmnt_arr.push(txt.floData);
}
=======
<script>
const token_app = {
master_configurations: {},
//masterFLOAddress: 'FD5hK9ryBogJ5AcSvCy1tW5as8jRTkMLky',
actions: {},
blocked_flo_ids: [],
};
token_app.actions = {
parse_flo_comments: async function () {
text = `masterFLOAddress=FD5hK9ryBogJ5AcSvCy1tW5as8jRTkMLky
#!#CURRENCY=INR
#!#TYPE_DEPOSITS=CASH_DEPOSITS_TEST2
#!#TYPE_WITHDRAWS=CASH_WITHDRAWS_TEST2
#!#TYPE_MSGES=USER_MESSAGES_TEST2
#!#TYPE_PROCESSED_DEPOSITS=PROCESSED_DEPOSITS_TEST2
#!#TYPE_PROCESSED_WITHDRAWS=PROCESSED_WITHDRAWS_TEST2
#!#TYPE_FILE_DEPOSITS_COMPLAINT=DEPOSITS_COMPLAINT_TEST2
#!#TYPE_PROCESSED_DEPOSITS_COMPLAINT=PROCESSED_DEPOSITS_COMPLAINT_TEST2
#!#TYPE_FILE_WITHDRAWS_COMPLAINT=WITHDRAWS_COMPLAINT_TEST2
#!#TYPE_PROCESSED_WITHDRAWS_COMPLAINT=PROCESSED_WITHDRAWS_COMPLAINT_TEST2
#!#TYPE_PAY_THROUGH_CASHIER=PAY_THRU_CASHIER_TEST2
#!#TYPE_FILE_PAY_THROUGH_CASHIER_COMPLAINT=PAY_THRU_CASHIER_COMPLAINT_TEST2
#!#TYPE_PROCESSED_PAY_THROUGH_CASHIER=PROCESSED_PAY_THROUGH_CASHIER_TEST2
#!#TYPE_PROCESSED_PAY_THROUGH_CASHIER_COMPLAINT=PROCESSED_PAY_THROUGH_CASHIER_COMPLAINT_TEST2
#!#TYPE_REQUEST_PAYMENT_DECLINED=REQUEST_PAYMENT_DECLINED_TEST2
#!#TYPE_REQUEST_PAYMENT_APPROVED=REQUEST_PAYMENT_APPROVED_TEST2
#!#vendors=FGtPEBu2NFFYkqFrA9NDBJJLpVhyuPubDj,
#!#helplineFloId=F9MAyvT5b9aSfsuukAungrbt1L5fgmJmuK
#!#cashiers=
{
"FCja6sLv58e3RMy41T5AmWyvXEWesqBCkX": {
"upi_id": "8507742774@ybl"
},
"FHW2kgYEhDt85vjAiMMF7bQqdP74L7iwvQ": {
"upi_id": "8340617958@ybl"
},
"FTmJ6QeBjDFjdqS6Zs4V5amac2X19AjXcF": {
"upi_id": "8902496422@ybl"
},
"FBun3694ZdxmD66os9oL5DxMrif3vyVjT3": {
"upi_id": "7004801428@ybl"
},
"FTpxFWdBDvYARGZuPWDhw9gke72J2pruvv": {
"upi_id": "aakriti1705sinha@okicici"
},
"FQ6udJuTbGDa2kWZAkmNpwgHaUEeYLPAtt": {
"upi_id": "krishraj1012-2@okicici"
>>>>>>> dfb4096eb9e47914a901abdb9bef5f240cddd8fb
}
}`
text = removeWhiteSpaces(text);
return text;
const master_data = await ajaxGet(
`${floGlobals.apiURL.FLO[1]}/api/txs/?address=${token_app.masterFLOAddress}`);
if (typeof master_data === "object" && typeof master_data.txs === "object") {
let text = '';
let tx_cmnt_arr = [];
for (txt of master_data.txs) { for (txt of master_data.txs) {
if (txt.vin[0].addr === token_app.masterFLOAddress) { if (txt.vin[0].addr === token_app.masterFLOAddress) {
if (txt.floData.length === 0) break; if (txt.floData.length === 0) break;
@ -13014,7 +12895,7 @@ background-color: transparent;
receiverID: myFloID receiverID: myFloID
}); });
notify(`Transfer successfull: ${flo_txid}.`, 'success', true, true); notify(`Transfer successful: <span class="breakable">${flo_txid}</span>.`, 'success', '', true);
return true; return true;
} }
@ -13117,15 +12998,14 @@ background-color: transparent;
return false; return false;
} }
let flo_txid = await floBlockchainAPI.sendTx(myFloID, token_receiver, 0.001, myPrivKey, let flo_txid = await floBlockchainAPI.sendTx(myFloID, token_receiver, 0.001, myPrivKey, flo_comment)
flo_comment)
console.log(flo_txid); console.log(flo_txid);
if (typeof flo_txid !== "string") { if (typeof flo_txid !== "string") {
notify(`Transaction unsuccessful.`); notify(`Transaction unsuccessful.`);
hidePopup() hidePopup()
return false; return false;
} else { } else {
notify(`Transaction successful: ${flo_txid}.`, '', true, true); notify(`Transaction successful: ${flo_txid}.`, 'success', '', true);
if (payingRequested) { if (payingRequested) {
payment_request_status(currentPaymentRequest.requestId, 'APPROVED') payment_request_status(currentPaymentRequest.requestId, 'APPROVED')
showPayRequests() showPayRequests()
@ -13143,22 +13023,28 @@ background-color: transparent;
async function refresh_balance(refreshButton) { async function refresh_balance(refreshButton) {
try { try {
if (refreshButton) { if (refreshButton) {
notify('Updating Balance')
refreshButton.classList.add('animate-loader') refreshButton.classList.add('animate-loader')
} }
const current_token_balance = document.getElementById('token_balance').textContent; const current_token_balance = document.getElementById('token_balance').textContent;
if (typeof current_token_balance == "string") { if (typeof current_token_balance == "string") {
const get_user_balance = await ajaxGet( const get_user_rupee_balance = await ajaxGet(
'https://ranchimallflo.duckdns.org/api/v1.0/getFloAddressBalance?token=rupee&floAddress=' + 'https://ranchimallflo.duckdns.org/api/v1.0/getFloAddressBalance?token=rupee&floAddress=' +
myFloID) myFloID)
if (typeof get_user_balance === "object" && get_user_balance.balance >= 0) { const get_user_flo_balance = await ajaxGet(`
if (get_user_balance.balance === null) https://ranchimallflo.duckdns.org/api/v1.0/getFloAddressBalance?floAddress=${myFloID}`)
get_user_balance.balance = 0; console.log(get_user_flo_balance)
document.getElementById('token_balance').textContent = get_user_balance.balance; if (typeof get_user_rupee_balance === "object" && get_user_rupee_balance.balance >= 0) {
if (get_user_rupee_balance.balance === null)
get_user_rupee_balance.balance = 0;
document.getElementById('token_balance').textContent = get_user_rupee_balance.balance;
} }
/*if (typeof get_user_flo_balance === "object" && get_user_flo_balance.balance >= 0) {
if (get_user_flo_balance.balance === null)
get_user_flo_balance.balance = 0;
document.getElementById('flo_balance').textContent = get_user_flo_balance.balance;
}*/
} }
if (refreshButton) { if (refreshButton) {
notifications.clearAll()
notify('Balance Updated') notify('Balance Updated')
refreshButton.classList.remove('animate-loader') refreshButton.classList.remove('animate-loader')
} }
@ -13268,8 +13154,8 @@ background-color: transparent;
receiverID: myFloID receiverID: myFloID
}); });
notify(`Transaction successfull: ${flo_txid}. notify(`Transaction successful: <span class="breakable">${flo_txid}</span>.
INR ${amount_to_pay} sent to ${vendor_flo_id}`, '', true, true); INR ${amount_to_pay} sent to ${vendor_flo_id}`, 'success', '', true);
return true; return true;
} }
} }
@ -13291,9 +13177,16 @@ background-color: transparent;
const token_amount_to_buy = document.getElementById('token_amount_to_buy'); const token_amount_to_buy = document.getElementById('token_amount_to_buy');
request_tokens_btn.onclick = async function () { request_tokens_btn.onclick = async function () {
if (depositRequested === 0) { if (depositRequested === 0) {
<<<<<<< HEAD
if (typeof myFloID !== "string" || myFloID.length < 1) return; if (typeof myFloID !== "string" || myFloID.length < 1) return;
const cashier_upi = token_app.master_configurations.cashiers[cashier].upi_id; const cashier_upi = token_app.master_configurations.cashiers[cashier].upi_id;
document.getElementById('send_cash_to_deposit').innerHTML = `Please pay <b>₹${token_amount_to_buy.value}</b> to UPI Id <b>${cashier_upi}</b>.<br> After sending money, enter UPI transaction ID below.`; document.getElementById('send_cash_to_deposit').innerHTML = `Please pay <b>₹${token_amount_to_buy.value}</b> to UPI Id <b>${cashier_upi}</b>.<br> After sending money, enter UPI transaction ID below.`;
=======
if (typeof myFloID !== "string" || myFloID.length < 1) return;
const cashier_upi = token_app.master_configurations.cashiers[cashier].upi_id;
document.getElementById('send_cash_to_deposit').innerHTML = cashier_upi;
document.getElementById('send_amount_to_deposit').innerHTML = `Please pay <b>₹${token_amount_to_buy.value}</b> to UPI Id below.`;
>>>>>>> 0e71a98c861cee522e666f8addb47b4806510ee0
document.getElementById('upi_txId_section').classList.remove('hide-completely') document.getElementById('upi_txId_section').classList.remove('hide-completely')
document.getElementById('deposit_amount_section').classList.add('hide-completely') document.getElementById('deposit_amount_section').classList.add('hide-completely')
depositedRupeeTxId.disabled = false depositedRupeeTxId.disabled = false
@ -13320,6 +13213,7 @@ background-color: transparent;
return true; return true;
} }
hidePopup() hidePopup()
}
return false; return false;
} }
depositRequested = depositRequested === 1 ? 0 : 1 depositRequested = depositRequested === 1 ? 0 : 1
@ -13368,8 +13262,7 @@ background-color: transparent;
} }
const flo_comment = `transfer ${withdraw_cash_amount} rupee#`; const flo_comment = `transfer ${withdraw_cash_amount} rupee#`;
let flo_txid = await floBlockchainAPI.sendTx(myFloID, cashier, 0.001, myPrivKey, let flo_txid = await floBlockchainAPI.sendTx(myFloID, cashier, 0.001, myPrivKey, flo_comment)
flo_comment)
console.log(flo_txid); console.log(flo_txid);
if (typeof flo_txid !== "string") { if (typeof flo_txid !== "string") {
notify(`Transaction unsuccessfull.`, 'error'); notify(`Transaction unsuccessfull.`, 'error');
@ -13387,10 +13280,8 @@ background-color: transparent;
} }
console.log(request_object); console.log(request_object);
if (typeof flo_txid === "string" && flo_txid.length > 1) { if (typeof flo_txid === "string" && flo_txid.length > 1) {
floCloudAPI.sendGeneralData(request_object, token_app.master_configurations floCloudAPI.sendGeneralData(request_object, token_app.master_configurations.TYPE_WITHDRAWS,
.TYPE_WITHDRAWS, { { receiverID: cashier });
receiverID: cashier
});
notify('Withdraw request sent successfully.'); notify('Withdraw request sent successfully.');
hidePopup() hidePopup()
return true; return true;
@ -13421,10 +13312,10 @@ background-color: transparent;
let amount_to_pay = Number(paying_amount_div.value); let amount_to_pay = Number(paying_amount_div.value);
let paid_cashier_upi_txid = document.getElementById('paid_cashier_upi_txid').value; let paid_cashier_upi_txid = document.getElementById('paid_cashier_upi_txid').value;
paid_cashier_upi_txid = toAlphanumeric(paid_cashier_upi_txid); paid_cashier_upi_txid = toAlphanumeric(paid_cashier_upi_txid);
if (recvr_id.length < 1 || if (recvr_id.length < 1
!floCrypto.validateAddr(recvr_id) || || !floCrypto.validateAddr(recvr_id)
amount_to_pay <= 0 || || amount_to_pay <= 0
paid_cashier_upi_txid.length < 1) || paid_cashier_upi_txid.length < 1)
return notify("Incomplete information", 'error', '', true); return notify("Incomplete information", 'error', '', true);
const req_object = { const req_object = {
receiver_flo_id: recvr_id, receiver_flo_id: recvr_id,
@ -13432,11 +13323,8 @@ background-color: transparent;
upi_txid: toAlphanumeric(paid_cashier_upi_txid) upi_txid: toAlphanumeric(paid_cashier_upi_txid)
} }
floCloudAPI.sendGeneralData(req_object, token_app.master_configurations floCloudAPI.sendGeneralData(req_object, token_app.master_configurations.TYPE_PAY_THROUGH_CASHIER,
.TYPE_PAY_THROUGH_CASHIER, { { receiverID: cashier, senderIDs: [myFloID] });
receiverID: cashier,
senderIDs: [myFloID]
});
notify(`You have sent cash to <span class="breakable">${recvr_id}</span> through our cashier service (${cashier_upi}). notify(`You have sent cash to <span class="breakable">${recvr_id}</span> through our cashier service (${cashier_upi}).
Once the cashier receives your payment, he will transfer it to ${recvr_id}.`, '', true, true); Once the cashier receives your payment, he will transfer it to ${recvr_id}.`, '', true, true);
@ -13711,24 +13599,18 @@ background-color: transparent;
console.log(unprocessed_deposits_complaints); console.log(unprocessed_deposits_complaints);
for (const udc of unprocessed_deposits_complaints) { for (const udc of unprocessed_deposits_complaints) {
let all_users_deposits = floDapps.getNextGeneralData(token_app.master_configurations let all_users_deposits = floDapps.getNextGeneralData(token_app.master_configurations.TYPE_DEPOSITS, "0");
.TYPE_DEPOSITS, "0");
let this_user_deposit = all_users_deposits.filter(f => f.vectorClock === udc.message.order_vc); let this_user_deposit = all_users_deposits.filter(f => f.vectorClock === udc.message.order_vc);
let this_user_deposit_upi_txid_list = this_user_deposit.map(m => m.message.upi_txid); let this_user_deposit_upi_txid_list = this_user_deposit.map(m => m.message.upi_txid);
let userData = {}, let userData = {}, cashierData = {};
cashierData = {};
let all_cashier_processed_deposits = floDapps let all_cashier_processed_deposits = floDapps
.getNextGeneralData(token_app.master_configurations.TYPE_PROCESSED_DEPOSITS, "0"); .getNextGeneralData(token_app.master_configurations.TYPE_PROCESSED_DEPOSITS, "0");
console.log(udc) console.log(udc)
let this_cashier_processed_user_deposit = all_cashier_processed_deposits let this_cashier_processed_user_deposit = all_cashier_processed_deposits
.filter(f => this_user_deposit_upi_txid_list.includes(f.message.user_upi_txid)); .filter(f => this_user_deposit_upi_txid_list.includes(f.message.user_upi_txid));
if (this_user_deposit.length) { if (this_user_deposit.length) {
let { let { deposit_amount, upi_txid, user_flo_id } = this_user_deposit[0].message;
deposit_amount,
upi_txid,
user_flo_id
} = this_user_deposit[0].message;
userData = { userData = {
depositedAmount: deposit_amount, depositedAmount: deposit_amount,
upiTxId: upi_txid, upiTxId: upi_txid,
@ -13738,10 +13620,7 @@ background-color: transparent;
} }
} }
if (this_cashier_processed_user_deposit.length) { if (this_cashier_processed_user_deposit.length) {
let { let { datetime, flo_txid } = this_cashier_processed_user_deposit[0].message;
datetime,
flo_txid
} = this_cashier_processed_user_deposit[0].message;
cashierData = { cashierData = {
processed: true, processed: true,
time: datetime, time: datetime,
@ -13782,14 +13661,10 @@ background-color: transparent;
await clearCashierData(); await clearCashierData();
await Promise.all([floCloudAPI.requestGeneralData(token_app.master_configurations.TYPE_WITHDRAWS, { await Promise.all([floCloudAPI.requestGeneralData(token_app.master_configurations.TYPE_WITHDRAWS,
receiverID: receiver { receiverID: receiver }),
}), floCloudAPI.requestGeneralData(token_app.master_configurations.TYPE_PROCESSED_WITHDRAWS,
floCloudAPI.requestGeneralData(token_app.master_configurations { receiverID: receiver })])
.TYPE_PROCESSED_WITHDRAWS, {
receiverID: receiver
})
])
let options = { let options = {
type: token_app.master_configurations.TYPE_FILE_WITHDRAWS_COMPLAINT, type: token_app.master_configurations.TYPE_FILE_WITHDRAWS_COMPLAINT,
@ -13805,18 +13680,15 @@ background-color: transparent;
//options.type = token_app.master_configurations.TYPE_PROCESSED_DEPOSITS; //options.type = token_app.master_configurations.TYPE_PROCESSED_DEPOSITS;
options.type = token_app.master_configurations.TYPE_PROCESSED_WITHDRAWS_COMPLAINT; options.type = token_app.master_configurations.TYPE_PROCESSED_WITHDRAWS_COMPLAINT;
const processed_withdraws_complaints = JSON.parse(await floCloudAPI.requestApplicationData( const processed_withdraws_complaints = JSON.parse(await floCloudAPI.requestApplicationData(options));
options));
// filter out processed tasks from unprocessed ones // filter out processed tasks from unprocessed ones
const unprocessed_withdraws_complaints = Object.values(all_withdraws_complaints) const unprocessed_withdraws_complaints = Object.values(all_withdraws_complaints)
.filter(orders_comparer(Object.values(processed_withdraws_complaints))); .filter(orders_comparer(Object.values(processed_withdraws_complaints)));
for (const udc of unprocessed_withdraws_complaints) { for (const udc of unprocessed_withdraws_complaints) {
let all_users_withdraws = floDapps.getNextGeneralData(token_app.master_configurations let all_users_withdraws = floDapps.getNextGeneralData(token_app.master_configurations.TYPE_WITHDRAWS, "0");
.TYPE_WITHDRAWS, "0"); let this_user_withdraws = all_users_withdraws.filter(f => f.vectorClock === udc.message.order_vc);
let this_user_withdraws = all_users_withdraws.filter(f => f.vectorClock === udc.message
.order_vc);
console.log(this_user_withdraws); console.log(this_user_withdraws);
let this_user_withdraws_token_txid_list = this_user_withdraws.map(m => m.message.token_txid); let this_user_withdraws_token_txid_list = this_user_withdraws.map(m => m.message.token_txid);
@ -13828,11 +13700,7 @@ background-color: transparent;
.filter(f => this_user_withdraws_token_txid_list.includes(f.message.token_txid)); .filter(f => this_user_withdraws_token_txid_list.includes(f.message.token_txid));
console.log(this_cashier_processed_user_withdraws); console.log(this_cashier_processed_user_withdraws);
if (this_user_withdraws.length) { if (this_user_withdraws.length) {
let { let { withdraw_amount, upi_txid, user_flo_id } = this_user_withdraws[0].message;
withdraw_amount,
upi_txid,
user_flo_id
} = this_user_withdraws[0].message;
userData = { userData = {
withdrawnAmount: withdraw_amount, withdrawnAmount: withdraw_amount,
upiTxId: upi_txid, upiTxId: upi_txid,
@ -13842,10 +13710,7 @@ background-color: transparent;
} }
} }
if (this_cashier_processed_user_withdraws.length) { if (this_cashier_processed_user_withdraws.length) {
let { let { datetime, flo_txid } = this_cashier_processed_user_withdraws[0].message;
datetime,
flo_txid
} = this_cashier_processed_user_withdraws[0].message;
cashierData = { cashierData = {
processed: true, processed: true,
time: datetime, time: datetime,
@ -13886,15 +13751,10 @@ background-color: transparent;
await clearCashierData(); await clearCashierData();
await Promise.all([floCloudAPI.requestGeneralData(token_app.master_configurations await Promise.all([floCloudAPI.requestGeneralData(token_app.master_configurations.TYPE_PAY_THROUGH_CASHIER,
.TYPE_PAY_THROUGH_CASHIER, { { receiverID: receiver }),
receiverID: receiver floCloudAPI.requestGeneralData(token_app.master_configurations.TYPE_PROCESSED_PAY_THROUGH_CASHIER,
}), { receiverID: receiver })])
floCloudAPI.requestGeneralData(token_app.master_configurations
.TYPE_PROCESSED_PAY_THROUGH_CASHIER, {
receiverID: receiver
})
])
let options = { let options = {
type: token_app.master_configurations.TYPE_FILE_PAY_THROUGH_CASHIER_COMPLAINT, type: token_app.master_configurations.TYPE_FILE_PAY_THROUGH_CASHIER_COMPLAINT,
@ -13905,27 +13765,22 @@ background-color: transparent;
options.senderIDs = sendersArray; options.senderIDs = sendersArray;
} }
const all_pay_thru_cashier_complaints = JSON.parse(await floCloudAPI.requestApplicationData( const all_pay_thru_cashier_complaints = JSON.parse(await floCloudAPI.requestApplicationData(options));
options));
options.type = token_app.master_configurations.TYPE_PROCESSED_PAY_THROUGH_CASHIER_COMPLAINT; options.type = token_app.master_configurations.TYPE_PROCESSED_PAY_THROUGH_CASHIER_COMPLAINT;
const processed_pay_thru_cashier_complaints = JSON.parse(await floCloudAPI.requestApplicationData( const processed_pay_thru_cashier_complaints = JSON.parse(await floCloudAPI.requestApplicationData(options));
options));
// filter out processed tasks from unprocessed ones // filter out processed tasks from unprocessed ones
const unprocessed_pay_thru_cashier_complaints = Object.values(all_pay_thru_cashier_complaints) const unprocessed_pay_thru_cashier_complaints = Object.values(all_pay_thru_cashier_complaints)
.filter(orders_comparer(Object.values(processed_pay_thru_cashier_complaints))); .filter(orders_comparer(Object.values(processed_pay_thru_cashier_complaints)));
for (const udc of unprocessed_pay_thru_cashier_complaints) { for (const udc of unprocessed_pay_thru_cashier_complaints) {
let all_users_pay_thru_cashier = floDapps.getNextGeneralData(token_app.master_configurations let all_users_pay_thru_cashier = floDapps.getNextGeneralData(token_app.master_configurations.TYPE_PAY_THROUGH_CASHIER, "0");
.TYPE_PAY_THROUGH_CASHIER, "0"); let this_user_pay_thru_cashier = all_users_pay_thru_cashier.filter(f => f.vectorClock === udc.message.order_vc);
let this_user_pay_thru_cashier = all_users_pay_thru_cashier.filter(f => f.vectorClock === udc
.message.order_vc);
console.log(this_user_pay_thru_cashier); console.log(this_user_pay_thru_cashier);
let this_user_pay_thru_cashier_upi_txid_list = this_user_pay_thru_cashier.map(m => m.message let this_user_pay_thru_cashier_upi_txid_list = this_user_pay_thru_cashier.map(m => m.message.upi_txid);
.upi_txid);
let all_cashier_processed_pay_thru_cashier = floDapps let all_cashier_processed_pay_thru_cashier = floDapps
.getNextGeneralData(token_app.master_configurations.TYPE_PROCESSED_WITHDRAWS, "0"); .getNextGeneralData(token_app.master_configurations.TYPE_PROCESSED_WITHDRAWS, "0");
@ -13935,11 +13790,7 @@ background-color: transparent;
console.log(this_cashier_processed_user_pay_thru_cashier); console.log(this_cashier_processed_user_pay_thru_cashier);
if (this_user_pay_thru_cashier.length) { if (this_user_pay_thru_cashier.length) {
let { let { amount, upi_txid, receiver_flo_id } = this_user_pay_thru_cashier[0].message;
amount,
upi_txid,
receiver_flo_id
} = this_user_pay_thru_cashier[0].message;
userData = { userData = {
amount: amount, amount: amount,
upiTxId: upi_txid, upiTxId: upi_txid,
@ -13950,10 +13801,7 @@ background-color: transparent;
} }
} }
if (this_cashier_processed_user_pay_thru_cashier.length) { if (this_cashier_processed_user_pay_thru_cashier.length) {
let { let { datetime, flo_txid } = this_cashier_processed_user_pay_thru_cashier[0].message;
datetime,
flo_txid
} = this_cashier_processed_user_pay_thru_cashier[0].message;
cashierData = { cashierData = {
processed: true, processed: true,
time: datetime, time: datetime,