feat: format hyapp numeric displays
This commit is contained in:
parent
f265ccfa57
commit
7705a62a3a
@ -93,6 +93,6 @@
|
||||
<div class="loading-copy">loading....</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./host-list.js?v=20260428-2320" defer></script>
|
||||
<script src="./host-list.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -412,8 +412,11 @@
|
||||
function formatCountValue(value) {
|
||||
if (value === null || value === undefined || value === "") return "-";
|
||||
const number = Number(value);
|
||||
if (Number.isFinite(number) && Number.isInteger(number)) return String(number);
|
||||
if (Number.isFinite(number)) return String(Number(number.toFixed(2)));
|
||||
if (Number.isFinite(number)) {
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
return String(value);
|
||||
}
|
||||
|
||||
@ -548,7 +551,7 @@
|
||||
const totalNode = document.querySelector("#memberTotal");
|
||||
if (!totalNode) return;
|
||||
const number = Number(currentTotalMembers);
|
||||
totalNode.textContent = Number.isFinite(number) ? String(Math.max(0, Math.trunc(number))) : "-";
|
||||
totalNode.textContent = Number.isFinite(number) ? new Intl.NumberFormat("en-US").format(Math.max(0, Math.trunc(number))) : "-";
|
||||
}
|
||||
|
||||
function renderSearchState() {
|
||||
|
||||
@ -220,6 +220,6 @@
|
||||
<div class="loading-copy">loading....</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260428-2345" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -377,7 +377,12 @@
|
||||
|
||||
function formatMoney(value) {
|
||||
const number = Number(value);
|
||||
return Number.isFinite(number) ? number.toFixed(2) : "0.00";
|
||||
return Number.isFinite(number)
|
||||
? new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(number)
|
||||
: "0.00";
|
||||
}
|
||||
|
||||
function pickCurrentSalary(body) {
|
||||
@ -460,7 +465,7 @@
|
||||
|
||||
const number = Number(count);
|
||||
if (Number.isFinite(number)) {
|
||||
countNode.textContent = String(Math.max(0, Math.trunc(number)));
|
||||
countNode.textContent = new Intl.NumberFormat("en-US").format(Math.max(0, Math.trunc(number)));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -604,7 +609,7 @@
|
||||
const numericValue = Number(value);
|
||||
if (!Number.isFinite(numericValue)) return "0";
|
||||
const safeValue = Math.max(0, numericValue);
|
||||
return Number.isInteger(safeValue) ? String(safeValue) : String(Number(safeValue.toFixed(2)));
|
||||
return formatCountValue(safeValue);
|
||||
}
|
||||
|
||||
function pickFirstMemberWorkTarget(body) {
|
||||
@ -626,8 +631,11 @@
|
||||
function formatCountValue(value) {
|
||||
if (value === null || value === undefined || value === "") return "-";
|
||||
const number = Number(value);
|
||||
if (Number.isFinite(number) && Number.isInteger(number)) return String(number);
|
||||
if (Number.isFinite(number)) return String(Number(number.toFixed(2)));
|
||||
if (Number.isFinite(number)) {
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
return String(value);
|
||||
}
|
||||
|
||||
|
||||
@ -116,6 +116,6 @@
|
||||
|
||||
<div class="toast" id="toast" role="status" aria-live="polite" hidden></div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260512-1830" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -358,14 +358,20 @@
|
||||
function formatMoney(value) {
|
||||
const number = Number(value);
|
||||
if (!Number.isFinite(number)) return "0.00";
|
||||
return number.toFixed(2);
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
|
||||
function formatCount(value) {
|
||||
if (value === null || value === undefined || value === "") return "0";
|
||||
const number = Number(value);
|
||||
if (Number.isFinite(number) && Number.isInteger(number)) return String(number);
|
||||
if (Number.isFinite(number)) return String(Number(number.toFixed(2)));
|
||||
if (Number.isFinite(number)) {
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
return String(value);
|
||||
}
|
||||
|
||||
|
||||
@ -168,6 +168,6 @@
|
||||
|
||||
<div class="toast" id="toast" role="status" aria-live="polite" hidden></div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260507-1726" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -391,14 +391,20 @@
|
||||
function formatMoney(value) {
|
||||
const number = Number(value);
|
||||
if (!Number.isFinite(number)) return "0.00";
|
||||
return number.toFixed(2);
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
|
||||
function formatCount(value) {
|
||||
if (value === null || value === undefined || value === "") return "0";
|
||||
const number = Number(value);
|
||||
if (Number.isFinite(number) && Number.isInteger(number)) return String(number);
|
||||
if (Number.isFinite(number)) return String(Number(number.toFixed(2)));
|
||||
if (Number.isFinite(number)) {
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
return String(value);
|
||||
}
|
||||
|
||||
|
||||
@ -188,6 +188,6 @@
|
||||
<div class="loading-copy">loading....</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260529-1200" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -40,6 +40,6 @@
|
||||
|
||||
<div class="home-indicator" aria-hidden="true"></div>
|
||||
</div>
|
||||
<script src="./policy.js?v=20260428-2100" defer></script>
|
||||
<script src="./policy.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -221,15 +221,19 @@
|
||||
|
||||
function formatPlainValue(value) {
|
||||
if (value === null || value === undefined || value === "") return "0";
|
||||
const number = Number(value);
|
||||
if (Number.isFinite(number)) {
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
return String(value);
|
||||
}
|
||||
|
||||
function formatTarget(value) {
|
||||
const number = Number(value);
|
||||
if (!Number.isFinite(number)) return formatPlainValue(value);
|
||||
if (number >= 1000000) return `${(number / 1000000).toFixed(1)}M`;
|
||||
if (number >= 1000) return `${(number / 1000).toFixed(1)}K`;
|
||||
return String(number);
|
||||
return formatPlainValue(number);
|
||||
}
|
||||
|
||||
function formatSalary(value, policyType) {
|
||||
|
||||
@ -637,7 +637,12 @@
|
||||
|
||||
function formatCurrentSalary(value) {
|
||||
const numericValue = Number(value);
|
||||
if (Number.isFinite(numericValue)) return numericValue.toFixed(2);
|
||||
if (Number.isFinite(numericValue)) {
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(numericValue);
|
||||
}
|
||||
return "0.00";
|
||||
}
|
||||
|
||||
|
||||
@ -130,6 +130,6 @@
|
||||
<div class="loading-copy">loading....</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260428-2355" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -401,12 +401,22 @@
|
||||
|
||||
function formatMoney(value) {
|
||||
const number = Number(value);
|
||||
return Number.isFinite(number) ? `$${number.toFixed(2)}` : "$0.00";
|
||||
return Number.isFinite(number)
|
||||
? `$${new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(number)}`
|
||||
: "$0.00";
|
||||
}
|
||||
|
||||
function formatPlainMoney(value) {
|
||||
const number = Number(value);
|
||||
return Number.isFinite(number) ? number.toFixed(2) : "0.00";
|
||||
return Number.isFinite(number)
|
||||
? new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(number)
|
||||
: "0.00";
|
||||
}
|
||||
|
||||
function formatCount(value) {
|
||||
@ -690,7 +700,7 @@
|
||||
|
||||
const days = document.createElement("div");
|
||||
days.className = "bill-member-days";
|
||||
days.textContent = `${t("days")}: ${effectiveDay}`;
|
||||
days.textContent = `${t("days")}: ${formatCount(effectiveDay)}`;
|
||||
|
||||
side.appendChild(level);
|
||||
side.appendChild(gift);
|
||||
|
||||
@ -228,6 +228,6 @@
|
||||
</div>
|
||||
<div class="toast" id="toast" role="status" hidden></div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260522-0101" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -725,11 +725,11 @@
|
||||
}
|
||||
|
||||
function formatDays(days) {
|
||||
return message("days", "{count} days").replace("{count}", String(days || 0));
|
||||
return message("days", "{count} days").replace("{count}", new Intl.NumberFormat("en-US").format(Number(days) || 0));
|
||||
}
|
||||
|
||||
function formatBDLeaderCount(count) {
|
||||
return message("bd_leader_count", "{count} BD Leaders").replace("{count}", String(count || 0));
|
||||
return message("bd_leader_count", "{count} BD Leaders").replace("{count}", new Intl.NumberFormat("en-US").format(Number(count) || 0));
|
||||
}
|
||||
|
||||
function formatDateTime(value) {
|
||||
|
||||
@ -238,6 +238,6 @@
|
||||
|
||||
<div class="toast" id="toast" role="status" aria-live="polite" hidden></div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260519-0100" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -637,7 +637,10 @@
|
||||
function formatMoney(value) {
|
||||
const number = Number(value);
|
||||
if (!Number.isFinite(number)) return "0.00";
|
||||
return number.toFixed(2);
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
|
||||
function pickCoinAmount(body) {
|
||||
@ -659,7 +662,16 @@
|
||||
function formatCoins(value) {
|
||||
const number = Number(value);
|
||||
if (!Number.isFinite(number)) return "0";
|
||||
return Number.isInteger(number) ? String(number) : String(Number(number.toFixed(2)));
|
||||
return new Intl.NumberFormat("en-US", {
|
||||
maximumFractionDigits: 2
|
||||
}).format(number);
|
||||
}
|
||||
|
||||
function formatCoinLabel(value) {
|
||||
if (value === null || value === undefined || value === "") return "-";
|
||||
const number = Number(value);
|
||||
if (!Number.isFinite(number)) return String(value);
|
||||
return formatCoins(number);
|
||||
}
|
||||
|
||||
function normalizeRecordList(body) {
|
||||
@ -1169,7 +1181,7 @@
|
||||
coin.appendChild(shine);
|
||||
const content = document.createElement("span");
|
||||
content.className = "package-content";
|
||||
content.textContent = goods?.content || goods?.awardContent || "-";
|
||||
content.textContent = formatCoinLabel(goods?.content ?? goods?.awardContent);
|
||||
const price = document.createElement("span");
|
||||
price.className = "package-price";
|
||||
price.textContent = state.ordering && state.activeOrderKey === key
|
||||
|
||||
@ -165,6 +165,6 @@
|
||||
</div>
|
||||
<div class="home-indicator" aria-hidden="true"></div>
|
||||
</div>
|
||||
<script src="./script.js?v=20260529-0100" defer></script>
|
||||
<script src="./script.js?v=20260529-1300" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@ -471,6 +471,16 @@
|
||||
}
|
||||
|
||||
function formatMoney(value) {
|
||||
const number = Number(value);
|
||||
return Number.isFinite(number)
|
||||
? new Intl.NumberFormat("en-US", {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
}).format(number)
|
||||
: "0.00";
|
||||
}
|
||||
|
||||
function formatMoneyInput(value) {
|
||||
const number = Number(value);
|
||||
return Number.isFinite(number) ? number.toFixed(2) : "0.00";
|
||||
}
|
||||
@ -635,7 +645,7 @@
|
||||
if (balanceAmount) balanceAmount.textContent = formatMoney(availableBalance);
|
||||
renderSalarySelector();
|
||||
Object.values(inputs).forEach((input) => {
|
||||
if (input) input.max = formatMoney(availableBalance);
|
||||
if (input) input.max = formatMoneyInput(availableBalance);
|
||||
});
|
||||
updateSubmitState();
|
||||
}
|
||||
@ -1003,7 +1013,7 @@
|
||||
const parts = raw.split(".");
|
||||
let nextValue = parts.length > 2 ? `${parts[0]}.${parts.slice(1).join("")}` : raw;
|
||||
const amount = Number(nextValue);
|
||||
if (Number.isFinite(amount) && amount > availableBalance) nextValue = formatMoney(availableBalance);
|
||||
if (Number.isFinite(amount) && amount > availableBalance) nextValue = formatMoneyInput(availableBalance);
|
||||
input.value = nextValue;
|
||||
updateSubmitState();
|
||||
}
|
||||
@ -1238,7 +1248,7 @@
|
||||
});
|
||||
|
||||
document.querySelector(".text-action")?.addEventListener("click", () => {
|
||||
if (inputs.withdraw) inputs.withdraw.value = formatMoney(availableBalance);
|
||||
if (inputs.withdraw) inputs.withdraw.value = formatMoneyInput(availableBalance);
|
||||
updateSubmitState();
|
||||
});
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user