Skip to content

Commit

Permalink
Improve copy of console command examples
Browse files Browse the repository at this point in the history
  • Loading branch information
eth3lbert committed Jul 24, 2024
1 parent 62e72f5 commit 2bb98cc
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
39 changes: 39 additions & 0 deletions docs/js/extra.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
function cleanupClipboardText(targetSelector) {
const targetElement = document.querySelector(targetSelector);

// exclude "Generic Prompt" and "Generic Output" spans from copy
const excludedClasses = ["gp", "go"];

const clipboardText = Array.from(targetElement.childNodes)
.filter(node => !excludedClasses.some((className) => node?.classList?.contains(className)))
.map(node => node.textContent)
.filter(s => s != "");
return clipboardText.join("").trim();
}

// Sets copy text to attributes lazily using an Intersection Observer.
function setCopyText() {
// The `data-clipboard-text` attribute allows for customized content in the copy
// See: https://www.npmjs.com/package/clipboard#copy-text-from-attribute
const attr = 'clipboardText';
// all "copy" buttons whose target selector is a <code> element
const elements = document.querySelectorAll(
'button.md-clipboard[data-clipboard-target$="code"]'
);
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
// target in the viewport that have not been patched
if (entry.intersectionRatio > 0 && entry.target.dataset[attr] === undefined) {
entry.target.dataset[attr] = cleanupClipboardText(entry.target.dataset.clipboardTarget);
}
});
});

elements.forEach(elt => {
observer.observe(elt);
});
}

document.addEventListener("DOMContentLoaded", () => {
setCopyText();
});
4 changes: 4 additions & 0 deletions docs/stylesheets/extra.css
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,7 @@ This is a consequence of the reduced nav spacing below. */
.md-nav--secondary .md-nav__link {
margin-top: 0.5em;
}
/* See: https://mkdocstrings.github.io/recipes/#prevent-selection-of-prompts-and-output-in-python-code-blocks */
.highlight .gp, .highlight .go { /* Generic.Prompt, Generic.Output */
user-select: none;
}
2 changes: 2 additions & 0 deletions mkdocs.template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ plugins:
- typeset
extra_css:
- stylesheets/extra.css
extra_javascript:
- js/extra.js
extra:
analytics:
provider: fathom
Expand Down

0 comments on commit 2bb98cc

Please sign in to comment.