{"id":22,"date":"2024-06-19T12:43:09","date_gmt":"2024-06-19T10:43:09","guid":{"rendered":"https:\/\/nutidx.justtry.it\/please-scan-the-qrcode\/"},"modified":"2024-07-04T18:57:55","modified_gmt":"2024-07-04T16:57:55","slug":"please-scan-the-qrcode","status":"publish","type":"page","link":"https:\/\/nutidx.justtry.it\/en\/please-scan-the-qrcode\/","title":{"rendered":"Please scan the QRCode"},"content":{"rendered":"<div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-min-height:50vh;--awb-flex-wrap:nowrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-center fusion-flex-align-content-center fusion-flex-justify-content-center fusion-flex-content-wrap\" style=\"max-width:1216.8px;margin-left: calc(-4% \/ 2 );margin-right: calc(-4% \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:1.92%;--awb-margin-bottom-large:20px;--awb-spacing-left-large:1.92%;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:1.92%;--awb-spacing-left-medium:1.92%;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:1.92%;--awb-spacing-left-small:1.92%;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1\">        <center>\n            <div id=\"qrc-reader\"><\/div>\n            <button type=\"button\" id=\"qrc-start\" style=\"margin-top:12px;\">Start QR Scanner<\/button>\n        <\/center>\n\n        <script>\n        jQuery(document).ready(function ($) {\n          const config = {\n            fps: 10,\n            qrbox: { width: 400, height: 400 },\n            rememberLastUsedCamera: true,\n            supportedScanTypes: [Html5QrcodeScanType.SCAN_TYPE_CAMERA],\n            formatsToSupport: [Html5QrcodeSupportedFormats.QR_CODE]\n          };\n\n          const html5QrCode = new Html5Qrcode(\"qrc-reader\");\n\n          const onScanSuccess = (decodedText) => {\n            const url = new URL(decodedText);\n\n            if (url.host === 'nutidx.justtry.it') {\n              html5QrCode.stop().catch(() => {});\n              window.location.href = url.href;\n            }\n          };\n\n          async function warmupPermission() {\n            \/\/ Requests camera permission with a minimal constraint (Safari-friendly)\n            const stream = await navigator.mediaDevices.getUserMedia({ video: true, audio: false });\n            stream.getTracks().forEach(t => t.stop());\n          }\n\n          function pickBackCamera(cameras) {\n            const back = cameras.find(c => \/back|rear|environment\/i.test(c.label || \"\"));\n            return (back || cameras[cameras.length - 1] || cameras[0]).id;\n          }\n\n          async function startScanner() {\n            try {\n              await warmupPermission();\n\n              const cameras = await Html5Qrcode.getCameras();\n              console.log(\"Cameras:\", cameras);\n\n              if (!cameras || !cameras.length) {\n                console.error(\"No cameras found.\");\n                return;\n              }\n\n              const cameraId = pickBackCamera(cameras);\n              if (!cameraId) {\n                console.error(\"CameraId is empty\/undefined.\");\n                return;\n              }\n\n              \/\/ Safari workaround: avoid `deviceId: { exact: ... }`\n              await html5QrCode.start({ deviceId: cameraId }, config, onScanSuccess);\n\n              $(\"#qrc-start\").prop(\"disabled\", true);\n            } catch (e) {\n              console.error(\"Camera init failed:\", e);\n            }\n          }\n\n          \/\/ Safari: start on a user gesture\n          $(\"#qrc-start\").on(\"click\", startScanner);\n        });\n        <\/script>\n\n<\/div><\/div><\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-22","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/pages\/22","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/comments?post=22"}],"version-history":[{"count":4,"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/pages\/22\/revisions"}],"predecessor-version":[{"id":162,"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/pages\/22\/revisions\/162"}],"wp:attachment":[{"href":"https:\/\/nutidx.justtry.it\/en\/wp-json\/wp\/v2\/media?parent=22"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}