(function () { 'use strict'; function escHtml(str) { if (!str) return ''; return str.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); } function buildCardHTML(post, cfg) { var thumbHTML = ''; if (cfg.showImage && post.image) { thumbHTML = '
' + '
' + '' + escHtml(post.title) + '' + '
'; } var metaHTML = ''; if (cfg.showMeta && post.meta) { metaHTML = '
' + escHtml(post.meta) + '
'; } var titleHTML = '

' + escHtml(post.title) + '

'; var excerptHTML = ''; if (cfg.showExcerpt && post.excerpt) { excerptHTML = '

' + escHtml(post.excerpt) + '

'; } var rmHTML = ''; if (cfg.showReadMore) { var rmLabel = escHtml(cfg.rmLabel) + (cfg.rmStyle === 'arrow' ? ' →' : ''); rmHTML = '' + rmLabel + ''; } return '
' + thumbHTML + '
' + metaHTML + titleHTML + excerptHTML + rmHTML + '
'; } function renderGrid(wrap, posts, cfg) { var grid = wrap.querySelector('.bkbg-pg-grid'); if (!grid) { grid = document.createElement('div'); grid.className = 'bkbg-pg-grid'; wrap.appendChild(grid); } if (!posts || !posts.length) { grid.innerHTML = '

' + escHtml(cfg.noPosts) + '

'; return; } grid.innerHTML = posts.map(function (p) { return buildCardHTML(p, cfg); }).join(''); } function initPostGrid(wrap) { var d = wrap.dataset; var cfg = { postType: d.postType || 'post', orderby: d.orderby || 'date', order: d.order || 'desc', perPage: parseInt(d.perPage, 10) || 6, offset: parseInt(d.offset, 10) || 0, excerptLen: parseInt(d.excerptLen,10) || 20, showImage: d.showImage !== '0', showMeta: d.showMeta !== '0', showExcerpt:d.showExcerpt!== '0', showReadMore:d.showRm !== '0', rmLabel: d.rmLabel || 'Read More', rmStyle: d.rmStyle || 'link', noPosts: d.noPosts || 'No posts found.', hover: d.hover || 'zoom' }; var path = (window.blockenbergData && window.blockenbergData.restUrl) ? window.blockenbergData.restUrl + 'blockenberg/v1/post-grid' : '/wp-json/blockenberg/v1/post-grid'; var url = path + '?type=' + encodeURIComponent(cfg.postType) + '&orderby=' + encodeURIComponent(cfg.orderby) + '&order=' + encodeURIComponent(cfg.order) + '&per_page='+ cfg.perPage + '&offset=' + cfg.offset + '&excerpt_len=' + cfg.excerptLen; var grid = wrap.querySelector('.bkbg-pg-grid'); if (!grid) { grid = document.createElement('div'); grid.className = 'bkbg-pg-grid'; wrap.appendChild(grid); } grid.innerHTML = '
Loading…
'; fetch(url, { credentials: 'same-origin' }) .then(function (r) { return r.json(); }) .then(function (res) { renderGrid(wrap, res.posts, cfg); }) .catch(function () { grid.innerHTML = '

Failed to load posts.

'; }); } document.addEventListener('DOMContentLoaded', function () { document.querySelectorAll('.bkbg-pg-wrap').forEach(initPostGrid); }); })();