Story 4.1: Tasks 3-6 Complete - Director's Board Integration & Settings Menu
- Task 3: Extended FoundryAdapter with user flag access methods
- Added getFlag(userId, scope, key) method
- Added setFlag(userId, scope, key, value) method
- Added getFlagModule(userId, key) convenience method
- Added setFlagModule(userId, key, value) convenience method
- Task 4: Integrated Privacy Settings with Director's Board
- Updated participant-card.hbs to show Reaction Cam badge
- Modified boardUtils.js to pass playerPrivacyManager through context
- Updated DirectorsBoard to accept and pass playerPrivacyManager
- Added CSS styles for Reaction Cam badge (SP accent color)
- Task 5: Registered PlayerPrivacyPanel in module settings
- Added settings menu registration in module.js Hooks.once('ready')
- Available to all users (restricted: false)
- Uses localized labels and hints
- Task 6: Added all localization strings
- Added SCRYING_POOL.PrivacyPanel.* strings for panel UI
- Added SCRYING_POOL.Settings.* strings for settings menu
- Updated story file with task completion status
Generated by Mistral Vibe.
Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
@@ -8,6 +8,15 @@
|
||||
{{!-- Avatar (48px rounded) --}}
|
||||
<div class="participant-card__avatar">
|
||||
<img src="{{avatarSrc}}" alt="Avatar of {{name}}" />
|
||||
{{!-- Reaction Cam badge - Story 4.1 --}}
|
||||
{{#if isReactionCamEnabled}}
|
||||
<span class="participant-card__badge participant-card__badge--reaction-cam"
|
||||
role="status"
|
||||
aria-label="Reaction Cam: Enabled"
|
||||
title="Reaction Cam: Enabled">
|
||||
<i class="fas fa-video" aria-hidden="true"></i>
|
||||
</span>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Name (12px, 2-line truncate) --}}
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
{{!-- Player Privacy Panel --}}
|
||||
<div class="player-privacy-panel__container">
|
||||
<header class="player-privacy-panel__header">
|
||||
<h2 class="player-privacy-panel__title">{{title}}</h2>
|
||||
</header>
|
||||
|
||||
<div class="player-privacy-panel__body">
|
||||
{{#if isReadOnly}}
|
||||
<div class="player-privacy-panel__notice player-privacy-panel__notice--readonly">
|
||||
{{readOnlyNotice}}
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
<section class="player-privacy-panel__section">
|
||||
<h3 class="player-privacy-panel__section-header">{{sectionHeader}}</h3>
|
||||
|
||||
<p class="player-privacy-panel__section-description">
|
||||
{{SCRYING_POOL.PrivacyPanel.sectionDescription}}
|
||||
</p>
|
||||
|
||||
<div class="player-privacy-panel__effects-list">
|
||||
{{#each automationEffects}}
|
||||
<div class="player-privacy-panel__effect">
|
||||
<div class="player-privacy-panel__effect-header">
|
||||
<h4 class="player-privacy-panel__effect-label">{{label}}</h4>
|
||||
<div class="player-privacy-panel__toggle">
|
||||
<label class="player-privacy-panel__toggle-label">
|
||||
<input
|
||||
type="checkbox"
|
||||
{{#if enabled}}checked{{/if}}
|
||||
{{#if ../isReadOnly}}disabled{{/if}}
|
||||
data-setting="{{settingKey}}"
|
||||
class="player-privacy-panel__toggle-input"
|
||||
>
|
||||
<span class="player-privacy-panel__toggle-text">
|
||||
{{#if enabled}}
|
||||
{{../toggleOnLabel}}
|
||||
{{else}}
|
||||
{{../toggleOffLabel}}
|
||||
{{/if}}
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<p class="player-privacy-panel__effect-description">{{description}}</p>
|
||||
</div>
|
||||
{{/each}}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user