Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

eleventy-plugin-markdown-copy-button

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eleventy-plugin-markdown-copy-button

An 11ty plugin which adds a button which copies markdown code snippets

  • 0.7.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
8
increased by14.29%
Maintainers
1
Weekly downloads
 
Created
Source

eleventy-plugin-markdown-copy-button

Important: currently only works with the default 11ty library markdown-it.

module.exports = (eleventyConfig) => {
  const MarkdownCopyButton = require("eleventy-plugin-markdown-copy-button");
  eleventyConfig.addPlugin(MarkdownCopyButton);
};

With markdown-it customisation

If you want to have custom markdown-it options then ensure you setLibrary for markdown (md) before adding the plugin, like so:

module.exports = (eleventyConfig) => {
  const markdownIt = require("markdown-it");
  let markdownLibrary = markdownIt({
    html: true,
    breaks: true,
    linkify: true,
  });
  eleventyConfig.setLibrary("md", markdownLibrary);
  const MarkdownCopyButton = require("eleventy-plugin-markdown-copy-button");
  eleventyConfig.addPlugin(MarkdownCopyButton);
};

Internally this library defines markdownIt.renderer.rules.fence. This library will respect any prior modifications to this rule. However, if you modify this rule yourself after importing eleventy-plugin-markdown-copy-button the plugin may stop working.

Styling

However you do css style the components that are added however you like, for example:

#copy-component {
  position: relative;
  display: flex;
}

copy-component *:not([slot="button"]) {
  margin: 0;
}
copy-component button {
  position: absolute;
  text-transform: uppercase;
  background: rgba(0, 0, 0, 0.5);
  color: white;
  top: 0;
  right: 0;
  border: none;
}

copy-component button:active {
  background: rgba(255, 255, 255, 0.7);
  color: black;
}

Custom text

If all you want to do is customise the text for the button you can do the following:

module.exports = (eleventyConfig) => {
  const MarkdownCopyButton = require("eleventy-plugin-markdown-copy-button");
  eleventyConfig.addPlugin(MarkdownCopyButton, {
    copyText: "Copy text",
    copiedText: "Done!",
  });
};

Custom html

So you want full control of the HTML? Go for it!

Internally this plugin uses copy-component from npm, check out the demos.

module.exports = (eleventyConfig) => {
  const MarkdownCopyButton = require("eleventy-plugin-markdown-copy-button");
  eleventyConfig.addPlugin(MarkdownCopyButton, {
    renderer: (content) =>
      `<copy-component oncopy="this.querySelector('[slot=button]').textContent='${copiedText}'" style="display: block;">${content}<button slot="button">Copy</button></copy-component>`,
  });
};

Options

Internally this plugin uses eleventy-plugin-add-web-component-definitions which can be customised using webComponentDefinitionsOptions.

For example you could change the path to the copy-component

module.exports = (eleventyConfig) => {
  eleventyConfig.addPlugin(require("eleventy-plugin-markdown-copy-button"), {
    webComponentDefinitionsOptions: {
      specifiers: {
        "copy-component": "/copy-component/index.js",
      },
    },
  });

  eleventyConfig.addPassthroughCopy({
    "./node_modules/copy-component": "./copy-component",
  });
};

Keywords

FAQs

Package last updated on 30 Dec 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc