You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
// Hypothesis Customized embedding
|
|
// This hypothesis config function returns a new constructor which modifies
|
|
// annotator for a better integration. Below we create our own EpubAnnotationSidebar
|
|
// Constructor, customizing the show and hide function to take acount for the reader UI.
|
|
|
|
window.hypothesisConfig = function() {
|
|
var Annotator = window.Annotator;
|
|
var $main = $("#main");
|
|
|
|
function EpubAnnotationSidebar(elem, options) {
|
|
options = {
|
|
server: true,
|
|
origin: true,
|
|
showHighlights: true,
|
|
Toolbar: {container: '#annotation-controls'}
|
|
}
|
|
|
|
Annotator.Host.call(this, elem, options);
|
|
}
|
|
|
|
EpubAnnotationSidebar.prototype = Object.create(Annotator.Host.prototype);
|
|
|
|
EpubAnnotationSidebar.prototype.show = function() {
|
|
this.frame.css({
|
|
'margin-left': (-1 * this.frame.width()) + "px"
|
|
});
|
|
this.frame.removeClass('annotator-collapsed');
|
|
if (!$main.hasClass('single')) {
|
|
$main.addClass("single");
|
|
this.toolbar.find('[name=sidebar-toggle]').removeClass('h-icon-chevron-left').addClass('h-icon-chevron-right');
|
|
this.setVisibleHighlights(true);
|
|
}
|
|
};
|
|
|
|
EpubAnnotationSidebar.prototype.hide = function() {
|
|
this.frame.css({
|
|
'margin-left': ''
|
|
});
|
|
this.frame.addClass('annotator-collapsed');
|
|
if ($main.hasClass('single')) {
|
|
$main.removeClass("single");
|
|
this.toolbar.find('[name=sidebar-toggle]').removeClass('h-icon-chevron-right').addClass('h-icon-chevron-left');
|
|
this.setVisibleHighlights(false);
|
|
}
|
|
};
|
|
|
|
return {
|
|
constructor: EpubAnnotationSidebar,
|
|
}
|
|
};
|
|
|
|
// This is the Epub.js plugin. Annotations are updated on location change.
|
|
EPUBJS.reader.plugins.HypothesisController = function (Book) {
|
|
var reader = this;
|
|
var $main = $("#main");
|
|
|
|
var updateAnnotations = function () {
|
|
var annotator = Book.renderer.render.window.annotator;
|
|
if (annotator && annotator.constructor.$) {
|
|
var annotations = getVisibleAnnotations(annotator.constructor.$);
|
|
annotator.showAnnotations(annotations)
|
|
}
|
|
};
|
|
|
|
var getVisibleAnnotations = function ($) {
|
|
var width = Book.renderer.render.iframe.clientWidth;
|
|
return $('.annotator-hl').map(function() {
|
|
var $this = $(this),
|
|
left = this.getBoundingClientRect().left;
|
|
|
|
if (left >= 0 && left <= width) {
|
|
return $this.data('annotation');
|
|
}
|
|
}).get();
|
|
};
|
|
|
|
Book.on("renderer:locationChanged", updateAnnotations);
|
|
|
|
return {}
|
|
};
|