Spaces:
Paused
Paused
| /** Direct Cloudinary delivery URLs for quiz audio/images. */ | |
| export function mediaFileStem(fileId) { | |
| let id = String(fileId || '').trim() | |
| if (!id) return '' | |
| if (id.startsWith('http://') || id.startsWith('https://')) return id | |
| id = id | |
| .replace(/^\/api\/images\//, '') | |
| .replace(/^\/images\//, '') | |
| .replace(/^\/api\/audio\//, '') | |
| .replace(/^\/audio\//, '') | |
| return id.split('.')[0] | |
| } | |
| export function cloudinaryCloudName() { | |
| return (import.meta.env.VITE_CLOUDINARY_CLOUD_NAME || '').trim() | |
| } | |
| export function cloudinaryAudioUrl(fileId) { | |
| const stem = mediaFileStem(fileId) | |
| const cloud = cloudinaryCloudName() | |
| if (!cloud || !stem || stem.startsWith('http')) return '' | |
| return `https://res.cloudinary.com/${cloud}/video/upload/audio/${stem}.mp3` | |
| } | |
| export function cloudinaryImageUrl(fileId) { | |
| const stem = mediaFileStem(fileId) | |
| const cloud = cloudinaryCloudName() | |
| if (!cloud || !stem || stem.startsWith('http')) return '' | |
| return `https://res.cloudinary.com/${cloud}/image/upload/images/${stem}.png` | |
| } | |
| export function usesCloudinaryCdn() { | |
| return Boolean(cloudinaryCloudName()) | |
| } | |