mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-08-11 11:19:24 +00:00
122 lines
4.3 KiB
JavaScript
122 lines
4.3 KiB
JavaScript
/*
|
|
* fee[dB]ack v0.3.0 — Venue visualization adapter.
|
|
*
|
|
* "Venue" is a built-in viz picker entry that reuses the highway_3d renderer
|
|
* while keeping vizSelection='venue' so venue mood FX stay enabled.
|
|
*/
|
|
(function (root) {
|
|
'use strict';
|
|
|
|
const VENUE_VIZ_ID = 'venue';
|
|
const RENDERER_VIZ_ID = 'highway_3d';
|
|
const PLAYER_CLASS = 'is-venue-visualization';
|
|
|
|
let _selectedVizId = null;
|
|
let _activeRendererId = null;
|
|
|
|
function isVenueVisualization(vizMode) {
|
|
return String(vizMode || '') === VENUE_VIZ_ID;
|
|
}
|
|
|
|
function resolveRendererVizId(vizMode) {
|
|
return isVenueVisualization(vizMode) ? RENDERER_VIZ_ID : vizMode;
|
|
}
|
|
|
|
function readStoredVizSelection() {
|
|
try {
|
|
return localStorage.getItem('vizSelection') || 'default';
|
|
} catch (_) {
|
|
return 'default';
|
|
}
|
|
}
|
|
|
|
function readVizSelection() {
|
|
try {
|
|
const sel = typeof document !== 'undefined' ? document.getElementById('viz-picker') : null;
|
|
if (sel && sel.value) return String(sel.value);
|
|
return readStoredVizSelection();
|
|
} catch (_) {
|
|
return 'default';
|
|
}
|
|
}
|
|
|
|
function getSelectedVizId() {
|
|
if (_selectedVizId) return _selectedVizId;
|
|
return readVizSelection();
|
|
}
|
|
|
|
function syncVenuePlaceholder(vizMode) {
|
|
try {
|
|
const isVenue = isVenueVisualization(vizMode);
|
|
const showDom = isVenue && !!(root && root.v3VenueScene3d &&
|
|
typeof root.v3VenueScene3d.shouldShowDomPlaceholder === 'function' &&
|
|
root.v3VenueScene3d.shouldShowDomPlaceholder());
|
|
const badge = typeof document !== 'undefined' ? document.getElementById('v3-venue-mode-badge') : null;
|
|
const wash = typeof document !== 'undefined' ? document.getElementById('v3-venue-scene-wash') : null;
|
|
if (badge && badge.classList) {
|
|
if (showDom) badge.classList.remove('hidden');
|
|
else badge.classList.add('hidden');
|
|
}
|
|
if (wash && wash.classList) {
|
|
if (showDom) wash.classList.remove('hidden');
|
|
else wash.classList.add('hidden');
|
|
}
|
|
} catch (_) { /* visual-only */ }
|
|
}
|
|
|
|
function syncPlayerVizClass(vizMode) {
|
|
try {
|
|
const player = typeof document !== 'undefined' ? document.getElementById('player') : null;
|
|
if (!player || !player.classList) return;
|
|
player.classList.toggle(PLAYER_CLASS, isVenueVisualization(vizMode));
|
|
syncVenuePlaceholder(vizMode);
|
|
} catch (_) { /* visual-only */ }
|
|
}
|
|
|
|
function setSelectedVizId(id) {
|
|
_selectedVizId = id == null ? null : String(id);
|
|
syncPlayerVizClass(_selectedVizId);
|
|
}
|
|
|
|
function notifyRendererInstalled(rendererId) {
|
|
_activeRendererId = rendererId == null ? null : String(rendererId);
|
|
}
|
|
|
|
function getState() {
|
|
const player = typeof document !== 'undefined' ? document.getElementById('player') : null;
|
|
const pickerViz = readVizSelection();
|
|
const selectedViz = getSelectedVizId();
|
|
const storedVizSelection = readStoredVizSelection();
|
|
const moodApi = root && root.v3VenueMoodFx;
|
|
return {
|
|
selectedViz,
|
|
storedVizSelection,
|
|
pickerViz,
|
|
activeRendererId: _activeRendererId,
|
|
isVenueVisualization: isVenueVisualization(selectedViz),
|
|
playerHasVenueClass: !!(player && player.classList && player.classList.contains(PLAYER_CLASS)),
|
|
playerClasses: player ? String(player.className || '') : '',
|
|
hasVenueMoodApi: !!(moodApi && typeof moodApi.getState === 'function'),
|
|
venueMoodState: moodApi && typeof moodApi.getState === 'function' ? moodApi.getState() : null,
|
|
};
|
|
}
|
|
|
|
const api = {
|
|
VENUE_VIZ_ID,
|
|
RENDERER_VIZ_ID,
|
|
PLAYER_CLASS,
|
|
isVenueVisualization,
|
|
resolveRendererVizId,
|
|
readVizSelection,
|
|
readStoredVizSelection,
|
|
getSelectedVizId,
|
|
syncPlayerVizClass,
|
|
setSelectedVizId,
|
|
notifyRendererInstalled,
|
|
getState,
|
|
};
|
|
|
|
if (root) root.v3VenueViz = api;
|
|
if (typeof module !== 'undefined' && module.exports) module.exports = api;
|
|
}(typeof window !== 'undefined' ? window : (typeof globalThis !== 'undefined' ? globalThis : null)));
|