Added comprehensive plugin system for independent JavaScript UI development: **Plugin Infrastructure:** - Extended existing MarkiTect plugin system with RenderingEnginePlugin base class - Added RENDERING plugin type to PluginType enum - Created RenderingConfig for asset management and deployment - Implemented RenderingEngineManager for plugin discovery and lifecycle **TestDrive JSUI Plugin:** - Extracted JavaScript UI components to independent testdrive-jsui plugin - Created standalone development environment (no Python required) - Implemented compass-positioned control panels (NW, NE, E, SE) - Added clean JSON configuration interface for Python↔JavaScript data transfer **Asset Management:** - Development mode: serve assets directly from plugin source directory - Production mode: deploy to _markitect/plugins/[plugin-name]/ structure - Configurable asset URLs and deployment strategies - Support for external dependencies (CDN resources) **Standalone Development:** - testdrive-jsui/test.html for browser-based development - Package.json with npm scripts for development server - Complete separation of JavaScript development from Python environment - Hot reload and standard web development workflow **Integration Demo:** - demo_plugin_integration.py showcasing all plugin capabilities - Standalone, plugin discovery, production deployment examples - Asset URL generation for different deployment modes This enables JavaScript-first development while maintaining clean integration with the MarkiTect Python ecosystem. Developers can now work on UI components independently using standard web development tools and workflows. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
149 lines
4.1 KiB
HTML
149 lines
4.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="generator" content="Markitect Markitect v0.8.1.dev24+gdbde13e03.d20251111">
|
|
<title>Test Document</title>
|
|
|
|
<!-- Base styling for document content -->
|
|
<style>
|
|
body {
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
line-height: 1.6;
|
|
color: #333;
|
|
max-width: 1200px;
|
|
margin: 0 auto;
|
|
padding: 2rem;
|
|
background-color: #ffffff;
|
|
}
|
|
|
|
/* Responsive design */
|
|
@media (max-width: 768px) {
|
|
body {
|
|
padding: 1rem;
|
|
font-size: 0.9rem;
|
|
}
|
|
}
|
|
|
|
/* Content styling */
|
|
h1, h2, h3, h4, h5, h6 {
|
|
color: #2c3e50;
|
|
margin-top: 2rem;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
h1 { font-size: 2.5em; border-bottom: 3px solid #3498db; padding-bottom: 0.5rem; }
|
|
h2 { font-size: 2em; border-bottom: 2px solid #3498db; padding-bottom: 0.3rem; }
|
|
h3 { font-size: 1.5em; color: #34495e; }
|
|
|
|
p {
|
|
margin-bottom: 1.2rem;
|
|
text-align: justify;
|
|
}
|
|
|
|
a {
|
|
color: #3498db;
|
|
text-decoration: none;
|
|
}
|
|
|
|
a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
|
|
blockquote {
|
|
border-left: 4px solid #3498db;
|
|
margin: 1.5rem 0;
|
|
padding-left: 1rem;
|
|
color: #7f8c8d;
|
|
}
|
|
|
|
code {
|
|
background-color: #f8f9fa;
|
|
padding: 0.2rem 0.4rem;
|
|
border-radius: 3px;
|
|
font-family: 'Courier New', monospace;
|
|
}
|
|
|
|
pre {
|
|
background-color: #f8f9fa;
|
|
padding: 1rem;
|
|
border-radius: 5px;
|
|
overflow-x: auto;
|
|
border: 1px solid #e9ecef;
|
|
}
|
|
|
|
img {
|
|
max-width: 100%;
|
|
height: auto;
|
|
border-radius: 5px;
|
|
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
|
|
}
|
|
|
|
table {
|
|
border-collapse: collapse;
|
|
width: 100%;
|
|
margin: 1.5rem 0;
|
|
}
|
|
|
|
th, td {
|
|
border: 1px solid #dee2e6;
|
|
padding: 0.75rem;
|
|
text-align: left;
|
|
}
|
|
|
|
th {
|
|
background-color: #f8f9fa;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* Print styles */
|
|
@media print {
|
|
.control-panel {
|
|
display: none !important;
|
|
}
|
|
|
|
body {
|
|
font-size: 12pt;
|
|
line-height: 1.4;
|
|
}
|
|
}
|
|
</style>
|
|
|
|
<!-- Control system styles -->
|
|
<link rel="stylesheet" href="markitect/static/css/controls.css">
|
|
|
|
<!-- External dependencies -->
|
|
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"
|
|
onerror="console.error('CDN library failed to load - network or firewall blocking marked.js'); window.markitectMarkedError = true;"></script>
|
|
</head>
|
|
<body>
|
|
<div id="markitect-content">
|
|
<h1 id="test-document">Test Document</h1>
|
|
<p>This is a test document to check if UI controls appear in edit mode.</p>
|
|
<h2 id="section-1">Section 1</h2>
|
|
<p>Some content here.</p>
|
|
<hr />
|
|
<p><em>-- html from markdown by <a href="https://coulomb.social/open/MarkiTect" target="_blank">MarkiTect</a> on 2025-11-11 23:42:23 by <a href="https://coulomb.social/open/worsch" target="_blank">worsch</a></em></p>
|
|
</div>
|
|
|
|
<!-- Core JavaScript modules -->
|
|
<script src="markitect/static/js/core/debug-system.js"></script>
|
|
|
|
<!-- Control system -->
|
|
<script src="markitect/static/js/controls/control-base.js"></script>
|
|
<script src="markitect/static/js/controls/status-control.js"></script>
|
|
|
|
<!-- Main application -->
|
|
<script src="markitect/static/js/main.js"></script>
|
|
|
|
<!-- Handle CDN loading errors -->
|
|
<script>
|
|
window.addEventListener('load', function() {
|
|
if (window.markitectMarkedError) {
|
|
console.error("CDN library failed to load - network or firewall blocking marked.js");
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
</html> |