kalkulyator-komandirovki/script.js

95 lines
2.4 KiB
JavaScript

(function () {
"use strict";
var KEY = "kk-comandirovka";
var DEMO = { days: "5", perdiem: "10000", transport: "15000", hotel: "20000" };
var IDS = ["days", "perdiem", "transport", "hotel"];
var inputs = {};
IDS.forEach(function (id) {
inputs[id] = document.getElementById(id);
});
var els = {
rPerdiem: document.getElementById("r-perdiem"),
rTransport: document.getElementById("r-transport"),
rHotel: document.getElementById("r-hotel"),
rTotal: document.getElementById("r-total"),
empty: document.getElementById("empty-state"),
calcBtn: document.getElementById("calc-btn"),
resetBtn: document.getElementById("reset-btn")
};
function fmt(n) {
return n.toLocaleString("ru-RU");
}
function load() {
try {
var raw = localStorage.getItem(KEY);
if (!raw) return;
var saved = JSON.parse(raw);
IDS.forEach(function (id) {
if (Object.prototype.hasOwnProperty.call(saved, id)) {
inputs[id].value = saved[id];
}
});
} catch (e) {
/* повреждённое хранилище — показываем демо-значения */
}
}
function save() {
var data = {};
IDS.forEach(function (id) {
data[id] = inputs[id].value;
});
try {
localStorage.setItem(KEY, JSON.stringify(data));
} catch (e) {
/* localStorage недоступен — просто не сохраняем */
}
}
function num(id) {
var v = parseFloat(inputs[id].value);
return isFinite(v) && v > 0 ? v : 0;
}
function fill(el, value) {
el.textContent = value;
el.dataset.long = value.length > 10 ? "true" : "false";
}
function recalc() {
var days = num("days");
var perdiem = num("perdiem");
var transport = num("transport");
var hotel = num("hotel");
var ok = days > 0 && perdiem > 0 && transport > 0 && hotel > 0;
fill(els.rPerdiem, ok ? fmt(Math.round(perdiem * days)) + " тг" : "—");
fill(els.rTransport, ok ? fmt(transport) + " тг" : "—");
fill(els.rHotel, ok ? fmt(hotel) + " тг" : "—");
fill(
els.rTotal,
ok ? fmt(Math.round(perdiem * days + transport + hotel)) + " тг" : "—"
);
els.empty.hidden = ok;
save();
}
els.calcBtn.addEventListener("click", recalc);
els.resetBtn.addEventListener("click", function () {
IDS.forEach(function (id) {
inputs[id].value = DEMO[id];
});
recalc();
});
load();
recalc();
})();