fix(docs): hide copy menu on non-markdown pages
This commit is contained in:
@@ -7,9 +7,12 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
githubRepo: 'unclecode/crawl4ai',
|
githubRepo: 'unclecode/crawl4ai',
|
||||||
githubBranch: 'main',
|
githubBranch: 'main',
|
||||||
docsPath: 'docs/md_v2',
|
docsPath: 'docs/md_v2',
|
||||||
excludePaths: ['/apps/c4a-script/', '/apps/llmtxt/', '/apps/crawl4ai-assistant/'], // Don't show on app pages
|
excludePaths: ['/apps/c4a-script/', '/apps/llmtxt/', '/apps/crawl4ai-assistant/', '/core/ask-ai/'], // Don't show on app pages
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let cachedMarkdown = null;
|
||||||
|
let cachedMarkdownPath = null;
|
||||||
|
|
||||||
// Check if we should show the button on this page
|
// Check if we should show the button on this page
|
||||||
function shouldShowButton() {
|
function shouldShowButton() {
|
||||||
const currentPath = window.location.pathname;
|
const currentPath = window.location.pathname;
|
||||||
@@ -19,6 +22,17 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Don't show on 404 pages
|
||||||
|
if (document.title && document.title.toLowerCase().includes('404')) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Require mkdocs main content container
|
||||||
|
const mainContent = document.getElementById('terminal-mkdocs-main-content');
|
||||||
|
if (!mainContent) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Don't show on excluded paths (apps)
|
// Don't show on excluded paths (apps)
|
||||||
for (const excludePath of config.excludePaths) {
|
for (const excludePath of config.excludePaths) {
|
||||||
if (currentPath.includes(excludePath)) {
|
if (currentPath.includes(excludePath)) {
|
||||||
@@ -53,6 +67,56 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
return `${path}.md`;
|
return `${path}.md`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function loadMarkdownContent() {
|
||||||
|
const mdPath = getCurrentMarkdownPath();
|
||||||
|
|
||||||
|
if (!mdPath) {
|
||||||
|
throw new Error('Invalid markdown path');
|
||||||
|
}
|
||||||
|
|
||||||
|
const rawUrl = getGithubRawUrl();
|
||||||
|
const response = await fetch(rawUrl);
|
||||||
|
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`Failed to fetch markdown: ${response.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const markdown = await response.text();
|
||||||
|
cachedMarkdown = markdown;
|
||||||
|
cachedMarkdownPath = mdPath;
|
||||||
|
return markdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function ensureMarkdownCached() {
|
||||||
|
const mdPath = getCurrentMarkdownPath();
|
||||||
|
|
||||||
|
if (!mdPath) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cachedMarkdown && cachedMarkdownPath === mdPath) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await loadMarkdownContent();
|
||||||
|
return true;
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('Page Actions: Markdown not available for this page.', error);
|
||||||
|
cachedMarkdown = null;
|
||||||
|
cachedMarkdownPath = null;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function getMarkdownContent() {
|
||||||
|
const available = await ensureMarkdownCached();
|
||||||
|
if (!available) {
|
||||||
|
throw new Error('Markdown not available for this page.');
|
||||||
|
}
|
||||||
|
return cachedMarkdown;
|
||||||
|
}
|
||||||
|
|
||||||
// Get GitHub raw URL for current page
|
// Get GitHub raw URL for current page
|
||||||
function getGithubRawUrl() {
|
function getGithubRawUrl() {
|
||||||
const mdPath = getCurrentMarkdownPath();
|
const mdPath = getCurrentMarkdownPath();
|
||||||
@@ -180,19 +244,11 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
|
|
||||||
// Copy markdown to clipboard
|
// Copy markdown to clipboard
|
||||||
async function copyMarkdownToClipboard(link) {
|
async function copyMarkdownToClipboard(link) {
|
||||||
const rawUrl = getGithubRawUrl();
|
|
||||||
|
|
||||||
// Add loading state
|
// Add loading state
|
||||||
link.classList.add('loading');
|
link.classList.add('loading');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(rawUrl);
|
const markdown = await getMarkdownContent();
|
||||||
|
|
||||||
if (!response.ok) {
|
|
||||||
throw new Error(`Failed to fetch markdown: ${response.status}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const markdown = await response.text();
|
|
||||||
|
|
||||||
// Copy to clipboard
|
// Copy to clipboard
|
||||||
await navigator.clipboard.writeText(markdown);
|
await navigator.clipboard.writeText(markdown);
|
||||||
@@ -221,8 +277,22 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
window.open(githubUrl, '_blank', 'noopener,noreferrer');
|
window.open(githubUrl, '_blank', 'noopener,noreferrer');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize
|
(async () => {
|
||||||
const { button, dropdown, overlay } = createPageActionsUI();
|
if (!shouldShowButton()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const markdownAvailable = await ensureMarkdownCached();
|
||||||
|
if (!markdownAvailable) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ui = createPageActionsUI();
|
||||||
|
if (!ui) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { button, dropdown, overlay } = ui;
|
||||||
|
|
||||||
// Event listeners
|
// Event listeners
|
||||||
button.addEventListener('click', (e) => {
|
button.addEventListener('click', (e) => {
|
||||||
@@ -343,4 +413,5 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
console.log('Page Actions initialized for:', getCurrentMarkdownPath());
|
console.log('Page Actions initialized for:', getCurrentMarkdownPath());
|
||||||
|
})();
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user