diff --git a/JS/scripts.js b/JS/scripts.js index b1327f2..94d76ae 100644 --- a/JS/scripts.js +++ b/JS/scripts.js @@ -34,39 +34,92 @@ function partial(fieldId) { const rawValue = input.value; const value = Number(rawValue); const min = Number(input.min); // 1 - const max = Number(input.max); // 1000 or 4000 + const fullcollateral = Number(input.placeholder); // 1000 or 4000 if (refusalCount[fieldId] === undefined) refusalCount[fieldId] = 0; - const isValid = rawValue !== '' && Number.isInteger(value) && value >= min && value <= max; + const isValid = rawValue !== '' && Number.isInteger(value) && value >= min; if (!isValid) { refusalCount[fieldId]++; const lastValid = input.dataset.lastValid ?? input.placeholder; input.value = lastValid; if (refusalCount[fieldId] >= 5) - alert(JSalert + min + " & " + max + "."); + alert(JSalert); } else { // valid partial collateral entered by the visitor refusalCount[fieldId] = 0; input.dataset.lastValid = rawValue; + const thenumber = document.getElementById(fieldId + "-number"); const yearlydash = document.getElementById(fieldId + "-earning"); const yearlyfiat = document.getElementById(fieldId + "-fiat-earning"); - // updated earnings - yearlydash.textContent = ((value / max) * yearlydash.dataset.placeholder).toFixed(1); - yearlyfiat.textContent = ((value / max) * yearlyfiat.dataset.placeholder).toFixed(1); - // bounces to show it - yearlydash.classList.remove('earning-update'); - yearlyfiat.classList.remove('earning-update'); - void yearlydash.offsetWidth; - void yearlyfiat.offsetWidth; - yearlydash.classList.add('earning-update'); - yearlyfiat.classList.add('earning-update'); - yearlydash.addEventListener('animationend', () => { - yearlydash.classList.remove('earning-update'); - }, { once: true }); - yearlyfiat.addEventListener('animationend', () => { - yearlyfiat.classList.remove('earning-update'); - }, { once: true }); + // updated number of MNs/eMNs + var newnumber = Number((value / fullcollateral).toFixed(1)); + var times = ""; + if (newnumber != 1) + times = " × "; + if (newnumber < 0.1) + newnumber = "≈ 0.05"; + else if (!Number.isInteger(newnumber)) + newnumber = "≈ " + newnumber; + thenumber.textContent = newnumber + times; + // updated number and earnings + yearlydash.textContent = ((value / fullcollateral) * yearlydash.dataset.placeholder).toFixed(1); + yearlyfiat.textContent = ((value / fullcollateral) * yearlyfiat.dataset.placeholder).toFixed(0); + // funky bounces to show it + [thenumber, yearlydash, yearlyfiat].forEach(element => { + element.classList.remove('earning-update'); + void element.offsetWidth; + element.classList.add('earning-update'); + element.addEventListener('animationend', () => { + element.classList.remove('earning-update'); + }, { once: true }); + }); + + + } -} \ No newline at end of file +} + +// 1000 or 4000 increments management (using up/down arrow keys) +document.addEventListener("DOMContentLoaded", () => { + ['coll-MN', 'coll-Evo'].forEach(id => { + const input = document.getElementById(id); + if (!input) + return; + const stepValue = Number(input.placeholder); // 1000 for MN, 4000 for Evo + let lastValue = Number(input.value); + // 1 : up/down arrow on keyboard + input.addEventListener('keydown', (e) => { + let currentValue = Number(input.value) || 0; + if (e.key === 'ArrowUp') { + e.preventDefault(); + let newValue = Math.ceil((currentValue + 0.1) / stepValue) * stepValue; + input.value = newValue; + input.dispatchEvent(new Event('input')); + } else if (e.key === 'ArrowDown') { + e.preventDefault(); + let newValue = Math.floor((currentValue - 0.1) / stepValue) * stepValue; + input.value = Math.max(Number(input.min) || 1, newValue); + + input.dispatchEvent(new Event('input')); + } + }); + // 2 : browser arrows clicked + input.addEventListener('input', (e) => { + if (e.inputType !== 'insertText' && e.inputType !== 'deleteContentBackward') { + let currentValue = Number(input.value) || 0; + if (currentValue > lastValue) { + let newValue = Math.ceil((lastValue + 0.1) / stepValue) * stepValue; + input.value = newValue; + } + else if (currentValue < lastValue) { + let newValue = Math.floor((lastValue - 0.1) / stepValue) * stepValue; + input.value = Math.max(Number(input.min) || 1, newValue); + } + partial(id.replace('coll-', '')); + } + lastValue = Number(input.value); + }); + }); +}); \ No newline at end of file diff --git a/compute.php b/compute.php index 023e861..f599abb 100644 --- a/compute.php +++ b/compute.php @@ -1,6 +1,6 @@ $now, "readable" => date("Y-m-d H:i:s", $now)]; $JSON["lastPrices"]["USD"]["365d"] = round($prices[0][1], 2); $JSON["lastPrices"]["USD"]["current"] = round($prices[count($prices) - 1][1], 2); - $JSON["lastPrices"]["USD"]["status"] = "Dash/USD price refreshed"; + $JSON["lastPrices"]["USD"]["status"][] = "Dash/USD price refreshed"; } } catch (Exception $e) { - $JSON["lastPrices"]["USD"]["status"] = "Fetch failed: " . $e->getMessage(); + $JSON["lastPrices"]["USD"]["status"][] = "Fetch failed: " . $e->getMessage(); } } -// Exchange rates update (ExchangeRate-API) if missing or outdated +// Exchange rates update (Frankfurter.dev) if missing or outdated $needs_exchange_update = false; if (!isset($JSON["lastPrices"]["conversion_rates"]) || !isset($JSON["lastPrices"]["conversion_rates"]["time"]["timestamp"]) || ($now - $JSON["lastPrices"]["conversion_rates"]["time"]["timestamp"]) > ($hoursExchangeRate * 60 * 60)) { $needs_exchange_update = true; } if ($needs_exchange_update) { - try { - $url_exchange = "https://v6.exchangerate-api.com/v6/" . $ExchangeRateAPIKey . "/latest/USD"; - $data_exch = http_get_json($url_exchange); - if (isset($data_exch["conversion_rates"])) { - $JSON["lastPrices"]["conversion_rates"] = [ - "source" => "ExchangeRate-API", - "time" => [ - "timestamp" => $now, - "readable" => date("Y-m-d H:i:s", $now) - ] - ]; - foreach (array_keys($fiatcurrencies) as $f) { - if (!isset($data_exch["conversion_rates"][$f])) { - $JSON["lastPrices"]["conversion_rates"]["status"] = "Warning: missing rate for " . $f; + $JSON["lastPrices"]["conversion_rates"] = [ + "source" => "Frankfurter.dev", + "time" => [ + "timestamp" => $now, + "readable" => date("Y-m-d H:i:s", $now) + ] + ]; + $exch_rate_dates = array("now" => $now, "one-year-ago" => ($now - (365 * 24 * 60 * 60))); + foreach ($exch_rate_dates as $datename => $datestamp) { + try { + if ($datename == "one-year-ago") + $data_exch_get = "&date=" . date("Y-m-d", $datestamp); + else + $data_exch_get = ""; + $data_exch = http_get_json("https://api.frankfurter.dev/v2/rates?base=USD" . $data_exch_get); + if (is_array($data_exch) and !empty($data_exch)) { + $JSON["lastPrices"]["conversion_rates"][$datename] = [ + "time" => [ + "timestamp" => $datestamp, + "readable" => date("Y-m-d H:i:s", $datestamp) + ] + ]; + $JSON["lastPrices"]["conversion_rates"][$datename]["USD"] = 1; + foreach ($data_exch as $row) { // Harvest exchange rates for followed fiat currencies + if (in_array($row["quote"], array_keys($fiatcurrencies))) + $JSON["lastPrices"]["conversion_rates"][$datename][$row["quote"]] = (float)$row["rate"]; + } + foreach (array_keys($fiatcurrencies) as $f) { // Check if some followed fiat are missing + if (!isset($JSON["lastPrices"]["conversion_rates"][$datename][$f])) { + $JSON["lastPrices"]["conversion_rates"][$datename]["status"][] = "Warning: missing rate for " . $f; + } } - $JSON["lastPrices"]["conversion_rates"][$f] = $data_exch["conversion_rates"][$f] ?? 1.0; + $JSON["lastPrices"]["conversion_rates"][$datename]["status"][] = "Conversion rates refreshed"; } - $JSON["lastPrices"]["conversion_rates"]["status"] = "Conversion rates refreshed"; + } catch (Exception $e) { + $JSON["lastPrices"]["conversion_rates"][$datename]["status"][] = "Exchange update failed: " . $e->getMessage(); } - } catch (Exception $e) { - $JSON["lastPrices"]["conversion_rates"]["status"] = "Exchange update failed: " . $e->getMessage(); } } // Saving lastPrices.json if ($needs_price_update || $needs_exchange_update) { - file_put_contents("cache/lastPrices.json", json_encode($JSON["lastPrices"], JSON_PRETTY_PRINT), LOCK_EX); // maybe we should prevent saving failures - $JSON["lastPrices"]["status"] = "JSON saved"; + if (!file_put_contents("cache/lastPrices.json", json_encode($JSON["lastPrices"], JSON_PRETTY_PRINT), LOCK_EX)) + $JSON["lastPrices"]["status"][] = "failed to save JSON"; + else + $JSON["lastPrices"]["status"][] = "JSON saved"; } @@ -191,7 +208,7 @@ function dash_rpc(string $method, array $params = []):array|int|bool { $JSON["rewards"]["yearly"][$type]["DASH"] = round(($JSON["APY"][$now][$type] / 100) * $collateral[$type], 8); foreach (array_keys($fiatcurrencies) as $fiatcurrency) { $currentfiat = strtoupper($fiatcurrency); - $rate = $JSON["lastPrices"]["conversion_rates"][$currentfiat] ?? 1.0; + $rate = $JSON["lastPrices"]["conversion_rates"]["now"][$currentfiat] ?? 1.0; $JSON["rewards"]["yearly"][$type][$currentfiat] = round($JSON["rewards"]["yearly"][$type]["DASH"] * $dashPriceUSD * $rate, 0); } @@ -199,7 +216,7 @@ function dash_rpc(string $method, array $params = []):array|int|bool { $dashPrice365d = $JSON["lastPrices"]["USD"]["365d"]; foreach (array_keys($fiatcurrencies) as $fiatcurrency) { $currentfiat = strtoupper($fiatcurrency); - $rate = $JSON["lastPrices"]["conversion_rates"][$currentfiat] ?? 1.0; + $rate = $JSON["lastPrices"]["conversion_rates"]["now"][$currentfiat] ?? 1.0; $historiqueAPY = json_decode(file_get_contents("cache/APYhistory.json"), true); $rewardspast365d = calculateInterestAndAPY($historiqueAPY, ($now - (365 * 24 * 60 * 60)), $now, $type, $collateral[$type]); diff --git a/index.php b/index.php index 829aca9..4a49d37 100644 --- a/index.php +++ b/index.php @@ -1,5 +1,5 @@ 0) + $bold = $font . "-bold"; + else + $bold = "bold"; + return str_replace(array("", ""), array("", ""), $sometext); +} + // Selected fiat currency =============== -$fiat = "USD"; // default, except if cookie +$fiat = "USD"; // default if (isset($_COOKIE["fiat"]) && in_array($_COOKIE["fiat"], array_keys($fiatcurrencies))) { // cookie $fiat = $_COOKIE["fiat"]; } @@ -180,16 +188,16 @@ function parse_accept_language(string $header): array{ $lang = "en"; // default if missing JSON $rawJS = file_get_contents("./languages/" . $lang . ".json"); // gets the right JSON language file $UItext = json_decode($rawJS, true); -// we could also modify the link to Dash Docs in the GUI in order to link to the right language $data=json_decode(exec('php compute.php'),true); if (!is_array($data)) die("Invalid JSON response (1)"); $APY = reset($data["APY"]); -$USDprice[$fiat] = $data["lastPrices"]["conversion_rates"][$fiat]; -$currentprice[$fiat] = round($data["lastPrices"]["USD"]["current"] * $USDprice[$fiat], 2); -$past365dprice[$fiat] = round($data["lastPrices"]["USD"]["365d"] * $USDprice[$fiat], 2); // it would be smarter to get *past* USD/fiat price +$currentUSDprice[$fiat] = $data["lastPrices"]["conversion_rates"]["now"][$fiat]; +$past365USDprice[$fiat] = $data["lastPrices"]["conversion_rates"]["one-year-ago"][$fiat]; +$currentprice[$fiat] = round($data["lastPrices"]["USD"]["current"] * $currentUSDprice[$fiat], 2); +$past365dprice[$fiat] = round($data["lastPrices"]["USD"]["365d"] * $past365USDprice[$fiat], 2); $daysago365 = date("jS F Y", $data["lastPrices"]["USD"]["time"]["timestamp"] - (365 * 24 * 60 * 60)); // Check if CoinGecko sent the price @@ -258,13 +266,13 @@ function parse_accept_language(string $header): array{

- ", ""), array(floor((time() - strtotime("2014-01-18 00:00:00")) / (365 * 24 * 60 * 60)), "", ""), $UItext["proven-crypto"]); ?> -
", ""), array("", ""), $UItext["servers"]); ?> + +

Dash & .


" . date("d M. Y, H:i") . "", $UItext["page-refreshed"]); ?> -
)">DYOR. +
)">DYOR.

