Skip to content

ref(mixedimage): crop stack refactor and docs (#31) - #44

Open
Ibochkarev wants to merge 2 commits into
webinmd:masterfrom
Ibochkarev:refactor/issue-31-crop-docs
Open

ref(mixedimage): crop stack refactor and docs (#31)#44
Ibochkarev wants to merge 2 commits into
webinmd:masterfrom
Ibochkarev:refactor/issue-31-crop-docs

Conversation

@Ibochkarev

@Ibochkarev Ibochkarev commented Aug 9, 2026

Copy link
Copy Markdown

Закрывает #31: рефакторинг crop-стека и актуализация документации. UX в менеджере MODX не меняется.

Зачем

Crop работал, но код накапливал хрупкие места: explode по точке в имени файла, toBlob() без MIME (PNG на диске при расширении .jpg), строковый парсинг crop_options, повторное открытие окна crop с устаревшим <img src>. README не описывал crop, triggerlist и событие OnMixedImageCrop. Changelog шёл в старом формате с разделителями ----.

Что сделано

Processor (crop.class.php)

  • Парсинг data URI через regex вместо двойного explode.
  • Имя файла через pathinfo: корректные пути с несколькими точками (photo.name.jpg).
  • Суффикс: пустой → перезапись, time()_timestamp, без повторного добавления, если суффикс уже в basename.
  • Расширение из исходного файла (с fallback MIME → ext).
  • Ошибки через $this->failure() и lexicon keys.
  • Ответ connector: JSON через $this->success($relativePath), клиент читает result.message.

JS (mixedimage.js)

  • Хелперы на namespace mixedimage: parseCropOptions, getSourceMime, buildCropperOptions, saveCroppedBlob.
  • crop_options: coercion true / false / null / числа вместо строк.
  • toBlob(callback, mime) с MIME исходника (jpg остаётся jpg).
  • Окно crop создаётся один раз. На show обновляется src и пересоздаётся Cropper. На hide — destroy.
  • Исправлен конструктор windowCrop (windowCrop.superclass вместо window.superclass).
  • HTTP_MODAUTH в crop-запросе, размеры crop через parseInt, окно закрывается только после успешного save.

Lexicon (ru/en)

  • Описание crop_options: формат key: value, автоматический разбор типов.
  • triggerlist_desc дополнен триггером crop.
  • Ключи ошибок crop для processor и Ajax failure.

Docs

  • README: настройки TV, triggerlist, crop, OnMixedImageCrop с примером watermark, MIGX, системные настройки.
  • changelog.txt: формат Keep a Changelog, текущие изменения в [Unreleased].

UX-контракт (без изменений)

  • Триггер crop, окно CropperJS, кнопки Crop / Cancel.
  • TV-опции crop_ratio, crop_width, crop_height, crop_suffix, crop_options.
  • Событие OnMixedImageCrop с image (absolute path) и tvId.

Scope

Ветка содержит только изменения для #31. Не затрагивает remove/upload (#17) и preview reload (#35). После merge других PR возможны конфликты в mixedimage.js.

На ревью

  • Согласованность MIME в toBlob и расширения в processor.
  • Повторное открытие crop после смены значения TV.
  • Сценарии суффикса: пустой, time(), повторный crop.
  • Парсинг JSON-ответа crop connector.

Fixes #31

Restructure crop processor and manager JS without UX changes.
Add README crop docs, Keep a Changelog format, and lexicon updates.
Fix MIME/extension alignment and crop window lifecycle bugs.

Refs webinmd#31
@Ibochkarev
Ibochkarev marked this pull request as ready for review August 9, 2026 03:58
Use result.message from MODX response, add HTTP_MODAUTH, coerce crop
dimensions to integers, and hide crop window only after successful save.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Work on functionality on crop

1 participant