aboutsummaryrefslogtreecommitdiffstats
path: root/src/scripts/pages/mutation-application
diff options
context:
space:
mode:
Diffstat (limited to 'src/scripts/pages/mutation-application')
-rw-r--r--src/scripts/pages/mutation-application/download-button.ts60
-rw-r--r--src/scripts/pages/mutation-application/index.ts1
2 files changed, 61 insertions, 0 deletions
diff --git a/src/scripts/pages/mutation-application/download-button.ts b/src/scripts/pages/mutation-application/download-button.ts
new file mode 100644
index 0000000..9503e00
--- /dev/null
+++ b/src/scripts/pages/mutation-application/download-button.ts
@@ -0,0 +1,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;
+ }
+});
diff --git a/src/scripts/pages/mutation-application/index.ts b/src/scripts/pages/mutation-application/index.ts
new file mode 100644
index 0000000..93e07ad
--- /dev/null
+++ b/src/scripts/pages/mutation-application/index.ts
@@ -0,0 +1 @@
+import "@/scripts/pages/mutation-application/download-button";