-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrender.js
More file actions
126 lines (104 loc) · 3.52 KB
/
render.js
File metadata and controls
126 lines (104 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// renderer.js (new file)
let pdfDoc = null;
let currentPage = 1;
let totalPages = 1;
let scale = 1.5;
let isDrawing = false;
let currentTool = null;
const elements = {
pdfCanvas: document.getElementById('pdfCanvas'),
annotationCanvas: document.getElementById('annotationCanvas'),
pdfContainer: document.getElementById('pdfContainer'),
pageNum: document.getElementById('pageNum'),
statusText: document.getElementById('statusText')
};
const ctx = elements.annotationCanvas.getContext('2d');
// Initialize
document.addEventListener('DOMContentLoaded', initApp);
function initApp() {
setupEventListeners();
setStatus('Ready');
}
function setupEventListeners() {
document.getElementById('openPdfBtn').addEventListener('click', openPdf);
document.getElementById('prevPage').addEventListener('click', prevPage);
document.getElementById('nextPage').addEventListener('click', nextPage);
document.getElementById('highlighterBtn').addEventListener('click', setActiveTool);
document.getElementById('noteBtn').addEventListener('click', setActiveTool);
elements.annotationCanvas.addEventListener('mousedown', startAnnotation);
elements.annotationCanvas.addEventListener('mousemove', drawAnnotation);
elements.annotationCanvas.addEventListener('mouseup', endAnnotation);
}
async function openPdf() {
const filePath = await window.api.openFile();
if (!filePath) return;
setStatus('Loading PDF...');
try {
pdfDoc = await pdfjsLib.getDocument(filePath).promise;
totalPages = pdfDoc.numPages;
currentPage = 1;
updatePageControls();
renderPage();
setStatus('PDF loaded successfully');
} catch (err) {
setStatus('Error loading PDF', true);
console.error(err);
}
}
function renderPage() {
pdfDoc.getPage(currentPage).then(page => {
const viewport = page.getViewport({ scale });
elements.pdfCanvas.width = viewport.width;
elements.pdfCanvas.height = viewport.height;
elements.annotationCanvas.width = viewport.width;
elements.annotationCanvas.height = viewport.height;
elements.pdfContainer.style.width = `${viewport.width}px`;
elements.pdfContainer.style.height = `${viewport.height}px`;
const renderContext = {
canvasContext: elements.pdfCanvas.getContext('2d'),
viewport
};
page.render(renderContext);
});
}
function updatePageControls() {
elements.pageNum.textContent = `Page ${currentPage}/${totalPages}`;
document.getElementById('prevPage').disabled = currentPage <= 1;
document.getElementById('nextPage').disabled = currentPage >= totalPages;
}
function prevPage() {
if (currentPage > 1) {
currentPage--;
renderPage();
updatePageControls();
}
}
function nextPage() {
if (currentPage < totalPages) {
currentPage++;
renderPage();
updatePageControls();
}
}
function setActiveTool(e) {
document.querySelectorAll('.tool-btn').forEach(btn => btn.classList.remove('active'));
e.target.classList.add('active');
currentTool = e.target.id.replace('Btn', '');
}
function setStatus(message, isError = false) {
elements.statusText.textContent = message;
elements.statusText.style.color = isError ? '#dc2626' : '#64748b';
}
// Annotation functions
function startAnnotation(e) {
if (!currentTool) return;
isDrawing = true;
// Add annotation logic here
}
function drawAnnotation(e) {
if (!isDrawing) return;
// Add drawing logic here
}
function endAnnotation() {
isDrawing = false;
}