templates/frontend/epaper/index.html.twig line 1

Open in your IDE?
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
  5. <link rel="stylesheet" href="{{ asset('bundles/app/frontend/dist/styles.css') }}?v={{ parameters.app_version }}">
  6. <link rel="stylesheet" href="{{ asset('bundles/app/frontend/js/pdfviewer/samples/style.css') }}" />
  7. <script src="{{ asset('bundles/app/frontend/js/pdfviewer/lib/webviewer.min.js') }}"></script>
  8. <script src="{{ asset('bundles/app/frontend/js/pdfviewer/samples/old-browser-checker.js') }}"></script>
  9. <script src="{{ asset('bundles/app/frontend/js/pdfviewer/samples/global.js') }}"></script>
  10. <title>Urner Wochenblatt - E-Paper</title>
  11. {# <script src="{{ asset('bundles/app/frontend/js/pdfviewer/samples/modernizr.custom.min.js') }}"></script>#}
  12. </head>
  13. <body>
  14. <header>
  15. <div class="title sample">
  16. <a href="{{ path('fe.home') }}">Urner Wochenblatt</a>
  17. </div>
  18. <div class="links">
  19. <a href="{{ path('fe.home') }}">Startseite</a> | <a href="{{ path('fe.abo_logout') }}">Abmelden</a><br>&nbsp;
  20. </div>
  21. </header>
  22. <aside>
  23. {% for ausgabe in ausgabenMitBild %}
  24. <p>
  25. <a class="image-select" data-target="{{ path('fe.epaper.pdf', {'filename': ausgabe.filename}) }}" href="#">
  26. <img src="{{ path('fe.epaper.image', {'filename': ausgabe.filename|lower|replace({'.pdf':'.jpg'})}) }}" style="border:1px solid #ededed;max-width: 199px"><br>
  27. <span>
  28. <b>{{ ausgabe | uwAusgabeName }}</b> {{ ausgabe | uwAusgabeDate | format_datetime(pattern="d. MMMM", locale='de') }}
  29. </span>
  30. </a>
  31. </p>
  32. {% endfor%}
  33. <select class="mb-3" id="js-select" style="width: 100%">
  34. <option value="">Alle Ausgaben</option>
  35. {% for ausgabe in ausgaben %}
  36. {% if ausgabe | uwAusgabeDate < date() %}
  37. <option value="{{ path('fe.epaper.pdf', {'filename': ausgabe.filename}) }}">
  38. {{ ausgabe | uwAusgabeName }}
  39. {{ ausgabe | uwAusgabeDate | format_datetime(pattern="d. MMMM", locale='de') }}
  40. </option>
  41. {% endif %}
  42. {% endfor%}
  43. </select>
  44. </aside>
  45. <div id="viewer"></div>
  46. {% set showFullArticle = abonnent_authenticated() or is_granted('MODULE_ARTIKEL') %}
  47. {% if not showFullArticle %}
  48. {% set titelShort = "E-Paper" %}
  49. {% set titel = "Das E-Paper steht nur unseren E-Paper-Abonnenten zur Verfügung." %}
  50. {% include "frontend/_partials/_paywall.html.twig" %}
  51. {% endif %}
  52. <script src="{{ asset('bundles/app/frontend/js/pdfviewer/samples/menu-button.js') }}"></script>
  53. <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
  54. <script async src="{{ asset('bundles/app/frontend/dist/scripts.js') }}?v={{ parameters.app_version }}"></script>
  55. <!--ga-tag-->
  56. <script>
  57. WebViewer({
  58. licenseKey: '{{ parameters.pdf_js_licence }}',
  59. path: '{{ asset('bundles/app/frontend/js/pdfviewer/lib') }}', // path to the PDF.js Express'lib' folder on your server
  60. {% if showFullArticle %}
  61. initialDoc: '{{ path('fe.epaper.pdf', {'filename': lastIssue.pdf}) }}',
  62. {% endif %}
  63. }, document.getElementById('viewer'))
  64. .then(instance => {
  65. // now you can access APIs through the WebViewer instance
  66. const { Core, UI } = instance;
  67. const { Tools } = instance.Core;
  68. var currentPageNumber = 1;
  69. instance.UI.disableElements(['thumbnailsSizeSlider','downloadButton','themeChangeButton','languageButton','panToolButton','selectToolButton','textSelectButton','menuButton']);
  70. instance.UI.disableFeatures([instance.UI.Feature.Annotations]);
  71. instance.UI.setLanguage('de');
  72. instance.UI.setHeaderItems((header) => {
  73. header.getHeader('default').push(
  74. {
  75. img: "icon-header-full-screen",
  76. index: -1,
  77. type: "actionButton",
  78. element: 'fullScreenButton',
  79. hidden: [ 'small-mobile','mobile','tablet' ],
  80. onClick: () => {
  81. instance.UI.toggleFullScreen()
  82. }
  83. },
  84. {
  85. img: 'icon-header-print-line',
  86. index: -1,
  87. type: "actionButton",
  88. element: 'printButton',
  89. onClick: () => {
  90. printCurrentPage()
  91. }
  92. });
  93. });
  94. //Set Hand Tool by Default
  95. const panTool = Tools.ToolNames.PAN;
  96. instance.UI.setToolMode(panTool);
  97. // PDF nach dem Laden, auf die Fensterbreite aufziehen
  98. // https://pdfjs.express/documentation/changelog/8.6.0
  99. Core.documentViewer.addEventListener('documentLoaded', () => {
  100. instance.setFitMode(instance.FitMode.FitWidth);
  101. });
  102. // C+P
  103. Core.documentViewer.addEventListener('keyDown', (e) => {
  104. if((e.ctrlKey || e.metaKey) && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
  105. printCurrentPage();
  106. e.cancelBubble = true;
  107. e.preventDefault();
  108. e.stopImmediatePropagation();
  109. }
  110. //usePrintButton(e);
  111. });
  112. document.getElementById('js-select').onchange = e => {
  113. instance.UI.loadDocument(e.target.value);
  114. //Close Aside when Burger is active
  115. if (menuButton.offsetParent !== null) {
  116. asideElement.style.display = 'none';
  117. }
  118. };
  119. const imageSelects = document.getElementsByClassName("image-select");
  120. const loadDocument = function() {
  121. let attribute = this.getAttribute("data-target");
  122. instance.UI.loadDocument(attribute);
  123. //Close Aside when Burger is active
  124. if (menuButton.offsetParent !== null) {
  125. asideElement.style.display = 'none';
  126. }
  127. };
  128. Array.from(imageSelects).forEach(function(element) {
  129. element.addEventListener('click', loadDocument);
  130. });
  131. //https://pdfjs.community/t/listen-for-the-print-event/1492/3
  132. // Print-----------------------
  133. // Qualität auf Hoch setzen
  134. instance.UI.setPrintQuality(2);
  135. // Listener beim Seitenwechsel speichert die aktuelle Seitennummer
  136. Core.documentViewer.addEventListener('pageNumberUpdated', (pageNumber) => {
  137. currentPageNumber = pageNumber;
  138. });
  139. //https://pdfjs.community/t/customize-print-options/490
  140. instance.updateElement('printButton', {
  141. onClick: () => {
  142. printCurrentPage();
  143. }
  144. })
  145. function printCurrentPage(){
  146. instance.UI.printInBackground({
  147. pagesToPrint:[currentPageNumber],
  148. includeComments:false,
  149. includeAnnotations: false,
  150. maintainPageOrientation: true,
  151. onProgress: function(pageNumber, htmlElement) {},
  152. });
  153. }
  154. //Shortcuts disablen, weil sonst das Print Modal kommt
  155. instance.UI.hotkeys.off(instance.UI.hotkeys.Keys.CTRL_P);
  156. instance.UI.hotkeys.off(instance.UI.hotkeys.Keys.COMMAND_P);
  157. // End Print-----------------------
  158. });
  159. // Modernizr.addTest('async', function() {
  160. // try {
  161. // var result;
  162. // eval('let a = () => {result = "success"}; let b = async () => {await a()}; b()');
  163. // return result === 'success';
  164. // } catch (e) {
  165. // return false;
  166. // }
  167. // });
  168. // test for async and fall back to code compiled to ES5 if they are not supported
  169. {#['{{ asset('bundles/app/frontend/js/pdfviewer/samples/viewing/viewing/viewing.js') }}'].forEach(function(js) {#}
  170. {# var script = Modernizr.async ? js : js.replace('.js', '.ES5.js');#}
  171. {# var scriptTag = document.createElement('script');#}
  172. {# scriptTag.src = script;#}
  173. {# scriptTag.type = 'text/javascript';#}
  174. {# document.getElementsByTagName('head')[0].appendChild(scriptTag);#}
  175. {#});#}
  176. </script>
  177. <script>
  178. $( document ).ready(function() {
  179. var $jqLoginForm = $('.jqLoginForm');
  180. var $jqPaywallInfo = $('.jqPaywallInfo');
  181. $('.jqLoginBtn').on('click', function(){
  182. $jqPaywallInfo.slideUp(function() {
  183. $jqLoginForm.slideDown(function(){
  184. $('.jqUsernameField').focus();
  185. });
  186. });
  187. });
  188. $('.jqLoginAbbrechenBtn').on('click', function (e) {
  189. $jqLoginForm.slideUp(function() {
  190. $jqPaywallInfo.slideDown();
  191. });
  192. });
  193. $(document).on('keydown', function(e) {
  194. if((e.ctrlKey || e.metaKey) && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
  195. alert("Bitte benutzen Sie den Print-Button in der Menuleiste des PDF-Viewers, um die aktuelle Seite zu drucken!");
  196. e.cancelBubble = true;
  197. e.preventDefault();
  198. e.stopImmediatePropagation();
  199. }
  200. });
  201. });
  202. </script>
  203. </body>
  204. </html>