Files
scrying-pool/templates/roster-strip.hbs
T
uberwald c4a375f4e3 Story 4.2: Implement full AV replacement with WebRTC stream access
- Update FoundryAdapter to properly detect and expose WebRTC stream access
- Modify ScryingPoolStrip to create video elements with WebRTC streams
- Add video container to roster-strip.hbs template with conditional rendering
- Add CSS to hide Foundry's AV dock (#av and .camera-view)
- Add CSS styling for video containers and elements
- Fix unused variable in FoundryAdapter.buildWebRTCSurface
- Add comprehensive test script for stream access implementation

Architecture: Full replacement mode where module hides Foundry's AV dock
and creates its own video elements using game.webrtc.client.getMediaStreamForUser()

Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
2026-05-24 09:12:06 +02:00

74 lines
2.9 KiB
Handlebars
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{{!-- ScryingPoolStrip — floating GM control strip --}}
<div class="scrying-pool scrying-pool-strip{{#if isExpanded}} is-expanded{{/if}}"
role="complementary"
aria-label="Scrying Pool">
{{!-- First-open tip (right-click affordance) --}}
{{#if showFirstOpenTip}}
<p class="sp-strip__first-tip">
<i class="fas fa-info-circle" aria-hidden="true"></i>
Right-click a participant to hide them from the table.
</p>
{{/if}}
{{!-- Expand/collapse toggle --}}
<button class="sp-strip__toggle" data-action="toggle-expanded"
aria-label="{{#if isExpanded}}Collapse Scrying Pool{{else}}Expand Scrying Pool{{/if}}"
aria-expanded="{{isExpanded}}">
<i class="fas fa-chevron-{{#if isExpanded}}left{{else}}right{{/if}}"></i>
</button>
{{!-- Director's Board CTA button (fallback when sidebar API unavailable) --}}
<button class="sp-strip__directors-board-cta" data-action="open-directors-board"
aria-label="Open Director's Board">
<i class="fas fa-border-all" aria-hidden="true"></i>
<span>Director's Board</span>
</button>
{{!-- Participant list --}}
<ul class="sp-strip__participants" role="list">
{{#if isEmpty}}
{{!-- EmptyStatePanel --}}
<li class="sp-strip__empty-state" role="listitem">
<i class="fas fa-eye sp-empty__icon" aria-hidden="true"></i>
<span class="sp-empty__text">No participants yet</span>
</li>
{{else}}
{{#each participants}}
<li class="sp-strip__participant-item" role="listitem">
{{!-- ParticipantAvatar (44×44px container) --}}
<button class="sp-participant-avatar sp-state-{{state}}{{#if hasPendingOp}} sp-state-pending{{/if}}"
data-user-id="{{userId}}"
data-action="open-popover"
role="button"
aria-label="{{name}}{{stateLabel}}"
aria-pressed="false">
{{!-- Video container for stream-access mode (full AV replacement) --}}
{{#if hasStreamAccess}}
<div class="sp-participant-video" aria-hidden="true"></div>
{{/if}}
{{!-- Avatar image (32px rounded) - shown as fallback when no video --}}
<img class="sp-avatar__img" src="{{avatarSrc}}" alt="" aria-hidden="true" />
{{!-- Corner badge (12px bottom-right) --}}
<span class="sp-avatar__corner-badge" aria-hidden="true"></span>
{{!-- Expanded view: name + state rows --}}
{{#if ../isExpanded}}
<span class="sp-avatar__name">{{name}}</span>
<span class="sp-avatar__state-label">{{stateLabel}}</span>
{{/if}}
</button>
</li>
{{/each}}
{{/if}}
</ul>
{{!-- StripOverlayLayer — owns ActionPopover + ConfirmationBar --}}
<div class="sp-strip__overlay-layer"
aria-hidden="true"
style="position: absolute; inset: 0; pointer-events: none; overflow: visible;"></div>
</div>