feat: add bidirectional XMR to fiat conversion

Introduced bidirectional conversion functionality for XMR to fiat calculations. Added form elements and event listeners to handle user inputs and conversion direction. Enhanced URL and metadata processing to be dynamic based on protocol. Updated UI with conversion buttons for a better user experience. Safelisted new CSS classes in webpack configuration.
This commit is contained in:
Kumi 2024-08-10 16:23:52 +02:00
parent 5747f73c68
commit e97805d379
No known key found for this signature in database
GPG key ID: ECBCC9082395383F
4 changed files with 90 additions and 26 deletions

View file

@ -4,6 +4,10 @@ header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false); header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); header("Pragma: no-cache");
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$currentUrl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
$parentUrl = dirname($currentUrl);
// Get currency data from JSON // Get currency data from JSON
$api_cg = json_decode(file_get_contents('coingecko.json'), true); $api_cg = json_decode(file_get_contents('coingecko.json'), true);
@ -52,9 +56,22 @@ $lang = strtolower($lang);
require_once "lang/{$lang}.php"; require_once "lang/{$lang}.php";
$xmr_in = isset($_GET["in"]) ? strtoupper(htmlspecialchars($_GET["in"])) : 'EUR'; $xmr_in = isset($_GET["in"]) ? strtoupper(htmlspecialchars($_GET["in"])) : 'EUR';
$xmr_in_fiat = number_format($exchangeRates[$xmr_in], $xmr_in == 'BTC' || $xmr_in == 'LTC' || $xmr_in == 'ETH' || $xmr_in == 'XAG' || $xmr_in == 'XAU' ? 8 : 2); $xmr_amount = isset($_GET["xmr"]) ? floatval($_GET["xmr"]) : 1;
$fiat_amount = isset($_GET["fiat"]) ? floatval($_GET["fiat"]) : '';
$conversion_direction = isset($_GET["direction"]) ? intval($_GET["direction"]) : 0;
$xmr_in_fiat = strtr($xmr_in_fiat, ",", " "); if ($conversion_direction == 0) {
$fiat_value = $xmr_amount * $exchangeRates[$xmr_in];
$xmr_value = $xmr_amount;
} else {
$xmr_value = $fiat_amount / $exchangeRates[$xmr_in];
$fiat_value = $fiat_amount;
}
$fiat_value = number_format($fiat_value, ($xmr_in == 'BTC' || $xmr_in == 'LTC' || $xmr_in == 'ETH' || $xmr_in == 'XAG' || $xmr_in == 'XAU') ? 8 : 2);
$xmr_value = number_format($xmr_value, 12);
$fiat_value = strtr($fiat_value, ",", " ");
// Order preferred currencies to the top // Order preferred currencies to the top
foreach (array_reverse($preferred_currencies) as $currency) { foreach (array_reverse($preferred_currencies) as $currency) {
@ -81,7 +98,7 @@ foreach (array_reverse($preferred_currencies) as $currency) {
<meta property="og:title" content="<?php echo $page_title; ?>" /> <meta property="og:title" content="<?php echo $page_title; ?>" />
<meta property="og:description" content="<?php echo $meta_description; ?>" /> <meta property="og:description" content="<?php echo $meta_description; ?>" />
<meta property="og:image" content="img/mstile-310x150.png" /> <meta property="og:image" content="<?php echo $parentUrl; ?>/img/mstile-310x150.png" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<link rel="apple-touch-icon-precomposed" sizes="57x57" href="img/apple-touch-icon-57x57.png" /> <link rel="apple-touch-icon-precomposed" sizes="57x57" href="img/apple-touch-icon-57x57.png" />
@ -143,20 +160,29 @@ foreach (array_reverse($preferred_currencies) as $currency) {
</div> </div>
<hr class="gold" /> <hr class="gold" />
<div class="input-group"> <form method="get" action="">
<div class="input-group mb-3">
<button id="copyXMRBtn" class="btn-outline-secondary input-group-text clipboard-copy" title="<?php echo $clipboard_copy_tooltip; ?>" data-toggle="tooltip" data-bs-html="true" data-placement="top">&#128203;</button> <button id="copyXMRBtn" class="btn-outline-secondary input-group-text clipboard-copy" title="<?php echo $clipboard_copy_tooltip; ?>" data-toggle="tooltip" data-bs-html="true" data-placement="top">&#128203;</button>
<input class="form-control" id="xmrInput" type="text" spellcheck="false" autocorrect="off" inputmode="numeric" aria-label="<?php echo $l_xmrInput; ?>" aria-describedby="basic-addon-xmr" value="1"> <input class="form-control" id="xmrInput" name="xmr" type="text" spellcheck="false" autocorrect="off" inputmode="numeric" aria-label="<?php echo $l_xmrInput; ?>" aria-describedby="basic-addon-xmr" value="<?php echo $xmr_value; ?>">
<input class="input-group-text" id="basic-addon-xmr" type="text" value="XMR" aria-label="Monero" disabled> <input class="input-group-text" id="basic-addon-xmr" type="text" value="XMR" aria-label="Monero" disabled>
</div> </div>
<div class="equals-box"> <div class="equals-box">
<button id="convertXMRToFiat" type="submit" name="direction" value="0" class="btn btn-arrow">
<span class="equals-text">&darr;</span>
</button>
<button type="button" class="btn btn-equals">
<span class="equals-text cursor-default">=</span> <span class="equals-text cursor-default">=</span>
</button>
<button id="convertFiatToXMR" type="submit" name="direction" value="1" class="btn btn-arrow">
<span class="equals-text">&uarr;</span>
</button>
</div> </div>
<div class="fiatDiv input-group"> <div class="fiatDiv input-group mb-3">
<button id="copyFiatBtn" class="btn-outline-secondary input-group-text clipboard-copy" title="<?php echo $clipboard_copy_tooltip; ?>" data-toggle="tooltip" data-bs-html="true" data-placement="top">&#128203;</button> <button id="copyFiatBtn" class="btn-outline-secondary input-group-text clipboard-copy" title="<?php echo $clipboard_copy_tooltip; ?>" data-toggle="tooltip" data-bs-html="true" data-placement="top">&#128203;</button>
<input class="form-control" id="fiatInput" type="text" spellcheck="false" autocorrect="off" inputmode="numeric" aria-label="<?php echo $l_fiatInput; ?>" value="<?php echo $xmr_in_fiat; ?>"> <input class="form-control" id="fiatInput" name="fiat" type="text" spellcheck="false" autocorrect="off" inputmode="numeric" aria-label="<?php echo $l_fiatInput; ?>" value="<?php echo $fiat_value; ?>">
<select class="input-group-text cursor-pointer" id="selectBox" aria-label="<?php echo $l_fiatSelect; ?>"> <select class="input-group-text cursor-pointer" id="selectBox" name="in" aria-label="<?php echo $l_fiatSelect; ?>">
<?php <?php
foreach ($currencies as $currency) { foreach ($currencies as $currency) {
$selected = $currency == $xmr_in ? 'selected' : ''; $selected = $currency == $xmr_in ? 'selected' : '';
@ -166,6 +192,7 @@ foreach (array_reverse($preferred_currencies) as $currency) {
?> ?>
</select> </select>
</div> </div>
</form>
<hr class="gold" /> <hr class="gold" />
<small class="cursor-default text-white text-info" lang="<?php echo $lang_meta; ?>"> <small class="cursor-default text-white text-info" lang="<?php echo $lang_meta; ?>">
@ -199,7 +226,6 @@ foreach (array_reverse($preferred_currencies) as $currency) {
var exchangeRates = <?php echo json_encode($exchangeRates); ?>; var exchangeRates = <?php echo json_encode($exchangeRates); ?>;
</script> </script>
<script src="js/main.js"></script> <script src="js/main.js"></script>
</body> </body>
</html> </html>

View file

@ -53,6 +53,31 @@ input.form-control {
font-size: 42px; font-size: 42px;
} }
.btn-arrow {
border: 1px solid white;
border-radius: 10px;
font-size: 38px !important;
color: white;
padding: 0;
cursor: pointer;
}
.btn-arrow:hover {
border: 1px solid black;
color: black;
}
.btn-equals {
font-size: 38px !important;
color: white;
padding: 0;
cursor: default;
}
.btn-equals:hover {
color: black;
}
.equals-text { .equals-text {
vertical-align: super; vertical-align: super;
} }

View file

@ -20,6 +20,8 @@ document.addEventListener('DOMContentLoaded', function () {
const xmrInput = document.getElementById('xmrInput'); const xmrInput = document.getElementById('xmrInput');
const fiatInput = document.getElementById('fiatInput'); const fiatInput = document.getElementById('fiatInput');
const selectBox = document.getElementById('selectBox'); const selectBox = document.getElementById('selectBox');
const convertXMRToFiatBtn = document.getElementById('convertXMRToFiat');
const convertFiatToXMRBtn = document.getElementById('convertFiatToXMR');
// Add event listeners for the copy buttons // Add event listeners for the copy buttons
copyXMRBtn.addEventListener('click', copyToClipBoardXMR); copyXMRBtn.addEventListener('click', copyToClipBoardXMR);
@ -62,6 +64,17 @@ document.addEventListener('DOMContentLoaded', function () {
} }
}); });
// Add event listeners for the conversion buttons
convertXMRToFiatBtn.addEventListener('click', (e) => {
e.preventDefault();
xmrConvert();
});
convertFiatToXMRBtn.addEventListener('click', (e) => {
e.preventDefault();
fiatConvert();
});
// Fetch updated exchange rates immediately, then every 5 seconds // Fetch updated exchange rates immediately, then every 5 seconds
fetchUpdatedExchangeRates(); fetchUpdatedExchangeRates();
setInterval(fetchUpdatedExchangeRates, 5000); setInterval(fetchUpdatedExchangeRates, 5000);

View file

@ -31,7 +31,7 @@ module.exports = {
paths: glob.sync([ paths: glob.sync([
path.join(__dirname, 'index.php') path.join(__dirname, 'index.php')
]), ]),
safelist: ['tooltip', 'fade', 'show', 'bs-tooltip-top', 'tooltip-inner', 'tooltip-arrow'] safelist: ['tooltip', 'fade', 'show', 'bs-tooltip-top', 'tooltip-inner', 'tooltip-arrow', 'btn-equals', 'btn-arrow']
}) })
] ]
}; };