# blockenberg/2.0.7/blocks/feature-list/frontend.js

Blockenberg — 600+ Advanced Gutenberg Blocks &amp; AI Agent for WordPress Block Editor, version 2.0.7. 175 lines.

- Page: https://pluginprobe.com/plugins/blockenberg/2.0.7/code/blocks/feature-list/frontend.js
- Raw: https://pluginprobe.com/plugins/blockenberg/2.0.7/raw/blocks/feature-list/frontend.js
- Modified: 2026-03-06T12:32:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/blockenberg/2.0.7/code/blocks/feature-list/frontend.js#L10-L20`.

```javascript
(function () {
    function typoCssVarsForEl(typo, prefix, el) {
        if (!typo || typeof typo !== 'object') return;
        var m = {
            family: 'font-family', weight: 'font-weight',
            transform: 'text-transform', style: 'font-style', decoration: 'text-decoration'
        };
        Object.keys(m).forEach(function (k) {
            if (typo[k]) el.style.setProperty(prefix + m[k], typo[k]);
        });
        var r = {
            size: 'font-size', lineHeight: 'line-height',
            letterSpacing: 'letter-spacing', wordSpacing: 'word-spacing'
        };
        Object.keys(r).forEach(function (k) {
            ['Desktop', 'Tablet', 'Mobile'].forEach(function (d, i) {
                var v = typo[k + d];
                if (v === undefined || v === '') return;
                var suffix = ['-d', '-t', '-m'][i];
                var unit = typo[k + 'Unit'] || ('size' === k ? 'px' : (k === 'lineHeight' ? '' : 'px'));
                el.style.setProperty(prefix + r[k] + suffix, v + unit);
            });
        });
    }

    var STATUS_ICONS = {
        'color-check': { included: '✓', 'not-included': '✗', partial: '◐', 'coming-soon': '⏱' },
        'emoji':       { included: '✅', 'not-included': '❌', partial: '🔶', 'coming-soon': '🔜' },
        'minimal':     { included: '•', 'not-included': '–', partial: '~', 'coming-soon': '…' }
    };

    function init() {
        document.querySelectorAll('.bkbg-fl-app').forEach(function (appEl) {
            if (appEl.dataset.rendered) return;
            appEl.dataset.rendered = '1';

            var opts;
            try { opts = JSON.parse(appEl.dataset.opts || '{}'); } catch (e) { opts = {}; }

            var o = Object.assign({
                heading: 'Everything in Pro', showHeading: true,
                items: [], listStyle: 'bordered', iconSet: 'color-check',
                showDesc: true, showBadge: true, showNotIncluded: true, strikeNotIncluded: false,
                iconSize: 20, fontSize: 15, gap: 0, borderRadius: 12,
                paddingTop: 0, paddingBottom: 0,
                bgColor: '', itemBg: '#ffffff', stripeBg: '#f9fafb', borderColor: '#e5e7eb',
                labelColor: '#111827', descColor: '#6b7280', headingColor: '#111827',
                includedColor: '#10b981', notIncludedColor: '#d1d5db',
                partialColor: '#f59e0b', comingSoonColor: '#8b5cf6',
                badgeBg: '#ede9fe', badgeColor: '#7c3aed'
            }, opts);

            function statusColor(s) {
                if (s === 'included')    return o.includedColor;
                if (s === 'not-included') return o.notIncludedColor;
                if (s === 'partial')     return o.partialColor;
                if (s === 'coming-soon') return o.comingSoonColor;
                return o.labelColor;
            }

            function statusIcon(s) {
                var icons = STATUS_ICONS[o.iconSet] || STATUS_ICONS['color-check'];
                return icons[s] || '•';
            }

            /* Wrapper */
            var section = document.createElement('div');
            section.className = 'bkbg-fl-wrap';
            section.style.cssText = [
                o.bgColor ? 'background:' + o.bgColor : '',
                'padding-top:' + o.paddingTop + 'px',
                'padding-bottom:' + o.paddingBottom + 'px'
            ].filter(Boolean).join(';');

            /* CSS vars */
            section.style.setProperty('--fl-border', o.borderColor);
            section.style.setProperty('--fl-radius', o.borderRadius + 'px');
            typoCssVarsForEl(o.typoHeading, '--bkbg-fl-hd-', section);
            typoCssVarsForEl(o.typoLabel, '--bkbg-fl-lb-', section);
            typoCssVarsForEl(o.typoDesc, '--bkbg-fl-ds-', section);

            /* Heading */
            if (o.showHeading && o.heading) {
                var h = document.createElement('h3');
                h.className = 'bkbg-fl-heading';
                h.innerHTML = o.heading;
                h.style.color = o.headingColor;
                section.appendChild(h);
            }

            /* List */
            var list = document.createElement('div');
            list.className = 'bkbg-fl-list style-' + o.listStyle;
            if (o.borderRadius && (o.listStyle === 'card')) {
                list.style.borderRadius = o.borderRadius + 'px';
            }

            var prevGroup = '';
            var displayedIdx = 0;

            (o.items || []).forEach(function (it, idx) {
                if (!o.showNotIncluded && it.status === 'not-included') return;

                /* Group header */
                if (it.group && it.group !== prevGroup) {
                    var g = document.createElement('div');
                    g.className = 'bkbg-fl-group';
                    g.textContent = it.group;
                    g.style.background = o.stripeBg;
                    g.style.color = o.descColor;
                    g.style.borderColor = o.borderColor;
                    list.appendChild(g);
                    prevGroup = it.group;
                }

                var isStriped = o.listStyle === 'striped';
                var rowBg = isStriped && displayedIdx % 2 === 1 ? o.stripeBg : o.itemBg;
                var isNotIncl = it.status === 'not-included';

                var row = document.createElement('div');
                row.className = 'bkbg-fl-row';
                row.style.background = rowBg;
                if (o.listStyle === 'compact' && o.gap > 0) {
                    row.style.marginBottom = o.gap + 'px';
                }

                /* Icon */
                var icon = document.createElement('span');
                icon.className = 'bkbg-fl-icon';
                icon.textContent = statusIcon(it.status);
                icon.style.cssText = 'color:' + statusColor(it.status) + ';font-size:' + o.iconSize + 'px;width:' + o.iconSize + 'px';
                row.appendChild(icon);

                /* Body */
                var body = document.createElement('div');
                body.className = 'bkbg-fl-body';

                var label = document.createElement('div');
                label.className = 'bkbg-fl-label';
                label.textContent = it.label;
                label.style.cssText = 'color:' + (isNotIncl ? o.notIncludedColor : o.labelColor) + (isNotIncl && o.strikeNotIncluded ? ';text-decoration:line-through' : '');
                body.appendChild(label);

                if (o.showDesc && it.description) {
                    var desc = document.createElement('div');
                    desc.className = 'bkbg-fl-desc';
                    desc.textContent = it.description;
                    desc.style.cssText = 'color:' + o.descColor;
                    body.appendChild(desc);
                }

                row.appendChild(body);

                /* Badge */
                if (o.showBadge && it.badge) {
                    var badge = document.createElement('span');
                    badge.className = 'bkbg-fl-badge';
                    badge.textContent = it.badge;
                    badge.style.cssText = 'background:' + o.badgeBg + ';color:' + o.badgeColor;
                    row.appendChild(badge);
                }

                list.appendChild(row);
                displayedIdx++;
            });

            section.appendChild(list);
            appEl.parentNode.insertBefore(section, appEl);
        });
    }

    if (document.readyState !== 'loading') { init(); }
    else { document.addEventListener('DOMContentLoaded', init); }
})();

```
