1
1
mirror of https://github.com/wez/wezterm.git synced 2024-12-25 22:33:52 +03:00
wezterm/docs/javascript/fix-codeblock-console-copy-button.js
Wez Furlong 4770b38737
docs: switch doc build to Material for MkDocs
It's a more mature and actively developed toolset for
technical writing, and looks nicer.
2023-03-15 19:22:51 -07:00

43 lines
1.3 KiB
JavaScript

document.addEventListener("DOMContentLoaded", function() {
fixCopyOnlyUserSelectable();
});
function fixCopyOnlyUserSelectable() {
buttonsToFix = document.querySelectorAll(
'.language-console button.md-clipboard');
if (buttonsToFix.length)
console.log('Fixing copy-to-clipboard text of console code-blocks.');
buttonsToFix.forEach((btn) => {
var content = extractUserSelectable(btn.dataset.clipboardTarget);
btn.dataset.clipboardText = content;
});
}
function extractUserSelectable(selector) {
var result = '';
var element = document.querySelector(selector);
// Attempt to remove the non-selectable sections based on style,
// but we haven't seen this work reliably...
element.childNodes.forEach((child) => {
if (child instanceof Element) {
var s=window.getComputedStyle(child);
if (s.getPropertyValue('user-select') == 'none' ||
s.getPropertyValue('-webkit-user-select') == 'none' ||
s.getPropertyValue('-ms-user-select') == 'none')
{
return;
}
}
result += child.textContent;
});
// ... so we fall back to simple but effective:
// remove "$ " and "# " prompt at start of lines in code
result = result.replace(/^[\s]?[\$#]\s+/gm, "")
// remove empty lines
result = result.replace(/^\s*\n/gm, '')
return result;
}