Calibre OPDS (and HTML) PHP Server : web-based light alternative to Calibre content server / Calibre2OPDS to serve ebooks (epub, mobi, pdf, ...) http://blog.slucas.fr/en/oss/calibre-opds-php-server
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 lines
5.6KB

  1. Monocle.DEBUG = true;
  2. (function () {
  3. Monocle.Styles.container.right = "24px";
  4. // Initialize the reader element.
  5. Monocle.Events.listen(
  6. window,
  7. 'load',
  8. function () {
  9. var readerOptions = {};
  10. /* PLACE SAVER */
  11. var bkTitle = bookData.getMetaData('title');
  12. var placeSaver = new Monocle.Controls.PlaceSaver(bkTitle);
  13. readerOptions.place = placeSaver.savedPlace();
  14. readerOptions.panels = Monocle.Panels.Marginal;
  15. readerOptions.stylesheet = "body { " +
  16. "color: #210;" +
  17. "font-family: Palatino, Georgia, serif;" +
  18. "}";
  19. /* Initialize the reader */
  20. window.reader = Monocle.Reader(
  21. 'reader',
  22. bookData,
  23. readerOptions,
  24. function(reader) {
  25. reader.addControl(placeSaver, 'invisible');
  26. /* SPINNER */
  27. var spinner = Monocle.Controls.Spinner(reader);
  28. reader.addControl(spinner, 'page', { hidden: true });
  29. spinner.listenForUsualDelays('reader');
  30. /* Because the 'reader' element changes size on window resize,
  31. * we should notify it of this event. */
  32. Monocle.Events.listen(
  33. window,
  34. 'resize',
  35. function () { window.reader.resized() }
  36. );
  37. Monocle.Events.listen(window.top.document, 'keyup', function(evt) {
  38. var eventCharCode = evt.charCode || evt.keyCode;
  39. var dir = null;
  40. var flipper = reader.Flipper;
  41. if (eventCharCode == 33 || eventCharCode == 37) { // Page down or Left arrow
  42. dir = -1;
  43. } else if (eventCharCode == 34 || eventCharCode == 39 ) { // Page down or Right arrow
  44. dir = 1;
  45. }
  46. if (dir) {
  47. reader.moveTo({ direction: dir });
  48. evt.preventDefault();
  49. }
  50. });
  51. /* MAGNIFIER CONTROL */
  52. var magnifier = new Monocle.Controls.Magnifier(reader);
  53. reader.addControl(magnifier, 'page');
  54. /* BOOK TITLE RUNNING HEAD */
  55. var bookTitle = {}
  56. bookTitle.contentsMenu = Monocle.Controls.Contents(reader);
  57. reader.addControl(bookTitle.contentsMenu, 'popover', { hidden: true });
  58. bookTitle.createControlElements = function () {
  59. var cntr = document.createElement('div');
  60. cntr.className = "bookTitle";
  61. var runner = document.createElement('div');
  62. runner.className = "runner";
  63. runner.innerHTML = reader.getBook().getMetaData('title');
  64. cntr.appendChild(runner);
  65. Monocle.Events.listenForContact(
  66. cntr,
  67. {
  68. start: function (evt) {
  69. if (evt.preventDefault) {
  70. evt.stopPropagation();
  71. evt.preventDefault();
  72. } else {
  73. evt.returnValue = false;
  74. }
  75. reader.showControl(bookTitle.contentsMenu);
  76. }
  77. }
  78. );
  79. return cntr;
  80. }
  81. reader.addControl(bookTitle, 'page');
  82. /* CHAPTER TITLE RUNNING HEAD */
  83. var chapterTitle = {
  84. runners: [],
  85. createControlElements: function (page) {
  86. var cntr = document.createElement('div');
  87. cntr.className = "chapterTitle";
  88. var runner = document.createElement('div');
  89. runner.className = "runner";
  90. cntr.appendChild(runner);
  91. this.runners.push(runner);
  92. this.update(page);
  93. return cntr;
  94. },
  95. update: function (page) {
  96. var place = reader.getPlace(page);
  97. if (place) {
  98. this.runners[page.m.pageIndex].innerHTML = place.chapterTitle();
  99. }
  100. }
  101. }
  102. reader.addControl(chapterTitle, 'page');
  103. reader.listen(
  104. 'monocle:pagechange',
  105. function (evt) { chapterTitle.update(evt.m.page); }
  106. );
  107. /* PAGE NUMBER RUNNING HEAD */
  108. var pageNumber = {
  109. runners: [],
  110. createControlElements: function (page) {
  111. var cntr = document.createElement('div');
  112. cntr.className = "pageNumber";
  113. var runner = document.createElement('div');
  114. runner.className = "runner";
  115. cntr.appendChild(runner);
  116. this.runners.push(runner);
  117. this.update(page, page.m.place.pageNumber());
  118. return cntr;
  119. },
  120. update: function (page, pageNumber) {
  121. if (pageNumber) {
  122. this.runners[page.m.pageIndex].innerHTML = pageNumber;
  123. }
  124. }
  125. }
  126. reader.addControl(pageNumber, 'page');
  127. reader.listen(
  128. 'monocle:pagechange',
  129. function (evt) {
  130. pageNumber.update(evt.m.page, evt.m.pageNumber);
  131. }
  132. );
  133. /* Scrubber */
  134. var scrubber = new Monocle.Controls.Scrubber(reader);
  135. reader.addControl(scrubber, 'popover', { hidden: true });
  136. var showFn = function (evt) {
  137. evt.stopPropagation();
  138. reader.showControl(scrubber);
  139. scrubber.updateNeedles();
  140. }
  141. for (var i = 0; i < chapterTitle.runners.length; ++i) {
  142. Monocle.Events.listenForContact(
  143. chapterTitle.runners[i].parentNode,
  144. { start: showFn }
  145. );
  146. Monocle.Events.listenForContact(
  147. pageNumber.runners[i].parentNode,
  148. { start: showFn }
  149. );
  150. }
  151. }
  152. );
  153. }
  154. );
  155. })();