bespoke-pdf
Version:
PDF plugin for Bespoke.js
80 lines (66 loc) • 1.95 kB
JavaScript
/* global BESPOKE_PDF */
module.exports = function(options) {
options = options || {};
options.delay = options.delay || 250;
options.evalDelay = options.evalDelay || 100;
return function(deck) {
if (!(window.__nwWindowId && window.nwDispatcher)) {
return;
}
window.BESPOKE_PDF = Object.create(deck);
if (options.setup instanceof Function) { options.setup(BESPOKE_PDF); }
document.documentElement.classList.add('pdf');
BESPOKE_PDF.once = function (evt, cb) {
var off = BESPOKE_PDF.on(evt, function (e) {
off();
cb(e);
});
};
BESPOKE_PDF.when = function (evt) {
//NOTE: we're in the NW.js environment - it's chrome,
//chrome has es6 Promise
return new Promise(function (resolve) {
BESPOKE_PDF.once(evt, function (e) {
resolve(e);
});
});
};
BESPOKE_PDF.slides
.map(function (el) {
return {
element: el,
headline: el.querySelector('h1') ||
el.querySelector('h2') ||
el.querySelector('h3') ||
el.querySelector('h4') ||
el.querySelector('h5') ||
el.querySelector('li') ||
el.querySelector('p') ||
el.querySelector('span')
};
})
.map(function (slide) {
if (!slide.headline) { return; }
slide.element.dataset.pdfId = slide
.headline
.innerText
.trim()
.toLowerCase()
.split(' ')
.join('-');
return slide.element;
})
.filter(Boolean)
.map(getComputedStyle)
.map(function (style, i) {
return style.display === 'none' && i;
})
.filter(function (n) {
return typeof n === 'number';
})
.forEach(function(index) {
BESPOKE_PDF.slides.splice(index, 1);
});
BESPOKE_PDF.options = options;
};
};