179 lines
5.5 KiB
JavaScript
179 lines
5.5 KiB
JavaScript
/**
|
||
* DOM Utilities
|
||
*
|
||
* Функции для работы с DOM (показать/скрыть элементы, обновить текст).
|
||
*/
|
||
|
||
/**
|
||
* Показать элемент
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
*/
|
||
export function showElement(element) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.style.display = ''
|
||
el.classList.remove('hidden')
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Скрыть элемент
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
*/
|
||
export function hideElement(element) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.classList.add('hidden')
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Переключить видимость элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
*/
|
||
export function toggleElement(element) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
if (el.classList.contains('hidden')) {
|
||
showElement(el)
|
||
} else {
|
||
hideElement(el)
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Установить текст элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
* @param {string} text - Текст для установки
|
||
*/
|
||
export function setElementText(element, text) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.textContent = text
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Установить HTML элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
* @param {string} html - HTML для установки
|
||
*/
|
||
export function setElementHTML(element, html) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.innerHTML = html
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Получить значение input элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
* @returns {string} Значение элемента
|
||
*/
|
||
export function getInputValue(element) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
return el ? el.value : ''
|
||
}
|
||
|
||
/**
|
||
* Установить значение input элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
* @param {string} value - Значение для установки
|
||
*/
|
||
export function setInputValue(element, value) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.value = value
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Добавить класс элементу
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
* @param {string} className - Имя класса
|
||
*/
|
||
export function addClass(element, className) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.classList.add(className)
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Удалить класс у элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
* @param {string} className - Имя класса
|
||
*/
|
||
export function removeClass(element, className) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.classList.remove(className)
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Проверить наличие класса у элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
* @param {string} className - Имя класса
|
||
* @returns {boolean} True если класс есть
|
||
*/
|
||
export function hasClass(element, className) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
return el ? el.classList.contains(className) : false
|
||
}
|
||
|
||
/**
|
||
* Показать toast уведомление
|
||
* @param {string} message - Сообщение
|
||
* @param {string} type - Тип ('info', 'success', 'error', 'warning')
|
||
*/
|
||
export function showToast(message, type = 'info') {
|
||
// TODO: Implement proper toast/snackbar component
|
||
console.log(`[${type.toUpperCase()}] ${message}`)
|
||
alert(message)
|
||
}
|
||
|
||
/**
|
||
* Очистить всех детей у элемента
|
||
* @param {string|HTMLElement} element - ID элемента или сам элемент
|
||
*/
|
||
export function clearChildren(element) {
|
||
const el = typeof element === 'string' ? document.getElementById(element) : element
|
||
if (el) {
|
||
el.innerHTML = ''
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Создать элемент с атрибутами
|
||
* @param {string} tag - Тег элемента
|
||
* @param {object} attributes - Атрибуты элемента
|
||
* @param {string|HTMLElement} parent - Родительский элемент (опционально)
|
||
* @returns {HTMLElement} Созданный элемент
|
||
*/
|
||
export function createElement(tag, attributes = {}, parent = null) {
|
||
const el = document.createElement(tag)
|
||
|
||
for (const [key, value] of Object.entries(attributes)) {
|
||
if (key === 'class') {
|
||
el.className = value
|
||
} else if (key === 'text') {
|
||
el.textContent = value
|
||
} else if (key === 'html') {
|
||
el.innerHTML = value
|
||
} else {
|
||
el.setAttribute(key, value)
|
||
}
|
||
}
|
||
|
||
if (parent) {
|
||
const parentEl = typeof parent === 'string' ? document.getElementById(parent) : parent
|
||
if (parentEl) {
|
||
parentEl.appendChild(el)
|
||
}
|
||
}
|
||
|
||
return el
|
||
}
|