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