Skip to content

Commit 262b0dc

Browse files
committed
Handle signature refresh
1 parent 657615c commit 262b0dc

File tree

1 file changed

+36
-30
lines changed

1 file changed

+36
-30
lines changed

js_src/components/SignatureComponent.js

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,66 +9,72 @@ export class SignatureComponent extends BaseComponent {
99
const wrapper = document.createElement("div");
1010
wrapper.classList.add("signature-pad");
1111

12-
const field = document.createElement("div");
13-
field.classList.add("field");
12+
const field = U.createField(this.config, [], true);
13+
wrapper.appendChild(field);
1414

1515
const control = document.createElement("div");
1616
control.classList.add("control");
1717

18-
field.appendChild(control);
19-
20-
const label = document.createElement("div");
21-
label.classList.add("label");
22-
if (this.config.labelsmall) {
23-
label.classList.add("label-smaller");
24-
}
25-
label.innerText = this.config.label + U.requiredMark(this.config);
26-
control.appendChild(label);
27-
28-
const tooltip = U.tooltipHint(this.config);
29-
control.insertAdjacentHTML('beforeend', tooltip);
30-
31-
32-
18+
// actual input field to be submitted with the form
3319
const input = document.createElement("input");
3420
input.type = "hidden";
3521
input.name = this.name;
3622
control.appendChild(input);
3723

38-
const canvas = document.createElement("canvas");
39-
control.appendChild(canvas);
40-
wrapper.appendChild(field);
24+
field.appendChild(control);
4125

26+
// dynamic canvas to draw on
27+
const canvas = document.createElement("canvas");
4228
const signaturePad = new SignaturePad(canvas);
43-
if (this.myState.value) {
44-
signaturePad.fromDataURL(this.myState.value);
45-
}
4629
// default input event is of no use here
4730
signaturePad.addEventListener("endStroke", () => {
4831
this.myState.value = signaturePad.toDataURL();
32+
input.value = this.myState.value;
4933
});
5034

35+
// static image with saved signature
36+
const imageDiv = document.createElement("div");
37+
const image = document.createElement("img");
38+
39+
// display canvas or image depending on available data
40+
let signatureVisibleElement;
41+
if (!this.myState.value) {
42+
signatureVisibleElement = canvas;
43+
} else {
44+
image.src = this.myState.value;
45+
imageDiv.appendChild(image);
46+
signatureVisibleElement = imageDiv;
47+
}
48+
control.appendChild(signatureVisibleElement);
5149

52-
const fieldButton = document.createElement("div");
53-
fieldButton.classList.add("field");
50+
// clear button
51+
const clearButtonField = document.createElement("div");
52+
clearButtonField.classList.add("field");
5453

55-
const controlButton = document.createElement("div");
56-
controlButton.classList.add("control");
54+
const clearButtonControl = document.createElement("div");
55+
clearButtonControl.classList.add("control");
5756

58-
fieldButton.appendChild(controlButton);
57+
clearButtonField.appendChild(clearButtonControl);
5958

6059
const clearButton = document.createElement("button");
6160
clearButton.classList.add("button", "clear");
6261
clearButton.type = "button";
6362
clearButton.innerText = U.getLang('label_signature_delete');
6463
clearButton.addEventListener("click", (event) => {
64+
// clear all values
6565
signaturePad.clear();
6666
this.myState.value = null;
67+
input.value = null;
68+
69+
// restore canvas (signature may be an image at this point)
70+
control.removeChild(signatureVisibleElement);
71+
signatureVisibleElement = canvas;
72+
control.appendChild(signatureVisibleElement);
6773
});
6874

69-
controlButton.appendChild(clearButton);
75+
clearButtonControl.appendChild(clearButton);
7076

71-
wrapper.appendChild(fieldButton);
77+
wrapper.appendChild(clearButtonField);
7278

7379
return wrapper;
7480
}

0 commit comments

Comments
 (0)