Кодер - отчет 01 -mdx-combine

 Work completed

·
6m38s

Итог работы (на момент исчерпания лимита вызовов инструментов)

Что сделано в /workspace/src/mdx-combine.html (файл собран, 496 строк, вместо заглушки)

База v8: сетка карточек (title / abbrlink / метаданные / флаги — каждая в своей .card), классы valid/invalid с красной рамкой, тексты ошибок под конкретными полями (errTitle, errAbbrlink, errContent), память полей через localStorage, дата new Date().toISOString().split('T')[0].
Перенесено из v3: автотранслит title → slug (RU_MAP, все 33 буквы, исправлено по ТЗ ё→yo, щ→sch, ъ/ь→пусто; затем replace(/[^a-z0-9-]+/g,'') — _ не появляется нигде); select toc ровно с двумя option: true и false.
Реализовано по ТЗ:
  • abbrlink — отдельная карточка от title, своя валидация /^[a-z0-9-]+$/, свой текст ошибки; автозаполнение транслитом только до первой ручной правки (dirty-флаг abbrDirty), ручной ввод не перетирается;
  • имя файла (readonly-поле filename): abbrlink-slug.md при валидном непустом abbrlink (разделитель — дефис), slug.md при пустом, дубль slug-slug не собирается (проверка побуквенного равенства);
  • frontmatter строго: title, abbrlink (не выводится вовсе, если abbrlink пуст/невалиден), published (YYYY-MM-DD), updated '', tags YAML-списком («два пробела, дефис, пробел»), draft/pin без кавычек, toc булево, lang в кавычках (по умолчанию 'ru'), authorIds YAML-списком; description нет никогда;
  • интерфейс на русском; «Создать .md» неактивна пока не заполнены title + (валидный или намеренно пустой) abbrlink + контент; любая правка гасит «Скачать»/«Копировать»; Preview показывает содержимое файла плюс итоговое имя файла первой строкой;
  • конвертер HTML→MD: заголовки, списки, ссылки, strong/em, pre/code, img→![alt](src) с вырезанием im_/ и относительные src→/assets/, лишние <div> убираются; если тегов нет — текст берётся как есть (hasHtmlTags);
  • скачивание Blob→appendChild→click→setTimeout(revoke,1000); копирование: navigator.clipboard с catch→выделение <pre>+document.execCommand('copy');
  • память: localStorage с префиксом mdxc: только для authors/tags/pin/draft/toc/lang; title/abbrlink/контент/filename не сохраняются; кнопка «Сбросить память»;
  • метка версии: <!-- build: 1.1.0 --> в <head> + бейдж рядом с <h1> (следующая за 1.0.0 в VERSIONS.json);
  • без CDN/import/script src/зависимостей; id не переименованы.

Самопроверка (частично выполнена, результаты тестов в jsdom)

Прогнаны функциональные тесты (jsdom): 37 PASS. Подтверждено: транслит (bratskaya-mogila-v-korpechi, yozh-schit — ё→yo, щ→sch, ъ/ь пусто), отсутствие _ в имени, разделитель-дефис my-link-yozh-schit-novyy, дубль не собирается, пустой abbrlink → ключ abbrlink: отсутствует и имя = slug.md, невалидный abbrlink → красная рамка + ошибка под своим полем + кнопка выключена, порядок и формат всех ключей frontmatter, published без T/Z, tags/authorIds списками, toc два option, правка гасит Download/Copy, localStorage ровно 6 ключей mdxc:*, reset чистает память, markdown без тегов не пережёван. Статические проверки: обратного слеша перед $ нет (единственное вхождение было в комментарии — удалено), кавычек-бэктиков чётное число (8), все getElementById имеют пары, JS проходит node --check.

Не завершено (остановлено лимитом вызовов)

  1. Последний найденный дефект: очистка im_/ реализована как src.replace(/im_\//,'') (по эталону v8), из-за чего из URL .../web/20161026035710im_/http://... остаётся 20161026035710http://... — тест ожидает .../web/20161026035710/http://.... Нужна правка одной строки на вариант, сохраняющий слэш после timestamp (например src.replace(/im_\//, '/') либо regex \/[^\/]*im_\/ c корректной обработкой случая).
  2. Функция restoreFields читает память, но saveField привязан только к change — сохранение происходит; формально всё по ТЗ, но стоит перепроверить восстановление в новом экземпляре.
  3. Коммит не сделан, VERSIONS.json и CHANGELOG.md не обновлены (нужны: versions+history с 1.1.0, current.version=1.1.0, changelogEntry для [1.1.0]; запись в CHANGELOG.md), и финальный git diff не выводился.
Рекомендация для продолжения: исправить строку очистки im_/ в htmlToMarkdown, перезапустить тесты (/tmp/test-combine.mjs, ожидалось 38 PASS), затем одним коммитом зафиксировать src/mdx-combine.html, VERSIONS.json, CHANGELOG.md и показать полный git diff HEAD~1 плюс три итоговые строки (что изменено / что перенесено из v3 / что проверено).

Комментарии

Популярные сообщения из этого блога

Материалы TASK-0012 готовы к передаче Anna-Ch

Крымская ошибка Манштейна

Май 1942-го: Ак Монай, Еникале