12 KiB
Рефакторинг app.js → Модули: Прогресс
Дата начала: 2025-12-25 Стратегия: Постепенная миграция (app.js остаётся рабочим) Статус: 🟡 В процессе
📊 Общий прогресс: 20%
[████░░░░░░░░░░░░░░░░] 20% завершено
Этапы рефакторинга
✅ Этап 1: Подготовка (ЗАВЕРШЁН)
Дата: 2025-12-25 Статус: ✅ Готово
- Создать структуру папок
static/js/js/state/js/services/js/ui/js/utils/js/data/
- Создать
js/config.jsс константами
Результат: Структура готова, app.js не тронут ✅
✅ Этап 2: Утилиты (ЗАВЕРШЁН)
Дата: 2025-12-25 Статус: ✅ Готово
2.1. utils/format.utils.js ✅
Строки из app.js: 150-273 Функции (11 шт.):
generateUUID()- генерация UUIDformatTime(seconds)- форматирование времениformatTimestamp(isoString)- ISO → локальное времяisTableText(text)- проверка на таблицуparseTextTable(text)- парсинг текстовых таблицescapeHtml(text)- экранирование HTMLpluralize(count, one, few, many)- склонение числительных
Экспорт: ES6 named exports ✅
2.2. utils/file.utils.js ✅
Строки из app.js: 262-273, 984-1132 Функции (6 шт.):
downloadJSON(data, filename)- скачать JSONloadFileAsJSON(file)- загрузить JSONloadFileAsText(file)- загрузить текстselectFile(accept)- выбрать файлdownloadText(text, filename)- скачать текст
Экспорт: ES6 named exports ✅
2.3. utils/validation.utils.js ✅
Строки из app.js: 823-860 Функции (4 шт.):
validateJSON(jsonString)- валидация JSONvalidateLoginFormat(login)- проверка формата логина (8 цифр)validateQuestions(questions)- валидация массива вопросовvalidateEnvironment(environment)- проверка окружения
Экспорт: ES6 named exports ✅
2.4. utils/dom.utils.js ✅
Строки из app.js: 277-281 + новые Функции (15 шт.):
showElement(element)- показать элементhideElement(element)- скрыть элементtoggleElement(element)- переключить видимостьsetElementText(element, text)- установить текстsetElementHTML(element, html)- установить HTMLgetInputValue(element)- получить значение inputsetInputValue(element, value)- установить значение inputaddClass(element, className)- добавить классremoveClass(element, className)- удалить классhasClass(element, className)- проверить классshowToast(message, type)- показать уведомлениеclearChildren(element)- очистить детейcreateElement(tag, attributes, parent)- создать элемент
Экспорт: ES6 named exports ✅
🟡 Этап 3: State Management (В ПРОЦЕССЕ)
Дата: - Статус: 🔲 Ожидает
3.1. state/appState.js 🔲
Строки из app.js: 10-51 Что нужно:
- Создать класс AppState
- Геттеры:
getCurrentEnv(),getCurrentEnvSettings() - Сеттеры:
setCurrentEnvironment(),updateSettings() - Методы:
saveToLocalStorage(),loadFromLocalStorage() - Export: default export singleton
3.2. data/storage.js 🔲
Строки из app.js: 618-642 Что нужно:
saveEnvironmentData(env, data)- сохранить данные окруженияloadEnvironmentData(env)- загрузить данные окруженияclearEnvironmentData(env)- очистить данныеclearAllData()- очистить всё
3.3. data/defaults.js 🔲
Файл: settings.js (перенести) Что нужно:
- Экспортировать
defaultSettingsиз settings.js - Адаптировать для использования в модулях
🔲 Этап 4: Services (ОЖИДАЕТ)
Дата: - Статус: 🔲 Ожидает
4.1. services/api-client.js 🔲
Файл: api-client.js (переместить)
- Переместить существующий
api-client.jsвservices/ - Добавить ES6 экспорт:
export default new BriefBenchAPI() - Протестировать импорт
4.2. services/auth.service.js 🔲
Строки из app.js: 60-140 Функции:
checkAuth()- проверка авторизацииlogin(loginString)- входlogout()- выходisAuthenticated()- проверка статуса
4.3. services/settings.service.js 🔲
Строки из app.js: 290-357 Функции:
loadFromServer()- загрузить с сервераsaveToServer(settings)- сохранить на серверextractEnvSettings(envSettings)- извлечь настройки окруженияresetToDefaults()- сброс к дефолтным
4.4. services/query.service.js 🔲
Строки из app.js: 861-1063 Функции:
buildRequestBody()- построить тело запросаsendQuery(env, apiMode, body)- отправить запросextractQuestions()- извлечь вопросы из textarealoadRequestFromFile()- загрузить запрос из файлаloadResponseFromFile()- загрузить ответ из файла
🔲 Этап 5: UI Components (ОЖИДАЕТ)
Дата: - Статус: 🔲 Ожидает
5.1. ui/auth.ui.js 🔲
Строки из app.js: 77-132
showLoginScreen()- показать экран входаhideLoginScreen()- скрыть экран входаsetupListeners()- подключить обработчикиhandleLoginSubmit()- обработка входа
5.2. ui/loading.ui.js 🔲
Строки из app.js: 1137-1145
show(message)- показать загрузкуhide()- скрыть загрузку
5.3. ui/settings.ui.js 🔲
Строки из app.js: 362-813
open()- открыть диалогclose()- закрыть диалогpopulate()- заполнить поляread()- прочитать поляtoggleBackendSettings(show)- показать/скрыть backend настройкиsave()- сохранить настройкиreset()- сбросить настройкиexport()- экспорт настроекimport()- импорт настроекsetupListeners()- подключить обработчики
5.4. ui/query-builder.ui.js 🔲
Строки из app.js: 643-883, 884-950
show()- показать построитель запросовswitchMode(mode)- переключить режим (questions/raw-json)validateJSON()- валидация JSONhandleSendQuery()- обработка отправкиsetupListeners()- подключить обработчики
5.5. ui/questions-list.ui.js 🔲
Строки из app.js: 1179-1273
render()- рендер списка вопросовselectAnswer(index)- выбрать ответupdateCount()- обновить счётчикhasAnnotations(docsSection)- проверить наличие аннотацийsetupListeners()- подключить обработчики
5.6. ui/answer-viewer.ui.js 🔲
Строки из app.js: 1279-1443
render(index)- рендер ответаrenderBody(elementId, text)- рендер тела ответаrenderDocuments(containerId, docs, ...)- рендер документовtoggleExpansion(id)- раскрыть/свернутьswitchTab(tabButton, tabId)- переключить табsetupListeners()- подключить обработчики
5.7. ui/annotations.ui.js 🔲
Строки из app.js: 1448-1615
initForAnswer(index)- инициализация аннотацийloadForAnswer(index)- загрузить аннотацииloadSection(section, data)- загрузить секциюloadDocuments(section, subsection, docs)- загрузить документыsetupListeners()- подключить обработчикиsaveDraft()- сохранить черновик
🔲 Этап 6: Main Entry Point (ОЖИДАЕТ)
Дата: - Статус: 🔲 Ожидает
6.1. js/main.js 🔲
Что нужно:
- Импортировать все модули
- Функция
initApp()- инициализация приложения - Функция
setupEnvironmentTabs()- настройка табов - Функция
switchEnvironment(env)- переключение окружения - Функция
updateUI()- обновление UI - DOMContentLoaded listener - точка входа
🔲 Этап 7: Тестирование (ОЖИДАЕТ)
Дата: - Статус: 🔲 Ожидает
7.1. Ручное тестирование 🔲
- Авторизация работает
- Загрузка/сохранение настроек
- Отправка запросов (bench mode)
- Отправка запросов (backend mode)
- Отображение ответов
- Аннотации сохраняются
- Экспорт/импорт работает
- Переключение окружений
7.2. Обновление index.html 🔲
- Закомментировать старые скрипты:
<!-- <script src="settings.js"></script> --> <!-- <script src="api-client.js"></script> --> <!-- <script src="app.js"></script> --> - Подключить новый entry point:
<script type="module" src="js/main.js"></script>
7.3. Очистка 🔲
- Удалить старый
app.js(или переименовать вapp.js.old) - Удалить
settings.js(или переименовать) - Переместить
api-client.js(если еще не перемещён) - Проверить что всё работает
📈 Статистика
Создано файлов: 5/17
| Категория | Создано | Всего | Прогресс |
|---|---|---|---|
| Config | 1 | 1 | 100% ✅ |
| Utils | 4 | 4 | 100% ✅ |
| State | 0 | 1 | 0% 🔲 |
| Data | 0 | 2 | 0% 🔲 |
| Services | 0 | 4 | 0% 🔲 |
| UI | 0 | 7 | 0% 🔲 |
| Main | 0 | 1 | 0% 🔲 |
Перенесено функций: ~36/~150
- ✅ Format utils: 11 функций
- ✅ File utils: 6 функций
- ✅ Validation utils: 4 функций
- ✅ DOM utils: 15 функций
- 🔲 Остальное: ~114 функций
🎯 Следующий шаг
Этап 3: State Management
Создать:
state/appState.js- глобальное состояниеdata/storage.js- обёртка localStoragedata/defaults.js- дефолтные настройки
📝 Заметки
- app.js (1671 строка) остаётся рабочим до конца рефакторинга
- Все новые модули используют ES6 синтаксис
- Экспорты: named exports для utils, default export для сервисов/UI
- Модули полностью автономны и тестируемы
Последнее обновление: 2025-12-25 (Этап 2 завершён)