feat: Add skeleton loading UI components for various screens
- Implemented `Skeleton.kt` for loading placeholders in the app, including lesson cards, schedule, overview, and subjects. - Introduced `Undo.kt` to manage undo actions with a snackbar interface. - Created `WeekWidget.kt` for a widget displaying the week's schedule, including dynamic updates based on the current timetable. - Added various splash animations in the `animator` directory for a smooth launch experience. - Designed drawable resources for the widget and splash screen, including icons for city and room moves. - Defined XML resources for widget configuration and photo paths.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { test } from "node:test";
|
||||
import assert from "node:assert/strict";
|
||||
import { groupsIn, alternatives, entries, details, leadingTime } from "../server/parser.js";
|
||||
import { groupsIn, alternatives, entries, details, leadingTime, parallel, audienceOf } from "../server/parser.js";
|
||||
import { roomMoves, weekPlan, onlyPlace } from "../server/rooms.js";
|
||||
import { peopleAndRooms, roomsOn, teachersOn, movedOn } from "../server/directory.js";
|
||||
|
||||
@@ -118,6 +118,40 @@ test("Подгруппа в тексте ячейки, точка вместо
|
||||
assert.equal(details("Интеллектуальная собственность - драйвер инновационного развития\nна пространстве Евразии").subject.includes("Евразии"), true);
|
||||
});
|
||||
|
||||
test("Немецкий или французский: два занятия в одной ячейке на всю группу", () => {
|
||||
const cell = "Немецкий язык (п.з) – Найверт Ю.О. 208А,\nФранцузский язык (п.з.) – Глобенко М.В. 336Е";
|
||||
const list = entries(cell);
|
||||
assert.deepEqual(list.map((e) => details(e.main).room), ["208А", "336Е"]);
|
||||
assert.deepEqual(list.map((e) => details(e.main).teacher), ["Найверт Ю.О.", "Глобенко М.В."]);
|
||||
assert.deepEqual(list[0].choice, ["Немецкий язык", "Французский язык"]);
|
||||
// A room on its own line stays with its lesson.
|
||||
assert.deepEqual(
|
||||
parallel("Теория языка (англ.) (л.) (кроме иностр.студ.)-Чеботарева Е.М.305Г\nИстория языка (англ.) (л) (для иностр.студ.) Третьяк З.И.\n321Д").at(-1),
|
||||
"История языка (англ.) (л) (для иностр.студ.) Третьяк З.И.\n321Д",
|
||||
);
|
||||
// A lesson with its teacher on the next line is one lesson.
|
||||
assert.equal(entries("Русский язык как иностранный (п.з.)\nНемирская В.А. 305Г").length, 1);
|
||||
// The comma before the next week's lesson is no part of the room.
|
||||
assert.equal(details(entries("2-13н. Белорусский язык (п.з.) - Третьяк З.И. 331Е,\n2-13н. Стилистика (п.з.) – Коротких А.В. 301Г")[0].main).room, "331Е");
|
||||
});
|
||||
|
||||
test("Пары для иностранных студентов и для остальных", () => {
|
||||
assert.equal(audienceOf("История языка (п.з.) (кроме иностр.студ.) Ковшик О.С. 305Г"), "local");
|
||||
assert.equal(audienceOf("Русский язык как иностранный (п.з.) Немирская В.А. 305Г"), "foreign");
|
||||
assert.equal(audienceOf("Современный разговорный иностранный язык (на базе второго иностранного языка)"), null);
|
||||
// Russian for foreign students while the others have physical education, in every spelling.
|
||||
const pe = (text) => entries(text).map((e) => [details(e.main).subject, e.audience]);
|
||||
assert.deepEqual(pe("Ф и з и ч е с к а я к у л ь т у р а\nРусский язык как иностранный (для иностранных студентов) Семченко Е.Д. ауд.313н"), [
|
||||
["Ф и з и ч е с к а я к у л ь т у р а", "local"],
|
||||
["Русский язык как иностранный (для иностранных студентов)", "foreign"],
|
||||
]);
|
||||
assert.deepEqual(pe("со 2 нед. Русский язык как иностранный (п.з.) Немирская В.А. 331Е со 2 нед. ФИЗИЧЕСКАЯ КУЛЬТУРА").map((p) => p[1]), ["foreign", "local"]);
|
||||
assert.equal(details(entries("Русский язык как иностранный (п.з.) Немирская В.А. 331Е ФИЗИЧЕСКАЯ КУЛЬТУРА")[0].main).room, "331Е");
|
||||
// The town or the teacher on a line of its own is no lesson for the others.
|
||||
assert.equal(entries("17.00 Новополоцк\nРусский язык как иностранный (п.з.)\nКириллова В.С. ауд. 537н").length, 1);
|
||||
assert.equal(entries("Русский язык как иностранный (для иностранных студентов)\nХаткевич Т.В. ауд. 323н").length, 1);
|
||||
});
|
||||
|
||||
test("Старое имя разделённой группы: понятная ошибка, другое написание — та же группа", async () => {
|
||||
const { timetable } = await import("../server/timetable.js");
|
||||
const schedule = { groups: ["24-ИЯ (РА)и-1", "24-ИЯ (РА)и-2"], lessons: [], notes: [], period: "Осенний семестр", source: {} };
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
вт 15:20–16:45 | каждую неделю, нижняя строка | Физический практикум: физика атома | Занятие | 210н | Окунев Д.О. | 24-КФ,24-КФ/п2
|
||||
вт 15:20–16:45 | нед. 2-14, верхняя строка | Криптографические методы защиты информации | Лабораторная | 421н | Кухта С.В. | 24-КБ,24-КБ/п2
|
||||
вт 17:00–18:25 | нед. 1-13, верхняя строка | Криптографические методы защиты информации | Лабораторная | 421н | Кухта С.В. | 24-КБ,24-КБ/п1
|
||||
пн 08:30–09:55 | каждую неделю | Русский язык как иностранный (для иностранных студентов) | Занятие | 412н | Козыренко А.Н. | 24-КБ
|
||||
пн 08:30–09:55 | каждую неделю | Русский язык как иностранный | Занятие | 412н | Козыренко А.Н. | 24-КБ · иностранцам
|
||||
пн 10:05–11:30 | каждую неделю | Уравнения математической физики | Лекция | 336н | Козлов А.А. | 24-КБ
|
||||
пн 11:45–13:10 | каждую неделю | Операционные системы | Лекция | 343 | Бураченок А.Л. | 24-КБ
|
||||
пн 11:45–13:10 | каждую неделю | Электродинамика | Лекция | 402н | Вабищевич С.А. | 24-КФ
|
||||
@@ -60,7 +60,8 @@
|
||||
сб 11:45–13:10 | каждую неделю, верхняя строка | Компьютерные сети | Лабораторная | 215н | Филиппов Ю.И. | 24-КБ,24-КБ/п1
|
||||
сб 11:45–13:10 | каждую неделю, нижняя строка | Компьютерные сети | Лабораторная | 215н | Филиппов Ю.И. | 24-КБ,24-КБ/п2
|
||||
ср 10:05–11:30 | нед. 2-14 | Модуль «Майнор» | Занятие | | | 24-КБ,24-КФ
|
||||
чт 08:30–09:55 | каждую неделю | Ф и з и ч е с к а я к у л ь т у р а 24-КФ: Русский язык как иностранный (для иностранных студентов) | Занятие | 537н | Кириллова В.С. | 24-КБ,24-КФ
|
||||
чт 08:30–09:55 | каждую неделю | Русский язык как иностранный | Занятие | 537н | Кириллова В.С. | 24-КФ · иностранцам
|
||||
чт 08:30–09:55 | каждую неделю | Ф и з и ч е с к а я к у л ь т у р а | Занятие | | | 24-КБ,24-КФ · кроме иностранцев
|
||||
чт 10:05–11:30 | каждую неделю, верхняя строка | Криптографические методы защиты информации | Лекция | 329н | Кухта С.В. | 24-КБ
|
||||
чт 10:05–11:30 | каждую неделю, верхняя строка | Основы математического моделирования | Лабораторная | 215н | Сковородко М.А. | 24-КФ,24-КФ/п1
|
||||
чт 10:05–11:30 | каждую неделю, верхняя строка | Основы радиоэлектроники | Лабораторная | 406н | Грозберг Ю.Г. | 24-КФ,24-КФ/п2
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# Осенний семестр · 25-РГФ-1, 25-РГФ-2
|
||||
вт 08:30–09:55 | каждую неделю | Немецкий язык | Практика | 336Е | Найверт Ю.О. | 25-РГФ-1
|
||||
вт 08:30–09:55 | каждую неделю | Немецкий язык | Практика | 319Д | Найверт Ю.О. | 25-РГФ-1 · на выбор
|
||||
вт 08:30–09:55 | каждую неделю | Французский язык | Практика | 336Е | Глобенко М.В. | 25-РГФ-1 · на выбор
|
||||
вт 10:05–11:30 | нед. 2-14 | Философия | Практика | 206Г | Андрейчик Е.В. | 25-РГФ-1,25-РГФ-2
|
||||
вт 11:45–13:10 | каждую неделю | Английский язык | Практика | 133Е | Лагун А.М. | 25-РГФ-2
|
||||
вт 11:45–13:10 | нед. 1-13 | История литературы страны изучаемого языка XVII века | Лекция | 305Г | Смулькевич А.А. | 25-РГФ-1
|
||||
@@ -10,18 +11,20 @@
|
||||
вт 15:20–16:45 | каждую неделю, нижняя строка | Современный разговорный иностранный язык (англ.) | Практика | 203Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
|
||||
вт 15:20–16:45 | каждую неделю, нижняя строка | Современный разговорный иностранный язык (англ.) | Практика | 304Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
|
||||
вт 15:20–16:45 | нед. с 3, верхняя строка | Политология | Практика | 206Г | Радюк А.Л. | 25-РГФ-1,25-РГФ-2
|
||||
пн 08:30–09:55 | каждую неделю | Русский язык как иностранный | Практика | 305Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1
|
||||
пн 10:05–11:30 | каждую неделю | Немецкий язык | Практика | 336Е | Найверт Ю.О. | 25-РГФ-1
|
||||
пн 08:30–09:55 | каждую неделю | Русский язык как иностранный | Практика | 305Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1 · иностранцам
|
||||
пн 10:05–11:30 | каждую неделю | Немецкий язык | Практика | 208А | Найверт Ю.О. | 25-РГФ-1 · на выбор
|
||||
пн 10:05–11:30 | каждую неделю | Основы перевода | Практика | 331Е | Семченок Л.И. | 25-РГФ-2
|
||||
пн 10:05–11:30 | каждую неделю | Французский язык | Практика | 336Е | Глобенко М.В. | 25-РГФ-1 · на выбор
|
||||
пн 11:45–13:10 | каждую неделю | ФИЗИЧЕСКАЯ КУЛЬТУРА | Занятие | | | 25-РГФ-1,25-РГФ-2
|
||||
пн 13:40–15:05 | каждую неделю | Практика устной и письменной речи (англ.) | Практика | 331Е | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
|
||||
пн 13:40–15:05 | каждую неделю | Практическая фонетика (англ) | Практика | 319Д | Кунчевская А.В. | 25-РГФ-1,25-РГФ-1/п1
|
||||
пн 13:40–15:05 | каждую неделю | Практическая фонетика (нем) | Практика | 330Е | Логвинова И.В. | 25-РГФ-2
|
||||
пн 15:20–16:45 | каждую неделю | Английский язык | Практика | 248Ж | Лагун А.М. | 25-РГФ-2
|
||||
пн 15:20–16:45 | каждую неделю | Немецкий язык | Практика | 336Е | Найверт Ю.О. | 25-РГФ-1
|
||||
пн 15:20–16:45 | каждую неделю | Немецкий язык | Практика | 332Е | Найверт Ю.О. | 25-РГФ-1 · на выбор
|
||||
пн 15:20–16:45 | каждую неделю | Французский язык | Практика | 336Е | Глобенко М.В. | 25-РГФ-1 · на выбор
|
||||
пт 08:30–09:55 | каждую неделю | Основы перевода | Практика | 208А | Семченок Л.И. | 25-РГФ-2
|
||||
пт 08:30–09:55 | каждую неделю, верхняя строка | Русский язык как иностранный | Практика | 307Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1
|
||||
пт 08:30–09:55 | каждую неделю, нижняя строка | Французский язык | Практика | 336Е | Глобенко М.В. | 25-РГФ-1
|
||||
пт 08:30–09:55 | каждую неделю, верхняя строка | Русский язык как иностранный | Практика | 307Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1 · иностранцам
|
||||
пт 08:30–09:55 | каждую неделю, нижняя строка | Французский язык | Практика | 336Е | Глобенко М.В. | 25-РГФ-1 · на выбор
|
||||
пт 10:05–11:30 | каждую неделю | История зарубежной литературы Средних веков и Возрождения | Практика | 305Г | Лушневская Е.В. | 25-РГФ-1,25-РГФ-2
|
||||
пт 11:45–13:10 | каждую неделю | Основы перевода | Практика | 203Г | Смулькевич А.А. | 25-РГФ-1
|
||||
пт 11:45–13:10 | нед. 1-13 | История литературы страны изучаемого языка XVII века | Лекция | 248Ж | Гордеенок Т.М. | 25-РГФ-2
|
||||
@@ -43,19 +46,20 @@
|
||||
ср 10:05–11:30 | каждую неделю, нижняя строка | Коммуникативная грамматика | Практика | 304Г | Ковшик О.С. | 25-РГФ-1,25-РГФ-1/п1
|
||||
ср 10:05–11:30 | каждую неделю, нижняя строка | Коммуникативная грамматика | Практика | 308Г | Протас А.А. | 25-РГФ-1,25-РГФ-1/п2
|
||||
ср 10:05–11:30 | нед. 2-15 | История языка | Практика | 248Ж | Логвинова И.В. | 25-РГФ-2
|
||||
ср 11:45–13:10 | нед. с 2 | Русский язык как иностранный | Практика | | Немирская В.А. | 25-РГФ-1,25-РГФ-2
|
||||
ср 13:40–15:05 | нед. 2-15 | История языка | Практика | 305Г | Ковшик О.С. | 25-РГФ-1
|
||||
ср 11:45–13:10 | нед. с 2 | Русский язык как иностранный | Практика | 331Е | Немирская В.А. | 25-РГФ-1,25-РГФ-2 · иностранцам
|
||||
ср 11:45–13:10 | нед. с 2 | ФИЗИЧЕСКАЯ КУЛЬТУРА | Занятие | | | 25-РГФ-1,25-РГФ-2 · кроме иностранцев
|
||||
ср 13:40–15:05 | нед. 2-15 | История языка | Практика | 305Г | Ковшик О.С. | 25-РГФ-1 · кроме иностранцев
|
||||
ср 15:20–16:45 | нед. 2-15 | Философия | Лекция | 211А | Борун Е.Н. | 25-РГФ-1,25-РГФ-2
|
||||
чт 08:30–09:55 | каждую неделю | Русский язык как иностранный | Практика | 307Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1
|
||||
чт 08:30–09:55 | каждую неделю | Русский язык как иностранный | Практика | 307Г | Немирская В.А. | 25-РГФ-1,25-РГФ-1/п1 · иностранцам
|
||||
чт 08:30–09:55 | каждую неделю, верхняя строка | Современный разговорный иностранный язык (англ.) | Практика | 304Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
|
||||
чт 08:30–09:55 | каждую неделю, нижняя строка | Практика устной и письменной речи (англ.) | Практика | 304Г | Федорович Н.Я. | 25-РГФ-1,25-РГФ-1/п2
|
||||
чт 10:05–11:30 | каждую неделю, верхняя строка | История зарубежной литературы Средних веков и Возрождения | Лекция | 305Г | Лушневская Е.В. | 25-РГФ-1,25-РГФ-2
|
||||
чт 10:05–11:30 | каждую неделю, нижняя строка | История языка | Лекция | 305Г | Третьяк З.И. | 25-РГФ-1
|
||||
чт 10:05–11:30 | каждую неделю, нижняя строка | История языка | Лекция | 305Г | Третьяк З.И. | 25-РГФ-1 · кроме иностранцев
|
||||
чт 10:05–11:30 | каждую неделю, нижняя строка | Современный разговорный иностранный язык (нем.) | Практика | 248Ж | Белоусова Э.А. | 25-РГФ-2
|
||||
чт 11:45–13:10 | каждую неделю | Английский язык | Практика | 248Ж | Лагун А.М. | 25-РГФ-2
|
||||
чт 11:45–13:10 | каждую неделю | Основы перевода | Практика | 120Д | Смулькевич А.А. | 25-РГФ-1
|
||||
чт 13:40–15:05 | даты 2026-09-10,2026-10-15,2026-11-19,2026-12-17 | Единый день информирования: 10 сентября, 15 октября, 19 ноября, 17 декабря | Занятие | | | 25-РГФ-1,25-РГФ-2
|
||||
чт 13:40–15:05 | каждую неделю | Практика устной и письменной речи (нем.) | Практика | 248Ж | Белоусова Э.А. | 25-РГФ-2
|
||||
чт 13:40–15:05 | нед. 1-13 | История литературы страны изучаемого языка XVII века | Практика | 319Д | Смулькевич А.А. | 25-РГФ-1
|
||||
чт 15:20–16:45 | каждую неделю | Немецкий язык | Практика | 208А | Найверт Ю.О. | 25-РГФ-1
|
||||
чт 15:20–16:45 | каждую неделю | Немецкий язык | Практика | 208А | Найверт Ю.О. | 25-РГФ-1 · на выбор
|
||||
чт 15:20–16:45 | каждую неделю | Практическая грамматика (нем.) | Практика | 248Ж | Белоусова Э.А. | 25-РГФ-2
|
||||
|
||||
Reference in New Issue
Block a user