').text(label).html() + '';
- });
- $select.html(optionsHtml);
- if (currentValue) {
- $select.val(currentValue);
- if ($select.val() !== currentValue) {
- $select.val('');
- saveQrSelectedCamera('');
- }
- } else {
- $select.val('');
- }
- }
-
- function loadQrScannerScript(onReady) {
- if (qrScriptLoaded && typeof window.Html5Qrcode !== 'undefined') {
- onReady();
- return;
- }
- if (qrScriptLoading) {
- var waitReady = function() {
- if (qrScriptLoaded && typeof window.Html5Qrcode !== 'undefined') {
- onReady();
- } else {
- window.setTimeout(waitReady, 100);
- }
- };
- waitReady();
- return;
- }
-
- qrScriptLoading = true;
- var script = document.createElement('script');
- script.src = 'https://unpkg.com/html5-qrcode@2.3.8/html5-qrcode.min.js';
- script.onload = function() {
- qrScriptLoading = false;
- qrScriptLoaded = true;
- onReady();
- };
- script.onerror = function() {
- qrScriptLoading = false;
- $('#abhareg_qr_result').html('
Unable to load QR scanner library.
');
- };
- document.head.appendChild(script);
- }
-
- function startQrScanner(cameraId) {
- if (typeof window.Html5Qrcode === 'undefined') {
- return;
- }
-
- qrCleanupRequested = false;
- var selectedCameraId = typeof cameraId === 'string' ? cameraId : ($('#abhareg_qr_camera_select').val() || qrSelectedCamera || '');
-
- if (!html5QrCode) {
- html5QrCode = new window.Html5Qrcode('abhareg_qr_reader');
- }
-
- $('#abhareg_qr_stop_btn').removeClass('d-none');
- $('#abhareg_qr_result').html('');
-
- window.Html5Qrcode.getCameras().then(function(cameras) {
- populateQrCameraSelect(cameras, selectedCameraId);
-
- var cameraConfig = selectedCameraId
- ? { deviceId: { exact: selectedCameraId } }
- : { facingMode: 'environment' };
-
- html5QrCode.start(
- cameraConfig,
- { fps: 10, qrbox: { width: 250, height: 250 } },
- function(decodedText) {
- stopQrScanner();
- var scanned = decodedText.trim();
- $('#abhareg_qr_result').html('
QR scanned.
');
- if (window.AbhaQrModal) {
- openAbhaQrScan();
- window.AbhaQrModal.submit(scanned);
- return;
- }
- var numMatch = scanned.match(/\d{14}/);
- openAbhaAccountVerification(numMatch ? numMatch[0] : scanned, null);
- },
- function() {}
- ).then(function() {
- if (qrCleanupRequested) {
- stopQrScanner();
- return;
- }
- saveQrSelectedCamera(selectedCameraId);
- }).catch(function(err) {
- if (selectedCameraId) {
- saveQrSelectedCamera('');
- $('#abhareg_qr_camera_select').val('');
- stopQrScanner().then(function() {
- initQrScanner('');
- });
- return;
- }
- $('#abhareg_qr_result').html('
Camera error: ' + err + '. Please allow camera access.
');
- });
- }).catch(function(err) {
- $('#abhareg_qr_result').html('
Unable to list cameras: ' + err + '
');
- });
- }
-
function showRegResult(resp) {
var abhaNum = resp.abha_number || '';
var abhaDisp = abhaNum.replace(/(\d{2})(\d{4})(\d{4})(\d{4})/, '$1-$2-$3-$4');
@@ -1880,61 +1714,7 @@
});
// --- Method 2: QR Scanner ---
- function initQrScanner(cameraId) {
- loadQrScannerScript(function() {
- startQrScanner(cameraId);
- });
- }
-
- function stopQrScanner() {
- $('#abhareg_qr_stop_btn').addClass('d-none');
- if (!html5QrCode) {
- return Promise.resolve();
- }
- return html5QrCode.stop().catch(function(){}).then(function() {
- html5QrCode = null;
- });
- }
-
- function cleanupQrScanner() {
- qrCleanupRequested = true;
- stopQrScanner();
- }
-
- var previousPageCleanup = window.pageCleanup;
- window.pageCleanup = function() {
- cleanupQrScanner();
- if (typeof previousPageCleanup === 'function') {
- previousPageCleanup();
- }
- };
-
- $(window).off('beforeunload.abhaqr pagehide.abhaqr').on('beforeunload.abhaqr pagehide.abhaqr', cleanupQrScanner);
- document.addEventListener('visibilitychange', function() {
- if (document.hidden) {
- cleanupQrScanner();
- }
- });
-
- $('#abhareg_qr_stop_btn').on('click', function() { stopQrScanner(); });
$('#abhareg_qr_open_modal_btn').on('click', function() { openAbhaQrScan(); });
- $('#abhareg_qr_start_camera_btn').on('click', function() {
- $('#abhareg_qr_camera_wrap').removeClass('d-none');
- initQrScanner(qrSelectedCamera || '');
- });
- $('#abhareg_qr_camera_select').on('change', function() {
- var cameraId = ($(this).val() || '').toString();
- saveQrSelectedCamera(cameraId);
- stopQrScanner().then(function() {
- initQrScanner(cameraId);
- });
- });
- $('#abhareg_qr_camera_refresh').on('click', function() {
- saveQrSelectedCamera(($('#abhareg_qr_camera_select').val() || '').toString());
- stopQrScanner().then(function() {
- initQrScanner(qrSelectedCamera || '');
- });
- });
$('#abhareg_facility_refresh_btn').on('click', function() { loadFacilityQr(true); });
$('#abhareg_facility_print_btn').on('click', function() { printFacilityQr(); });