cops/cops-monocle.js
Sébastien Lucas 7f74a172f6 Change page with keyboard.
--HG--
extra : rebase_source : 15d0fc7283e1cab0dcccfe1483d8085f0c2e3309
2013-09-11 13:59:30 +02:00

178 lines
5.8 KiB
JavaScript

Monocle.DEBUG = true;
(function () {
Monocle.Styles.container.right = "24px";
// Initialize the reader element.
Monocle.Events.listen(
window,
'load',
function () {
var readerOptions = {};
/* PLACE SAVER */
var bkTitle = bookData.getMetaData('title');
var placeSaver = new Monocle.Controls.PlaceSaver(bkTitle);
readerOptions.place = placeSaver.savedPlace();
readerOptions.panels = Monocle.Panels.Marginal;
readerOptions.stylesheet = "body { " +
"color: #210;" +
"font-family: Palatino, Georgia, serif;" +
"}";
/* Initialize the reader */
window.reader = Monocle.Reader(
'reader',
bookData,
readerOptions,
function(reader) {
reader.addControl(placeSaver, 'invisible');
/* SPINNER */
var spinner = Monocle.Controls.Spinner(reader);
reader.addControl(spinner, 'page', { hidden: true });
spinner.listenForUsualDelays('reader');
/* Because the 'reader' element changes size on window resize,
* we should notify it of this event. */
Monocle.Events.listen(
window,
'resize',
function () { window.reader.resized() }
);
Monocle.Events.listen(window.top.document, 'keyup', function(evt) {
var eventCharCode = evt.charCode || evt.keyCode;
var dir = null;
var flipper = reader.Flipper;
if (eventCharCode == 33 || eventCharCode == 37) { // Page down or Left arrow
dir = -1;
} else if (eventCharCode == 34 || eventCharCode == 39 ) { // Page down or Right arrow
dir = 1;
}
if (dir) {
reader.moveTo({ direction: dir });
evt.preventDefault();
}
});
/* MAGNIFIER CONTROL */
var magnifier = new Monocle.Controls.Magnifier(reader);
reader.addControl(magnifier, 'page');
/* The stencil activates internal links */
var stencil = new Monocle.Controls.Stencil(reader);
reader.addControl(stencil);
//stencil.toggleHighlights();
/* BOOK TITLE RUNNING HEAD */
var bookTitle = {}
bookTitle.contentsMenu = Monocle.Controls.Contents(reader);
reader.addControl(bookTitle.contentsMenu, 'popover', { hidden: true });
bookTitle.createControlElements = function () {
var cntr = document.createElement('div');
cntr.className = "bookTitle";
var runner = document.createElement('div');
runner.className = "runner";
runner.innerHTML = reader.getBook().getMetaData('title');
cntr.appendChild(runner);
Monocle.Events.listenForContact(
cntr,
{
start: function (evt) {
if (evt.preventDefault) {
evt.stopPropagation();
evt.preventDefault();
} else {
evt.returnValue = false;
}
reader.showControl(bookTitle.contentsMenu);
}
}
);
return cntr;
}
reader.addControl(bookTitle, 'page');
/* CHAPTER TITLE RUNNING HEAD */
var chapterTitle = {
runners: [],
createControlElements: function (page) {
var cntr = document.createElement('div');
cntr.className = "chapterTitle";
var runner = document.createElement('div');
runner.className = "runner";
cntr.appendChild(runner);
this.runners.push(runner);
this.update(page);
return cntr;
},
update: function (page) {
var place = reader.getPlace(page);
if (place) {
this.runners[page.m.pageIndex].innerHTML = place.chapterTitle();
}
}
}
reader.addControl(chapterTitle, 'page');
reader.listen(
'monocle:pagechange',
function (evt) { chapterTitle.update(evt.m.page); }
);
/* PAGE NUMBER RUNNING HEAD */
var pageNumber = {
runners: [],
createControlElements: function (page) {
var cntr = document.createElement('div');
cntr.className = "pageNumber";
var runner = document.createElement('div');
runner.className = "runner";
cntr.appendChild(runner);
this.runners.push(runner);
this.update(page, page.m.place.pageNumber());
return cntr;
},
update: function (page, pageNumber) {
if (pageNumber) {
this.runners[page.m.pageIndex].innerHTML = pageNumber;
}
}
}
reader.addControl(pageNumber, 'page');
reader.listen(
'monocle:pagechange',
function (evt) {
pageNumber.update(evt.m.page, evt.m.pageNumber);
}
);
/* Scrubber */
var scrubber = new Monocle.Controls.Scrubber(reader);
reader.addControl(scrubber, 'popover', { hidden: true });
var showFn = function (evt) {
evt.stopPropagation();
reader.showControl(scrubber);
scrubber.updateNeedles();
}
for (var i = 0; i < chapterTitle.runners.length; ++i) {
Monocle.Events.listenForContact(
chapterTitle.runners[i].parentNode,
{ start: showFn }
);
Monocle.Events.listenForContact(
pageNumber.runners[i].parentNode,
{ start: showFn }
);
}
}
);
}
);
})();