@@ -297,13 +305,13 @@ function parse_accept_language(string $header): array{
📊   -
, .
(, .)"> +
, .
(, .)"> ℹ️
- " . $fiatcurrencies[$fiat]["symbol"]; ?> / Đ + " . $fiatcurrencies[$fiat]["symbol"]; ?> / Đ
@@ -315,13 +323,14 @@ function parse_accept_language(string $header): array{ ℹ️
- Dash money tree +
"> - 1 Masternode, - Đ" data-tippy-placement="bottom"> + 1 Masternode, + Đ + " data-tippy-placement="bottom"> ℹ️
@@ -329,16 +338,16 @@ function parse_accept_language(string $header): array{   %  Đ - "> -
"> + "> /  +
"> ℹ️
↪︎ -   "> -
"> +   "> /  +
"> ℹ️
@@ -348,8 +357,9 @@ function parse_accept_language(string $header): array{
"> - 1 Evonode, - Đ" data-tippy-placement="bottom"> + 1 Evonode, + Đ + " data-tippy-placement="bottom"> ℹ️
@@ -357,17 +367,16 @@ function parse_accept_language(string $header): array{   %  Đ - "> -
"> + "> /  +
"> ℹ️
↪︎ - -   "> -
"> +   "> /  +
"> ℹ️
diff --git a/languages/en.json b/languages/en.json index 5350666..cad277c 100644 --- a/languages/en.json +++ b/languages/en.json @@ -20,22 +20,24 @@ "market-price": "Market price", "provided-CoinGecko": "Dash price provided in US dollars by CoinGecko", "provided-ExchangeRate": "Conversion to fiat currencies other than the US dollar using Exchange-Rate", + "provided-Frankfurter": "Conversion to fiat currencies other than the US dollar using Frankfurter.dev", "price-alert": "Oops ! Dash price was not sent by CoinGecko.
Please retry later to get the right numbers on this page.", "today": "today", "yearly-earnings": "Dash Masternode & Evonode yearly earnings", "XKCD-functions": "Percentages computed by XKCD’s functions that are based on current Dash parameters.", "collateral": "collateral", "MN-collateral": "Running a masternode requires a Đ 1000 collateral. The server running the masternode also involves some costs, usually minor.", - "MN-collateral-edit": "Adjust the collateral (between 1 and 1000 Đ) if you are using a shared masternode with other operators.
If you are the only operator, your collateral is 1000 Đ.", - "MN-varying": "The % of yearly earnings may vary throughout one year, depending in particular on variations of the total number of active masternodes.
Whatever this % becomes, you WILL earn Dash as long as your masternode is running properly.", + "MN-collateral-edit": "Adjust the collateral, particularly in the following cases :
— using a masternode shared with other operators (collateral < Đ 1000)
— operating multiple masternodes (collateral > Đ 1000)", + "year": "year", + "MN-varying": "The % of yearly earnings may vary throughout one year, depending in particular on variations of the total number of active masternodes.
Whatever this % becomes, you WILL earn Dash as long as your masternode is running properly.", "percent-stable": "if % is stable", "worth": "worth", - "MN-1-year-simulation": "This is a ### earnings simulation assuming today’s Dash market price (≈ §§§) remains stable for one year.
Whatever the price becomes, you WILL earn something as long as your masternode is running properly.", + "MN-1-year-simulation": "This is a ### earnings simulation assuming today’s Dash market price (≈ §§§) remains stable for one year.
Whatever the price becomes, you WILL earn something as long as your masternode is running properly.", "price-stable": "if price is stable", "Evo-collateral": "Running an Evonode requires a Đ 4000 collateral. The server running the Evonode also involves some costs, usually minor.", - "Evo-collateral-edit": "Adjust the collateral (between 1 and 4000 Đ) if you are using a shared Evonode with other operators.
If you are the only operator, your collateral is 4000 Đ.", - "Evo-varying": "The % of yearly earnings may vary throughout one year, depending in particular on variations of the total number of active Evonodes.
Whatever this % becomes, you WILL earn Dash as long as your Evonode is running properly.", - "Evo-1-year-simulation": "This is a ### earnings simulation assuming today’s Dash market price (≈ §§§) remains stable for one year.
Whatever the price becomes, you WILL earn something as long as your Evonode is running properly.", + "Evo-collateral-edit": "Adjust the collateral, particularly in the following cases :
— using an Evonode shared with other operators (collateral < Đ 4000)
— operating multiple Evonodes (collateral > Đ 4000)", + "Evo-varying": "The % of yearly earnings may vary throughout one year, depending in particular on variations of the total number of active Evonodes.
Whatever this % becomes, you WILL earn Dash as long as your Evonode is running properly.", + "Evo-1-year-simulation": "This is a ### earnings simulation assuming today’s Dash market price (≈ §§§) remains stable for one year.
Whatever the price becomes, you WILL earn something as long as your Evonode is running properly.", "earnings-1-year-ago": "What would my earnings be today
if I had started a Masternode or Evonode one year ago ?", "way-to-estimate": "A way to estimate your Dash masternode & Evonode returns.", "I-bought": "I bought a", @@ -55,5 +57,5 @@ "Evo-approx-earnings-1-year": "If you had started your Evonode one year ago, its earnings over one year would be approximately worth this ### amount at today's Dash market price (≈ §§§).", "4000-worth": "#DASH# 4000 collateral is worth", "4000-worth-today": "Your Đ 4000 collateral, bought one year ago, would be approximately worth this ### amount at today's Dash market price (≈ §§§).", - "JSalert": "Invalid value. Please enter a number between " + "JSalert": "Invalid number." } diff --git a/languages/es.json b/languages/es.json index d47affd..7de8475 100644 --- a/languages/es.json +++ b/languages/es.json @@ -20,22 +20,24 @@ "market-price": "Precio de mercado", "provided-CoinGecko": "Precio de Dash proporcionado en dólares estadounidenses por CoinGecko", "provided-ExchangeRate": "Conversión a monedas distintas del dólar estadounidense usando Exchange-Rate", + "provided-Frankfurter": "Conversión a monedas distintas del dólar estadounidense usando Frankfurter.dev", "price-alert": "¡ Ups ! CoinGecko no ha reportado el precio de Dash.
Inténtalo de nuevo más tarde para ver los precios correctos en esta página.", "today": "hoy", "yearly-earnings": "Ingresos anuales de los masternodes & Evonodes Dash", "XKCD-functions": "Porcentajes calculados por las funciones de XKCD, basadas en los parámetros actuales de Dash.", "collateral": "garantía", "MN-collateral": "Ejecutar un masternode requiere una garantía de 1000 Đ. El servidor que aloja el masternode también conlleva gastos, en general modestos.", - "MN-collateral-edit": "Ajusta la garantía (entre 1 y 1000 Đ) si estás utilizando un masternode compartido con otros operadores.
Si eres el único operador, su garantía es de 1000 Đ.", - "MN-varying": "El % de ingresos anuales puede variar a lo largo de un año, en función en particular de la evolución del número total de masternodes activos.
Sea cual sea ese %, usted GANARÁ Dashs mientras su masternode funcione correctamente.", + "MN-collateral-edit": "Ajusta la garantía, especialmente en los siguientes casos :
— uso de un masternode compartido con otros operadores (garantía < 1000 Đ)
— operación de varios masternodes (garantía > 1000 Đ)", + "year": "año", + "MN-varying": "El % de ingresos anuales puede variar a lo largo de un año, en función en particular de la evolución del número total de masternodes activos.
Sea cual sea ese %, usted GANARÁ Dashs mientras su masternode funcione correctamente.", "percent-stable": "si el % es estable", "worth": "con un valor de", - "MN-1-year-simulation": "Esta es una simulación de ingresos en ### suponiendo que el precio actual de Dash (≈ §§§) se mantiene estable durante un año.
Sea cual sea el precio, usted GANARÁ algo mientras su masternode funcione correctamente.", + "MN-1-year-simulation": "Esta es una simulación de ingresos en ### suponiendo que el precio actual de Dash (≈ §§§) se mantiene estable durante un año.
Sea cual sea el precio, usted GANARÁ algo mientras su masternode funcione correctamente.", "price-stable": "si el precio es estable", "Evo-collateral": "Ejecutar un Evonode requiere una garantía de 4000 Đ. El servidor que aloja el Evonode también conlleva gastos, en general modestos.", - "Evo-collateral-edit": "Ajusta la garantía (entre 1 y 4000 Đ) si estás utilizando un Evonode compartido con otros operadores.
Si eres el único operador, su garantía es de 4000 Đ.", - "Evo-varying": "El % de ingresos anuales puede variar a lo largo de un año, en función en particular de la evolución del número total de Evonodes activos.
Sea cual sea ese %, usted GANARÁ Dashs mientras su Evonode funcione correctamente.", - "Evo-1-year-simulation": "Esta es una simulación de ingresos en ### suponiendo que el precio actual de Dash (≈ §§§) se mantiene estable durante un año.
Sea cual sea el precio, usted GANARÁ algo mientras su Evonode funcione correctamente.", + "Evo-collateral-edit": "Ajusta la garantía, especialmente en los siguientes casos :
— uso de un Evonode compartido con otros operadores (garantía < 4000 Đ)
— operación de varios Evonodes (garantía > 4000 Đ)", + "Evo-varying": "El % de ingresos anuales puede variar a lo largo de un año, en función en particular de la evolución del número total de Evonodes activos.
Sea cual sea ese %, usted GANARÁ Dashs mientras su Evonode funcione correctamente.", + "Evo-1-year-simulation": "Esta es una simulación de ingresos en ### suponiendo que el precio actual de Dash (≈ §§§) se mantiene estable durante un año.
Sea cual sea el precio, usted GANARÁ algo mientras su Evonode funcione correctamente.", "earnings-1-year-ago": "¿ Cuáles serían hoy mis ingresos
si hubiera iniciado un Masternode o un Evonode hace un año ?", "way-to-estimate": "Una forma de estimar el rendimiento de su masternode & Evonode Dash.", "I-bought": "Compré una", @@ -55,5 +57,5 @@ "Evo-approx-earnings-1-year": "Si hubiera iniciado su Evonode hace un año, sus ganancias en un año serían aproximadamente esta cantidad en ### al precio actual de Dash en el mercado (≈ §§§).", "4000-worth": "garantía de 4000 #DASH# vale", "4000-worth-today": "Su garantía de 4000 Đ comprada hace un año valdría aproximadamente esta cantidad en ### al precio actual de Dash en el mercado (≈ §§§).", - "JSalert": "Valor no válido. Introduzca un número entre " + "JSalert": "Número no válido." } \ No newline at end of file diff --git a/languages/fr.json b/languages/fr.json index b5ffa26..0c0474a 100644 --- a/languages/fr.json +++ b/languages/fr.json @@ -20,22 +20,24 @@ "market-price": "Cours sur le marché", "provided-CoinGecko": "Cours de Dash fourni en dollars américains par CoinGecko", "provided-ExchangeRate": "Conversion en monnaies autres que le dollar américain grâce à Exchange-Rate", + "provided-Frankfurter": "Conversion en monnaies autres que le dollar américain grâce à Frankfurter.dev", "price-alert": "Oups ! Le cours de Dash n’a pas été communiqué par CoinGecko.
Veuillez réessayer plus tard pour voir les bons nombres sur cette page.", "today": "aujourd’hui", "yearly-earnings": "Revenus annuels des masternodes & Evonodes Dash", "XKCD-functions": "Pourcentages calculés par les fonctions de XKCD, basées sur les paramètres actuels de Dash.", "collateral": "caution", "MN-collateral": "Faire tourner un masternode nécessite une caution de 1000 Đ. Le serveur hébergeant le masternode implique également des frais, en général modestes.", - "MN-collateral-edit": "Modifiez la caution (entre 1 et 1000 Đ) dans le cas où vous utilisez un masternode partagé avec d’autres opérateurs.
Si vous êtes le seul opérateur, votre caution est de 1000 Đ.", - "MN-varying": "Le % de revenus annuels peut varier au cours d'une année, en fonction notamment de l'évolution du nombre total de masternodes actifs.
Quel que soit ce %, vous GAGNEREZ des dashs tant que votre masternode fonctionne correctement.", + "MN-collateral-edit": "Modifiez la caution, notamment dans ces cas :
— utiliser un masternode partagé avec d’autres opérateurs (caution < 1000 Đ)
— être opérateur de plusieurs masternodes (caution > 1000 Đ)", + "year": "an", + "MN-varying": "Le % de revenus annuels peut varier au cours d'une année, en fonction notamment de l'évolution du nombre total de masternodes actifs.
Quel que soit ce %, vous GAGNEREZ des dashs tant que votre masternode fonctionne correctement.", "percent-stable": "si le % est stable", "worth": "valant", - "MN-1-year-simulation": "Ceci est une simulation de revenus en ### en supposant que le cours actuel de Dash (≈ §§§) reste stable pendant un an.
Quel que soit le cours, vous GAGNEREZ quelque chose tant que votre masternode fonctionne correctement.", + "MN-1-year-simulation": "Ceci est une simulation de revenus en ### en supposant que le cours actuel de Dash (≈ §§§) reste stable pendant un an.
Quel que soit le cours, vous GAGNEREZ quelque chose tant que votre masternode fonctionne correctement.", "price-stable": "si le cours est stable", "Evo-collateral": "Faire tourner un Evonode nécessite une caution de 4000 Đ. Le serveur hébergeant l'Evonode implique également des frais, en général modestes.", - "Evo-collateral-edit": "Modifiez la caution (entre 1 et 4000 Đ) dans le cas où vous utilisez un Evonode partagé avec d’autres opérateurs.
Si vous êtes le seul opérateur, votre caution est de 4000 Đ.", - "Evo-varying": "Le % de revenus annuels peut varier au cours d'une année, en fonction notamment de l'évolution du nombre total d'Evonodes actifs.
Quel que soit ce %, vous GAGNEREZ des dashs tant que votre Evonode fonctionne correctement.", - "Evo-1-year-simulation": "Ceci est une simulation de revenus sur ### en supposant que le cours actuel de Dash (≈ §§§) reste stable pendant un an.
Quel que soit le cours, vous GAGNEREZ quelque chose tant que votre Evonode fonctionne correctement.", + "Evo-collateral-edit": "Modifiez la caution, notamment dans ces cas :
— utiliser un Evonode partagé avec d’autres opérateurs (caution < 4000 Đ)
— être opérateur de plusieurs Evonodes (caution > 4000 Đ)", + "Evo-varying": "Le % de revenus annuels peut varier au cours d'une année, en fonction notamment de l'évolution du nombre total d'Evonodes actifs.
Quel que soit ce %, vous GAGNEREZ des dashs tant que votre Evonode fonctionne correctement.", + "Evo-1-year-simulation": "Ceci est une simulation de revenus sur ### en supposant que le cours actuel de Dash (≈ §§§) reste stable pendant un an.
Quel que soit le cours, vous GAGNEREZ quelque chose tant que votre Evonode fonctionne correctement.", "earnings-1-year-ago": "Quels seraient aujourd'hui mes revenus
si j'avais démarré un Masternode ou un Evonode il y a un an ?", "way-to-estimate": "Une façon d'estimer les rendements de votre masternode & Evonode Dash.", "I-bought": "J'ai acheté une", @@ -55,5 +57,5 @@ "Evo-approx-earnings-1-year": "Si vous aviez démarré votre Evonode il y a un an, ses gains sur un an seraient environ ce montant en ### au cours actuel de Dash sur le marché (≈ §§§).", "4000-worth": "caution de 4000 #DASH# vaut", "4000-worth-today": "Votre caution de 4000 Đ achetée il y a un an vaudrait environ ce montant en ### au cours actuel de Dash sur le marché (≈ §§§).", - "JSalert": "Valeur invalide. Veuillez entrer un nombre entre " + "JSalert": "Nombre invalide." } \ No newline at end of file diff --git a/languages/it.json b/languages/it.json index 29822ca..70fa677 100644 --- a/languages/it.json +++ b/languages/it.json @@ -20,22 +20,24 @@ "market-price": "Prezzo di mercato", "provided-CoinGecko": "Prezzo di Dash fornito in dollari statunitensi da CoinGecko", "provided-ExchangeRate": "Conversione in valute diverse dal dollaro statunitense utilizzando Exchange-Rate", + "provided-Frankfurter": "Conversione in valute diverse dal dollaro statunitense utilizzando Frankfurter.dev", "price-alert": "Ops ! Il prezzo di Dash non è stato ancora comunicato da CoinGecko.
Riprova più tardi per visualizzare i dati corretti su questa pagina.", "today": "oggi", "yearly-earnings": "Guadagni annuali dei masternodes & Evonodes Dash", "XKCD-functions": "Percentuali calcolate dalle funzioni di XKCD, basate sugli attuali parametri di Dash.", "collateral": "cauzione", "MN-collateral": "Gestire un masternode richiede una cauzione di 1000 Đ. Il server che ospita il masternode comporta anche delle spese, in genere modeste.", - "MN-collateral-edit": "Regola la cauzione (tra 1 e 1000 Đ) se utilizzi un masternode condiviso con altri operatori.
Se sei l'unico operatore, la tua cauzione è di 1000 Đ.", - "MN-varying": "La % di guadagni annuali può variare nel corso di un anno, in funzione in particolare dell'evoluzione del numero totale di masternodes attivi.
Qualunque sia questa %, voi GUADAGNERETE Dash finché il vostro masternode funzionerà correttamente.", + "MN-collateral-edit": "Regola la cauzione, in particolare nei seguenti casi :
— utilizzo di un masternode condiviso con altri operatori (cauzione < 1000 Đ)
— gestione di più masternodes (cauzione > 1000 Đ)", + "year": "anno", + "MN-varying": "La % di guadagni annuali può variare nel corso di un anno, in funzione in particolare dell'evoluzione del numero totale di masternodes attivi.
Qualunque sia questa %, voi GUADAGNERETE Dash finché il vostro masternode funzionerà correttamente.", "percent-stable": "se la % è stabile", "worth": "per un valore di", - "MN-1-year-simulation": "Questa è una simulazione di guadagni in ### supponendo che il prezzo attuale di Dash (≈ §§§) rimanga stabile per un anno.
Qualunque sia il prezzo, voi GUADAGNERETE qualcosa finché il vostro masternode funzionerà correttamente.", + "MN-1-year-simulation": "Questa è una simulazione di guadagni in ### supponendo che il prezzo attuale di Dash (≈ §§§) rimanga stabile per un anno.
Qualunque sia il prezzo, voi GUADAGNERETE qualcosa finché il vostro masternode funzionerà correttamente.", "price-stable": "se il prezzo è stabile", "Evo-collateral": "Gestire un Evonode richiede una cauzione di 4000 Đ. Il server che ospita l'Evonode comporta anche delle spese, in genere modeste.", - "Evo-collateral-edit": "Regola la cauzione (tra 1 e 4000 Đ) se utilizzi un Evonode condiviso con altri operatori.
Se sei l'unico operatore, la tua cauzione è di 4000 Đ.", - "Evo-varying": "La % di guadagni annuali può variare nel corso di un anno, in funzione in particolare dell'evoluzione del numero totale di Evonodes attivi.
Qualunque sia questa %, voi GUADAGNERETE Dash finché il vostro Evonode funzionerà correttamente.", - "Evo-1-year-simulation": "Questa è una simulazione di guadagni in ### supponendo che il prezzo attuale di Dash (≈ §§§) rimanga stabile per un anno.
Qualunque sia il prezzo, voi GUADAGNERETE qualcosa finché il vostro Evonode funzionerà correttamente.", + "Evo-collateral-edit": "Regola la cauzione, in particolare nei seguenti casi :
— utilizzo di un Evonode condiviso con altri operatori (cauzione < 4000 Đ)
— gestione di più Evonodes (cauzione > 4000 Đ)", + "Evo-varying": "La % di guadagni annuali può variare nel corso di un anno, in funzione in particolare dell'evoluzione del numero totale di Evonodes attivi.
Qualunque sia questa %, voi GUADAGNERETE Dash finché il vostro Evonode funzionerà correttamente.", + "Evo-1-year-simulation": "Questa è una simulazione di guadagni in ### supponendo che il prezzo attuale di Dash (≈ §§§) rimanga stabile per un anno.
Qualunque sia il prezzo, voi GUADAGNERETE qualcosa finché il vostro Evonode funzionerà correttamente.", "earnings-1-year-ago": "Quali sarebbero oggi i miei guadagni
se avessi avviato un Masternode o un Evonode un anno fa ?", "way-to-estimate": "Un modo per stimare i rendimenti del vostro masternode & Evonode Dash.", "I-bought": "Ho acquistato una", @@ -55,5 +57,5 @@ "Evo-approx-earnings-1-year": "Se aveste avviato il vostro Evonode un anno fa, i suoi guadagni in un anno sarebbero approssimativamente pari a questo importo in ### al prezzo attuale di Dash sul mercato (≈ §§§).", "4000-worth": "cauzione di 4000 #DASH# vale", "4000-worth-today": "La vostra cauzione di 4000 Đ acquistata un anno fa varrebbe approssimativamente questo importo in ### al prezzo attuale di Dash sul mercato (≈ §§§).", - "JSalert": "Valore non valido. Inserisci un numero compreso tra " + "JSalert": "Valore non valido." } \ No newline at end of file diff --git a/style.css b/style.css index be88174..fd71290 100644 --- a/style.css +++ b/style.css @@ -141,7 +141,7 @@ div.box:hover { box-shadow: 8px 8px 10px 5px rgba(0, 141, 228, 0.3); } div.box:hover div.subtitle img.tree { - width: 105px; + width: 95px; opacity: 0.8; transition: all 0.5s ease-out; } @@ -200,11 +200,11 @@ div.subsubtitle { span.bold { font-family: 'MontserratSemiBold', sans-serif; font-style: normal; - font-weight: 600; + font-weight: 600 !important; } span.Roboto-bold { font-family: 'RobotoCondensedBold', sans-serif; - font-weight: 600; + font-weight: 600 !important; } span.boldsub { font-family: 'MontserratSemiBoldItalic', sans-serif; @@ -334,6 +334,10 @@ span.arrow { span.about { color: #888; } +span.peryear { + color: #888; + font-size: clamp(12px, 1.0vw + 10px, 17px); +} div.pricealert { display: inline-block; background-color: red;