# blockenberg/2.0.8/blocks/study-notes/frontend.js

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

- Page: https://pluginprobe.com/plugins/blockenberg/2.0.8/code/blocks/study-notes/frontend.js
- Raw: https://pluginprobe.com/plugins/blockenberg/2.0.8/raw/blocks/study-notes/frontend.js
- Modified: 2026-04-25T20:34:06+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.8/code/blocks/study-notes/frontend.js#L10-L20`.

```javascript
(function () {
    'use strict';

    function mk(tag, cls, styles) {
        var d = document.createElement(tag);
        if (cls) d.className = cls;
        if (styles) Object.keys(styles).forEach(function (k) { d.style[k] = styles[k]; });
        return d;
    }
    function tx(tag, cls, text, styles) {
        var d = mk(tag, cls, styles);
        d.textContent = text;
        return d;
    }
    function ap(parent) {
        Array.prototype.slice.call(arguments, 1).forEach(function (c) { if (c) parent.appendChild(c); });
        return parent;
    }

    var _typoKeys = {
        family: 'font-family', sizeDesktop: 'font-size-d', sizeTablet: 'font-size-t',
        sizeMobile: 'font-size-m', lineHeightDesktop: 'line-height-d', lineHeightTablet: 'line-height-t',
        lineHeightMobile: 'line-height-m', letterSpacingDesktop: 'letter-spacing-d',
        letterSpacingTablet: 'letter-spacing-t', letterSpacingMobile: 'letter-spacing-m',
        wordSpacingDesktop: 'word-spacing-d', wordSpacingTablet: 'word-spacing-t',
        wordSpacingMobile: 'word-spacing-m', weight: 'font-weight', style: 'font-style',
        decoration: 'text-decoration', transform: 'text-transform'
    };
    function typoCssVarsForEl(el, obj, prefix) {
        if (!obj || typeof obj !== 'object') return;
        Object.keys(obj).forEach(function (k) {
            var css = _typoKeys[k]; if (!css) return;
            var v = obj[k]; if (v === '' || v === undefined || v === null) return;
            el.style.setProperty(prefix + css, String(v));
        });
    }

    function init() {
        document.querySelectorAll('.bkbg-study-notes-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({
                subject: 'Subject',
                topic: 'Topic',
                source: '',
                noteDate: '',
                showSubject: true,
                showSource: true,
                showDate: true,
                layout: 'cornell',
                cueWidth: 30,
                notes: [],
                summary: '',
                showSummary: true,
                summaryLabel: 'Summary',
                keyTerms: [],
                showKeyTerms: true,
                keyTermsLabel: 'Key Terms',
                tags: [],
                showTags: true,
                fontSize: 14,
                titleFontSize: 20,
                lineHeight: 170,
                borderRadius: 10,
                bgColor: '#ffffff',
                borderColor: '#d1d5db',
                headerBg: '#1e3a5f',
                headerColor: '#ffffff',
                cueBg: '#f8fafc',
                cueColor: '#1e40af',
                cueBorderColor: '#e2e8f0',
                notesBg: '#ffffff',
                notesColor: '#374151',
                rowBorderColor: '#e5e7eb',
                summaryBg: '#fefce8',
                summaryColor: '#1c1917',
                summaryBorderColor: '#fde68a',
                keyTermsBg: '#f0f9ff',
                keyTermsColor: '#0f172a',
                keyTermsBorderColor: '#bae6fd',
                termColor: '#0369a1',
                tagBg: '#e0e7ff',
                tagColor: '#3730a3',
                accentColor: '#3b82f6'
            }, opts);

            var br = (o.borderRadius || 10) + 'px';
            var fs = (o.fontSize || 14) + 'px';
            var lh = ((o.lineHeight || 170) / 100).toFixed(2);

            var block = mk('div', 'bkbg-sn-block', {
                background: o.bgColor,
                border: '1px solid ' + o.borderColor,
                borderRadius: br,
                overflow: 'hidden'
            });
            block.style.setProperty('--bkbg-sn-row-border',  o.rowBorderColor  || '#e5e7eb');
            block.style.setProperty('--bkbg-sn-cue-border',  o.cueBorderColor  || '#e2e8f0');
            block.style.setProperty('--bkbg-sn-lh',          lh);
            typoCssVarsForEl(block, o.titleTypo, '--bksn-tt-');
            typoCssVarsForEl(block, o.textTypo,  '--bksn-tx-');

            // ── Header ─────────────────────────────────────────────
            var header = mk('div', 'bkbg-sn-header', {
                background: o.headerBg,
                color: o.headerColor,
                borderRadius: br.replace('px', '') === '0' ? '0' : (o.borderRadius) + 'px ' + (o.borderRadius) + 'px 0 0'
            });

            var topRow = mk('div', null, { display: 'flex', alignItems: 'baseline', flexWrap: 'wrap', gap: '10px' });
            var topicEl = tx('h3', 'bkbg-sn-topic', o.topic, { margin: '0', color: o.headerColor });
            ap(topRow, topicEl);
            if (o.showSubject && o.subject) {
                ap(topRow, tx('span', 'bkbg-sn-subject-badge', o.subject));
            }

            var meta = mk('div', 'bkbg-sn-meta');
            if (o.showSource && o.source) ap(meta, tx('span', null, '📖 ' + o.source));
            if (o.showDate   && o.noteDate) ap(meta, tx('span', null, '📅 ' + o.noteDate));

            ap(header, topRow, meta);
            ap(block, header);

            // ── Column stripe (cornell only) ───────────────────────
            if (o.layout === 'cornell') {
                var stripe = mk('div', 'bkbg-sn-col-stripe', { background: o.accentColor });
                var cueS   = mk('div', 'bkbg-sn-col-stripe-cue', { width: (o.cueWidth || 30) + '%' });
                cueS.textContent = 'Cues / Questions';
                var notesS = mk('div', 'bkbg-sn-col-stripe-notes');
                notesS.textContent = 'Notes';
                ap(stripe, cueS, notesS);
                ap(block, stripe);
            }

            // ── Notes rows ────────────────────────────────────────
            var layoutClass = 'bkbg-sn-notes' +
                (o.layout === 'linear' ? ' is-linear' : '') +
                (o.layout === 'cards'  ? ' is-cards'  : '');
            var notesWrap = mk('div', layoutClass, { background: o.layout === 'cards' ? 'transparent' : o.notesBg, border: o.layout === 'cards' ? 'none' : '1px solid ' + o.borderColor, borderTop: 'none' });

            (o.notes || []).forEach(function (note) {
                var row = mk('div', 'bkbg-sn-row');
                var cueDiv = mk('div', 'bkbg-sn-cue', { width: (o.cueWidth || 30) + '%', background: o.cueBg, color: o.cueColor });
                cueDiv.textContent = note.cue || '';

                var noteDiv = mk('div', 'bkbg-sn-note-text', { color: o.notesColor, background: o.notesBg });
                noteDiv.textContent = note.content || '';

                ap(row, cueDiv, noteDiv);
                ap(notesWrap, row);
            });

            ap(block, notesWrap);

            // ── Summary ────────────────────────────────────────────
            if (o.showSummary && o.summary) {
                var sumSec = mk('div', 'bkbg-sn-summary-section', {
                    background: o.summaryBg,
                    color: o.summaryColor,
                    borderColor: o.summaryBorderColor,
                    margin: '14px 14px 0'
                });
                ap(sumSec,
                    tx('span', 'bkbg-sn-section-label', o.summaryLabel || 'Summary', { color: o.summaryColor }),
                    tx('p', 'bkbg-sn-summary-text', o.summary)
                );
                ap(block, sumSec);
            }

            // ── Key Terms ─────────────────────────────────────────
            if (o.showKeyTerms && o.keyTerms && o.keyTerms.length) {
                var termSec = mk('div', 'bkbg-sn-terms-section', {
                    background: o.keyTermsBg,
                    color: o.keyTermsColor,
                    borderColor: o.keyTermsBorderColor,
                    margin: '12px 14px 0'
                });
                ap(termSec, tx('span', 'bkbg-sn-section-label', o.keyTermsLabel || 'Key Terms', { color: o.keyTermsColor }));

                var ul = mk('ul', 'bkbg-sn-terms-list');
                o.keyTerms.forEach(function (t) {
                    var li = mk('li', 'bkbg-sn-term-item');
                    ap(li,
                        tx('span', 'bkbg-sn-term-word', t.term, { color: o.termColor }),
                        tx('span', 'bkbg-sn-term-def',  t.definition, { color: o.keyTermsColor })
                    );
                    ap(ul, li);
                });
                ap(termSec, ul);
                ap(block, termSec);
            }

            // ── Tags ──────────────────────────────────────────────
            if (o.showTags && o.tags && o.tags.length) {
                var tagsWrap = mk('div', 'bkbg-sn-tags', { padding: '0 14px 14px', marginTop: '12px' });
                o.tags.forEach(function (tag) {
                    if (!tag) return;
                    ap(tagsWrap, tx('span', 'bkbg-sn-tag', tag, { background: o.tagBg, color: o.tagColor }));
                });
                ap(block, tagsWrap);
            } else {
                block.style.paddingBottom = '4px';
            }

            appEl.parentNode.insertBefore(block, appEl);
            appEl.style.display = 'none';
        });
    }

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

```
