feat: Add receive function
This commit is contained in:
parent
713b33d05f
commit
d6f98960b0
@ -57,6 +57,13 @@ def getBalance(account: str):
|
|||||||
|
|
||||||
return {'available': available, 'total': total}
|
return {'available': available, 'total': total}
|
||||||
|
|
||||||
|
def getAddress(account: str):
|
||||||
|
# Get the address
|
||||||
|
info = hsw.getAccountInfo(account, 'default')
|
||||||
|
if 'error' in info:
|
||||||
|
return ''
|
||||||
|
return info['receiveAddress']
|
||||||
|
|
||||||
def getPendingTX(account: str):
|
def getPendingTX(account: str):
|
||||||
# Get the pending transactions
|
# Get the pending transactions
|
||||||
info = hsw.getWalletTxHistory()
|
info = hsw.getWalletTxHistory()
|
||||||
|
28
main.py
28
main.py
@ -1,14 +1,16 @@
|
|||||||
from flask import Flask, make_response, redirect, request, jsonify, render_template, send_from_directory
|
from flask import Flask, make_response, redirect, request, jsonify, render_template, send_from_directory,send_file
|
||||||
import os
|
import os
|
||||||
import dotenv
|
import dotenv
|
||||||
import requests
|
import requests
|
||||||
import account as account_module
|
import account as account_module
|
||||||
import render
|
import render
|
||||||
import re
|
import re
|
||||||
|
from flask_qrcode import QRcode
|
||||||
|
|
||||||
dotenv.load_dotenv()
|
dotenv.load_dotenv()
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
|
qrcode = QRcode(app)
|
||||||
|
|
||||||
|
|
||||||
@app.route('/')
|
@app.route('/')
|
||||||
@ -65,6 +67,7 @@ def send_page():
|
|||||||
max = account_module.getBalance(account)['available']
|
max = account_module.getBalance(account)['available']
|
||||||
# Subtract approx fee of 0.02
|
# Subtract approx fee of 0.02
|
||||||
max = max - 0.02
|
max = max - 0.02
|
||||||
|
max = round(max, 2)
|
||||||
|
|
||||||
message = ''
|
message = ''
|
||||||
address = ''
|
address = ''
|
||||||
@ -121,6 +124,20 @@ def send():
|
|||||||
|
|
||||||
return redirect("/success?tx=" + response['tx'])
|
return redirect("/success?tx=" + response['tx'])
|
||||||
|
|
||||||
|
@app.route('/receive')
|
||||||
|
def receive():
|
||||||
|
# Check if the user is logged in
|
||||||
|
if request.cookies.get("account") is None:
|
||||||
|
return redirect("/login")
|
||||||
|
|
||||||
|
account = account_module.check_account(request.cookies.get("account"))
|
||||||
|
if not account:
|
||||||
|
return redirect("/logout")
|
||||||
|
|
||||||
|
address = account_module.getAddress(account)
|
||||||
|
|
||||||
|
return render_template("receive.html", account=account, address=address)
|
||||||
|
|
||||||
@app.route('/success')
|
@app.route('/success')
|
||||||
def success():
|
def success():
|
||||||
# Check if the user is logged in
|
# Check if the user is logged in
|
||||||
@ -182,6 +199,13 @@ def logout():
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region Assets and default pages
|
||||||
|
@app.route('/qr/<data>')
|
||||||
|
def qr(data):
|
||||||
|
return send_file(qrcode(data, mode="raw"), mimetype="image/png")
|
||||||
|
|
||||||
|
|
||||||
@app.route('/assets/<path:path>')
|
@app.route('/assets/<path:path>')
|
||||||
def send_assets(path):
|
def send_assets(path):
|
||||||
return send_from_directory('templates/assets', path)
|
return send_from_directory('templates/assets', path)
|
||||||
@ -194,12 +218,12 @@ def try_path(path):
|
|||||||
else:
|
else:
|
||||||
return page_not_found(404)
|
return page_not_found(404)
|
||||||
|
|
||||||
|
|
||||||
@app.errorhandler(404)
|
@app.errorhandler(404)
|
||||||
def page_not_found(e):
|
def page_not_found(e):
|
||||||
account = account_module.check_account(request.cookies.get("account"))
|
account = account_module.check_account(request.cookies.get("account"))
|
||||||
|
|
||||||
return render_template('404.html',account=account), 404
|
return render_template('404.html',account=account), 404
|
||||||
|
#endregion
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
app.run(debug=True)
|
app.run(debug=True)
|
@ -6,3 +6,4 @@ gunicorn
|
|||||||
dnspython
|
dnspython
|
||||||
cryptography
|
cryptography
|
||||||
requests-doh
|
requests-doh
|
||||||
|
Flask-QRcode
|
@ -13,6 +13,7 @@
|
|||||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
||||||
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
||||||
|
<link rel="stylesheet" href="/assets/fonts/material-icons.min.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top">
|
<body id="page-top">
|
||||||
@ -30,6 +31,7 @@
|
|||||||
<path d="M0 0h24v24H0z" fill="none"></path>
|
<path d="M0 0h24v24H0z" fill="none"></path>
|
||||||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
||||||
</svg><span>Send HNS</span></a></li>
|
</svg><span>Send HNS</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="receive"><i class="material-icons">call_received</i><span>Receive</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
||||||
</div>
|
</div>
|
||||||
|
BIN
templates/assets/fonts/MaterialIcons-Regular.eot
Normal file
BIN
templates/assets/fonts/MaterialIcons-Regular.eot
Normal file
Binary file not shown.
2373
templates/assets/fonts/MaterialIcons-Regular.svg
Normal file
2373
templates/assets/fonts/MaterialIcons-Regular.svg
Normal file
File diff suppressed because it is too large
Load Diff
After Width: | Height: | Size: 275 KiB |
BIN
templates/assets/fonts/MaterialIcons-Regular.ttf
Normal file
BIN
templates/assets/fonts/MaterialIcons-Regular.ttf
Normal file
Binary file not shown.
BIN
templates/assets/fonts/MaterialIcons-Regular.woff
Normal file
BIN
templates/assets/fonts/MaterialIcons-Regular.woff
Normal file
Binary file not shown.
BIN
templates/assets/fonts/MaterialIcons-Regular.woff2
Normal file
BIN
templates/assets/fonts/MaterialIcons-Regular.woff2
Normal file
Binary file not shown.
1
templates/assets/fonts/material-icons.min.css
vendored
Normal file
1
templates/assets/fonts/material-icons.min.css
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
@font-face{font-family:'Material Icons';font-style:normal;font-weight:400;src:url(MaterialIcons-Regular.eot);src:local('Material Icons'),local('MaterialIcons-Regular'),url(MaterialIcons-Regular.woff2) format('woff2'),url(MaterialIcons-Regular.woff) format('woff'),url(MaterialIcons-Regular.ttf) format('truetype')}.material-icons{font-family:'Material Icons';font-weight:400;font-style:normal;font-size:24px;display:inline-block;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:'liga'}
|
1
templates/assets/js/receive.min.js
vendored
Normal file
1
templates/assets/js/receive.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
function copyAddress(){var e=document.getElementById("copyLink").getAttribute("address"),t=document.createElement("input");t.value=e,document.body.appendChild(t),t.select(),t.setSelectionRange(0,99999),navigator.clipboard.writeText(t.value),document.body.removeChild(t),document.getElementById("copyLink").innerHTML="Copied!"}
|
@ -13,6 +13,7 @@
|
|||||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
||||||
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
||||||
|
<link rel="stylesheet" href="/assets/fonts/material-icons.min.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top">
|
<body id="page-top">
|
||||||
@ -30,6 +31,7 @@
|
|||||||
<path d="M0 0h24v24H0z" fill="none"></path>
|
<path d="M0 0h24v24H0z" fill="none"></path>
|
||||||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
||||||
</svg><span>Send HNS</span></a></li>
|
</svg><span>Send HNS</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="receive"><i class="material-icons">call_received</i><span>Receive</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
||||||
</div>
|
</div>
|
||||||
|
86
templates/receive.html
Normal file
86
templates/receive.html
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html data-bs-theme="light" lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
|
||||||
|
<title>Receive - FireWallet</title>
|
||||||
|
<link rel="icon" type="image/png" sizes="900x768" href="/assets/img/favicon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="900x768" href="/assets/img/favicon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="900x768" href="/assets/img/favicon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="900x768" href="/assets/img/favicon.png">
|
||||||
|
<link rel="icon" type="image/png" sizes="900x768" href="/assets/img/favicon.png">
|
||||||
|
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
||||||
|
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
||||||
|
<link rel="stylesheet" href="/assets/fonts/material-icons.min.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body id="page-top">
|
||||||
|
<div id="wrapper">
|
||||||
|
<nav class="navbar align-items-start sidebar sidebar-dark accordion bg-gradient-primary p-0 navbar-dark">
|
||||||
|
<div class="container-fluid d-flex flex-column p-0"><a class="navbar-brand d-flex justify-content-center align-items-center sidebar-brand m-0" href="/">
|
||||||
|
<div class="sidebar-brand-icon"><img src="/assets/img/favicon.png" width="44"></div>
|
||||||
|
<div class="sidebar-brand-text mx-3"><span>FireWallet</span></div>
|
||||||
|
</a>
|
||||||
|
<hr class="sidebar-divider my-0">
|
||||||
|
<ul class="navbar-nav text-light" id="accordionSidebar">
|
||||||
|
<li class="nav-item"><a class="nav-link" href="/"><i class="fas fa-tachometer-alt"></i><span>Dashboard</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="/tx"><i class="fas fa-table"></i><span>Transactions</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="/send"><svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 0 24 24" width="1em" fill="currentColor" style="margin-right: 4px;">
|
||||||
|
<path d="M0 0h24v24H0z" fill="none"></path>
|
||||||
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
||||||
|
</svg><span>Send HNS</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="receive"><i class="material-icons">call_received</i><span>Receive</span></a></li>
|
||||||
|
</ul>
|
||||||
|
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="d-flex flex-column" id="content-wrapper">
|
||||||
|
<div id="content">
|
||||||
|
<nav class="navbar navbar-expand bg-white shadow mb-4 topbar static-top navbar-light">
|
||||||
|
<div class="container-fluid"><button class="btn btn-link d-md-none rounded-circle me-3" id="sidebarToggleTop" type="button"><i class="fas fa-bars"></i></button>
|
||||||
|
<form class="d-none d-sm-inline-block me-auto ms-md-3 my-2 my-md-0 mw-100 navbar-search">
|
||||||
|
<div class="input-group"><input class="bg-light form-control border-0 small" type="text" placeholder="Search for domain"><button class="btn btn-primary py-0" type="button"><i class="fas fa-search"></i></button></div>
|
||||||
|
</form>
|
||||||
|
<ul class="navbar-nav flex-nowrap ms-auto">
|
||||||
|
<li class="nav-item dropdown d-sm-none no-arrow"><a class="dropdown-toggle nav-link" aria-expanded="false" data-bs-toggle="dropdown" href="#"><i class="fas fa-search"></i></a>
|
||||||
|
<div class="dropdown-menu dropdown-menu-end p-3 animated--grow-in" aria-labelledby="searchDropdown">
|
||||||
|
<form class="me-auto navbar-search w-100">
|
||||||
|
<div class="input-group"><input class="bg-light form-control border-0 small" type="text" placeholder="Search for ...">
|
||||||
|
<div class="input-group-append"><button class="btn btn-primary py-0" type="button"><i class="fas fa-search"></i></button></div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item dropdown no-arrow">
|
||||||
|
<div class="nav-item dropdown no-arrow"><a class="dropdown-toggle nav-link" aria-expanded="false" data-bs-toggle="dropdown" href="#"><span class="d-none d-lg-inline me-2 text-gray-600 small">{{account}}</span><img class="border rounded-circle img-profile" src="/assets/img/HNS.png"></a>
|
||||||
|
<div class="dropdown-menu shadow dropdown-menu-end animated--grow-in"><a class="dropdown-item" href="/logout"><i class="fas fa-sign-out-alt fa-sm fa-fw me-2 text-gray-400"></i> Logout</a></div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<div class="container-fluid">
|
||||||
|
<h3 class="text-center text-dark mb-1">Receive HNS or domains to this address</h3>
|
||||||
|
</div>
|
||||||
|
<div class="card" style="margin: auto;max-width: 500px;margin-top: 50px;">
|
||||||
|
<div class="card-body text-center">
|
||||||
|
<h4 class="card-title">{{address}}</h4><img src="/qr/{{address}}">
|
||||||
|
<p class="card-text">Use this address to receive HNS or Handshake domains from other people or wallets.</p><a class="card-link" id="copyLink" href="javascript:;" address="{{address}}" onclick="copyAddress()">Copy</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer class="bg-white sticky-footer">
|
||||||
|
<div class="container my-auto">
|
||||||
|
<div class="text-center my-auto copyright"><span>Copyright © FireWallet 2023</span></div>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
</div><a class="border rounded d-inline scroll-to-top" href="#page-top"><i class="fas fa-angle-up"></i></a>
|
||||||
|
</div>
|
||||||
|
<script src="/assets/bootstrap/js/bootstrap.min.js"></script>
|
||||||
|
<script src="/assets/js/script.min.js"></script>
|
||||||
|
<script src="/assets/js/receive.min.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
@ -13,6 +13,7 @@
|
|||||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
||||||
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
||||||
|
<link rel="stylesheet" href="/assets/fonts/material-icons.min.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top">
|
<body id="page-top">
|
||||||
@ -30,6 +31,7 @@
|
|||||||
<path d="M0 0h24v24H0z" fill="none"></path>
|
<path d="M0 0h24v24H0z" fill="none"></path>
|
||||||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
||||||
</svg><span>Send HNS</span></a></li>
|
</svg><span>Send HNS</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="receive"><i class="material-icons">call_received</i><span>Receive</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
||||||
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
||||||
|
<link rel="stylesheet" href="/assets/fonts/material-icons.min.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top">
|
<body id="page-top">
|
||||||
@ -30,6 +31,7 @@
|
|||||||
<path d="M0 0h24v24H0z" fill="none"></path>
|
<path d="M0 0h24v24H0z" fill="none"></path>
|
||||||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
||||||
</svg><span>Send HNS</span></a></li>
|
</svg><span>Send HNS</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="receive"><i class="material-icons">call_received</i><span>Receive</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
<link rel="stylesheet" href="/assets/bootstrap/css/bootstrap.min.css">
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i&display=swap">
|
||||||
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
<link rel="stylesheet" href="/assets/fonts/fontawesome-all.min.css">
|
||||||
|
<link rel="stylesheet" href="/assets/fonts/material-icons.min.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body id="page-top">
|
<body id="page-top">
|
||||||
@ -30,6 +31,7 @@
|
|||||||
<path d="M0 0h24v24H0z" fill="none"></path>
|
<path d="M0 0h24v24H0z" fill="none"></path>
|
||||||
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"></path>
|
||||||
</svg><span>Send HNS</span></a></li>
|
</svg><span>Send HNS</span></a></li>
|
||||||
|
<li class="nav-item"><a class="nav-link" href="receive"><i class="material-icons">call_received</i><span>Receive</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
<div class="text-center d-none d-md-inline"><button class="btn rounded-circle border-0" id="sidebarToggle" type="button"></button></div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user