+
+
Firme en el pad biométrico
Trazos: 0
@@ -2536,15 +2537,7 @@ document.querySelectorAll('.turnero-firma-item').forEach(function(widget) {
// ── Topaz SigWeb ────────────────────────────────────────────────────
const topaz = (() => {
const SIGWEB_URL = '= rtrim(defined('APP_URL') ? APP_URL : '', '/') ?>/assets/js/SigWebTablet.js';
- let _loaded = false, _ctx = null, _target = null, _poll = null;
- // _target: { type: 'turnero'|'pro', canvas: CanvasElement, onAccept: fn }
-
- function _call(fn, ...args) {
- if (_ctx && typeof _ctx[fn] === 'function') return _ctx[fn](...args);
- const g = window[fn];
- if (typeof g === 'function') return _ctx ? g(...args, _ctx) : g(...args);
- throw new Error('SigWeb: ' + fn + ' no encontrado');
- }
+ let _loaded = false, _target = null, _poll = null, _tmr = null;
function _loadScript() {
if (_loaded) return Promise.resolve(true);
@@ -2594,12 +2587,14 @@ const topaz = (() => {
}
_target = target;
try {
- _ctx = typeof SigWebTablet !== 'undefined' ? new SigWebTablet() : null;
- _call('SetImageXSize', 500);
- _call('SetImageYSize', 150);
- _call('SetImagePenWidth', 3);
- _call('SetTabletState', 1);
- _call('ClearTablet');
+ const canvas = document.getElementById('topaz-canvas');
+ const canvasCtx = canvas.getContext('2d');
+ canvasCtx.clearRect(0, 0, canvas.width, canvas.height);
+ SetImageXSize(500);
+ SetImageYSize(150);
+ SetImagePenWidth(3);
+ ClearTablet();
+ _tmr = SetTabletState(1, canvasCtx, 50);
} catch(e) {
_toast('Error al activar el pad: ' + e.message); return;
}
@@ -2610,7 +2605,7 @@ const topaz = (() => {
_poll = setInterval(() => {
try {
- const pts = _call('GetSigTotalPoints');
+ const pts = NumberOfTabletPoints();
document.getElementById('topaz-pts').textContent = pts;
document.getElementById('topaz-btn-aceptar').disabled = pts === 0;
if (pts > 0) _setStatus('✅ Firma detectada — presione Aceptar', true);
@@ -2622,8 +2617,8 @@ const topaz = (() => {
function _cerrar() {
_stopPoll();
- try { if (_ctx) _call('SetTabletState', 0); } catch(e) {}
- _ctx = null; _target = null;
+ try { SetTabletState(0, _tmr); } catch(e) {}
+ _tmr = null; _target = null;
document.getElementById('topaz-overlay').style.display = 'none';
}
@@ -2637,23 +2632,25 @@ const topaz = (() => {
}
function aceptar() {
- let b64;
- try { b64 = _call('GetSigImageB64'); } catch(e) {
- alert('Error al capturar la firma: ' + e.message); _cerrar(); return;
- }
- if (!b64) { _toast('No se capturó ninguna firma.'); return; }
const target = _target;
_cerrar();
- const img = new Image();
- img.onload = () => {
- const c = target.canvas;
- const ctx = c.getContext('2d');
- ctx.clearRect(0, 0, c.width, c.height);
- ctx.drawImage(img, 0, 0, c.width, c.height);
- c.classList.add('has-sig');
- if (typeof target.onAccept === 'function') target.onAccept();
- };
- img.src = 'data:image/png;base64,' + b64;
+ try {
+ GetSigImageB64(function(b64) {
+ if (!b64) { _toast('No se capturó ninguna firma.'); return; }
+ const img = new Image();
+ img.onload = () => {
+ const c = target.canvas;
+ const ctx = c.getContext('2d');
+ ctx.clearRect(0, 0, c.width, c.height);
+ ctx.drawImage(img, 0, 0, c.width, c.height);
+ c.classList.add('has-sig');
+ if (typeof target.onAccept === 'function') target.onAccept();
+ };
+ img.src = 'data:image/png;base64,' + b64;
+ });
+ } catch(e) {
+ _toast('Error al capturar la firma: ' + e.message);
+ }
}
return { activar, cancelar, limpiarPad, aceptar };