mirror of
https://github.com/shoelace-style/webawesome.git
synced 2026-01-12 04:09:12 +00:00
* First stab at using the Popover API for PE * fix popup * First stab at using the Popover API for PE * fix popup * Prettier * Fix TS error * Remove workaround * Default to `strategy = fixed` if Popover API is not supported * Clear out default UA styles for popovers * Kill `hoist` with fire 🔥 * Refactor * Update `@floating-ui/dom` * Fix flipping and shofting * Fix autosize * Use `defaultBoundary` for `flip` too That way we get the previous behavior for it. * Remove `strategy`, just use `SUPPORTS_POPOVER` check where relevant * Remove uses of `strategy` * Use viewport as the default boundary for shifting and autosizing and add `boundary=scroll` to override --------- Co-authored-by: konnorrogers <konnor5456@gmail.com>
42 lines
1.2 KiB
JavaScript
42 lines
1.2 KiB
JavaScript
import { parse } from 'node-html-parser';
|
|
|
|
/**
|
|
* Eleventy plugin to add copy buttons to code blocks.
|
|
*/
|
|
export function copyCodePlugin(eleventyConfig, options = {}) {
|
|
options = {
|
|
container: 'body',
|
|
...options,
|
|
};
|
|
|
|
let codeCount = 0;
|
|
eleventyConfig.addTransform('copy-code', content => {
|
|
const doc = parse(content, { blockTextElements: { code: true } });
|
|
const container = doc.querySelector(options.container);
|
|
|
|
if (!container) {
|
|
return content;
|
|
}
|
|
|
|
// Look for code blocks
|
|
container.querySelectorAll('pre > code').forEach(code => {
|
|
const pre = code.closest('pre');
|
|
let preId = pre.getAttribute('id') || `code-block-${++codeCount}`;
|
|
let codeId = code.getAttribute('id') || `${preId}-inner`;
|
|
|
|
if (!code.getAttribute('id')) {
|
|
code.setAttribute('id', codeId);
|
|
}
|
|
if (!pre.getAttribute('id')) {
|
|
pre.setAttribute('id', preId);
|
|
}
|
|
|
|
// Add a copy button
|
|
pre.innerHTML += `<wa-icon-button href="#${preId}" class="block-link-icon" name="link"></wa-icon-button>
|
|
<wa-copy-button from="${codeId}" class="copy-button"></wa-copy-button>`;
|
|
});
|
|
|
|
return doc.toString();
|
|
});
|
|
}
|