# blockenberg/2.0.7/blocks/awards/frontend.js

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

- Page: https://pluginprobe.com/plugins/blockenberg/2.0.7/code/blocks/awards/frontend.js
- Raw: https://pluginprobe.com/plugins/blockenberg/2.0.7/raw/blocks/awards/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/awards/frontend.js#L10-L20`.

```javascript
(function () {

    function hexLuma(hex) {
        if (!hex) return 0;
        var c = hex.replace('#','');
        if (c.length === 3) c = c[0]+c[0]+c[1]+c[1]+c[2]+c[2];
        var r = parseInt(c.substr(0,2),16), g = parseInt(c.substr(2,2),16), b = parseInt(c.substr(4,2),16);
        return 0.299*r + 0.587*g + 0.114*b;
    }

    function buildAwardCard(aw, opts) {
        var card = document.createElement('div');
        card.className = 'bkbg-aw-card';

        if (aw.url) {
            card.style.cursor = 'pointer';
            card.addEventListener('click', function () { window.open(aw.url, '_blank', 'noopener'); });
        }

        /* Icon */
        var iconWrap = document.createElement('div');
        iconWrap.className = 'bkbg-aw-icon-wrap';
        iconWrap.style.background = aw.color || '';
        var iconTextColor = hexLuma(aw.color || '#6c3fb5') > 140 ? '#333' : '#fff';
        iconWrap.style.color = iconTextColor;

        if (aw.imageUrl) {
            var img = document.createElement('img');
            img.src = aw.imageUrl; img.alt = aw.title;
            iconWrap.appendChild(img);
        } else {
            var iconSpan = document.createElement('span');
            var _IP = window.bkbgIconPicker;
            var _iType = aw.iconType || 'custom-char';
            if (_IP && _iType !== 'custom-char') {
                var _in = _IP.buildFrontendIcon(_iType, aw.icon, aw.iconDashicon, aw.iconImageUrl, aw.iconDashiconColor);
                if (_in) iconSpan.appendChild(_in);
                else iconSpan.textContent = aw.icon || '🏆';
            } else {
                iconSpan.textContent = aw.icon || '🏆';
            }
            iconWrap.appendChild(iconSpan);
        }
        card.appendChild(iconWrap);

        /* Content */
        var content = document.createElement('div');
        content.className = 'bkbg-aw-content';

        var titleRow = document.createElement('div');
        titleRow.className = 'bkbg-aw-title-row';

        var awardTitle = document.createElement('p');
        awardTitle.className = 'bkbg-aw-award-title';
        awardTitle.textContent = aw.title;
        titleRow.appendChild(awardTitle);

        if (opts.showYear && aw.year) {
            var year = document.createElement('span');
            year.className = 'bkbg-aw-year';
            year.textContent = aw.year;
            titleRow.appendChild(year);
        }
        content.appendChild(titleRow);

        if (opts.showIssuer && aw.issuer) {
            var issuer = document.createElement('p');
            issuer.className = 'bkbg-aw-issuer';
            issuer.textContent = aw.issuer;
            content.appendChild(issuer);
        }

        if (opts.showDesc && aw.description) {
            var desc = document.createElement('p');
            desc.className = 'bkbg-aw-desc';
            desc.textContent = aw.description;
            content.appendChild(desc);
        }

        card.appendChild(content);
        return card;
    }

    function initAwards(wrapper) {
        if (wrapper.dataset.initialized) return;
        wrapper.dataset.initialized = '1';

        var gridEl = wrapper.querySelector('.bkbg-aw-grid');
        if (!gridEl) return;

        var awards = [];
        try { awards = JSON.parse(gridEl.getAttribute('data-awards') || '[]'); } catch (e) {}

        var opts = {
            layout:   gridEl.getAttribute('data-layout')      || 'grid',
            showYear: gridEl.getAttribute('data-show-year')   === '1',
            showIssuer: gridEl.getAttribute('data-show-issuer') === '1',
            showDesc: gridEl.getAttribute('data-show-desc')   === '1',
        };

        if (opts.layout === 'list') {
            gridEl.classList.remove('bkbg-aw-grid');
            gridEl.classList.add('bkbg-aw-list');
        }

        awards.forEach(function (aw) {
            gridEl.appendChild(buildAwardCard(aw, opts));
        });

        /* Staggered entrance animation */
        var cards = gridEl.querySelectorAll('.bkbg-aw-card');
        if ('IntersectionObserver' in window) {
            var obs = new IntersectionObserver(function (entries) {
                entries.forEach(function (e) {
                    if (e.isIntersecting) {
                        var idx = Array.prototype.indexOf.call(cards, e.target);
                        setTimeout(function () { e.target.classList.add('is-visible'); }, idx * 80);
                        obs.unobserve(e.target);
                    }
                });
            }, { threshold: 0.1 });
            cards.forEach(function (c) { obs.observe(c); });
        } else {
            cards.forEach(function (c) { c.classList.add('is-visible'); });
        }
    }

    function init() {
        document.querySelectorAll('.bkbg-aw-wrapper').forEach(initAwards);
    }

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

```
