Skip to content

reatlat/eleventy-plugin-phosphoricons

Repository files navigation

eleventy-plugin-phosphoricons

npm npm license

An Eleventy shortcode, allows Phosphor icons to be embedded as inline svg or render as an image in your Eleventy project.

Demo: https://eleventy-plugin-phosphoricons.netlify.app/

Installation

Install the plugin from npm:

npm install eleventy-plugin-phosphoricons --save-dev

Configuration

  • class - The class attribute to be added to the svg element. Default: phicon
  • style - The style attribute to be added to the svg element. Default: undefined
  • size - The width and height attribute to be added to the svg element. Default: 256
  • fill - The fill attribute to be added to the svg element. Default: currentColor
  • width - The width attribute to be added to the img element. Default: taken from the size attribute
  • height - The height attribute to be added to the img element. Default: taken from the size attribute
  • render - The render method allows you to render icon as inline svg or image. Default: svg, other options: image or img
  • transformClass - A CSS class that you want to map using a callback function transformFill. Default: false
  • transformFill - A callback function to transform the fill attribute, based on transformClass attribute. Default: undefined

If render is set to image or img, the following attributes can be used:

  • alt - The alt attribute to be added to the img element. Default: altPrefix + iconName
  • altPrefix - The alt attribute prefix to be added to the img element. Default: icon
  • loading - The loading attribute to be added to the img element. Default: lazy
  • decoding - The decoding attribute to be added to the img element. Default: async
  • eleventyIgnore - The eleventyIgnore attribute to be added to the img element to prevent @11ty/eleventy-img plugin from processing the image. Default: true

Usage

Add it to your Eleventy Config file:

const eleventyPluginPhosphoricons = require('eleventy-plugin-phosphoricons');

module.exports = function (eleventyConfig) {
    eleventyConfig.addPlugin(eleventyPluginPhosphoricons);
};

Advanced usage:

const eleventyPluginPhosphoricons = require('eleventy-plugin-phosphoricons');

module.exports = function (eleventyConfig) {
    eleventyConfig.addPlugin(eleventyPluginPhosphoricons, {
        class: "phicon",
        style: "vertical-align: middle;",
        size: 32,
        fill: "currentColor"
    });
};

Using transformFill callback function

May be useful if you using a CSS framework like Tailwind CSS, Bootstrap, etc. and you want to map the fill attribute to the text color classes.

TailwindCSS usage example:

const eleventyPluginPhosphoricons = require('eleventy-plugin-phosphoricons');
const resolveConfig = require('tailwindcss/resolveConfig.js')
const tailwindConfig = require('tailwind.config.js')

const fullConfig = resolveConfig(tailwindConfig)
module.exports = function (eleventyConfig) {
    eleventyConfig.addPlugin(eleventyPluginPhosphoricons, {
        class: "phicon",
        style: "vertical-align: middle;",
        size: 32,
        fill: "currentColor",
        transformFill: (color) => {
            const [baseColor, shade] = color.replace('text-', '').split('-');
            return shade ? fullConfig.theme.colors[baseColor][shade] : fullConfig.theme.colors[baseColor]['DEFAULT'];
        }
    });
};

What does it do?

The plugin turns 11ty shortcodes like this:

{% phosphor "phosphor-logo" %}

or

{% phicon "phosphor-logo" %}

into HTML code like this:

<svg xmlns="http://www.w3.org/2000/svg" 
     viewBox="0 0 256 256" 
     fill="currentColor" 
     class="phicon"
     style="vertical-align: middle;"
     width="32" height="32">
    <path d="M144,24H64a8,8,0,0,0-8,8V160a80.09,80.09,0,0,0,80,80,8,8,0,0,0,8-8V168a72,72,0,0,0,0-144ZM72,62.54,122.32,152H72Zm56,66.92L77.68,40H128ZM72.51,168H128v55.5A64.14,64.14,0,0,1,72.51,168ZM144,152V40a56,56,0,0,1,0,112Z"></path>
</svg>

or

{% phicon "phosphor-logo", { render: 'image' } %}

into HTML code like this:

<img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 256 256' fill='currentColor' style='vertical-align: middle;' width='32' height='32'%3E%3Cpath d='M144,24H64a8,8,0,0,0-8,8V160a80.09,80.09,0,0,0,80,80,8,8,0,0,0,8-8V168a72,72,0,0,0,0-144ZM72,62.54,122.32,152H72Zm56,66.92L77.68,40H128ZM72.51,168H128v55.5A64.14,64.14,0,0,1,72.51,168ZM144,152V40a56,56,0,0,1,0,112Z'%3E%3C/path%3E%3C/svg%3E" 
     alt="phosphor-logo" 
     class="phicon" 
     style="vertical-align: middle;" 
     width="32" 
     height="32"
     alt="icon ">

Custom Usage

{% phicon "phosphor-logo", "duotone", { 
    style: "color:red" 
    size: 64,
    class: "phicon bg-blue"
} %}

Contributing

If you notice an issue, feel free to open an issue.

  1. Fork this repo
  2. Clone git clone [email protected]:reatlat/eleventy-plugin-phosphoricons.git
  3. Install dependencies npm install
  4. Build npm run build
  5. Serve locally npm run dev

License

The code is available under the MIT license.