Files

3.0 KiB
Raw Permalink Blame History

Tasks

1. Детект и 360-вьюер

  • 1.1 Добавить lib/pano.ts с isPanoTag(photo) (тег pano360, без учёта регистра и пробелов). Проверка: npm run check проходит; функция истинна для тега pano360/PANO360 и ложна без него.
  • 1.2 Реализовать lib/components/PanoViewer.svelte: WebGL equirect (полноэкранный quad, луч из uv+fov+yaw/pitch, выборка equirect), текстура из original_url с даунскейлом до min(4096, MAX_TEXTURE_SIZE) и фолбэком preview_url, ResizeObserver+DPR, reset(), onFallback(). Проверка: на фото с тегом рисуется сцена; драг/колесо/сброс меняют вид; при отсутствии WebGL вызывается фолбэк.
  • 1.3 Освобождать ресурсы (текстура/программа/буфер, контекст) при размонтировании и смене src. Проверка: многократное переключение фото не копит контексты (по gl.getError()/поведению без падений).

2. Интеграция в Viewer

  • 2.1 В Viewer.svelte вычислять pano = isPanoTag(current) || isPanoTag(fresh) и рендерить PanoViewer (с key={current.id}) вместо плоского <img>; при фолбэке — <img>. Проверка: tagged фото → канвас, нетэгнутое → <img>.
  • 2.2 Развести интеракции: в 360 отключить плоский зум/панорамирование и скролл-жесты; Space → panoRef.reset(); drag/свайп — осмотр; колесо — FOV. Сохранить стрелки, ленту, f/fullscreen, контекстное меню. Проверка: смена фото стрелками/лентой в 360 работает; плоский режим не изменился.
  • 2.3 Добавить индикатор «360» в топбаре при активном режиме. Проверка: на панораме индикатор виден, на обычном фото — нет.

3. Сетка

  • 3.1 Добавить бейдж «360» на плитку PhotoGrid для фото с тегом pano360. Проверка: на плитке панорамного фото виден бейдж, на остальных — нет.

4. Проверка

  • 4.1 cd frontend && npm run check без ошибок и предупреждений; npm run build проходит.
  • 4.2 Расширить CDP‑QA панo-сценариями: тег pano360 через API → канвас и индикатор «360»; без тега → <img>; drag меняет вид (data-yaw); смена фото сохраняет/снимает режим по тегу. Проверка: все проверки PASS.