0.3.5 • Published 2 years ago

@egml/widget v0.3.5

Weekly downloads
-
License
MIT
Repository
-
Last release
2 years ago

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)