// E-book Reader component
|
|
var EbookReader = {
|
|
template: `
|
|
<div>
|
|
<div id="left" class="reader-left" v-on:click="previousPage()"></div>
|
|
<div id="area" class="reader-area"></div>
|
|
<div id="right" class="reader-right" v-on:click="nextPage()"></div>
|
|
</div>`,
|
|
data: function() {
|
|
return {
|
|
rendition: null
|
|
};
|
|
},
|
|
methods: {
|
|
computeScreenSize: function() {
|
|
var canvas = document.getElementById("canvas") || document.getElementById("body");
|
|
var canvas_height = canvas.offsetHeight;
|
|
var canvas_width = canvas.offsetWidth-100;
|
|
return { width: canvas_width, height: canvas_height };
|
|
},
|
|
|
|
render: function(book, location) {
|
|
if (this.rendition) {
|
|
this.rendition.clear();
|
|
this.rendition.destroy();
|
|
}
|
|
var options = this.computeScreenSize();
|
|
document.getElementById("left").style.height = options.height + "px";
|
|
document.getElementById("right").style.height = options.height + "px";
|
|
this.rendition = book.renderTo("area", options);
|
|
this.rendition.display(location);
|
|
},
|
|
|
|
nextPage: function() {
|
|
if (this.rendition != null) {
|
|
var vm = this;
|
|
var location = vm.getLocation();
|
|
vm.rendition.next().then(function() {},
|
|
function() {vm.rendition.display(location)}
|
|
);
|
|
document.getElementById("right").classList.add("reader-right-sel");
|
|
setTimeout(function() {
|
|
document.getElementById("right").classList.remove("reader-right-sel");
|
|
}, 100);
|
|
}
|
|
},
|
|
|
|
previousPage: function() {
|
|
if (this.rendition != null) {
|
|
var vm = this;
|
|
var location = vm.getLocation();
|
|
vm.rendition.prev().then(function() {},
|
|
function() {vm.rendition.display(location)}
|
|
);;
|
|
document.getElementById("left").classList.add("reader-left-sel");
|
|
setTimeout(function() {
|
|
document.getElementById("left").classList.remove("reader-left-sel");
|
|
}, 100);
|
|
}
|
|
},
|
|
|
|
getLocation: function() {
|
|
return this.rendition.currentLocation().start.cfi;
|
|
}
|
|
}
|
|
};
|