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
JavaScript
;
/**
* @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>`);
}