Аудитории: карточка 402 читается однозначно
- описание из таблицы не показываем, если оно сводится к номеру и дням («402 четверг пятница») — это дублировало пометку и путало; - пометка про дни формулируется по-русски: «в таблице: занятия только по четвергам и пятницам»; - убрана вторая строка «в этот день занятий в ней нет» (следовала из первой); - подсказка в фильтрах вместо «аудитория отмечена как доступные…» — просто «с ограничением по дням: N», предложения начинаются с большой буквы.
This commit is contained in:
@@ -436,6 +436,28 @@ function saveRoomsFilter() {
|
|||||||
localStorage.setItem(ROOMS_FILTER_KEY, JSON.stringify(roomsState.filter));
|
localStorage.setItem(ROOMS_FILTER_KEY, JSON.stringify(roomsState.filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** «Четверг» -> «четвергам» (для фразы «по четвергам и пятницам»). */
|
||||||
|
function weekdayPlural(day) {
|
||||||
|
if (day.endsWith("ье")) return day.slice(0, -2) + "ьям"; // воскресенье
|
||||||
|
if (day.endsWith("а")) return day + "м"; // пятница, среда
|
||||||
|
return day + "ам"; // четверг, вторник
|
||||||
|
}
|
||||||
|
|
||||||
|
function daysPhrase(days) {
|
||||||
|
const forms = days.map(weekdayPlural);
|
||||||
|
if (forms.length === 1) return `по ${forms[0]}`;
|
||||||
|
return `по ${forms.slice(0, -1).join(", ")} и ${forms[forms.length - 1]}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Описание из таблицы, если оно не сводится к номеру и дням (иначе не показываем). */
|
||||||
|
function roomInfoText(room) {
|
||||||
|
const info = (room.info || "").trim();
|
||||||
|
if (!info) return "";
|
||||||
|
let rest = info.replace(/\d+/g, "");
|
||||||
|
(room.available_days || []).forEach((day) => { rest = rest.split(day).join(""); });
|
||||||
|
return rest.replace(/[\s;,.]+/g, "") ? info : "";
|
||||||
|
}
|
||||||
|
|
||||||
/** Русское склонение существительного при числе. */
|
/** Русское склонение существительного при числе. */
|
||||||
function pluralRu(count, one, few, many) {
|
function pluralRu(count, one, few, many) {
|
||||||
const mod10 = count % 10;
|
const mod10 = count % 10;
|
||||||
@@ -659,11 +681,13 @@ function updateRoomsSummary() {
|
|||||||
if (roomsState.mode !== "free") {
|
if (roomsState.mode !== "free") {
|
||||||
const restricted = all.filter((r) => !roomAvailableOn(r)).length;
|
const restricted = all.filter((r) => !roomAvailableOn(r)).length;
|
||||||
if (restricted) {
|
if (restricted) {
|
||||||
notes.push(`${pluralRu(restricted, "аудитория отмечена", "аудитории отмечены", "аудиторий отмечено")} как доступные только по отдельным дням`);
|
notes.push(`с ограничением по дням: ${restricted}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hint) {
|
if (hint) {
|
||||||
hint.textContent = notes.join(". ");
|
hint.textContent = notes
|
||||||
|
.map((text) => text.charAt(0).toUpperCase() + text.slice(1))
|
||||||
|
.join(". ");
|
||||||
hint.classList.toggle("hidden", !notes.length);
|
hint.classList.toggle("hidden", !notes.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -701,14 +725,13 @@ function roomsCardHead(room) {
|
|||||||
const head = document.createElement("div");
|
const head = document.createElement("div");
|
||||||
head.className = "day-head";
|
head.className = "day-head";
|
||||||
const attrs = roomAttrsText(room);
|
const attrs = roomAttrsText(room);
|
||||||
const restricted = room.available_days && !roomAvailableOn(room);
|
const info = roomInfoText(room);
|
||||||
head.innerHTML = `
|
head.innerHTML = `
|
||||||
<div class="room-title">
|
<div class="room-title">
|
||||||
<span class="day-title">${escapeHTML(room.room)}</span>
|
<span class="day-title">${escapeHTML(room.room)}</span>
|
||||||
${attrs ? `<div class="room-attrs">${escapeHTML(attrs)}</div>` : ""}
|
${attrs ? `<div class="room-attrs">${escapeHTML(attrs)}</div>` : ""}
|
||||||
${room.info ? `<div class="room-info">${escapeHTML(room.info)}</div>` : ""}
|
${info ? `<div class="room-info">${escapeHTML(info)}</div>` : ""}
|
||||||
${room.available_days ? `<div class="room-note">в таблице отмечено: только ${escapeHTML(room.available_days.join(", "))}</div>` : ""}
|
${room.available_days ? `<div class="room-note">в таблице: занятия только ${escapeHTML(daysPhrase(room.available_days))}</div>` : ""}
|
||||||
${restricted ? `<div class="room-note bad">по таблице в этот день занятий в ней нет</div>` : ""}
|
|
||||||
</div>`;
|
</div>`;
|
||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user