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.

115 lines
4.5 KiB
HTML

<!DOCTYPE html>
<!--
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/.
-->
<html>
<head>
<title>Signature Pad</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="bootstrap.min.css" />
<link rel="stylesheet" href="theme.css" />
<script src="fontawesome/all.min.js"></script>
<script src="signature_pad.umd.min.js"></script>
<style>
.signature-wrapper {
background-color: transparent;
background-image: linear-gradient(125deg, rgba(255, 255, 255, 0.3), rgba(255, 255, 255, 0.2) 70%);
box-shadow: inset 1px 1px rgba(255, 255, 255, 0.2), inset -1px -1px rgba(255, 255, 255, 0.1), 1px 3px 24px -1px rgba(0, 0, 0, 0.15);
border-radius: 0 0 0.5rem 0.5rem;
position: relative;
width: 100%;
height: 100%;
margin: 0 auto;
/* fix bug on iOS where image sticks out right side and makes entire page scroll horiz. */
overflow: hidden;
user-select: none;
}
.signature-wrapper img {
position: absolute;
bottom: 0;
left: 0;
}
.signature-wrapper canvas {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
</style>
</head>
<body class="theme-BLANK">
<div class="card" style="width: calc(100vw - 1rem); height: calc(100vh - 1rem); margin: 0.5rem;">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="card-title mb-0">Signature Pad</h6>
<div class="btn btn-warning btn-sm" onclick="resizeSignaturePadCanvas();signaturePad.clear();"><i class="fas fa-eraser"></i> Erase</div>
<div class="btn btn-primary btn-sm" onclick="signaturePadUndo();"><i class="fas fa-undo"></i> Undo</div>
<div class="btn btn-success btn-sm" onclick="sendSignature();"><i class="fas fa-check"></i> Done</div>
</div>
<div class="card-body p-0">
<div class="signature-wrapper">
<img src="img/signature-line.svg" />
<canvas id="signaturecanvas"></canvas>
</div>
</div>
</div>
<script>
var signaturePad = null;
function initSignaturePad() {
var canvas = document.getElementById("signaturecanvas");
signaturePad = new SignaturePad(canvas, {
backgroundColor: 'rgba(255, 255, 255, 0.5)'
});
resizeSignaturePadCanvas();
}
function resizeSignaturePadCanvas() {
var canvas = document.getElementById("signaturecanvas");
var ratio = Math.max(window.devicePixelRatio || 1, 1);
canvas.width = canvas.offsetWidth * ratio;
canvas.height = canvas.offsetHeight * ratio;
canvas.getContext("2d").scale(ratio, ratio);
if (signaturePad != null) {
signaturePad.clear(); // otherwise isEmpty() might return incorrect value
}
}
function signaturePadUndo() {
var data = signaturePad.toData();
resizeSignaturePadCanvas();
if (data) {
data.pop(); // remove the last dot or line
signaturePad.fromData(data);
}
}
function sendSignature() {
var signature = signaturePad.toData();
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "/", true);
xhttp.send(JSON.stringify(signature));
}
window.addEventListener('load', function () {
initSignaturePad();
});
window.addEventListener('resize', function () {
resizeSignaturePadCanvas();
});
window.addEventListener('orientationchange', function () {
resizeSignaturePadCanvas();
});
</script>
</body>
</html>