mirror of
https://github.com/astefanutti/decktape.git
synced 2024-12-12 13:49:13 +03:00
79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
exports.help =
|
|
`Requires the bespoke-extern module to expose the Bespoke.js API to a global variable named
|
|
'bespoke' and provides access to the collection of deck instances via 'bespoke.decks
|
|
and the most recent deck via 'bespoke.deck'.`;
|
|
|
|
exports.create = page => new Bespoke(page);
|
|
|
|
class Bespoke {
|
|
|
|
constructor(page) {
|
|
this.page = page;
|
|
}
|
|
|
|
getName() {
|
|
return 'Bespoke.js';
|
|
}
|
|
|
|
isActive() {
|
|
return this.page.evaluate(_ => (window.bespoke || {}).deck ? (deck = bespoke.deck) : false);
|
|
}
|
|
|
|
configure() {
|
|
return this.page.evaluate(_ => {
|
|
document.body.classList.add('export');
|
|
if (deck.parent.classList.contains('bespoke-overview'))
|
|
deck.fire('overview');
|
|
deck.slide(0);
|
|
// Advance to last build on first slide (internal state in bespoke-bullets makes this tricky)
|
|
const builds = 0;
|
|
const one = deck.slides.length === 1;
|
|
if (one)
|
|
deck.slides.push(document.createElement('section'));
|
|
do
|
|
++builds && deck.next();
|
|
while (deck.slide() === 0);
|
|
for (let i = 0; i < builds; i++)
|
|
i === 0 ? deck.slide(0) : deck.next();
|
|
if (one)
|
|
deck.slides.splice(-1, 1);
|
|
});
|
|
}
|
|
|
|
size() {
|
|
return this.page.evaluate(_ => {
|
|
const style = getComputedStyle(deck.slides[0]);
|
|
return {
|
|
width : parseInt(style.width, 10),
|
|
height : parseInt(style.height, 10),
|
|
};
|
|
});
|
|
}
|
|
|
|
slideCount() {
|
|
return this.page.evaluate(_ => deck.slides.length);
|
|
}
|
|
|
|
currentSlideIndex() {
|
|
return this.page.evaluate(_ => deck.slide() + 1);
|
|
}
|
|
|
|
nextSlide() {
|
|
return this.page.evaluate(_ => {
|
|
// Advance to last build on next slide (internal state in bespoke-bullets makes this tricky)
|
|
const next = deck.slide() + 1;
|
|
const beforeLast = next === deck.slides.length - 1;
|
|
const builds = 0;
|
|
if (beforeLast)
|
|
deck.slides.push(document.createElement('section'));
|
|
do
|
|
++builds && deck.next();
|
|
while (deck.slide() <= next);
|
|
for (let i = 1; i < builds; i++)
|
|
i === 1 ? deck.slide(next) : deck.next();
|
|
if (beforeLast)
|
|
deck.slides.splice(-1, 1);
|
|
});
|
|
}
|
|
}
|