@@ -1,58 +1,110 @@
|
||||
{{!-- Director's Board — GM camera-management overview window --}}
|
||||
<div class="directors-board__inner">
|
||||
|
||||
{{!-- Drag grip --}}
|
||||
<div class="directors-board__grip" data-action="drag-grip" aria-hidden="true">
|
||||
<i class="fas fa-grip-lines"></i>
|
||||
</div>
|
||||
|
||||
<button type="button"
|
||||
class="directors-board__close-btn"
|
||||
data-action="close"
|
||||
aria-label="{{localize "scrying-pool.directorsBoard.close"}}"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.close"}}">×</button>
|
||||
|
||||
<section class="scrying-pool directors-board__content"
|
||||
role="list"
|
||||
aria-label="{{localize "video-view-manager.directorsBoard.title"}}">
|
||||
aria-label="{{localize "scrying-pool.directorsBoard.title"}}">
|
||||
|
||||
{{#unless isEmpty}}
|
||||
{{#each participants}}
|
||||
{{> "modules/video-view-manager/templates/participant-card.hbs"}}
|
||||
{{> "modules/scrying-pool/templates/participant-card.hbs"}}
|
||||
{{/each}}
|
||||
{{else}}
|
||||
<p class="directors-board__empty" role="listitem">
|
||||
{{localize "video-view-manager.directorsBoard.empty"}}
|
||||
{{localize "scrying-pool.directorsBoard.empty"}}
|
||||
</p>
|
||||
{{/unless}}
|
||||
|
||||
</section>
|
||||
|
||||
<div class="directors-board__bulk-bar">
|
||||
<button type="button" class="directors-board__bulk-btn" data-action="show-all">
|
||||
{{localize "video-view-manager.directorsBoard.bulk.showAll"}}
|
||||
<button type="button" class="directors-board__bulk-btn" data-action="show-all"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.bulk.showAll"}}">
|
||||
<i class="fas fa-eye" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.bulk.showAll"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__bulk-btn" data-action="hide-all">
|
||||
{{localize "video-view-manager.directorsBoard.bulk.hideAll"}}
|
||||
<button type="button" class="directors-board__bulk-btn" data-action="hide-all"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.bulk.hideAll"}}">
|
||||
<i class="fas fa-eye-slash" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.bulk.hideAll"}}
|
||||
</button>
|
||||
{{#if hasUndo}}
|
||||
<button type="button" class="directors-board__bulk-btn directors-board__bulk-btn--undo" data-action="undo">
|
||||
{{localize "video-view-manager.directorsBoard.bulk.undo"}}
|
||||
<button type="button" class="directors-board__bulk-btn directors-board__bulk-btn--undo" data-action="undo"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.bulk.undo"}}">
|
||||
<i class="fas fa-undo" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.bulk.undo"}}
|
||||
</button>
|
||||
{{/if}}
|
||||
{{#if hasRestore}}
|
||||
<button type="button" class="directors-board__bulk-btn directors-board__bulk-btn--restore" data-action="restore-spotlight">
|
||||
{{localize "video-view-manager.directorsBoard.bulk.restore"}}
|
||||
<button type="button" class="directors-board__bulk-btn directors-board__bulk-btn--restore" data-action="restore-spotlight"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.bulk.restore"}}">
|
||||
<i class="fas fa-star" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.bulk.restore"}}
|
||||
</button>
|
||||
{{/if}}
|
||||
<button type="button" class="directors-board__help-btn" data-action="open-shortcut-panel" aria-label="{{localize "video-view-manager.directorsBoard.shortcuts.openPanel"}}">?</button>
|
||||
<button type="button" class="directors-board__help-btn" data-action="open-shortcut-panel"
|
||||
aria-label="{{localize "scrying-pool.directorsBoard.shortcuts.openPanel"}}"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.shortcuts.openPanel"}}">?</button>
|
||||
</div>
|
||||
|
||||
<footer class="directors-board__footer">
|
||||
<button type="button" class="directors-board__footer-btn" data-action="save-preset">
|
||||
{{localize "video-view-manager.directorsBoard.footer.savePreset"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn" data-action="load-preset" {{#unless hasPresets}}disabled{{/unless}}>
|
||||
{{localize "video-view-manager.directorsBoard.footer.loadPreset"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn" data-action="export-presets">
|
||||
{{localize "video-view-manager.directorsBoard.footer.exportPresets"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn" data-action="import-presets">
|
||||
{{localize "video-view-manager.directorsBoard.footer.importPresets"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn" data-action="toggle-preset-panel">
|
||||
{{localize "video-view-manager.directorsBoard.footer.autoApplySettings"}}
|
||||
</button>
|
||||
<div class="directors-board__footer-group directors-board__footer-group--presets">
|
||||
<button type="button" class="directors-board__footer-btn" data-action="save-preset"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.savePreset"}}">
|
||||
<i class="fas fa-save" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.savePreset"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn" data-action="load-preset"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.loadPreset"}}"
|
||||
{{#unless hasPresets}}disabled{{/unless}}>
|
||||
<i class="fas fa-folder-open" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.loadPreset"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn directors-board__footer-btn--secondary" data-action="export-presets"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.exportPresets"}}">
|
||||
<i class="fas fa-file-export" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.exportPresets"}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn directors-board__footer-btn--secondary" data-action="import-presets"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.importPresets"}}">
|
||||
<i class="fas fa-file-import" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.importPresets"}}
|
||||
</button>
|
||||
</div>
|
||||
<div class="directors-board__footer-group directors-board__footer-group--controls">
|
||||
<button type="button" class="directors-board__footer-btn directors-board__footer-btn--auto-apply" data-action="toggle-preset-panel"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.autoApplySettings"}}">
|
||||
<i class="fas fa-magic" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.autoApplySettings"}}
|
||||
</button>
|
||||
<div class="directors-board__footer-sep" role="separator" aria-hidden="true"></div>
|
||||
<button type="button" class="directors-board__footer-btn directors-board__footer-btn--av{{#if avModeEnabled}} directors-board__footer-btn--av-active{{/if}}" data-action="toggle-av-mode"
|
||||
data-tooltip="{{#if avModeEnabled}}{{localize "scrying-pool.directorsBoard.footer.avModeDisable"}}{{else}}{{localize "scrying-pool.directorsBoard.footer.avModeEnable"}}{{/if}}">
|
||||
{{#if avModeEnabled}}
|
||||
<i class="fas fa-video-slash" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.avModeDisable"}}
|
||||
{{else}}
|
||||
<i class="fas fa-video" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.avModeEnable"}}
|
||||
{{/if}}
|
||||
</button>
|
||||
<button type="button" class="directors-board__footer-btn directors-board__footer-btn--av-config" data-action="open-av-config"
|
||||
data-tooltip="{{localize "scrying-pool.directorsBoard.footer.avConfigTitle"}}">
|
||||
<i class="fas fa-sliders-h" aria-hidden="true"></i>
|
||||
{{localize "scrying-pool.directorsBoard.footer.avConfig"}}
|
||||
</button>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
{{!-- Scene Preset Panel - rendered via JavaScript, not Handlebars --}}
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
data-user-id="{{userId}}"
|
||||
role="button"
|
||||
aria-label="{{toggleAriaLabel}}"
|
||||
data-tooltip="{{toggleAriaLabel}}"
|
||||
tabindex="-1">
|
||||
<i class="fas {{#if isHidden}}fa-eye{{else}}fa-eye-slash{{/if}}" aria-hidden="true"></i>
|
||||
</button>
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
{{!-- 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">
|
||||
@@ -15,7 +11,7 @@
|
||||
<h3 class="player-privacy-panel__section-header">{{sectionHeader}}</h3>
|
||||
|
||||
<p class="player-privacy-panel__section-description">
|
||||
{{SCRYING_POOL.PrivacyPanel.sectionDescription}}
|
||||
{{localize "SCRYING_POOL.PrivacyPanel.sectionDescription"}}
|
||||
</p>
|
||||
|
||||
<div class="player-privacy-panel__effects-list">
|
||||
@@ -24,18 +20,22 @@
|
||||
<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">
|
||||
<label class="player-privacy-panel__toggle-label"
|
||||
data-tooltip="{{description}}">
|
||||
<input
|
||||
type="checkbox"
|
||||
{{#if enabled}}checked{{/if}}
|
||||
{{#if ../isReadOnly}}disabled{{/if}}
|
||||
data-setting="{{settingKey}}"
|
||||
class="player-privacy-panel__toggle-input"
|
||||
aria-label="{{label}}"
|
||||
>
|
||||
<span class="player-privacy-panel__toggle-text">
|
||||
{{#if enabled}}
|
||||
<i class="fas fa-check" aria-hidden="true"></i>
|
||||
{{../toggleOnLabel}}
|
||||
{{else}}
|
||||
<i class="fas fa-times" aria-hidden="true"></i>
|
||||
{{../toggleOffLabel}}
|
||||
{{/if}}
|
||||
</span>
|
||||
@@ -64,7 +64,10 @@
|
||||
|
||||
{{#unless isReadOnly}}
|
||||
<div class="player-privacy-panel__portrait-actions">
|
||||
<button type="button" class="player-privacy-panel__portrait-choose sp-btn sp-btn--primary">
|
||||
<button type="button"
|
||||
class="player-privacy-panel__portrait-choose sp-btn sp-btn--primary"
|
||||
data-tooltip="{{chooseImageLabel}}">
|
||||
<i class="fas fa-image" aria-hidden="true"></i>
|
||||
{{chooseImageLabel}}
|
||||
</button>
|
||||
<input
|
||||
@@ -74,7 +77,10 @@
|
||||
style="display: none;"
|
||||
>
|
||||
{{#if hasCustomPortrait}}
|
||||
<button type="button" class="player-privacy-panel__portrait-remove sp-btn sp-btn--secondary">
|
||||
<button type="button"
|
||||
class="player-privacy-panel__portrait-remove sp-btn sp-btn--secondary"
|
||||
data-tooltip="{{removeImageLabel}}">
|
||||
<i class="fas fa-trash-alt" aria-hidden="true"></i>
|
||||
{{removeImageLabel}}
|
||||
</button>
|
||||
{{/if}}
|
||||
|
||||
+26
-24
@@ -1,29 +1,31 @@
|
||||
<div class="sp-dialog-content">
|
||||
<p class="sp-export-description">
|
||||
{{localize "video-view-manager.presetExport.description"}}
|
||||
</p>
|
||||
<div class="sp-preset-export-dialog">
|
||||
<div class="sp-dialog-content">
|
||||
<p class="sp-export-description">
|
||||
{{localize "scrying-pool.presetExport.description"}}
|
||||
</p>
|
||||
|
||||
<div class="sp-export-info">
|
||||
<span class="sp-info-label">{{localize "video-view-manager.presetExport.scene"}}:</span>
|
||||
<span class="sp-info-value">{{sceneName}}</span>
|
||||
<div class="sp-export-info">
|
||||
<span class="sp-info-label">{{localize "scrying-pool.presetExport.scene"}}:</span>
|
||||
<span class="sp-info-value">{{sceneName}}</span>
|
||||
</div>
|
||||
|
||||
<div class="sp-export-info">
|
||||
<span class="sp-info-label">{{localize "scrying-pool.presetExport.presetCount"}}:</span>
|
||||
<span class="sp-info-value">{{presetCount}}</span>
|
||||
</div>
|
||||
|
||||
<div class="sp-export-info">
|
||||
<span class="sp-info-label">{{localize "scrying-pool.presetExport.filename"}}:</span>
|
||||
<span class="sp-info-value sp-filename">{{filename}}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sp-export-info">
|
||||
<span class="sp-info-label">{{localize "video-view-manager.presetExport.presetCount"}}:</span>
|
||||
<span class="sp-info-value">{{presetCount}}</span>
|
||||
</div>
|
||||
|
||||
<div class="sp-export-info">
|
||||
<span class="sp-info-label">{{localize "video-view-manager.presetExport.filename"}}:</span>
|
||||
<span class="sp-info-value sp-filename">{{filename}}</span>
|
||||
<div class="sp-dialog-buttons">
|
||||
<button type="button" class="sp-btn sp-btn-primary sp-export-btn">
|
||||
<i class="fas fa-download"></i> {{localize "scrying-pool.presetExport.export"}}
|
||||
</button>
|
||||
<button type="button" class="sp-btn sp-btn-secondary" data-action="close">
|
||||
{{localize "scrying-pool.presetExport.cancel"}}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="sp-dialog-buttons">
|
||||
<button type="button" class="sp-btn sp-btn-primary sp-export-btn">
|
||||
<i class="fas fa-download"></i> {{localize "video-view-manager.presetExport.export"}}
|
||||
</button>
|
||||
<button type="button" class="sp-btn sp-btn-secondary" data-action="close">
|
||||
{{localize "video-view-manager.presetExport.cancel"}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
+84
-82
@@ -1,90 +1,92 @@
|
||||
<div class="sp-dialog-content">
|
||||
<p class="sp-import-description">
|
||||
{{localize "video-view-manager.presetImport.description"}}
|
||||
</p>
|
||||
<div class="sp-preset-import-dialog">
|
||||
<div class="sp-dialog-content">
|
||||
<p class="sp-import-description">
|
||||
{{localize "scrying-pool.presetImport.description"}}
|
||||
</p>
|
||||
|
||||
{{#if hasExistingPresets}}
|
||||
<div class="sp-warning-box">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span>{{localize "video-view-manager.presetImport.existingPresetsWarning" existingPresetCount=existingPresetCount}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- File Selection --}}
|
||||
<div class="sp-form-group">
|
||||
<label class="sp-form-label">{{localize "video-view-manager.presetImport.selectFile"}}</label>
|
||||
<div class="sp-file-upload">
|
||||
<input type="file" class="sp-file-input" accept=".json" />
|
||||
<label class="sp-file-label">
|
||||
<i class="fas fa-upload"></i>
|
||||
<span class="sp-file-text">{{localize "video-view-manager.presetImport.chooseFile"}}</span>
|
||||
</label>
|
||||
{{#if hasExistingPresets}}
|
||||
<div class="sp-warning-box">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span>{{localize "scrying-pool.presetImport.existingPresetsWarning" existingPresetCount=existingPresetCount}}</span>
|
||||
</div>
|
||||
{{#if selectedFileName}}
|
||||
<div class="sp-file-selected">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<span>{{selectedFileName}}</span>
|
||||
{{/if}}
|
||||
|
||||
{{!-- File Selection --}}
|
||||
<div class="sp-form-group">
|
||||
<label class="sp-form-label">{{localize "scrying-pool.presetImport.selectFile"}}</label>
|
||||
<div class="sp-file-upload">
|
||||
<input type="file" class="sp-file-input" accept=".json" />
|
||||
<label class="sp-file-label">
|
||||
<i class="fas fa-upload"></i>
|
||||
<span class="sp-file-text">{{localize "scrying-pool.presetImport.chooseFile"}}</span>
|
||||
</label>
|
||||
</div>
|
||||
{{#if selectedFileName}}
|
||||
<div class="sp-file-selected">
|
||||
<i class="fas fa-check-circle"></i>
|
||||
<span>{{selectedFileName}}</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Mode Selection --}}
|
||||
<div class="sp-form-group">
|
||||
<label class="sp-form-label">{{localize "scrying-pool.presetImport.importMode"}}</label>
|
||||
<div class="sp-radio-group">
|
||||
<label class="sp-radio-label">
|
||||
<input type="radio" name="import-mode" class="sp-mode-merge" value="merge" {{checked (eq mode "merge")}} />
|
||||
<span class="sp-radio-text">{{mergeLabel}}</span>
|
||||
<span class="sp-radio-hint">{{localize "scrying-pool.presetImport.importModeMergeHint"}}</span>
|
||||
</label>
|
||||
<label class="sp-radio-label">
|
||||
<input type="radio" name="import-mode" class="sp-mode-replace" value="replace" {{checked (eq mode "replace")}} />
|
||||
<span class="sp-radio-text">{{replaceLabel}}</span>
|
||||
<span class="sp-radio-hint">{{localize "scrying-pool.presetImport.importModeReplaceHint"}}</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{!-- Preview Section --}}
|
||||
{{#if previewItems.length}}
|
||||
<div class="sp-preview-section">
|
||||
<h3 class="sp-preview-title">{{localize "scrying-pool.presetImport.previewTitle"}}</h3>
|
||||
<ul class="sp-preview-list">
|
||||
{{#each previewItems as |item|}}
|
||||
<li class="sp-preview-item {{unless item.valid 'sp-preview-item--invalid'}}">
|
||||
<i class="fas {{if item.valid 'fa-check-circle sp-valid' 'fa-exclamation-circle sp-invalid'}}"></i>
|
||||
<span class="sp-preview-name">{{item.name}}</span>
|
||||
{{#if item.error}}
|
||||
<span class="sp-preview-error" title="{{item.error}}">{{item.error}}</span>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Confirmation Section (shown for replace mode) --}}
|
||||
{{#if requiresConfirmation}}
|
||||
<div class="sp-confirmation-section">
|
||||
<div class="sp-confirmation-warning">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span>{{localize "scrying-pool.presetImport.replaceConfirmation" existingPresetCount=existingPresetCount}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
{{!-- Mode Selection --}}
|
||||
<div class="sp-form-group">
|
||||
<label class="sp-form-label">{{localize "video-view-manager.presetImport.importMode"}}</label>
|
||||
<div class="sp-radio-group">
|
||||
<label class="sp-radio-label">
|
||||
<input type="radio" name="import-mode" class="sp-mode-merge" value="merge" {{checked (eq mode "merge")}} />
|
||||
<span class="sp-radio-text">{{mergeLabel}}</span>
|
||||
<span class="sp-radio-hint">{{localize "video-view-manager.presetImport.importModeMergeHint"}}</span>
|
||||
</label>
|
||||
<label class="sp-radio-label">
|
||||
<input type="radio" name="import-mode" class="sp-mode-replace" value="replace" {{checked (eq mode "replace")}} />
|
||||
<span class="sp-radio-text">{{replaceLabel}}</span>
|
||||
<span class="sp-radio-hint">{{localize "video-view-manager.presetImport.importModeReplaceHint"}}</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="sp-dialog-buttons">
|
||||
{{#unless requiresConfirmation}}
|
||||
<button type="button" class="sp-btn sp-btn-primary sp-import-btn" {{disabled (not previewItems.length) }}>
|
||||
<i class="fas fa-file-import"></i> {{localize "scrying-pool.presetImport.import"}}
|
||||
</button>
|
||||
{{else}}
|
||||
<button type="button" class="sp-btn sp-btn-danger sp-confirm-btn">
|
||||
<i class="fas fa-check"></i> {{localize "scrying-pool.presetImport.confirmReplace"}}
|
||||
</button>
|
||||
{{/unless}}
|
||||
<button type="button" class="sp-btn sp-btn-secondary sp-cancel-btn">
|
||||
{{localize "scrying-pool.presetImport.cancel"}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{!-- Preview Section --}}
|
||||
{{#if previewItems.length}}
|
||||
<div class="sp-preview-section">
|
||||
<h3 class="sp-preview-title">{{localize "video-view-manager.presetImport.previewTitle"}}</h3>
|
||||
<ul class="sp-preview-list">
|
||||
{{#each previewItems as |item|}}
|
||||
<li class="sp-preview-item {{unless item.valid 'sp-preview-item--invalid'}}">
|
||||
<i class="fas {{if item.valid 'fa-check-circle sp-valid' 'fa-exclamation-circle sp-invalid'}}"></i>
|
||||
<span class="sp-preview-name">{{item.name}}</span>
|
||||
{{#if item.error}}
|
||||
<span class="sp-preview-error" title="{{item.error}}">{{item.error}}</span>
|
||||
{{/if}}
|
||||
</li>
|
||||
{{/each}}
|
||||
</ul>
|
||||
</div>
|
||||
{{/if}}
|
||||
|
||||
{{!-- Confirmation Section (shown for replace mode) --}}
|
||||
{{#if requiresConfirmation}}
|
||||
<div class="sp-confirmation-section">
|
||||
<div class="sp-confirmation-warning">
|
||||
<i class="fas fa-exclamation-triangle"></i>
|
||||
<span>{{localize "video-view-manager.presetImport.replaceConfirmation" existingPresetCount=existingPresetCount}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
<div class="sp-dialog-buttons">
|
||||
{{#unless requiresConfirmation}}
|
||||
<button type="button" class="sp-btn sp-btn-primary sp-import-btn" {{disabled (not previewItems.length) }}>
|
||||
<i class="fas fa-file-import"></i> {{localize "video-view-manager.presetImport.import"}}
|
||||
</button>
|
||||
{{else}}
|
||||
<button type="button" class="sp-btn sp-btn-danger sp-confirm-btn">
|
||||
<i class="fas fa-check"></i> {{localize "video-view-manager.presetImport.confirmReplace"}}
|
||||
</button>
|
||||
{{/unless}}
|
||||
<button type="button" class="sp-btn sp-btn-secondary sp-cancel-btn">
|
||||
{{localize "video-view-manager.presetImport.cancel"}}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
{{!-- Load Scene Preset Dialog --}}
|
||||
{{!-- Load Camera Layout Dialog --}}
|
||||
<div class="preset-load-dialog__content">
|
||||
<header class="preset-load-dialog__header">
|
||||
<h2 class="preset-load-dialog__title">{{title}}</h2>
|
||||
</header>
|
||||
|
||||
<div class="preset-load-dialog__body">
|
||||
{{#if hasPresets}}
|
||||
@@ -15,6 +12,7 @@
|
||||
data-action="load"
|
||||
data-preset-name="{{name}}"
|
||||
>
|
||||
<i class="fas fa-layer-group" aria-hidden="true"></i>
|
||||
{{name}}
|
||||
</button>
|
||||
</li>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
{{!-- Save Scene Preset Dialog --}}
|
||||
{{!-- Save Camera Layout Dialog --}}
|
||||
<form class="preset-save-dialog__form">
|
||||
<header class="preset-save-dialog__header">
|
||||
<h2 class="preset-save-dialog__title">{{title}}</h2>
|
||||
</header>
|
||||
|
||||
<div class="preset-save-dialog__header">
|
||||
<i class="fas fa-bookmark preset-save-dialog__header-icon"></i>
|
||||
<p class="preset-save-dialog__description">{{descriptionHint}}</p>
|
||||
</div>
|
||||
|
||||
<div class="preset-save-dialog__body">
|
||||
<div class="preset-save-dialog__field">
|
||||
@@ -25,9 +27,11 @@
|
||||
|
||||
<footer class="preset-save-dialog__footer">
|
||||
<button type="button" class="preset-save-dialog__btn preset-save-dialog__btn--cancel" data-action="cancel">
|
||||
<i class="fas fa-times"></i>
|
||||
{{cancelLabel}}
|
||||
</button>
|
||||
<button type="submit" class="preset-save-dialog__btn preset-save-dialog__btn--save">
|
||||
<i class="fas fa-bookmark"></i>
|
||||
{{saveLabel}}
|
||||
</button>
|
||||
</footer>
|
||||
|
||||
+26
-12
@@ -3,6 +3,16 @@
|
||||
role="complementary"
|
||||
aria-label="Scrying Pool">
|
||||
|
||||
{{!-- Drag grip (top bar, replaces window header drag affordance) --}}
|
||||
<div class="sp-strip__grip" data-action="drag-grip" aria-hidden="true">
|
||||
<i class="fas fa-grip-lines"></i>
|
||||
</div>
|
||||
|
||||
{{!-- Lightweight close button (top-right corner, replaces window header) --}}
|
||||
<button class="sp-strip__close-btn" data-action="close-strip"
|
||||
aria-label="Close Scrying Pool"
|
||||
data-tooltip="Close">×</button>
|
||||
|
||||
{{!-- First-open tip (right-click affordance) --}}
|
||||
{{#if showFirstOpenTip}}
|
||||
<p class="sp-strip__first-tip">
|
||||
@@ -11,19 +21,22 @@
|
||||
</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>
|
||||
{{!-- Toolbar row: toggle + Director's Board side by side --}}
|
||||
<div class="sp-strip__toolbar">
|
||||
<button class="sp-strip__toggle" data-action="toggle-expanded"
|
||||
aria-label="{{#if isExpanded}}Collapse Scrying Pool{{else}}Expand Scrying Pool{{/if}}"
|
||||
aria-expanded="{{isExpanded}}"
|
||||
data-tooltip="{{#if isExpanded}}Collapse{{else}}Expand{{/if}}">
|
||||
<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>
|
||||
<button class="sp-strip__directors-board-cta" data-action="open-directors-board"
|
||||
aria-label="Open Director's Board"
|
||||
data-tooltip="Director's Board">
|
||||
<i class="fas fa-border-all" aria-hidden="true"></i>
|
||||
<span>Director's Board</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{{!-- Participant list --}}
|
||||
<ul class="sp-strip__participants" role="list">
|
||||
@@ -42,6 +55,7 @@
|
||||
data-action="open-popover"
|
||||
role="button"
|
||||
aria-label="{{name}} — {{stateLabel}}"
|
||||
data-tooltip="{{name}} — {{stateLabel}}"
|
||||
aria-pressed="false">
|
||||
|
||||
{{!-- Video container for stream-access mode (full AV replacement) --}}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{{!-- Scene Preset Panel - per-scene auto-apply configuration --}}
|
||||
{{!-- Camera Layout Auto-Apply Panel - per-scene configuration --}}
|
||||
<div class="directors-board__preset-panel-header">
|
||||
<h3 class="directors-board__preset-panel-title">{{localize "video-view-manager.scenePresetPanel.title"}}</h3>
|
||||
<h3 class="directors-board__preset-panel-title">{{localize "scrying-pool.scenePresetPanel.title"}}</h3>
|
||||
</div>
|
||||
|
||||
{{#if hasScene}}
|
||||
@@ -12,20 +12,20 @@
|
||||
data-action="toggle-auto-apply"
|
||||
{{#if enabled}}checked{{/if}}
|
||||
role="switch"
|
||||
aria-label="{{localize 'video-view-manager.scenePresetPanel.enableAutoApply'}}">
|
||||
{{localize "video-view-manager.scenePresetPanel.enableAutoApply"}}
|
||||
aria-label="{{localize 'scrying-pool.scenePresetPanel.enableAutoApply'}}">
|
||||
{{localize "scrying-pool.scenePresetPanel.enableAutoApply"}}
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="directors-board__preset-panel-row">
|
||||
<label class="directors-board__preset-panel-label">
|
||||
{{localize "video-view-manager.scenePresetPanel.preset"}}
|
||||
{{localize "scrying-pool.scenePresetPanel.preset"}}
|
||||
<select class="directors-board__preset-panel-select"
|
||||
data-action="select-preset"
|
||||
{{#unless hasPresets}}disabled{{/unless}}
|
||||
aria-label="{{localize 'video-view-manager.scenePresetPanel.selectPreset'}}">
|
||||
aria-label="{{localize 'scrying-pool.scenePresetPanel.selectPreset'}}">
|
||||
<option value="" {{#unless presetName}}selected{{/unless}}>
|
||||
{{localize "video-view-manager.scenePresetPanel.selectPreset"}}
|
||||
{{localize "scrying-pool.scenePresetPanel.selectPreset"}}
|
||||
</option>
|
||||
{{#each presets}}
|
||||
<option value="{{this.name}}" {{#if (eq this.name ../presetName)}}selected{{/if}}>
|
||||
@@ -38,7 +38,7 @@
|
||||
|
||||
<div class="directors-board__preset-panel-row">
|
||||
<label class="directors-board__preset-panel-label">
|
||||
{{localize "video-view-manager.scenePresetPanel.preDelay"}}
|
||||
{{localize "scrying-pool.scenePresetPanel.preDelay"}}
|
||||
<span class="directors-board__preset-panel-delay-value">{{preDelay}}ms</span>
|
||||
<input type="range"
|
||||
class="directors-board__preset-panel-slider"
|
||||
@@ -47,7 +47,7 @@
|
||||
max="5000"
|
||||
value="{{preDelay}}"
|
||||
step="100"
|
||||
aria-label="{{localize 'video-view-manager.scenePresetPanel.preDelay'}}"
|
||||
aria-label="{{localize 'scrying-pool.scenePresetPanel.preDelay'}}"
|
||||
aria-valuemin="0"
|
||||
aria-valuemax="5000"
|
||||
aria-valuenow="{{preDelay}}">
|
||||
@@ -55,9 +55,9 @@
|
||||
</div>
|
||||
|
||||
<div class="directors-board__preset-panel-row directors-board__preset-panel-row--hint">
|
||||
<span>{{localize "video-view-manager.scenePresetPanel.globalSettingsHint"}}</span>
|
||||
<span>{{localize "scrying-pool.scenePresetPanel.globalSettingsHint"}}</span>
|
||||
</div>
|
||||
</div>
|
||||
{{else}}
|
||||
<p class="directors-board__preset-panel-message">{{localize "video-view-manager.scenePresetPanel.noScene"}}</p>
|
||||
<p class="directors-board__preset-panel-message">{{localize "scrying-pool.scenePresetPanel.noScene"}}</p>
|
||||
{{/if}}
|
||||
|
||||
Reference in New Issue
Block a user