eleventy-plugin-tabler-icons/tablericons.js

48 lines
No EOL
1.3 KiB
JavaScript

import ICONS from './icons.js'
const tablericons = (eleventyConfig, config = {}) => {
const { className = '', errorOnMissing = false } = config
const renderIcon = (context = this, name, alt, attrs) => {
const contents = ICONS[name]
if (!contents) {
handleMissingIcon(name, context.page.inputPath)
return ''
}
return `${head(alt, className, name, attrs)}${contents}${ICONS.TAIL}`
}
const handleMissingIcon = (name, inputPath) => {
const message = `No tablericons found for name '${name}'`
if (errorOnMissing) {
throw new Error(message)
} else {
console.warn(`${message} in ${inputPath}`)
}
}
// Register shortcode for Eleventy 3.0
eleventyConfig.addShortcode('tablericon', (name, alt, attrs) => {
return renderIcon(this, name, alt, attrs)
})
}
const head = (alt, className, iconName, attrs) => {
let output = `${ICONS.HEAD.slice(0, -1)} aria-hidden='true'`
if (className) output += ` class='${className}'`
output += ` data-tablericon-name='${iconName}'`
if (typeof attrs === 'string') {
output += ` ${attrs}`
} else if (attrs && typeof attrs === 'object') {
output += Object.entries(attrs)
.map(([property, value]) => (property && value ? ` ${property}='${value}'` : ''))
.join('')
}
return `${output}>`
}
export default tablericons