InternetProgramming/Lab3/js/lines-ui.js
2023-11-30 18:13:57 +03:00

118 lines
5.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// работа с элементами управления
// объект для удобного получения элементов
// controls - элементы управления
// при обращении к атрибуту объекта вызывается
// нужная функция для поиска элемента
export const controls = {
table: document.querySelector("#games-table tbody"),
form: document.getElementById("games-form"),
lineId: document.getElementById("items-line-id"),
genresType: document.getElementById("genre"),
price: document.getElementById("price"),
name: document.getElementById("name"),
image: document.getElementById("image"),
imagePreview: document.getElementById("image-preview"),
};
// Дефолтное превью
export const imagePlaceholder = "placeholder.jpg";
// функция создания option для select
export function createGenresOption(name, value = "", isSelected = false) {
const option = document.createElement("option");
option.value = value || "";
option.selected = isSelected;
option.text = name;
return option;
}
// функция создания ячейки (колонки) таблицы с кнопками удаления/редактирования
function createTableButtons(text1, text2, callback1, callback2, styleOfCOlumn) {
const button1 = document.createElement("button");
button1.setAttribute('class', 'btn_for_game_main_page');
button1.onclick = () => {
callback1(); // вызывается переданная функция
};
button1.innerHTML = text1;
const button2 = document.createElement("button");
button2.setAttribute('class', 'btn_for_game_main_page');
button2.onclick = () => {
callback2(); // вызывается переданная функция
};
button2.innerHTML = text2;
const td = document.createElement("td");
td.setAttribute('class', styleOfCOlumn);
td.appendChild(button1);
td.appendChild(button2);
return td;
}
// функция создания ячейки (колонки) таблицы с фотографией игры
function createTableColumnWithImage(imageSrc, styleOfImage, styleOfColumn) {
const td = document.createElement("td");
td.setAttribute('class', styleOfColumn);
const img = document.createElement("img");
img.setAttribute('src', imageSrc);
img.setAttribute('class', styleOfImage);
td.appendChild(img);
return td;
}
// функция создания ячейки (колонки) таблицы с названием и ценой игры
function createTableColumnWithSeveralTexts(text1, text2, style1, style2, styleOfColumn) {
const td = document.createElement("td");
const a = document.createElement("a");
a.setAttribute('class', style1);
a.innerHTML = text1;
// ССЫЛКА-ЗАГЛУШКА НА СТРАНИЦУ С ИНФОЙ ОБ ИГРЕ ДЛЯ КАЖДОЙ ИГРЫ
a.href = "./dark_nights_page.html";
// Создание абзаца с ценой игры
const p = document.createElement("p");
p.setAttribute('class', style2);
// eslint-disable-next-line prefer-template
const fullPrice = text2 + ' руб.';
p.innerHTML = fullPrice;
td.setAttribute('class', styleOfColumn);
// Добавление названия игры в ячейку
td.appendChild(a);
// Добавление цены игры в ячейку
td.appendChild(p);
return td;
}
// функция создания ячейки (колонки) таблицы с жанром игры
function createTableColumnWithGenre(value, style, styleOfCOlumn) {
const td = document.createElement("td");
const p = document.createElement("p");
p.innerHTML = value;
p.setAttribute('class', style);
td.setAttribute('class', styleOfCOlumn);
td.appendChild(p);
return td;
}
// Создание строки с игрой при обновлении данных
export async function createTableRow(item, editPageCallback, deleteCallback) {
console.log(item);
const row = document.createElement("tr");
row.id = `line-${item.id}`;
// ПЕРВЫЙ СТОЛБЕЦ С ФОТКОЙ ИГРЫ. Передаю само фото, стиль для неё и для столбца
row.appendChild(createTableColumnWithImage(item.image, 'img-fluid w-100 h-100', 'align-middle p-0 cell1_main_page'));
// ВТОРОЙ СТОЛБЕЦ С НАЗВАНИЕМ ИГРЫ, ЦЕНОЙ. Передаю название, цену, стили для них и столбца
row.appendChild(createTableColumnWithSeveralTexts(item.name, item.price, 'nav-link active name_of_game_main_page', 'price_of_game_main_page', 'align-middle p-0 cell2_main_page'));
// ТРЕТИЙ СТОБЕЦ С ЖАНРОМ ИГРЫ
row.appendChild(createTableColumnWithGenre(item.genres.name, 'genre_of_game_main_page', 'align-middle p-0'));
// ЧЕТВЁРТЫЙ СТОЛБЕЦ С 2 КНОПКАМИ
row.appendChild(createTableButtons("изменить", "удалить", editPageCallback, deleteCallback, 'text-center align-middle p-0'));
return row;
}