100 lines
3.8 KiB
HTML
100 lines
3.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title id="page-title">Post - pyserve</title>
|
|
<link rel="stylesheet" href="../style.css">
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css">
|
|
<script src="https://cdn.jsdelivr.net/npm/marked@11.1.1/marked.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
|
<script src="scripts/blog-post.js" defer></script>
|
|
</head>
|
|
<body>
|
|
<div id="container">
|
|
<div id="header">
|
|
<h1>pyserve</h1>
|
|
<div class="tagline">python application orchestrator</div>
|
|
</div>
|
|
|
|
<div class="breadcrumb">
|
|
<a href="../index.html">Home</a> / <a href="blog.html">Blog</a> / <span id="breadcrumb-title">Post</span>
|
|
</div>
|
|
|
|
<div id="main-wrapper">
|
|
<div id="content">
|
|
<div id="post-loading" class="loading-state">
|
|
<p>Loading post...</p>
|
|
</div>
|
|
|
|
<article id="post-content" class="blog-post-full" style="display: none;">
|
|
<div class="post-meta">
|
|
<span class="post-date" id="post-date"></span>
|
|
<span class="post-tag" id="post-tag"></span>
|
|
</div>
|
|
|
|
<h1 id="post-title" class="post-title-full"></h1>
|
|
|
|
<div class="post-author-full" id="post-author-full" style="display: none;">
|
|
<img src="" alt="" class="author-avatar-large" id="author-avatar">
|
|
<div class="author-info-full">
|
|
<span class="author-name-large" id="author-name"></span>
|
|
<span class="author-login" id="author-login"></span>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="post-body" class="post-body-full"></div>
|
|
|
|
<div class="post-footer">
|
|
<a href="blog.html" class="back-link">← Back to Blog</a>
|
|
</div>
|
|
</article>
|
|
|
|
<div id="post-error" class="error-state" style="display: none;">
|
|
<h2>Post Not Found</h2>
|
|
<p>The requested blog post could not be found.</p>
|
|
<a href="blog.html" class="back-link">← Back to Blog</a>
|
|
</div>
|
|
</div>
|
|
|
|
<aside id="sidebar">
|
|
<div class="partner-block">
|
|
<h3>Share</h3>
|
|
<div style="margin-top: 15px;">
|
|
<button onclick="copyLink()" class="share-button">📋 Copy Link</button>
|
|
</div>
|
|
|
|
<div style="margin-top: 20px; padding-top: 15px; border-top: 1px solid #2a2a2a;">
|
|
<h4 style="color: #3cb371; font-size: 13px; margin-bottom: 10px;">Navigation</h4>
|
|
<ul class="plain" style="font-size: 12px;">
|
|
<li><a href="blog.html">All Posts</a></li>
|
|
<li><a href="index.html">Documentation</a></li>
|
|
<li><a href="https://git.pyserve.org/Shifty/docs.pyserve.org" target="_blank">Repository</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</aside>
|
|
</div>
|
|
|
|
<div id="footer">
|
|
<p>pyserve © 2024-2025 | MIT License</p>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
function copyLink() {
|
|
navigator.clipboard.writeText(window.location.href).then(() => {
|
|
const btn = event.target;
|
|
const originalText = btn.textContent;
|
|
btn.textContent = '✓ Copied!';
|
|
btn.style.background = '#3cb371';
|
|
setTimeout(() => {
|
|
btn.textContent = originalText;
|
|
btn.style.background = '';
|
|
}, 2000);
|
|
});
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|