aboutsummaryrefslogtreecommitdiff
path: root/beamer/viewer
diff options
context:
space:
mode:
Diffstat (limited to 'beamer/viewer')
-rw-r--r--beamer/viewer/init.js44
-rw-r--r--beamer/viewer/presentation.js37
-rw-r--r--beamer/viewer/screen/screen.js61
-rw-r--r--beamer/viewer/screen/timer.js18
-rw-r--r--beamer/viewer/stage/actions.js46
-rw-r--r--beamer/viewer/stage/stage.js60
-rw-r--r--beamer/viewer/viewer.css53
-rw-r--r--beamer/viewer/viewer.js100
8 files changed, 186 insertions, 233 deletions
diff --git a/beamer/viewer/init.js b/beamer/viewer/init.js
index 9192834..c8b1ccf 100644
--- a/beamer/viewer/init.js
+++ b/beamer/viewer/init.js
@@ -1,32 +1,11 @@
1/* 1/*
2 * Beamer Viewer, a web-based PDF presentation viewer 2 * Beamer Viewer, a web-based PDF presentation viewer
3 * Copyright (C) 2018 Pacien TRAN-GIRARD 3 * Copyright 2018-2024 Pacien TRAN-GIRARD
4 * 4 * SPDX-License-Identifier: EUPL-1.2
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */ 5 */
18 6
19"use strict"; 7"use strict";
20 8
21const params = function() {
22 const queryDict = {};
23 location.hash.substr(1).split("&").forEach(item => {
24 const pair = item.split("=");
25 queryDict[pair[0]] = pair[1];
26 });
27 return queryDict;
28}();
29
30function isController() { 9function isController() {
31 return window.opener == null || window.opener.location.href != window.location.href; 10 return window.opener == null || window.opener.location.href != window.location.href;
32} 11}
@@ -39,28 +18,9 @@ function initCache() {
39 offlineCapableIndicator.style.visibility = "visible"; 18 offlineCapableIndicator.style.visibility = "visible";
40} 19}
41 20
42function checkPopupPermission() {
43 const popup = window.open("popup.html");
44
45 if (popup == null) {
46 const warningMessage = document.getElementById("warning");
47 warningMessage.textContent = "A pop-up blocker is active. Make sure to allow pop-ups on this website.";
48 }
49}
50
51function init() { 21function init() {
52 initCache(); 22 initCache();
53 checkPopupPermission();
54
55 const viewer = new Viewer(); 23 const viewer = new Viewer();
56
57 if ("file" in params)
58 viewer.load(params["file"]);
59}
60
61function load(file) {
62 location.hash = "file=" + file;
63 location.reload();
64} 24}
65 25
66if (isController()) 26if (isController())
diff --git a/beamer/viewer/presentation.js b/beamer/viewer/presentation.js
index 222a6d4..f7f47b2 100644
--- a/beamer/viewer/presentation.js
+++ b/beamer/viewer/presentation.js
@@ -1,19 +1,7 @@
1/* 1/*
2 * Beamer Viewer, a web-based PDF presentation viewer 2 * Beamer Viewer, a web-based PDF presentation viewer
3 * Copyright (C) 2018 Pacien TRAN-GIRARD 3 * Copyright 2018-2024 Pacien TRAN-GIRARD
4 * 4 * SPDX-License-Identifier: EUPL-1.2
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */ 5 */
18 6
19"use strict"; 7"use strict";
@@ -25,12 +13,16 @@ class Presentation {
25 this.stage = this._setupStage(); 13 this.stage = this._setupStage();
26 } 14 }
27 15
16 start() {
17 this.stage.start();
18 }
19
28 _setupStage() { 20 _setupStage() {
29 const self = this; 21 return new Stage(
30 const onStageReadyCallback = function() { self._onStageReady(); }; 22 () => this._onStageReady(),
31 const onNextCallback = function() { self._onNext(); }; 23 () => this._onNext(),
32 const onPreviousCallback = function() { self._onPrevious(); }; 24 () => this._onPrevious(),
33 return new Stage(onStageReadyCallback, onNextCallback, onPreviousCallback); 25 );
34 } 26 }
35 27
36 _onStageReady() { 28 _onStageReady() {
@@ -48,10 +40,9 @@ class Presentation {
48 } 40 }
49 41
50 _setPage(pageIndex) { 42 _setPage(pageIndex) {
51 const self = this;
52 this.currentPageIndex = pageIndex; 43 this.currentPageIndex = pageIndex;
53 this.pdf.getPage(this.currentPageIndex).then(function(page) { 44 this.pdf
54 self.stage.setPage(page); 45 .getPage(this.currentPageIndex)
55 }) 46 .then(page => this.stage.setPage(page))
56 } 47 }
57} 48}
diff --git a/beamer/viewer/screen/screen.js b/beamer/viewer/screen/screen.js
index c65ebc3..4bebab4 100644
--- a/beamer/viewer/screen/screen.js
+++ b/beamer/viewer/screen/screen.js
@@ -1,19 +1,7 @@
1/* 1/*
2 * Beamer Viewer, a web-based PDF presentation viewer 2 * Beamer Viewer, a web-based PDF presentation viewer
3 * Copyright (C) 2018 Pacien TRAN-GIRARD 3 * Copyright 2018-2024 Pacien TRAN-GIRARD
4 * 4 * SPDX-License-Identifier: EUPL-1.2
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU Affero General Public License as
7 * published by the Free Software Foundation, either version 3 of the
8 * License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 */ 5 */
18 6
19"use strict"; 7"use strict";
@@ -42,10 +30,7 @@ class Screen {
42 } 30 }
43 31
44 _registerListeners() { 32 _registerListeners() {
45 const self = this; 33 this.window.addEventListener("resize", () => this._repaint());
46 this.window.addEventListener("resize", function() {
47 self._repaint();
48 });
49 } 34 }
50 35
51 _hideWelcomeScreen() { 36 _hideWelcomeScreen() {
@@ -62,9 +47,32 @@ class Screen {
62 }; 47 };
63 } 48 }
64 49
50 _getScreenOffsets(secondary, width, height) {
51 if (!secondary) return { xOffset: 0, yOffset: 0 };
52
53 const viewport = this.page.getViewport(1);
54 if (viewport.width > viewport.height)
55 return { xOffset: -width, yOffset: 0 };
56 else
57 return { xOffset: 0, yOffset: -height };
58 }
59
65 _getSlideSizeRatio() { 60 _getSlideSizeRatio() {
66 const viewport = this.page.getViewport(1); 61 const viewport = this.page.getViewport(1);
67 return (viewport.width / 2) / viewport.height; 62
63 if (viewport.width > viewport.height)
64 return (viewport.width / 2) / viewport.height;
65 else
66 return viewport.width / (viewport.height / 2);
67 }
68
69 _getScaleFactor(width, height) {
70 const viewport = this.page.getViewport(1);
71
72 if (viewport.width > viewport.height)
73 return height / viewport.height;
74 else
75 return width / viewport.width;
68 } 76 }
69 77
70 _newCanvas(width, height, xOffset, yOffset) { 78 _newCanvas(width, height, xOffset, yOffset) {
@@ -91,10 +99,9 @@ class Screen {
91 viewport: this.page.getViewport(scaleFactor) 99 viewport: this.page.getViewport(scaleFactor)
92 }; 100 };
93 101
94 const self = this; 102 this.page
95 this.page.render(renderContext).then(function() { 103 .render(renderContext)
96 self._showCanvas(canvas); 104 .then(() => this._showCanvas(canvas));
97 });
98 } 105 }
99 106
100 _repaint() { 107 _repaint() {
@@ -102,9 +109,11 @@ class Screen {
102