From 792974bd326aa4257b1f71bf35e864dae951ed7e Mon Sep 17 00:00:00 2001 From: adrianbonpin Date: Tue, 18 Aug 2026 19:47:59 +0800 Subject: [PATCH] feat: add header logo, fix teacher field, compact program, date range, total under UNITS --- assets/logo.jpeg | Bin 0 -> 61485 bytes pdf.js | 89 +++++++++++++++++++++++++++++++++++++++-------- test/pdf.test.js | 19 +++++++++- 3 files changed, 92 insertions(+), 16 deletions(-) create mode 100644 assets/logo.jpeg diff --git a/assets/logo.jpeg b/assets/logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..34be84d54257115cb0d2c182b010313e5878d283 GIT binary patch literal 61485 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 Q5&b74`v3jd|L>3g1HcQyIRF3v literal 0 HcmV?d00001 diff --git a/pdf.js b/pdf.js index 869dbd1..f908553 100644 --- a/pdf.js +++ b/pdf.js @@ -38,12 +38,58 @@ return out.length ? out : ['']; } + // Compact a degree name for display: + // "BACHELOR OF SCIENCE IN INFORMATION TECHNOLOGY" -> "BS IT". + // Multi-word fields become initials; single-word fields stay title-cased. + function compactProgram(program) { + const s = String(program || '').trim().toUpperCase(); + let m = /^BACHELOR OF SCIENCE IN (.+)$/.exec(s); + let prefix = 'BS'; + if (!m) { + m = /^BACHELOR OF ARTS IN (.+)$/.exec(s); + if (m) prefix = 'AB'; + } + if (!m) return String(program || '').trim(); + const field = m[1]; + const words = field.split(/\s+/).filter((w) => !/^(AND|OF|THE|IN)$/.test(w)); + if (words.length <= 1) { + const single = words[0] || field; + return prefix + ' ' + single.charAt(0).toUpperCase() + single.slice(1).toLowerCase(); + } + return prefix + ' ' + words.map((w) => w[0]).join(''); + } + + // Map a semester to the official date range label. + function deriveDateRange(semester) { + const s = String(semester || '').toUpperCase(); + if (/1ST|FIRST/.test(s)) return 'AUGUST - JANUARY'; + if (/2ND|SECOND/.test(s)) return 'JANUARY - MAY'; + if (/SUMMER/.test(s)) return 'JUNE - JULY'; + return ''; + } + + // Load the bundled header logo (JPEG) in the extension background page. + // Returns null in Node (tests) or if the asset is unavailable. + async function loadLogo() { + try { + const url = (typeof browser !== 'undefined' && browser.runtime && browser.runtime.getURL) + ? browser.runtime.getURL('assets/logo.jpeg') + : null; + if (!url) return null; + const resp = await fetch(url); + if (!resp.ok) return null; + return new Uint8Array(await resp.arrayBuffer()); + } catch (e) { + return null; + } + } + // Builds a Letter-size PDF replicating the official ISMIS Study Load layout: - // title block (STUDENT'S STUDY LOAD, semester, date range, date enrolled), - // a student info row (ID, name, program, Year Level), the course table - // (GROUP, COURSE, COURSE DESCRIPTION, TEACHER, UNITS, NOTE), and a footer - // (total units, printed-by). NOTE is the status; UNITS/NOTE are right-aligned; - // schedule is stacked under the course description. + // header logo, title, semester + date range, date enrolled, a student info + // row (ID, name, program, Year Level), the course table (GROUP, COURSE, + // COURSE DESCRIPTION, TEACHER, UNITS, NOTE), and a footer (total under the + // UNITS column, printed-by). NOTE is the status; schedule is stacked under + // the course description. async function buildStudyLoadPdf(data) { const PDFLib = getPDFLib(); const { PDFDocument, StandardFonts, rgb } = PDFLib; @@ -62,6 +108,12 @@ const black = rgb(0, 0, 0); const gray = rgb(0.3, 0.3, 0.3); + const logoBytes = await loadLogo(); + let logoImg = null; + if (logoBytes) { + try { logoImg = await doc.embedJpg(logoBytes); } catch (e) { logoImg = null; } + } + function center(text, size, f, dy) { const w = f.widthOfTextAtSize(text, size); page.drawText(text, { x: (612 - w) / 2, y, size, font: f, color: black }); @@ -76,16 +128,23 @@ } // ---- Header ---- - center("STUDENT'S STUDY LOAD", 9.5, bold, 18); - if (header.semester) center(header.semester, 9, font, 15); - if (header.dateRange) center(header.dateRange, 9, font, 15); + if (logoImg) { + const logoW = 292.5; + const logoH = logoW * (logoImg.height / logoImg.width); + page.drawImage(logoImg, { x: (612 - logoW) / 2, y: y - logoH, width: logoW, height: logoH }); + y -= logoH + 14; + } + center("STUDENT'S STUDY LOAD", 9.5, bold, 16); + if (header.semester) center(String(header.semester).toUpperCase(), 9, font, 14); + const dateRange = header.dateRange || deriveDateRange(header.semester); + if (dateRange) center(dateRange, 9, font, 14); if (header.dateEnrolled) left('Date Enrolled: ' + header.dateEnrolled, 8, italic, margin, 13); - // Student info row: ID (bold), name, program, "Year Level: N" + // Student info row: ID (bold), name, program (compacted), "Year Level: N" const studentParts = []; if (header.studentId) studentParts.push({ text: header.studentId, f: bold }); if (header.fullName) studentParts.push({ text: header.fullName, f: font }); - if (header.program) studentParts.push({ text: header.program, f: font }); + if (header.program) studentParts.push({ text: compactProgram(header.program), f: font }); if (header.yearLevel) studentParts.push({ text: 'Year Level: ' + header.yearLevel, f: font }); if (studentParts.length) { let sx = margin; @@ -137,7 +196,6 @@ } if (isHeader) { - // top line above the header row hline(margin, margin + contentWidth, y); } @@ -159,7 +217,6 @@ y -= rowHeight; if (isHeader) { - // line below the header row hline(margin, margin + contentWidth, y); } return true; @@ -179,7 +236,7 @@ courseCode: course.courseCode, description: course.description, schedule: course.schedule, - teacher: course.teacher, + teacher: course.teacher || course.faculty, units: course.units, status: course.status }; @@ -193,8 +250,10 @@ } y -= 8; if (data.totalUnits) { + // Total sits under the UNITS column, right-aligned within it. + const unitsCol = cols[4]; const w = bold.widthOfTextAtSize(data.totalUnits, 9); - page.drawText(data.totalUnits, { x: margin + contentWidth - w, y, size: 9, font: bold, color: black }); + page.drawText(data.totalUnits, { x: unitsCol.x + unitsCol.w - 3 - w, y, size: 9, font: bold, color: black }); y -= 14; } hline(margin, margin + contentWidth, y); @@ -206,5 +265,5 @@ return doc.save(); // returns Promise } - return { buildStudyLoadPdf }; + return { buildStudyLoadPdf, compactProgram, deriveDateRange }; }); diff --git a/test/pdf.test.js b/test/pdf.test.js index 0f2883d..468c556 100644 --- a/test/pdf.test.js +++ b/test/pdf.test.js @@ -5,7 +5,7 @@ const os = require('node:os'); const path = require('node:path'); const { execFileSync } = require('node:child_process'); global.PDFLib = require('pdf-lib'); -const { buildStudyLoadPdf } = require('../pdf.js'); +const { buildStudyLoadPdf, compactProgram, deriveDateRange } = require('../pdf.js'); const sampleData = { header: { @@ -49,4 +49,21 @@ test('buildStudyLoadPdf returns valid PDF bytes', async () => { const text = extractPdfText(bytes); assert.ok(text.includes('CIS 2101'), 'PDF text should contain course code CIS 2101'); assert.ok(text.includes("STUDENT'S STUDY LOAD"), 'PDF text should contain the title'); + assert.ok(text.includes('CHRISTIAN MADERAZO'), 'PDF text should contain the teacher'); + assert.ok(text.includes('BS IT'), 'PDF text should contain the compacted program'); +}); + +test('compactProgram shortens degree names', () => { + assert.strictEqual(compactProgram('BACHELOR OF SCIENCE IN INFORMATION TECHNOLOGY'), 'BS IT'); + assert.strictEqual(compactProgram('BACHELOR OF SCIENCE IN COMPUTER SCIENCE'), 'BS CS'); + assert.strictEqual(compactProgram('BACHELOR OF ARTS IN POLITICAL SCIENCE'), 'AB PS'); + assert.strictEqual(compactProgram('BACHELOR OF SCIENCE IN ACCOUNTANCY'), 'BS Accountancy'); + assert.strictEqual(compactProgram('UNKNOWN PROGRAM'), 'UNKNOWN PROGRAM'); +}); + +test('deriveDateRange maps semesters', () => { + assert.strictEqual(deriveDateRange('1ST Semester 2026'), 'AUGUST - JANUARY'); + assert.strictEqual(deriveDateRange('2ND Semester 2026'), 'JANUARY - MAY'); + assert.strictEqual(deriveDateRange('Summer 2026'), 'JUNE - JULY'); + assert.strictEqual(deriveDateRange(''), ''); });