diff --git a/appinfo/info.xml b/appinfo/info.xml
index f23172f..41f0e37 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -18,6 +18,7 @@
f7support
Support
+ app.svg
f7support.page.index
30
diff --git a/css/f7support.css b/css/f7support.css
index c002ca1..0bccfd0 100644
--- a/css/f7support.css
+++ b/css/f7support.css
@@ -1,7 +1,13 @@
-/* Базовая изоляция; основной UI — в
`;
const messageList = document.getElementById("message-list");
@@ -859,32 +1016,6 @@
el.setAttribute("aria-hidden", visible ? "false" : "true");
}
- function updatePendingFileUi() {
- const row = document.getElementById("pending-attachment-row");
- const label = document.getElementById("pending-attachment-label");
- if (!row || !label) return;
- if (state.pendingFile) {
- label.textContent = `Вложение: ${state.pendingFile.name}`;
- row.hidden = false;
- } else {
- row.hidden = true;
- label.textContent = "";
- }
- }
-
- function setPendingFile(file) {
- if (!file) return;
- state.pendingFile = file;
- updatePendingFileUi();
- }
-
- function clearPendingFile() {
- state.pendingFile = null;
- const inp = document.getElementById("attachment-input");
- if (inp) inp.value = "";
- updatePendingFileUi();
- }
-
function bindClientChatDnDOnce() {
if (clientChatDndBound) return;
clientChatDndBound = true;
@@ -902,15 +1033,18 @@
e.preventDefault();
e.stopPropagation();
el.classList.remove("f7support-dnd-dragover");
- const f = e.dataTransfer?.files?.[0];
- if (f) setPendingFile(f);
+ const zone = dndZoneFromElement(el);
+ if (zone && e.dataTransfer?.files?.length) {
+ addFilesToZone(zone, e.dataTransfer.files);
+ }
});
});
}
function openChatModal(ticket) {
state.chatModalOpen = true;
- chatModalTitle.textContent = `Чат #${ticket.ticket_number} — ${ticket.subject}`;
+ const subj = ticket.subject != null ? String(ticket.subject).trim() : "";
+ chatModalTitle.textContent = subj ? `Чат : ${subj}` : `Чат : Запрос ${ticket.ticket_number}`;
setModalVisible(chatModal, true);
}
@@ -930,7 +1064,7 @@
messageList.innerHTML = "";
const msgInput = document.getElementById("message-input");
if (msgInput) msgInput.value = "";
- clearPendingFile();
+ clearChatAttachments();
setModalVisible(chatModal, false);
showError("");
document.querySelectorAll(".f7-ticket-card--active").forEach((n) => n.classList.remove("f7-ticket-card--active"));
@@ -976,8 +1110,10 @@
}
function renderTicketCardHtml(ticket) {
- const previewRaw = ticket.preview_text != null ? ticket.preview_text : "";
- const preview = escapeHtml(previewRaw);
+ const previewRaw = ticket.preview_text != null ? String(ticket.preview_text).trim() : "";
+ const preview = previewRaw
+ ? escapeHtml(previewRaw)
+ : 'Текст последнего сообщения…';
const activity = ticket.activity_at || ticket.created_at;
const time = escapeHtml(formatTicketCardTime(activity));
const hasUnread = ticketHasUnread(ticket);
@@ -985,7 +1121,8 @@
? ''
: "";
const tn = escapeHtml(ticket.ticket_number);
- const subj = escapeHtml(ticket.subject || "—");
+ const subjRaw = ticket.subject != null ? String(ticket.subject).trim() : "";
+ const subj = escapeHtml(subjRaw || "—");
const st = escapeHtml(ticket.status);
const stCls = clientTicketStatusClass(ticket.status);
return `
@@ -994,7 +1131,7 @@
${st}
-
${preview || "—"}
+
${preview}
${unread}