0.3.5 • Published 2 years ago
@egml/widget v0.3.5
Widget
Класс и утилиты для создания виджетов.
Класс нацелен на то, чтобы упростить и систематизировать работу с DOM, разбивая логику на такиe автономныe сущности как виджеты.
В самом базовом представлении это простой элемент <div>
, которому присваивается уникальный ID. Есть ряд полезных методов по манипулации DOM, таких как mount()
, wrap()
, detach()
и т. д.
Предполагается использовать этот класс как базовый для расширения и создания других виджетов.
Версии
- 0.3.x: Начиная с
0.2.11
создана веткаv0.3.x
. В ней расположены обратно несовместимые версии и ведётся разработка0.x
дальше. - 0.0.x - 0.2.x: Начальная разработка вплоть до ответвления на
0.3.x
. Здесь содержатся версии пакета, которые были использованы в тех или иных проектах на 04.09.2022. Планируется развивать0.2.x
и дальше, если потребуется. Отдельной ветки пока нет.
TODO:
- Придумать как обойти то, что изменение свойства
name
конструктора плохо дружит со старыми версиями iOS Safari (#20220911213454) - Вынести
render()
в статический метод, аthis.render()
сделать псевдонимом (#20220902122136) - В
Widget.settleClosest()
возвращать не массив, а первый и единственный его элемент (#20220805132140) - Сделать рефакторинг
Widget.settleElements()
: там тупорылый код (#20220805132238) - В методах типа
locate()
принимать аргументы в виде объектаlocate({ constructor, context, selector, closest, notify = true })
(#20220803165723) - Методы
listen()/stopListening()/once()
: чтобы вот такой кодauthDialog.dom.root.addEventListener(AuthDialog.authSuccessEventName, h)
можно было записать корочеauthDialog.listen(AuthDialog.authSuccessEventName, h)
(#20220803165610) - Исправить ошибку с Map: с добавлением новых виджетов, после удаления какого-то числа виджетов, созданных ранее (неправильно выдает общее количество виджетов после удаления, следовательно неверно задает новые ID) (#20220911211602)
- Более продвинутое использование шаблонов, отработать использование подкомпонентов в шаблонах и как затем производить settle/buildDom/init; добавить новые свойства, такие как
settleDataset
, и дополнить шаблон новыми переменными, такими какextraClasses
,settleDataset
и др. (#20220911211504) - Перейти на hogan.js (#20220911211439)
- Стараться придерживаться, а в коде подразумевать, что все данные по сущности хранятся в свойстве
data
, а не в самом виджете - Относительно
isDomOccupied()
: нужно реализовать его методом добавления data-атрибутов - Возможность передать
settle
в конструктор, чтобы сразу автоматически провестиsettle()
. Причем если передано простоtrue
, то сделать settle на первом попавшемся элементе по имени класса, если он не занят другими виджетами. Тут нужно будет написать какую-нибудь функцию типаisDomOccupied()
и выполнить ее для всех экземпляров класса, которые уже зарегистрированы. - Подумать над внедрением разных видов
name
, например,cssName
, чтобы компоненты могли использовать имена классов, отличные от своих имен (надо?) - Дописать README
Сделано:
instances -> all (#20220911211606)