/* PlaylistPlayer — fullscreen single-zone renderer for the Tizen player. * Mirrors the Android player's content rules: * image -> shown for duration_sec (min 3s), then advance * video -> plays to end then advance; single item loops * video/youtube-> iframe embed; single item loops, multi advances after duration * remote_url -> same as image/video but src = remote_url * widget -> iframe of {server}/api/widgets/{id}/render for duration_sec * Content file URL: {server}/api/content/{content_id}/file (public) */ // Minimal i18n for the Tizen player (no shared i18n module here). Falls back to en. var TIZEN_I18N = { en: { nothing_scheduled: 'Nothing scheduled right now', no_content: 'No content assigned yet' }, es: { nothing_scheduled: 'No hay nada programado en este momento', no_content: 'Aún no hay contenido asignado' }, fr: { nothing_scheduled: 'Rien de programmé pour le moment', no_content: 'Aucun contenu attribué pour l’instant' }, de: { nothing_scheduled: 'Derzeit ist nichts geplant', no_content: 'Noch kein Inhalt zugewiesen' }, pt: { nothing_scheduled: 'Nada programado no momento', no_content: 'Nenhum conteúdo atribuído ainda' } }; var TZ_LANG = (function () { try { return (localStorage.getItem('rd_lang') || navigator.language || 'en').split('-')[0]; } catch (e) { return 'en'; } })(); function tzt(k) { return (TIZEN_I18N[TZ_LANG] && TIZEN_I18N[TZ_LANG][k]) || TIZEN_I18N.en[k] || k; } function PlaylistPlayer(stageEl, getBase) { this.stage = stageEl; this.getBase = getBase; this.items = []; this.index = 0; this.timer = null; this.sig = ''; this.timezone = null; // #74/#75: device-effective IANA tz for schedule eval this.wallFollower = false; // video-wall: a follower holds the leader's item, no auto-advance this.currentVideoEl = null; // current