fix(shorts): embed PeerTube sur l'instance d'origine + FAB glissable + layout bureau
CI / build-and-test (push) Canceled after 0s
CI / build-and-test (push) Canceled after 0s
- PeerTube : l'adaptateur pt.ts reconstruisait l'item SANS `url` et le pont catalogue ne conservait l'URL que pour Odysee → /shorts reconstruisait l'embed sur l'instance ACTIVE → « Sorry this video does not exist » sur toute vidéo fédérée. `url` est désormais miroitée dans VideoItem (contrat v2), propagée par PtAdapter et gardée par catalogShortToVideo : peerTubeHostOf() dérive enfin le host d'origine. Vérifié de bout en bout : embed tube.blueben.net → 200 + vrai titre, cas de test dédié dans shorts-catalog.spec. - FAB du menu : déplaçable au pointeur (seuil 6 px, position en % du cadre, persistée en localStorage). Le clic qui suit un glissement n'ouvre pas le menu, et le panneau s'ouvre TOUJOURS vers l'intérieur du cadre (classes pm-opens-left / pm-opens-right / pm-opens-up posées par applyAnchor) : sinon overflow:hidden le rognait dès qu'on déplaçait le bouton. - Bureau : --shorts-chrome 9rem → 4rem (la vidéo passe de 691 à 771 px de haut en 1280x900, 389 → 434 de large) et menu compact au-delà de 768 px (FAB 36 → 30 px, panneau 233 → 202 px). Mobile inchangé (36 / 636 px). Tests : test:shorts-catalog (nouveau cas PeerTube), test:kind, test:section, test:search verts ; build ng OK ; sondage Playwright 19/19 sur l'instance locale (layout, glissement + restauration, embed PeerTube 200 sans erreur).
This commit is contained in:
@@ -502,8 +502,11 @@ body {
|
||||
min-height: 0;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
/* Bureau : pas de barre du bas, les flèches sont sur les côtés — on ne
|
||||
réserve que la scène (py-3) + la charge « Chargement… ». La vidéo gagne
|
||||
~80 px de hauteur (et autant de largeur, 9:16 oblige). */
|
||||
.shorts-frame {
|
||||
--shorts-chrome: 9rem;
|
||||
--shorts-chrome: 4rem;
|
||||
}
|
||||
}
|
||||
@media (max-width: 767px) {
|
||||
@@ -581,6 +584,8 @@ body {
|
||||
relief (ombre + highlight interne) et agrandissement au survol. */
|
||||
.pm-fab {
|
||||
display: inline-flex;
|
||||
touch-action: none; /* glisser le FAB ne défile pas la page */
|
||||
cursor: grab;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 2.25rem; /* 36px */
|
||||
@@ -601,7 +606,7 @@ body {
|
||||
border-color: rgba(255, 255, 255, .32);
|
||||
transform: scale(1.06);
|
||||
}
|
||||
.pm-fab:active { transform: scale(.94); }
|
||||
.pm-fab:active { transform: scale(.94); cursor: grabbing; }
|
||||
.pm-fab-open {
|
||||
background: linear-gradient(180deg, rgba(51, 65, 85, .95), rgba(2, 6, 23, .95));
|
||||
border-color: rgba(255, 255, 255, .32);
|
||||
@@ -730,6 +735,25 @@ body {
|
||||
.shorts-frame app-player-menu { left: auto; right: 0.5rem; }
|
||||
.shorts-frame app-player-menu .pm-panel { left: auto; right: 0; transform-origin: top right; }
|
||||
|
||||
/* FAB glissé ailleurs que son coin d'origine : le panneau s'ouvre TOUJOURS
|
||||
vers l'intérieur du conteneur (sinon `overflow: hidden` le rogne) et vers
|
||||
le haut quand le FAB est en bas. Les classes sont posées par
|
||||
PlayerMenuComponent.applyAnchor(). */
|
||||
app-player-menu.pm-opens-left .pm-panel { left: auto; right: 0; transform-origin: top right; }
|
||||
app-player-menu.pm-opens-right .pm-panel { left: 0; right: auto; transform-origin: top left; }
|
||||
app-player-menu.pm-opens-up .pm-panel { top: auto; bottom: calc(100% + 0.5rem); transform-origin: bottom left; }
|
||||
app-player-menu.pm-opens-left.pm-opens-up .pm-panel { transform-origin: bottom right; }
|
||||
|
||||
/* Bureau : menu plus compact pour laisser la place à la vidéo (shorts). */
|
||||
@media (min-width: 768px) {
|
||||
.shorts-frame app-player-menu .pm-fab { width: 1.875rem; height: 1.875rem; }
|
||||
.shorts-frame app-player-menu .pm-fab svg { width: 0.875rem; height: 0.875rem; }
|
||||
.shorts-frame app-player-menu .pm-panel { width: 13rem; max-height: min(60vh, 380px); }
|
||||
.shorts-frame app-player-menu .pm-item { padding: 0.375rem 0.5rem; gap: 0.5rem; font-size: 0.75rem; }
|
||||
.shorts-frame app-player-menu .pm-section-label { padding: 0.375rem 0.5rem 0.125rem; font-size: 0.625rem; }
|
||||
.shorts-frame app-player-menu .pm-panel-header { padding: 0.3125rem 0.3125rem 0.3125rem 0.625rem; }
|
||||
}
|
||||
|
||||
/* --- Drawer / overlay plumbing -------------------------------------------- */
|
||||
/* Applied to <body> while a full-screen drawer or modal owns the viewport.
|
||||
Note: deliberately NOT `touch-action: none` — touch-action is intersected up
|
||||
|
||||
Reference in New Issue
Block a user