mirror of
https://gh.wpcy.net/https://github.com/mainwp/mainwp.dev.git
synced 2026-07-16 10:45:10 +08:00
171 lines
6.9 KiB
HTML
171 lines
6.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="{{ site.dox.language }}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
<title>{% if page.title %}{{ page.title }}{% else %}{{ site.dox.title }}{% endif %}</title>
|
|
<meta name="description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.dox.description }}{% endif %}">
|
|
|
|
<link rel="canonical" href="{{ page.url | replace: 'index.html', '' | absolute_url }}">
|
|
<link rel="shortcut icon" href="{{ '/favicon.ico' | absolute_url }}" type="image/x-icon">
|
|
|
|
<!-- Theme styles -->
|
|
<link rel="stylesheet" href="{{ site.baseurl }}/assets/css/style.css">
|
|
</head>
|
|
<body class="homepage">
|
|
{% include header.html %}
|
|
|
|
{{ content }}
|
|
|
|
{% include footer.html %}
|
|
|
|
<!-- Theme scripts -->
|
|
<script src="{{ site.baseurl }}/assets/js/vendor/jquery.min.js" defer></script>
|
|
<!-- Highlight.js -->
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
|
<!-- Highlight.js language packs -->
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/php.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/javascript.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/xml.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/css.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/bash.min.js"></script>
|
|
<!-- Theme functionality -->
|
|
<script src="{{ site.baseurl }}/assets/js/theme-toggle.js" defer></script>
|
|
<script src="{{ site.baseurl }}/assets/js/scripts.js" defer></script>
|
|
<script src="{{ site.baseurl }}/assets/js/navigation.js" defer></script>
|
|
<!-- Code block functionality -->
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
// Initialize Highlight.js
|
|
hljs.configure({
|
|
ignoreUnescapedHTML: true
|
|
});
|
|
hljs.highlightAll();
|
|
|
|
// Find all code blocks
|
|
const codeBlocks = document.querySelectorAll('pre:not(.no-copy) > code');
|
|
|
|
codeBlocks.forEach(codeBlock => {
|
|
const pre = codeBlock.parentElement;
|
|
|
|
// Create wrapper if needed
|
|
let wrapper = pre.parentElement;
|
|
if (!wrapper.classList.contains('code-block')) {
|
|
wrapper = document.createElement('div');
|
|
wrapper.className = 'code-block';
|
|
pre.parentNode.insertBefore(wrapper, pre);
|
|
wrapper.appendChild(pre);
|
|
|
|
// Add header with language label and copy button
|
|
const header = document.createElement('div');
|
|
header.className = 'code-header';
|
|
|
|
// Try to extract language from class
|
|
let language = 'code';
|
|
const langClass = codeBlock.className.match(/language-(\w+)/) || codeBlock.className.match(/hljs language-(\w+)/);
|
|
if (langClass && langClass[1]) {
|
|
language = langClass[1].toUpperCase();
|
|
}
|
|
|
|
const langLabel = document.createElement('span');
|
|
langLabel.className = 'language-label';
|
|
langLabel.textContent = language;
|
|
|
|
const copyBtn = document.createElement('button');
|
|
copyBtn.className = 'copy-button';
|
|
copyBtn.textContent = 'Copy';
|
|
|
|
header.appendChild(langLabel);
|
|
header.appendChild(copyBtn);
|
|
wrapper.insertBefore(header, pre);
|
|
}
|
|
});
|
|
|
|
// Add click event to all copy buttons
|
|
document.addEventListener('click', function(event) {
|
|
if (event.target.matches('.copy-button')) {
|
|
const button = event.target;
|
|
const codeBlock = button.closest('.code-block');
|
|
const codeElement = codeBlock.querySelector('code');
|
|
|
|
navigator.clipboard.writeText(codeElement.textContent).then(() => {
|
|
button.textContent = 'Copied!';
|
|
button.classList.add('copied');
|
|
|
|
setTimeout(() => {
|
|
button.textContent = 'Copy';
|
|
button.classList.remove('copied');
|
|
}, 2000);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
|
|
{% if site.dox.google_analytics.tracking_code and jekyll.environment == 'production' %}
|
|
<!-- Google Analytics -->
|
|
<script>
|
|
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
|
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
|
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
|
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
|
ga('create', '{{ site.dox.google_analytics.tracking_code }}', 'auto');
|
|
ga('send', 'pageview');
|
|
</script>
|
|
{% endif %}
|
|
</body>
|
|
</html>
|
|
|
|
<style>
|
|
/* Homepage specific styles */
|
|
.homepage {
|
|
background-color: var(--mainwp-dark-bg);
|
|
color: var(--mainwp-dark-text);
|
|
}
|
|
|
|
.homepage h2 {
|
|
font-size: 2rem;
|
|
margin: 3rem 0 2rem;
|
|
color: var(--mainwp-dark-text);
|
|
}
|
|
|
|
.c-feature-card {
|
|
display: block;
|
|
padding: 2rem;
|
|
background-color: rgba(0, 0, 0, 0.2);
|
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
border-radius: var(--dox-border-radius);
|
|
text-decoration: none;
|
|
transition: var(--dox-transition-base);
|
|
height: 100%;
|
|
}
|
|
|
|
.c-feature-card:hover {
|
|
background-color: rgba(255, 255, 255, 0.05);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.c-feature-card h3 {
|
|
color: var(--mainwp-primary);
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.c-feature-card p {
|
|
color: var(--mainwp-dark-text);
|
|
opacity: 0.8;
|
|
margin: 0;
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.homepage h2 {
|
|
font-size: 1.5rem;
|
|
margin: 2rem 0 1.5rem;
|
|
}
|
|
|
|
.c-feature-card {
|
|
margin-bottom: 1rem;
|
|
}
|
|
}
|
|
</style>
|