Гибридные подходы

Bliss.js представляет собой легковесную библиотеку для работы с DOM и асинхронными операциями в браузере. Основной принцип — минимизация объёма кода при выполнении стандартных операций с элементами страницы. Библиотека сочетает в себе удобства jQuery и современный подход к нативному JavaScript, позволяя использовать цепочки методов, селекторы и события без громоздкой структуры.

Ключевые возможности Bliss.js:

  • Удобные селекторы: $ и $$ для одиночного элемента и коллекции соответственно.
  • Расширенные методы работы с классами, атрибутами и стилями.
  • Событийная модель, совместимая с нативными событиями.
  • Асинхронные операции через промисы и генераторы.
  • Гибкая интеграция с другими библиотеками без конфликтов глобальных переменных.

Селекторы и манипуляции DOM

Bliss.js использует функции $ и $$ для выборки элементов. $ возвращает первый совпадающий элемент, $$ — коллекцию всех элементов, соответствующих селектору:

let button = $('#submit-button'); 
let items = $$('.list-item');

Эти объекты расширены методами библиотеки:

button.addClass('active').on('click', () => {
    console.log('Кнопка нажата');
});

items.forEach(item => item.toggleClass('highlight'));

Методы addClass, removeClass, toggleClass позволяют управлять стилями элементов без обращения к classList напрямую. Атрибуты можно получать и устанавливать через attr:

let url = button.attr('data-url'); 
button.attr('disabled', true);

События

Bliss.js поддерживает стандартные DOM-события, добавляя удобный синтаксис:

button.on('mouseover mouseout', e => {
    e.target.toggleClass('hovered');
});

Метод once позволяет привязать обработчик однократно, что полезно для асинхронных инициализаций:

button.once('click', () => alert('Нажато один раз'));

Асинхронные операции

Библиотека облегчает работу с промисами и генераторами. Метод ajax возвращает промис для асинхронного запроса:

$.ajax('/api/data', { method: 'GET' })
  .then(response => console.log(response))
  .catch(error => console.error(error));

Поддержка генераторов позволяет писать асинхронный код в синхронном стиле:

function* fetchData() {
    try {
        let data = yield $.ajax('/api/items');
        console.log(data);
    } catch (e) {
        console.error(e);
    }
}

Bliss.run(fetchData);

Гибридные подходы

Bliss.js оптимально сочетает нативные возможности JavaScript и методы библиотеки, позволяя применять гибридные подходы:

  1. Смешение нативных и Bliss методов: можно использовать стандартные свойства DOM вместе с методами $ и $$.
let container = $('#container');
container.appendChild(document.createElement('div'));
container.addClass('container-enhanced');
  1. Комбинирование событий: обработчики Bliss и нативные события могут сосуществовать, обеспечивая более гибкое управление.
document.getElementById('menu').addEventListener('click', () => console.log('Нативный клик'));
$('#menu').on('click', () => console.log('Bliss клик'));
  1. Интеграция с промисами: асинхронные операции Bliss легко комбинируются с нативными промисами и async/await.
async function loadData() {
    let response = await $.ajax('/api/data');
    console.log(response);
}
  1. Модули и расширения: Bliss допускает добавление собственных методов и плагинов без вмешательства в ядро библиотеки:
$.fn.flash = function(duration = 500) {
    this.addClass('flash');
    setTimeout(() => this.removeClass('flash'), duration);
    return this;
};

$('#alert').flash(1000);

Работа с коллекциями элементов

Коллекции, возвращаемые $$, расширены функционалом массива и методами Bliss:

let buttons = $$('.btn');
buttons.forEach(btn => btn.on('click', () => console.log(btn.textContent)));
buttons.filter(btn => btn.classList.contains('primary')).forEach(btn => btn.disable());

Методы map, filter и reduce можно использовать напрямую, что облегчает гибридные операции с набором элементов.

Расширение функционала через плагины

Bliss.js позволяет создавать плагины для повторно используемых функций:

$.fn.tooltip = function(text) {
    this.attr('title', text);
    this.on('mouseenter', e => e.target.style.color = 'blue');
    return this;
};

$('.info').tooltip('Дополнительная информация');

Такой подход позволяет объединять нативный JavaScript с методами библиотеки, создавая гибкие и компактные решения для интерфейсов.

Применение в сложных интерфейсах

Гибридный стиль особенно полезен при разработке динамических приложений с большим количеством элементов и событий. Использование Bliss.js позволяет уменьшить количество повторяющегося кода, сохраняя контроль через нативные методы:

let tabs = $$('.tab');
tabs.forEach(tab => {
    tab.on('click', e => {
        tabs.forEach(t => t.removeClass('active'));
        e.target.addClass('active');
        document.querySelectorAll('.tab-content').forEach(c => c.style.display = 'none');
        document.querySelector(`#${e.target.dataset.target}`).style.display = 'block';
    });
});

Такой подход обеспечивает сочетание декларативной логики с манипуляциями DOM без излишней сложности.

Bliss.js как библиотека для гибридных подходов позволяет строить быстрый, компактный и управляемый код, сочетая преимущества нативного JavaScript с удобными методами работы с DOM, событиями и асинхронными операциями.