- Bulk edit: only include changed fields in update payload so unchanged
date fields are not overwritten with null
- Bulk edit: normalize datetime oldValue to date-only for correct comparison
- Insert form: pre-fill date/datetime fields with today's date by default
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Create bible/ as single source of truth (architecture, API, frontend, installation, usage, security, roadmap)
- Verify and fix Bible against actual source code (API methods, endpoints, data flow)
- Trim README.md and CLAUDE.md to minimal stubs pointing to the Bible
- Remove duplicate claude.md (lowercase)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implemented simple HTML5 datalist for FK (foreign key) autocomplete in Insert and Edit forms, replacing the complex Tabulator form approach.
Changes:
- Added renderFieldInput() function to generate input fields with datalist support
- Replaced Tabulator table in promptForRequiredFields() with simple HTML form
- Replaced Tabulator table in showEditModal() with simple HTML form
- All fields now use native HTML5 inputs with proper type support
- FK fields use <input list="datalist"> for browser-native autocomplete
- Added vendor/, composer.lock, composer.phar to .gitignore
Benefits:
✅ Simpler implementation with native HTML5 functionality
✅ No dependency on complex Tabulator configurations
✅ Better browser compatibility with standard HTML5 inputs
✅ Smaller code footprint and faster rendering
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Replace native HTML <select> elements with Tabulator-based vertical forms
- Implement autocomplete functionality for FK fields in Insert modal
- Implement autocomplete functionality for FK fields in Edit modal (single and batch)
- Add comprehensive CSS styling for vertical form-tables
- Show field descriptions, FK references, and comments inline
- Support NULL values for optional fields with clear button
- Auto-enable checkboxes on field edit in batch mode
- Consistent UX with autocomplete in main table grid
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Dockerfile с PHP 8.3 и необходимыми расширениями
- Конфигурация БД через переменные окружения: DB_HOST, DB_PORT, DB_CHARSET
- .dockerignore для оптимизации сборки
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Код восстановления видимости столбцов перемещён внутрь события tableBuilt,
чтобы он выполнялся после полного построения таблицы, когда все столбцы доступны.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- core.js: API wrapper и утилиты (~150 строк)
- user.js: авторизация и localStorage (~240 строк)
- table.js: дерево и Tabulator (~770 строк)
- operations.js: CRUD операции (~740 строк)
- io.js: импорт/экспорт CSV и бэкап (~600 строк)
- app.js: точка входа (~30 строк)
Старый файл сохранён как app.js.bak
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Сохранение последней открытой таблицы в localStorage
- Сохранение фильтров и страницы при изменении
- Восстановление таблицы, фильтров и страницы при входе
- Сброс настроек теперь включает фильтры и последнюю таблицу
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Красивый экран авторизации с градиентным фоном
- Header с именем пользователя и dropdown-меню
- Меню: "Сбросить настройки" и "Выйти"
- Автологин при загрузке страницы из localStorage
- Настройки столбцов сохраняются в localStorage (между сессиями)
- Credentials хранятся в localStorage (автоматический вход)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Backend:
- insertMultipleRows возвращает failedRows с данными и описанием ошибки
- getShortErrorMessage формирует понятные сообщения об ошибках
Frontend:
- Диалог с результатами импорта (успешных/ошибок)
- Группировка ошибок по типу
- Кнопка "Скачать ошибки CSV" - файл с проблемными строками + колонки _ОШИБКА и _СТРОКА
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
mutatorEdit для числовых колонок:
- Удаляет все пробелы (обычные, неразрывные)
- Заменяет запятую на точку для дробных чисел
- " 20 138 " → 20138
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Единый диалог с вкладками: CSV таблицы и Бэкап БД
- Удалена отдельная кнопка Бэкап
- Удалён дублирующий код showExportModal
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
shell_exec некорректно работает с бинарными данными.
Теперь mysqldump пишет во временный файл, который потом стримится клиенту.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Кнопка "Бэкап" в toolbar открывает диалог выбора БД
- Можно скачать дамп одной БД или всех сразу
- Дамп создаётся через mysqldump и сразу стримится пользователю (gzip)
- Без сохранения на сервере
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Строка теперь окрашивается в жёлтый только при реальном изменении значения,
а не при клике на ячейку для редактирования.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Унифицировано сравнение через normalizeValue() для всех типов ячеек
- Intl.NumberFormat с сохранением исходного количества знаков после запятой
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Числовые колонки теперь отображаются в русской локализации:
- Пробел как разделитель тысяч (90217 → 90 217)
- Запятая для дробной части (90217.4 → 90 217,4)
Fixes#5
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Добавлена проверка для случая, когда oldValue - число, а newValue - строка
(например, 90217.4 vs "90217.4"), что вызывало ложное срабатывание сохранения.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Добавлена проверка изменения значения в cellEdited (oldValue vs newValue)
- Добавлен обработчик cellEditCancelled для сброса подсветки при отмене
- Устранена отправка запросов в БД без реальных изменений
Fixes#4
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Чекбоксы теперь работают только при клике на сам чекбокс (не на строку)
- Повторный клик на чекбокс снимает выделение
- Множественное выделение строк работает корректно
- Исправлен выбор количества записей на странице (сервер читает параметр 'size')
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Бэкенд:
- Добавлен try-catch для insert, update, delete, delete-batch
- Ошибки возвращаются как JSON с полем message
Фронтенд:
- Улучшена функция api() для парсинга JSON ошибок
- Извлечение понятного сообщения из ответа сервера
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tabulator отправляет sort как массив [{"field":..., "dir":...}],
а код ожидал объект {"field":..., "dir":...}. Добавлена конвертация.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Добавлен headerSort: true для каждой колонки
- Добавлен sorter на основе типа данных (string/number/datetime)
- Добавлены обработчики событий dataSorting/dataSorted для отладки
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Добавлена кнопка "Изменить" в toolbar
2. Модальное окно редактирования:
- Для одной записи: все поля доступны для редактирования
- Для нескольких записей: галочки для выбора изменяемых полей
- Поля с одинаковыми значениями показывают текущее значение
- Поля с разными значениями отображаются пустыми с пометкой
3. Исправлена сортировка: добавлен headerSort: true в columnDefaults
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Исправлен ajaxParams: использование this вместо глобальной переменной
- Добавлен headerFilterFunc для всех колонок для серверной фильтрации
- Исправлены параметры headerFilter для FK колонок
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1. Исправлена сортировка по дате - заменён ajaxParams на ajaxRequestFunc
для корректной передачи параметров сортировки на сервер
2. Добавлен dropdown фильтр для FK колонок - теперь в заголовке таблицы
для колонок с внешними ключами отображается выпадающий список
со всеми допустимыми значениями
3. Добавлено модальное окно экспорта CSV с опциями:
- Экспорт всех строк / только выделенных / шаблона (только заголовки)
- Выбор отдельных столбцов для экспорта
- Кнопки "Выбрать все" / "Снять все" для столбцов
4. Исправлено множественное выделение строк:
- Включён selectableRows: true
- Добавлен selectableRowsRangeMode: "click" для выбора нескольких строк
- Убран конфликтующий cellClick обработчик
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>