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.

100 lines (99 loc) • 3.24 kB
"use strict"; /** * @fileoverview HTML Generator Utilities - Base HTML generation for user-facing routes * @version 1.0.0 * @since 2025-08-04 * @module HTMLGenerator * @description Utilities for generating base HTML for user-facing quiz routes * @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.getBaseHTML = getBaseHTML; exports.generateQuizConfigScript = generateQuizConfigScript; exports.generateQuizMetaTags = generateQuizMetaTags; const promises_1 = __importDefault(require("fs/promises")); const path_1 = __importDefault(require("path")); /** * Get base HTML template for quiz pages * * @returns Base HTML content with proper styling and script includes */ async function getBaseHTML() { try { // Try to read the main index.html template const indexPath = path_1.default.join(process.cwd(), 'public', 'index.html'); const baseHTML = await promises_1.default.readFile(indexPath, 'utf-8'); return baseHTML; } catch (error) { // Fallback to a simple HTML template if index.html doesn't exist return ` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Quiz Application</title> <link href="/output.css" rel="stylesheet"> <style> body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; margin: 0; padding: 0; background-color: #f5f5f5; } .quiz-container { max-width: 800px; margin: 0 auto; padding: 2rem; } </style> </head> <body> <div id="app"> <div class="quiz-container"> <div id="quiz-content"></div> </div> </div> <script src="/dist/bundle.js"></script> </body> </html> `; } } /** * Generate script tag for quiz configuration * * @param config Quiz configuration object * @returns Script tag with embedded configuration */ function generateQuizConfigScript(config) { return ` <script> window.QUIZ_CONFIG = ${JSON.stringify(config, null, 2)}; </script> `; } /** * Generate meta tags for quiz sharing * * @param quiz Quiz data for meta tags * @returns Meta tags HTML string */ function generateQuizMetaTags(quiz) { const title = (quiz === null || quiz === void 0 ? void 0 : quiz.title) || 'Quiz Application'; const description = (quiz === null || quiz === void 0 ? void 0 : quiz.description) || 'Take this interactive quiz'; return ` <meta property="og:title" content="${title}" /> <meta property="og:description" content="${description}" /> <meta property="og:type" content="website" /> <meta name="twitter:card" content="summary" /> <meta name="twitter:title" content="${title}" /> <meta name="twitter:description" content="${description}" /> `; }