You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
5.3 KiB
JavaScript
164 lines
5.3 KiB
JavaScript
/*
|
|
* Copyright 2021 Netsyms Technologies.
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
var activeDrawImage;
|
|
var signaturePadCallback = function () {};
|
|
var clientSignatureSvg = "";
|
|
|
|
function getStampSvg(callback) {
|
|
$.get("templates/stamps/" + getStorage("notary_state") + ".svg", {}, function (data) {
|
|
data = data + "";
|
|
data = data.replaceAll("[[[NAME]]]", getStorage("notary_name"));
|
|
data = data.replaceAll("[[[LOCATION]]]", getStorage("notary_location"));
|
|
data = data.replaceAll("[[[EXPIRES]]]", getStorage("notary_expires"));
|
|
data = data.replaceAll("[[[IDNUMBER]]]", getStorage("notary_idnumber"));
|
|
|
|
callback(data);
|
|
}, "text");
|
|
}
|
|
|
|
function makeStampImage(callback) {
|
|
getStampSvg(function (data) {
|
|
svgToImage(data, function (err, image) {
|
|
if (err) {
|
|
callback(false);
|
|
return;
|
|
}
|
|
callback(image);
|
|
});
|
|
});
|
|
}
|
|
|
|
function activateStampDrawTool() {
|
|
makeStampImage(function (image) {
|
|
activeDrawImage = image;
|
|
enableGuideBox(image);
|
|
});
|
|
}
|
|
|
|
function activateNotarySignatureTool() {
|
|
if (!inStorage("notary_signature")) {
|
|
alert("Please set a notary signature in the settings.");
|
|
return;
|
|
}
|
|
svgToImage(getStorage("notary_signature"), function (err, image) {
|
|
if (err) {
|
|
callback(false);
|
|
return;
|
|
}
|
|
activeDrawImage = image;
|
|
enableGuideBox(image);
|
|
});
|
|
}
|
|
|
|
function activateClientSignaturePad() {
|
|
initSignaturePad();
|
|
signaturePadCallback = function () {
|
|
if (clientSignatureSvg != "" && signaturePad.isEmpty()) {
|
|
var signature = clientSignatureSvg;
|
|
} else {
|
|
var signature = signaturePad.toDataURL("image/svg+xml");
|
|
signature = signature.replace("data:image/svg+xml;base64,", "");
|
|
signature = atob(signature);
|
|
signature = trimAndShrinkSVG(signature);
|
|
clientSignatureSvg = signature;
|
|
}
|
|
|
|
svgToImage(signature, function (err, image) {
|
|
if (err) {
|
|
callback(false);
|
|
return;
|
|
}
|
|
activeDrawImage = image;
|
|
enableGuideBox(image);
|
|
});
|
|
};
|
|
}
|
|
|
|
function drawImageFromUrl(x, y, width, height, src, canvas) {
|
|
var ctx = canvas.getContext("2d");
|
|
const image = new Image();
|
|
image.src = src;
|
|
image.onload = () => {
|
|
ctx.drawImage(image, x, y, width, height);
|
|
}
|
|
}
|
|
|
|
function drawImage(x, y, width, height, image, canvas) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.drawImage(image, x, y, width, height);
|
|
}
|
|
|
|
$("#page-canvas-container").on("click", ".page-canvas", function (evt) {
|
|
$("#page-canvas-container .page-canvas").removeClass("active");
|
|
$(this).addClass("active");
|
|
});
|
|
|
|
$("#page-canvas-container").on("click", ".page-canvas.active", function (evt) {
|
|
if (typeof activeDrawImage == "undefined") {
|
|
return;
|
|
}
|
|
var canvas = $(this)[0];
|
|
var coords = getMousePos(canvas, evt);
|
|
|
|
var imageWidth = (activeDrawImage.width / 96) * pdfAssumedDPI * pdfPageScale;
|
|
var imageHeight = (activeDrawImage.height / 96) * pdfAssumedDPI * pdfPageScale;
|
|
drawImage(coords.x, coords.y, imageWidth, imageHeight, activeDrawImage, canvas);
|
|
});
|
|
|
|
|
|
function enableGuideBox(image, scalecorrectionfactor) {
|
|
if (typeof scalecorrectionfactor == "undefined") {
|
|
scalecorrectionfactor = 1;
|
|
}
|
|
// disable first to clear contents
|
|
disableGuideBox();
|
|
$("#placementguidebox").css("display", "");
|
|
// calculate size of guide image
|
|
var pageWidthPx = $("#page-canvas-container .page-canvas")[0].getContext("2d").canvas.width;
|
|
var pageCanvasCurrentWidthPx = $("#page-canvas-container .page-canvas").css("width").replace("px", "") * 1;
|
|
var pageWidthInches = pageWidthPx / (pdfAssumedDPI * pdfPageScale);
|
|
var canvasCurrentDPI = pageCanvasCurrentWidthPx / pageWidthInches;
|
|
|
|
var imageWidth = (image.width / (96 * scalecorrectionfactor)) * canvasCurrentDPI;
|
|
var imageHeight = (image.height / (96 * scalecorrectionfactor)) * canvasCurrentDPI;
|
|
|
|
var canvas = $("#placementguidebox")[0];
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.drawImage(image, 0, 0, imageWidth, imageHeight);
|
|
}
|
|
|
|
function disableGuideBox() {
|
|
$("#placementguidebox").css("display", "none");
|
|
|
|
var context = $("#placementguidebox")[0].getContext('2d');
|
|
context.clearRect(0, 0, $("#placementguidebox")[0].width, $("#placementguidebox")[0].height);
|
|
}
|
|
|
|
$("#page-canvas-container").on("mousemove", function (evt) {
|
|
$("#placementguidebox").css({
|
|
left: evt.pageX,
|
|
top: evt.pageY
|
|
});
|
|
});
|
|
|
|
/**
|
|
* https://stackoverflow.com/a/17130415
|
|
* @param {type} canvas
|
|
* @param {type} evt
|
|
* @returns {getMousePos.pdfAnonym$1}
|
|
*/
|
|
function getMousePos(canvas, evt) {
|
|
var rect = canvas.getBoundingClientRect(), // abs. size of element
|
|
scaleX = canvas.width / rect.width, // relationship bitmap vs. element for X
|
|
scaleY = canvas.height / rect.height; // relationship bitmap vs. element for Y
|
|
|
|
return {
|
|
x: (evt.clientX - rect.left) * scaleX, // scale mouse coordinates after they have
|
|
y: (evt.clientY - rect.top) * scaleY // been adjusted to be relative to element
|
|
}
|
|
} |