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
|
|||
|
|
}
|