Flutter web app replacing legacy WPF CCTV surveillance keyboard controller. Includes wall overview, section view with monitor grid, camera input, PTZ control, alarm/lock/sequence BLoCs, and legacy-matching UI styling. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
100 lines
2.8 KiB
HTML
100 lines
2.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<title>COPILOT D6 Legacy Architecture</title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsify-themeable@0/dist/css/theme-simple-dark.css">
|
|
<style>
|
|
:root {
|
|
--base-font-size: 15px;
|
|
--theme-color: #3b82f6;
|
|
--sidebar-width: 260px;
|
|
--sidebar-background: #1e1e2e;
|
|
--sidebar-nav-link-color--active: #3b82f6;
|
|
}
|
|
.markdown-section pre {
|
|
background-color: #1e1e2e;
|
|
border-radius: 8px;
|
|
}
|
|
.markdown-section table {
|
|
display: table;
|
|
width: 100%;
|
|
}
|
|
.markdown-section h1 {
|
|
border-bottom: 2px solid #3b82f6;
|
|
padding-bottom: 8px;
|
|
}
|
|
.mermaid svg {
|
|
max-width: 100%;
|
|
}
|
|
.mermaid {
|
|
text-align: center;
|
|
margin: 1em 0;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="app">Loading...</div>
|
|
|
|
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
|
|
<script>
|
|
mermaid.initialize({
|
|
startOnLoad: false,
|
|
theme: 'dark',
|
|
securityLevel: 'loose',
|
|
flowchart: { useMaxWidth: true, htmlLabels: true },
|
|
sequence: { useMaxWidth: true }
|
|
});
|
|
|
|
window.$docsify = {
|
|
name: 'COPILOT D6',
|
|
repo: '',
|
|
loadSidebar: '_sidebar.md',
|
|
subMaxLevel: 3,
|
|
auto2top: true,
|
|
search: {
|
|
placeholder: 'Search docs...',
|
|
noData: 'No results.',
|
|
depth: 3
|
|
},
|
|
// Intercept mermaid code blocks at the markdown parser level
|
|
markdown: {
|
|
renderer: {
|
|
code: function(code, lang) {
|
|
if (lang && lang.toLowerCase() === 'mermaid') {
|
|
return '<div class="mermaid">' + code + '</div>';
|
|
}
|
|
return this.origin.code.apply(this, arguments);
|
|
}
|
|
}
|
|
},
|
|
plugins: [
|
|
function(hook) {
|
|
// Strip YAML frontmatter before markdown parsing
|
|
hook.beforeEach(function(content) {
|
|
return content.replace(/^---[\s\S]*?---\n*/m, '');
|
|
});
|
|
|
|
// Render mermaid diagrams after DOM update
|
|
hook.doneEach(function() {
|
|
var els = document.querySelectorAll('.mermaid');
|
|
if (els.length > 0) {
|
|
// Reset any previously processed elements
|
|
els.forEach(function(el) {
|
|
el.removeAttribute('data-processed');
|
|
});
|
|
mermaid.run({ nodes: Array.from(els) }).catch(function(e) {
|
|
console.error('Mermaid render error:', e);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/docsify.min.js"></script>
|
|
<script src="https://cdn.jsdelivr.net/npm/docsify@4/lib/plugins/search.min.js"></script>
|
|
</body>
|
|
</html>
|