# blockenberg/2.0.7/blocks/logo-ticker/frontend.js

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

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

```javascript
wp.domReady(function () {
    document.querySelectorAll('.bkbg-lt-app').forEach(function (app) {
        var opts = {};
        try { opts = JSON.parse(app.getAttribute('data-opts') || '{}'); } catch (e) {}

        var logos        = opts.logos        || [];
        var speed        = opts.speed        || 30;
        var direction    = opts.direction    || 'left';
        var pauseOnHover = opts.pauseOnHover !== false;
        var gap          = opts.gap          || 48;
        var height       = opts.height       || 48;
        var logoFilter   = opts.logoFilter   || 'grayscale-hover';

        var validLogos = logos.filter(function (l) { return l.imageUrl; });
        if (validLogos.length === 0) {
            app.parentNode.removeChild(app);
            return;
        }

        // Build wrapper
        var wrap = document.createElement('div');
        wrap.className = 'bkbg-lt-wrap bkbg-lt-wrap--filter-' + logoFilter;
        if (opts.bgColor) {
            wrap.style.setProperty('--bkbg-lt-bg', opts.bgColor);
            wrap.style.background = opts.bgColor;
        }
        if (opts.borderTop)    wrap.style.borderTop    = '1px solid ' + (opts.borderColor || '#e5e7eb');
        if (opts.borderBottom) wrap.style.borderBottom = '1px solid ' + (opts.borderColor || '#e5e7eb');
        wrap.style.paddingTop    = (opts.paddingTop    || 40) + 'px';
        wrap.style.paddingBottom = (opts.paddingBottom || 40) + 'px';
        wrap.style.setProperty('--bkbg-lt-speed', speed + 's');

        // Track (duplicated for seamless loop)
        var trackClass = 'bkbg-lt-track bkbg-lt-track--' + direction;
        if (pauseOnHover) trackClass += ' bkbg-lt-track--pause';
        var track = document.createElement('div');
        track.className = trackClass;

        function buildItem(logo) {
            var item = document.createElement('div');
            item.className = 'bkbg-lt-item';
            item.style.marginRight = gap + 'px';

            var img = document.createElement('img');
            img.src    = logo.imageUrl;
            img.alt    = logo.imageAlt || '';
            img.height = height;
            img.style.height = height + 'px';
            img.loading = 'lazy';

            if (logo.linkUrl) {
                var a = document.createElement('a');
                a.href   = logo.linkUrl;
                a.target = '_blank';
                a.rel    = 'noopener noreferrer';
                a.appendChild(img);
                item.appendChild(a);
            } else {
                item.appendChild(img);
            }

            return item;
        }

        // Build items × 2 for seamless loop
        validLogos.forEach(function (logo) { track.appendChild(buildItem(logo)); });
        validLogos.forEach(function (logo) { track.appendChild(buildItem(logo)); });

        wrap.appendChild(track);
        app.parentNode.replaceChild(wrap, app);
    });
});

```
