Обратная совместимость

Принципы поддержки старых версий API

Flatpickr исторически развивалась как библиотека с минимальным числом критических изменений API. Основная стратегия поддержания обратной совместимости заключается в сохранении поведения публичных методов и конфигураций при расширении функциональности. Это означает, что большинство опций, введённых в ранних версиях, продолжают работать в актуальных релизах без изменений, даже если внутри они были переработаны.

Ключевая особенность подхода — разделение публичного API и внутренней реализации. Внутренние модули могут полностью переписываться, однако контракт для разработчика остаётся стабильным. Это особенно важно для проектов, где Flatpickr используется в десятках форм и компонентов.


Совместимость конфигурационных параметров

Большинство параметров инициализации сохраняют поведение между версиями, однако некоторые подвергались эволюционным изменениям.

Стабильные параметры:

  • dateFormat
  • defaultDate
  • enable
  • disable
  • minDate и maxDate
  • inline
  • mode
  • time_24hr

Эти опции считаются ядром API и практически не менялись с ранних версий.

Изменявшиеся параметры:

Некоторые параметры получили расширение поведения без удаления старой логики:

  • locale — ранее принимал ограниченный набор строковых идентификаторов, позже был расширен до объектов локализации.
  • wrap — поведение стало более строгим в отношении структуры DOM.
  • altInput — добавлены дополнительные правила синхронизации значений.

С точки зрения обратной совместимости важно учитывать, что старые строковые формы конфигурации продолжают работать, но новые версии рекомендуют использовать объектные расширения.


Форматы дат и парсинг

Одной из наиболее чувствительных зон совместимости является обработка дат.

Flatpickr использует собственный парсер, который сохраняет поддержку исторических форматов, но при этом расширяет возможности:

  • Поддержка строковых форматов ("Y-m-d", "d/m/Y" и т.д.) сохраняется полностью.
  • Поведение относительно невалидных дат в старых версиях было более мягким, в новых — стало более строгим.
  • В режиме altInput сохраняется обратная совместимость отображения и внутреннего значения.

Изменения касались в основном обработки краевых случаев:

  • некорректные месяцы (например, 2020-13-01)
  • автоматическая нормализация дат
  • поведение при переходе через границы месяца

Старые приложения, зависящие от «гибкого» парсинга, могут столкнуться с более строгой валидацией в новых версиях.


API методов и событий

Flatpickr предоставляет программный API через объект инстанса. Обратная совместимость здесь критична, так как методы часто используются вне конфигурации.

Стабильные методы:

  • setDate()
  • getDate()
  • clear()
  • destroy()
  • open() и close()
  • jumpToDate()

Эти методы сохраняют сигнатуры и поведение.


Изменения в событиях

Система событий (hooks) эволюционировала, но сохранила базовую структуру:

  • onChange
  • onOpen
  • onClose
  • onReady
  • onMonthChange
  • onYearChange

В ранних версиях callback-функции могли получать ограниченный набор аргументов. В новых версиях добавлены дополнительные параметры, но старые обработчики продолжают работать, игнорируя новые аргументы.

Пример эволюции сигнатуры:

  • Ранее: onChange(selectedDates, dateStr)
  • Сейчас: onChange(selectedDates, dateStr, instance)

Старый код остаётся валидным, так как лишние параметры не нарушают выполнение функций.


Работа с DOM и legacy-инициализация

Ранние версии Flatpickr допускали более свободную структуру DOM при использовании wrap: true. В новых версиях структура стала строго определённой:

  • input должен находиться внутри контейнера
  • элементы с data-input и data-toggle должны быть явно размечены

Старые реализации, где DOM был менее формализован, могут работать с предупреждениями или частичной деградацией функциональности.


Совместимость с jQuery-интеграциями

Flatpickr не зависит от jQuery, однако исторически существовали обёртки вида:

$(element).flatpickr(options);

Современные версии сохраняют возможность вызова через jQuery-обёртку, если она подключена отдельно. При этом:

  • сама библиотека не предоставляет jQuery API
  • старые плагины могут требовать адаптации
  • события jQuery не синхронизируются автоматически с hooks Flatpickr

Изменения в локализациях

Механизм локалей был расширен от простых объектов до полноценных конфигураций с функциями форматирования.

Ранее локали представляли собой:

flatpickr.localize(flatpickr.l10ns.ru);

В новых версиях локали могут включать:

  • функции форматирования месяцев и дней
  • кастомные названия
  • правила первого дня недели

Обратная совместимость сохраняется через fallback-механизм: если поле отсутствует в новой локали, используется английская версия.


Поведение при обновлении версии

При переходе между мажорными версиями Flatpickr основная стратегия совместимости строится на следующих принципах:

  1. Добавление вместо удаления Старые опции не удаляются сразу, а помечаются как deprecated.

  2. Двойная поддержка форматов Новые форматы принимают старые входные данные.

  3. Fallback-логика При отсутствии новых параметров используется поведение предыдущей версии.

  4. Стабильность инстанса Объект fp сохраняет структуру, даже если внутренние поля изменяются.


Deprecated-опции и их поведение

Некоторые параметры со временем теряют актуальность, но продолжают работать:

  • clickOpens — поведение может отличаться в зависимости от версии браузера
  • prevArrow / nextArrow — заменяются на более гибкие шаблоны
  • static — частично заменён логикой позиционирования через CSS

Важно, что deprecated-опции не вызывают ошибок, но могут игнорировать часть настроек или вести себя не так, как в ранних версиях.


Совместимость кастомных плагинов

Flatpickr поддерживает плагины, подключаемые через конфигурацию plugins. В старых версиях плагины имели доступ к внутренним структурам объекта инстанса, что делало их уязвимыми к изменениям.

В новых версиях:

  • добавлены стабильные хуки для расширений
  • ограничен прямой доступ к приватным полям
  • введены стандартизированные точки расширения

Старые плагины могут требовать адаптации, особенно если они использовали внутренние свойства вида _currentMonth или _days.


Обработка внутренних полей инстанса

Ранние версии допускали использование внутренних полей:

  • _input
  • _wrap
  • _currentMonth
  • _selectedDateElem

Эти поля не являются частью публичного API и могут меняться между релизами без уведомления. Несмотря на это, многие старые проекты продолжают их использовать, что создаёт потенциальные проблемы совместимости.

Современные версии рекомендуют замену на:

  • публичные методы (getDate, setDate)
  • события (onChange, onReady)
  • конфигурационные опции

Совместимость CSS-структуры

HTML-разметка календаря также претерпевала изменения, однако классы сохраняются в большинстве случаев:

  • .flatpickr-calendar
  • .flatpickr-month
  • .flatpickr-day
  • .selected, .today, .disabled

Изменения касались внутренней иерархии и дополнительных контейнеров, но базовая CSS-модель остаётся совместимой, что позволяет старым стилям работать без переписывания.


Итоговые принципы устойчивости к изменениям

Flatpickr сохраняет обратную совместимость за счёт:

  • минимизации breaking changes
  • сохранения сигнатур публичных методов
  • расширения API вместо его замены
  • fallback-логики для конфигураций и локалей
  • изоляции внутренней реализации

Эта модель делает библиотеку устойчивой к обновлениям в долгоживущих проектах, где изменение зависимостей требует предсказуемого поведения интерфейса выбора даты.