UNPKG

mcp-quiz-server

Version:

🧠 AI-Powered Quiz Management via Model Context Protocol (MCP) - Create, manage, and take quizzes directly from VS Code, Claude, and other AI agents.

62 lines (60 loc) • 2.16 kB
"use strict"; /** * @fileoverview Quiz Preview Routes - Quiz preview with modal functionality * @version 1.0.0 * @since 2025-08-04 * @module QuizPreviewRoutes * @description Handles quiz preview URLs that show modal before starting * @contributors GitHub Copilot * @requirements REQ_ROUTES_001 * @lineCount < 200 */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createQuizPreviewRoutes = createQuizPreviewRoutes; const express_1 = __importDefault(require("express")); const error_handler_1 = require("../../../../shared/error-handler"); const html_generator_1 = require("../utils/html-generator"); function createQuizPreviewRoutes(config) { const router = express_1.default.Router(); /** * Quiz Preview Route * GET /preview/:id * * Shows quiz modal before starting */ router.get('/:id', (0, error_handler_1.asyncHandler)(async (req, res) => { try { const quizId = req.params.id; const fromShare = req.query.shared === 'true'; const htmlContent = await generateQuizPreviewHTML(quizId, { fromShare }); res.send(htmlContent); } catch (error) { error_handler_1.Logger.error('Error in quiz preview:', error instanceof Error ? error : new Error(String(error))); res.status(500).send('Failed to load quiz preview'); } })); return router; } async function generateQuizPreviewHTML(quizId, options) { const baseHTML = await (0, html_generator_1.getBaseHTML)(); const previewScript = ` <script> window.QUIZ_CONFIG = { preloadQuizId: "${quizId}", showModal: true, fromShare: ${options.fromShare}, mode: "preview" }; window.addEventListener('DOMContentLoaded', () => { if (window.app?.showQuizModal) { window.app.showQuizModal(window.QUIZ_CONFIG.preloadQuizId); } }); </script> `; return baseHTML.replace('</head>', `${previewScript}</head>`); }