aboutsummaryrefslogtreecommitdiffstats
path: root/src/scripts/pages/mutation-application/download-button.ts
blob: 9503e005fca234895a9c0a49bc8e4bc56a6ae896 (plain)
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
import { PDFDocument, StandardFonts } from "pdf-lib";
import { observeDOM } from "@/shared/observe-dom";

const sanghaFacilitationCentreBannerUrl = "$l{ /assets/sangha-facilitation-centre-banner.jpg }l$";

/**
 * On the Mutation Application form, removes the form action (to prevent
 * the default server-side submit) and attaches a custom click handler
 * that fetches the declaration PDF, overlays a banner image and date
 * stamp on the last page, then triggers a download.
 */
observeDOM(() => {
	const formElement = $("#form_MutationApplication > div > div:nth-child(14) > div.col-sm-2.btreset > form");
	const submitButtonElement = $("#btnDeclareForm");
	if (formElement.length > 0 && submitButtonElement.length > 0) {
		formElement.removeAttr("action");
		submitButtonElement.on("click", (submitButtonClickEvent) => {
			submitButtonClickEvent.preventDefault();

			(async () => {
				const pdfDoc = await PDFDocument.load(await fetch("/BanglarBhumi/MutationDeclarationForm.action", {
					method: "post",
					credentials: "same-origin",
					headers: {
						"Content-Type": "application/x-www-form-urlencoded"
					},
					body: "hdnAppNo="
				}).then(res => res.arrayBuffer()));
				const pages = pdfDoc.getPages();
				const lastPage = pages[pages.length - 1];
				const { width, height: _ } = lastPage.getSize();
				const bannerImage = await pdfDoc.embedJpg(await fetch(sanghaFacilitationCentreBannerUrl).then(res => res.arrayBuffer()));
				const bannerImageHeight = width * (bannerImage.height / bannerImage.width);

				lastPage.drawImage(bannerImage, {
					x: 0,
					y: 0,
					width: width,
					height: bannerImageHeight
				});

				lastPage.drawText(pdfDoc.getCreationDate()!.toLocaleString(), {
					x: 10,
					y: bannerImageHeight,
					size: 12,
					font: await pdfDoc.embedFont(StandardFonts.TimesRoman)
				});

				const link = document.createElement("a");
				link.href = window.URL.createObjectURL(new Blob([new Uint8Array(await pdfDoc.save())], {type: "application/pdf"}));
				link.download = "Declaration.pdf";
				link.click();
			})();
		});

		return true;
	} else {
		return false;
	}
});