Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c9622c1e19 | |||
| 2ec65f56a6 | |||
| 0c46a389f6 | |||
| f8e58a83bb | |||
| aeec8261ea | |||
| 04aca6e906 | |||
| 220e9cbe59 | |||
| 83f2176cfc | |||
| 70ac1086bf | |||
| 5998c94671 | |||
| 8b7c62859f | |||
| 762dd27589 | |||
| 79bfe3a2f6 | |||
| bb745fb631 |
@ -8,6 +8,8 @@ ENV NODE_ENV=production
|
|||||||
ENV HOST=0.0.0.0
|
ENV HOST=0.0.0.0
|
||||||
ENV PORT=3000
|
ENV PORT=3000
|
||||||
|
|
||||||
|
RUN apk add --no-cache curl
|
||||||
|
|
||||||
COPY package*.json ./
|
COPY package*.json ./
|
||||||
RUN npm ci --omit=dev
|
RUN npm ci --omit=dev
|
||||||
|
|
||||||
@ -17,4 +19,4 @@ RUN node --check server.js
|
|||||||
|
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
|
|
||||||
CMD ["node", "/app/server.js"]
|
CMD ["node", "/app/server.js"]
|
||||||
@ -95,18 +95,6 @@ function toast(message) {
|
|||||||
toast.timer = setTimeout(() => el.classList.add("hidden"), 4200);
|
toast.timer = setTimeout(() => el.classList.add("hidden"), 4200);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isAppleOrAndroidDevice() {
|
|
||||||
const userAgent = navigator.userAgent || "";
|
|
||||||
const platform = navigator.platform || "";
|
|
||||||
const isTouchMac = platform === "MacIntel" && navigator.maxTouchPoints > 1;
|
|
||||||
return /Android|iPhone|iPad|iPod/i.test(userAgent) || isTouchMac;
|
|
||||||
}
|
|
||||||
|
|
||||||
function shouldHideDustMarket(value) {
|
|
||||||
const normalized = String(value || "").trim().replace(/\s+/g, " ").toLowerCase();
|
|
||||||
return isAppleOrAndroidDevice() && normalized === "рынок пыли";
|
|
||||||
}
|
|
||||||
|
|
||||||
function formatDate(value) {
|
function formatDate(value) {
|
||||||
if (!value) return "-";
|
if (!value) return "-";
|
||||||
const date = new Date(value);
|
const date = new Date(value);
|
||||||
@ -226,14 +214,13 @@ function renderSettings() {
|
|||||||
$("#settings-list").innerHTML = state.config.map(item => {
|
$("#settings-list").innerHTML = state.config.map(item => {
|
||||||
const type = item.secret ? "password" : item.key.includes("PORT") || item.key.includes("TIMEOUT") ? "number" : "text";
|
const type = item.secret ? "password" : item.key.includes("PORT") || item.key.includes("TIMEOUT") ? "number" : "text";
|
||||||
const placeholder = item.secret && item.configured ? "сохранено, введите новое значение для замены" : "";
|
const placeholder = item.secret && item.configured ? "сохранено, введите новое значение для замены" : "";
|
||||||
const value = shouldHideDustMarket(item.value) ? "" : item.value;
|
|
||||||
return `
|
return `
|
||||||
<div class="setting">
|
<div class="setting">
|
||||||
<label>
|
<label>
|
||||||
<span>${item.key}</span>
|
<span>${item.key}</span>
|
||||||
<span class="source">${item.source}${item.configured ? "" : " / пусто"}</span>
|
<span class="source">${item.source}${item.configured ? "" : " / пусто"}</span>
|
||||||
</label>
|
</label>
|
||||||
<input name="${item.key}" type="${type}" value="${value || ""}" placeholder="${placeholder}">
|
<input name="${item.key}" type="${type}" value="${item.value || ""}" placeholder="${placeholder}">
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
}).join("");
|
}).join("");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user