From 71bba9ab749f45650848e734a5756c62d7c0fe3a Mon Sep 17 00:00:00 2001 From: jndaniels Date: Sun, 1 Dec 2024 20:05:27 -0600 Subject: [PATCH] WIP : Fixing binary signature upload --- app/api/signatureUpload.json | 56 ++++++++++++++++++++--- app/api/uploadSignature.json | 10 ++--- public/PDF/dummyFunctions.js | 8 ++-- public/PDF/pdfLibSignature.js | 2 +- public/dmxAppConnect/config.js | 28 ++++++++++++ public/example.db | Bin 0 -> 69632 bytes public/js/libProcessScript.js | 80 +++++++++++++++++++++++---------- public/terminal.html | 56 +++++++++++++++++++++++ views/index0.ejs | 48 ++++++++++++++++++-- views/observationPage.ejs | 17 ++++--- 10 files changed, 256 insertions(+), 49 deletions(-) create mode 100644 public/example.db create mode 100644 public/terminal.html diff --git a/app/api/signatureUpload.json b/app/api/signatureUpload.json index 281790b..0660f87 100644 --- a/app/api/signatureUpload.json +++ b/app/api/signatureUpload.json @@ -1,10 +1,52 @@ { - "name": "fileUpload", - "module": "upload", - "action": "upload", - "options": { - "fields": "" + "meta": { + "$_POST": [ + { + "type": "text", + "name": "imageData" + } + ] }, - "meta": [], - "outputType": "array" + "exec": { + "steps": { + "name": "fileUpload", + "module": "upload", + "action": "upload", + "options": { + "fields": "{{$_POST.imageData}}", + "path": "/uploads", + "replaceSpace": true, + "replaceDiacritics": true, + "asciiOnly": true + }, + "meta": [ + { + "name": "name", + "type": "text" + }, + { + "name": "path", + "type": "text" + }, + { + "name": "url", + "type": "text" + }, + { + "name": "type", + "type": "text" + }, + { + "name": "size", + "type": "text" + }, + { + "name": "error", + "type": "number" + } + ], + "outputType": "array", + "output": true + } + } } \ No newline at end of file diff --git a/app/api/uploadSignature.json b/app/api/uploadSignature.json index d2b60cc..6976a18 100644 --- a/app/api/uploadSignature.json +++ b/app/api/uploadSignature.json @@ -3,7 +3,7 @@ "$_POST": [ { "type": "text", - "name": "image" + "name": "imageData" } ] }, @@ -14,14 +14,14 @@ "module": "core", "action": "setvalue", "options": { - "key": "image", - "value": "image.replace(/^data:image\\/\\w+;base64,/, \"\")" + "value": "{{$_POST.imageData.replace(/^data:image\\/\\w+;base64,/, \"\")}}" }, "meta": [], - "outputType": "text" + "outputType": "text", + "output": true }, { - "name": "upload", + "name": "saveSignatureBinary", "module": "upload", "action": "upload", "options": { diff --git a/public/PDF/dummyFunctions.js b/public/PDF/dummyFunctions.js index f38bbda..9ae3db9 100644 --- a/public/PDF/dummyFunctions.js +++ b/public/PDF/dummyFunctions.js @@ -1,5 +1,5 @@ // JavaScript Document - +console.log("LIBRARY: dummyFunctions.js") function myFunction() { let myVar = 'Hello, Wappler!'; return myVar; @@ -22,7 +22,7 @@ async function toBase64(filePath) { } - +/** const terminal = document.getElementById('terminal'); @@ -41,4 +41,6 @@ function addLine(text) { let lineCount = 0; setInterval(() => { addLine(`Line ${++lineCount}: This is a test log.`); -}, 500); // Add a new line every 500ms \ No newline at end of file +}, 500); // Add a new line every 500ms + +*/ \ No newline at end of file diff --git a/public/PDF/pdfLibSignature.js b/public/PDF/pdfLibSignature.js index 1542100..1501776 100644 --- a/public/PDF/pdfLibSignature.js +++ b/public/PDF/pdfLibSignature.js @@ -1,5 +1,5 @@ // JavaScript Document v1.3 - +console.log("LIBRARY: pdfLibSignature.js") //let dynamicSignatureElementId = dmx.global.data.signatureElementName // Gets the DYNAMIC ID for the canvas ID const canvas = document.getElementById('signatureCanvas'); // const canvas = document.getElementById('signatureCanvasIndex'); const ctx = canvas.getContext('2d'); diff --git a/public/dmxAppConnect/config.js b/public/dmxAppConnect/config.js index 6478ec0..f9413f1 100644 --- a/public/dmxAppConnect/config.js +++ b/public/dmxAppConnect/config.js @@ -57,6 +57,10 @@ dmx.config({ { "type": "text", "name": "Points" + }, + { + "type": "text", + "name": "section" } ] }, @@ -65,6 +69,10 @@ dmx.config({ { "type": "text", "name": "file" + }, + { + "type": "text", + "name": "imageData" } ], "flowRunPageId": { @@ -87,6 +95,26 @@ dmx.config({ }, "runPageId": { "outputType": "text" + }, + "flow1": { + "meta": [ + { + "name": "saveSignatureFlow", + "type": "text" + } + ], + "local": [ + { + "name": "", + "type": "object", + "metaData": { + "alertMessage": { + "meta": null, + "outputType": "text" + } + } + } + ] } } }); diff --git a/public/example.db b/public/example.db new file mode 100644 index 0000000000000000000000000000000000000000..6ea19b6f395b6f6e8f7fda3cdbc113fbb1c17630 GIT binary patch literal 69632 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 NOn?b6f#-t2{{b!#Jq-W= literal 0 HcmV?d00001 diff --git a/public/js/libProcessScript.js b/public/js/libProcessScript.js index 9739c0c..0bebd83 100644 --- a/public/js/libProcessScript.js +++ b/public/js/libProcessScript.js @@ -1,24 +1,40 @@ // JavaScript Document // Replaces libPDFscripts.js // NEW - Process Scripts +// +// ** OFFICIAL SCRIPT TO USE WHEN IN PRODUCTION +// // Utility to fetch PDF bytes + +console.log("LIBRARY: libProcessScript.js") + //const path = FileSystemHandle.require('node:path') let showLog = true; -const dd = createDebugLogger(showLog, "dd"); +const dd = createDebugLogger(showLog, "dd"); // code function at bottom of the page -function createDebugLogger(debug, prefix = "") { - return function (message, ...optionalParams) { - if (debug) { - console.log( - `[${prefix}]`.toUpperCase(), `${message}`, - ...optionalParams - ); - } - }; + + +// Wrapper function to fetch, update, and download PDF +async function processAndDownloadPdf(filePath, ...dataSources) { + try { + const pdfBytes = await fetchPdfBytes(filePath); + const updatedPdfBytes = await updatePdfFields(pdfBytes, dataSources); + const fileName = generateRandomFilename(8, "ERT_", ".pdf"); + //const saveFilePath = await savePdfToFile(pdfBytes); + //dd("[PDF PATH]", saveFilePath); + downloadPdf(updatedPdfBytes, fileName); + } catch (err) { + dd("Error Processing PDF", err) + //console.error("Error processing the PDF:", err); + } } + + + + async function fetchPdfBytes(filePath) { dd(filePath); @@ -95,19 +111,7 @@ function generateRandomFilename(length = 8, prefix = "", suffix = "") { // Example Usage: -// Wrapper function to fetch, update, and download PDF -async function processAndDownloadPdf(filePath, ...dataSources) { - try { - const pdfBytes = await fetchPdfBytes(filePath); - const updatedPdfBytes = await updatePdfFields(pdfBytes, dataSources); - const fileName = generateRandomFilename(8, "ERT_", ".pdf"); - //const saveFilePath = await savePdfToFile(pdfBytes); - //dd("[PDF PATH]", saveFilePath); - downloadPdf(updatedPdfBytes, fileName); - } catch (err) { - console.error("Error processing the PDF:", err); - } -} + async function savePdfToFile(pdfBytes) { @@ -121,3 +125,33 @@ async function savePdfToFile(pdfBytes) { // Return a URL or file path based on your server setup return `/PDF/${randomFilename}`; } + +function createDebugLogger(debug, prefix = "DD") { + return function (message, ...optionalParams) { + + switch (debug) { + case true: + console.log( + `[${prefix}]`.toUpperCase(), `${message}`, ...optionalParams); + break + } + }; +} + +function saveSignature() { + const canvas = document.getElementById('signatureCanvas'); + const imageData = canvas.toDataURL('image/png'); + dd(imageData.length) + // Trigger the server action and handle the response + dmx.parse('serverconnect_sign.load({ image: imageData })'); + /** + dmx.parse('serverconnect_sign.load', { image: imageData }).then((response) => { + //dmx.parse('serverconnect_sign.load({image: "' + imageData + '"})').then((response) => { + const uploadedSignature = document.getElementById('uploadedSignature'); + uploadedSignature.src = response.fileUrl; // Use the file path returned from the server + dd(response.fileUrl) + }).catch((error) => { + console.error("Error uploading signature:", error); + }); +*/ +} diff --git a/public/terminal.html b/public/terminal.html new file mode 100644 index 0000000..30d040f --- /dev/null +++ b/public/terminal.html @@ -0,0 +1,56 @@ + + + + + + + + Terminal Emulator + + + + +
+ + + + \ No newline at end of file diff --git a/views/index0.ejs b/views/index0.ejs index 83d656a..19e6fe6 100644 --- a/views/index0.ejs +++ b/views/index0.ejs @@ -1,5 +1,45 @@ - + + + + +
+ - + \ No newline at end of file diff --git a/views/observationPage.ejs b/views/observationPage.ejs index 2f4bafe..a6a3fc0 100644 --- a/views/observationPage.ejs +++ b/views/observationPage.ejs @@ -116,11 +116,11 @@

-
+
- +
@@ -147,8 +147,11 @@

Who you are grading

- +
+ +
+
@@ -266,8 +269,7 @@ @@ -309,6 +311,7 @@
- - @@ -295,7 +297,7 @@ Num section Points Description  - +
+