95 lines
2.4 KiB
JavaScript
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();
|
|
})();
|