feat: js
This commit is contained in:
@@ -103,4 +103,31 @@ form {
|
|||||||
.registration-error {
|
.registration-error {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.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;
|
||||||
|
}
|
||||||
|
|||||||
11
articles/static/js/fold-post.js
Normal file
11
articles/static/js/fold-post.js
Normal file
@@ -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') ? 'Показать' : 'Скрыть'
|
||||||
|
})
|
||||||
|
}
|
||||||
103
articles/static/js/students.js
Normal file
103
articles/static/js/students.js
Normal file
@@ -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()
|
||||||
@@ -37,14 +37,19 @@
|
|||||||
<a class="post-link" href="/article/{{ post.id }}">
|
<a class="post-link" href="/article/{{ post.id }}">
|
||||||
<div class="one-post">
|
<div class="one-post">
|
||||||
<h2 class="post-title">{{ post.title }}</h2>
|
<h2 class="post-title">{{ post.title }}</h2>
|
||||||
<div class="article-info">
|
<div class="one-post-content">
|
||||||
<strong class="article-author">{{ post.author.first_name }}</strong>
|
<div class="article-info">
|
||||||
<div class="article-created-date">{{ post.created_date }}</div>
|
<strong class="article-author">{{ post.author.first_name }}</strong>
|
||||||
|
<div class="article-created-date">{{ post.created_date }}</div>
|
||||||
|
</div>
|
||||||
|
<p class="article-text">{{ post.get_excerpt }}</p>
|
||||||
</div>
|
</div>
|
||||||
<p class="article-text">{{ post.get_excerpt }}</p>
|
<button class="fold-button">Скрыть</button>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
<script src="{% static 'js/students.js' %}"></script>
|
||||||
|
<script src="{% static 'js/fold-post.js' %}"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
Reference in New Issue
Block a user