From 9113975f4b709652d68d62ad81c5357045ac1f57 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 21 Oct 2025 02:44:19 +0300 Subject: [PATCH] feat: js --- articles/static/index.css | 29 ++++++++- articles/static/js/fold-post.js | 11 ++++ articles/static/js/students.js | 103 ++++++++++++++++++++++++++++++++ articles/templates/archive.html | 13 ++-- db.sqlite3 | Bin 188416 -> 188416 bytes 5 files changed, 151 insertions(+), 5 deletions(-) create mode 100644 articles/static/js/fold-post.js create mode 100644 articles/static/js/students.js diff --git a/articles/static/index.css b/articles/static/index.css index a51b194..b2315b6 100644 --- a/articles/static/index.css +++ b/articles/static/index.css @@ -103,4 +103,31 @@ form { .registration-error { text-align: center; margin-top: 10px; -} \ No newline at end of file +} + +.fold-button { + margin-bottom: 10px; + color: #7dd3fc; + border: 2px solid #7dd3fc; + border-radius: 5px; + background-color: transparent; + cursor: pointer; + transition: all 0.5s ease; + padding: 5px 8px; +} + +.fold-button:hover { + background-color: #1e293b; +} + +.one-post-content { + max-height: 500px; + overflow: hidden; + transition: all 0.5s ease; + opacity: 1; +} + +.one-post-content.hidden { + max-height: 0; + opacity: 0; +} diff --git a/articles/static/js/fold-post.js b/articles/static/js/fold-post.js new file mode 100644 index 0000000..e883d59 --- /dev/null +++ b/articles/static/js/fold-post.js @@ -0,0 +1,11 @@ +const foldBtns = document.getElementsByClassName('fold-button') + +for (const btn of foldBtns) { + btn.addEventListener('click', function (event) { + event.preventDefault() + console.log('you clicked ', event.target) + const div = event.target.parentElement.getElementsByClassName('one-post-content')[0] + div.classList.toggle('hidden') + btn.innerHTML = div.classList.contains('hidden') ? 'Показать' : 'Скрыть' + }) +} diff --git a/articles/static/js/students.js b/articles/static/js/students.js new file mode 100644 index 0000000..569edc1 --- /dev/null +++ b/articles/static/js/students.js @@ -0,0 +1,103 @@ +const groupmates = [ + { name: 'Егор', surname: 'Алексанов', exams: ['Информатика', 'ЭЭиС', 'Web'], marks: [4, 5, 3], group: 'БСТ2202' }, + { name: 'Юрий', surname: 'Алексанов', exams: ['История', 'АиГ', 'КТП'], marks: [3, 4, 4], group: 'БСТ2201' }, + { name: 'Виктор', surname: 'Аникин', exams: ['Философия', 'ИС', 'КТП'], marks: [5, 5, 4], group: 'БСТ2204' }, + { name: 'Артём', surname: 'Бабушкин', exams: ['Информатика', 'Физика', 'Web'], marks: [4, 3, 5], group: 'БСТ2203' }, + { name: 'Дарья', surname: 'Дорогань', exams: ['История', 'Философия', 'КТП'], marks: [5, 4, 4], group: 'БСТ2202' }, + { name: 'Александра', surname: 'Дубровская', exams: ['ИС', 'ЭЭиС', 'Web'], marks: [4, 5, 5], group: 'БСТ2201' }, + { name: 'Анна', surname: 'Кондракова', exams: ['Информатика', 'АиГ', 'Физика'], marks: [3, 4, 5], group: 'БСТ2204' }, + { name: 'Ангелина', surname: 'Коренкова', exams: ['История', 'Философия', 'ИС'], marks: [4, 4, 5], group: 'БСТ2203' }, + { name: 'Ильяс', surname: 'Крымгужин', exams: ['ЭЭиС', 'КТП', 'Физика'], marks: [5, 3, 4], group: 'БСТ2202' }, + { name: 'Даниил', surname: 'Кудряшов', exams: ['Информатика', 'ИС', 'Web'], marks: [4, 5, 4], group: 'БСТ2201' }, + { name: 'Анна', surname: 'Лобанова', exams: ['Философия', 'История', 'КТП'], marks: [5, 4, 4], group: 'БСТ2204' }, + { name: 'Степан', surname: 'Логашов', exams: ['АиГ', 'ЭЭиС', 'Физика'], marks: [4, 4, 5], group: 'БСТ2203' }, + { name: 'Данила', surname: 'Мокров', exams: ['Информатика', 'КТП', 'Web'], marks: [3, 5, 4], group: 'БСТ2202' }, + { name: 'Никита', surname: 'Молоканов', exams: ['История', 'ИС', 'Философия'], marks: [5, 5, 4], group: 'БСТ2201' }, + { name: 'Кристина', surname: 'Мясникова', exams: ['Философия', 'ЭЭиС', 'Web'], marks: [4, 5, 5], group: 'БСТ2204' }, + { name: 'Алексей', surname: 'Обласов', exams: ['КТП', 'Информатика', 'АиГ'], marks: [4, 3, 5], group: 'БСТ2203' }, + { name: 'Илья', surname: 'Образумов', exams: ['Физика', 'История', 'ИС'], marks: [5, 4, 4], group: 'БСТ2202' }, + { name: 'Павел', surname: 'Овчинников', exams: ['Информатика', 'Web', 'ЭЭиС'], marks: [4, 4, 5], group: 'БСТ2201' }, + { name: 'Валерия', surname: 'Сикидина', exams: ['АиГ', 'КТП', 'Философия'], marks: [5, 3, 4], group: 'БСТ2204' }, + { name: 'Дмитрий', surname: 'Смирнов', exams: ['Информатика', 'История', 'ИС'], marks: [4, 5, 4], group: 'БСТ2203' }, + { name: 'Максим', surname: 'Соловьёв', exams: ['Философия', 'ЭЭиС', 'Физика'], marks: [5, 4, 5], group: 'БСТ2202' }, + { name: 'Глеб', surname: 'Степанов', exams: ['КТП', 'Web', 'Информатика'], marks: [3, 5, 4], group: 'БСТ2201' }, + { name: 'Серафим', surname: 'Сухарев', exams: ['Философия', 'История', 'ИС'], marks: [4, 5, 5], group: 'БСТ2204' }, + { name: 'Анна', surname: 'Харченко', exams: ['Информатика', 'ЭЭиС', 'АиГ'], marks: [5, 3, 4], group: 'БСТ2203' }, + { name: 'Олег', surname: 'Хорун', exams: ['Физика', 'КТП', 'Философия'], marks: [4, 5, 4], group: 'БСТ2202' }, + { name: 'Павел', surname: 'Черниговский', exams: ['История', 'ИС', 'Web'], marks: [3, 4, 5], group: 'БСТ2201' }, + { name: 'Дмитрий', surname: 'Шагаров', exams: ['Философия', 'Информатика', 'ЭЭиС'], marks: [4, 4, 5], group: 'БСТ2204' }, + { name: 'Александр', surname: 'Шалавасов', exams: ['КТП', 'АиГ', 'Web'], marks: [5, 3, 4], group: 'БСТ2203' }, + { name: 'Михаил', surname: 'Шестерин', exams: ['История', 'ИС', 'Философия'], marks: [4, 5, 5], group: 'БСТ2202' }, + { name: 'Никита', surname: 'Шулапов', exams: ['Информатика', 'ЭЭиС', 'Физика'], marks: [5, 4, 4], group: 'БСТ2201' } +] + +const groups = Array.from(new Set(groupmates.map(mate => mate.group))).sort(); + + +function printStudents(students, filters = {}) { + const { targetScore = null, group = null } = filters + + console.log( + 'Имя'.padEnd(15), + 'Фамилия'.padEnd(15), + 'Группа'.padEnd(10), + 'Экзамены'.padEnd(40), + 'Оценки'.padEnd(20), + 'Средняя оценка' + ) + + students.forEach(student => { + const avg = student.marks.reduce((a, b) => a + b, 0) / student.marks.length + const isScoreOk = targetScore === null || avg > targetScore + const isGroupOk = group === null || group === student.group + if (isScoreOk && isGroupOk) { + console.log( + student.name.padEnd(15), + student.surname.padEnd(15), + student.group.padEnd(10), + JSON.stringify(student.exams).padEnd(40), + JSON.stringify(student.marks).padEnd(20), + avg.toFixed(2) + ) + } + }) + console.log('\n') +} + +function promptFilters() { + let group + + while (true) { + group = prompt(`Введите группу для фильтрации (${groups.join(', ')}):`) + + if (group === '') { + group = null + break + } + + if (groups.includes(group)) { + break + } + } + + let targetScore + + while (true) { + targetScore = prompt('Введите среднюю оценку для фильтрации:') + + if (targetScore === '') { + targetScore = null + break + } + + targetScore = Number(targetScore) + + if (!isNaN(targetScore) && targetScore >= 0 && targetScore <= 5) { + break + } + } + + printStudents(groupmates, { group }) +} + +// promptFilters() diff --git a/articles/templates/archive.html b/articles/templates/archive.html index 67b2e8b..cefa7c9 100644 --- a/articles/templates/archive.html +++ b/articles/templates/archive.html @@ -37,14 +37,19 @@

{{ post.title }}

-
{% endfor %}
+ + \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index b290bf653881d304d7ddd235d3de6414a0d07656..054111d23f8cc71ee60655528ff4dcaa31c3acea 100644 GIT binary patch delta 1599 zcma))U2Icj7{_~h!n(CRef`1(M@9)VaglZBtDgyx?gQ3t?fN;|8Zx`}e5^g~`rWlR zZ7FEXa5#o?g&5_=D>}yPfOU|JD`MiQniv9+L~igxF7!e#H2R(n5+yNsbKduT-sk`P zf6sH?$}Lspmg>VEWNCTtFtW7z&h9~^XC*&4(t&lOD21Hg&m%9deLG0ty_n*$3i;yRo#8%Z)($juk#36i4qhQm7I-)Mx{LQx8x(WEyTh_wfEuXprfAT9&H zfIHwi_yT+ceg{8+2cQ5JK^%M!Dy!9T(A$M}BkiWKPIPyBr&gkSkR2!0+G4r*f)Z6P z%QW|~hI)CmT2q%#96)zDYJO{`WX_ZfxkM5-n8JCcm^YZ&h|!ec=@|y6gp`i4FHA*8 zM<)w&R=020{9!-w>v#BW)V+<#)`N(vhW!PfEMG|Qf5%(?l z30olKAC9mY)@t&Om3-Oph@L3tr!up~w1Ycl9-mHezMzRHvQ9&8%rwSN<@H2%C}Ahv zzDdUA9^r-@=~yIgi&{O#P>jn=3dO9$J38l}1w+{3NLZ(`LXn&|7g&Cv6e(JWyeXUr zT4tCT&b5$t(pHk=ou#0Ac4jmjvyBpY0UvrJ5MZa%8ETF$IF1RKr$2!-{o^&0IBn3c zH7+>hN)()xf%~8V&aS;!ISKmvPzUn7$)Qrx%FPSf+P%w-dzX>^!?4UH8Tb)wgG;c? z$6#MCYDNCr8a==L7h>J32DfG45AYj&13!aD;34<{+y&o(ui=Zhy{?sC0v)?h1X1-g z?f|(ZxmT@zDAVi*SFuMRh<&Dhh$%F`YW$cRdqs1(p{>Zb)qMxhaYVe>T5O#V>*Bh& z*{ZhAXj@hBhPWkeiuKls*6E&x;sg1gLrPR}PNvLs;fiw&jVOOtQLgRjQOHgm-;a!o zpTg8Clx>PzP*M>$#7$U5+O}%qb-31GunE6QQutKcsV4bsNLlUUq86sq#j8-e1uw3& z&WH_hLkj~po*+T_d(h{M7P4Ixn`O9M!<6DpaUCkxVW{3(YP}D4*R+zboh0RG#hYy; z*q+$j3DhBsWZM**2Y0TazKv2BuSkYcr6;&hvAUybLZ_3Et|E;_EZ=CIZr59f5L*xf z_5#CA*ueV#YVB>~acI5)+k_77=D*xQY8%5sb!jBhglh0`9ac5#o<0$RR_%Mve{0}( H}o?1uZqyP}I?P{tREUrkXW1AEuc?WR7N>m7xS3v3C>mL1j1) zn4~3Rl@7RfiHT%LkvjxSx~GrxBB$EAdaF(;w%l{=;jnTMc8PpZ!G*cJ^K^p=^x8FPjjTbDVCl*Lk z`??(6Z&gLBO2=k=<`F!>L&aw&preIUxa9rPR76Fc;2WR*#T&YK#v_`z$Bq9~yNt35 zg5*C@2b