| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | <%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="tag" tagdir="/WEB-INF/tags" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %><c:set var="req" value="${pageContext.request}" /><c:set var="url">${req.requestURL}</c:set><c:set var="base" value="${fn:substring(url, 0, fn:length(url) - fn:length(req.requestURI))}${req.contextPath}/" /><!DOCTYPE html><html><head>	<tag:head title="Scan" /></head><body class="grey lighten-3">    <!-- Header -->    <header class="navbar-fixed">        <nav class="red">            <div class="nav-wrapper">                <span class="brand-logo center mtop-half hide-on-med-and-down"><img src="../img/logo.png"                        title="Logo Microfolie" class="responsive-img" style="max-width: 128px;" /></span>                <span class="brand-logo center hide-on-large-only">Microfolie Lens</span>                <div class="left mleft-2 hide-on-med-and-down">                    <span>                        <h5>Microfolie Lens</h5>                    </span>                </div>            </div>        </nav>    </header>    <div class="mtop-5 hide-on-med-and-down"></div>    <!-- Main -->    <main class="container">    	<div class="row">			<div class="col s12 center-align">		    	<h3 id="title">QR Code Scanner</h3>		    </div>	    </div>    	<div class="row white z-depth-1">    		<div class="col s12">    			<ul class="tabs">    				<li class="tab col s6"><a href="#scan" class="active">Scanner</a></li>    				<li class="tab col s6"><a href="#code" class="active">Code</a></li>    			</ul>    		</div>    		<div id="scan" class="col s12">		        <div class="row">		            <div class="col s12 center-align">		                <video id="qr-preview"></video>		            </div>		        </div>    		</div>    		<div id="code" class="col s12">    			<div class="row">    				<div class="col s12">    					<div class="row mtop-5">        					<div class="input-field col s8 offset-s2 m6 offset-m3">          						<i class="material-icons prefix">person</i>          						<input id="code-input" type="text">          						<label for="code-input">Code</label>          						<span id="code-helper" class="helper-text"></span>       	 					</div>        				</div>        				<div class="row mbot-5">        					<div class="col s12 center-align">        						<button id="code-btn" class="waves-effect waves-light btn" disabled>        							<i class="material-icons left">check</i>Valider        						</button>        					</div>        				</div>    				</div>    			</div>    		</div>    	</div>    </main>    <!-- Popup -->    <div id="ok-popup" class="modal popup">        <div class="modal-content" style="overflow: hidden;">            <div class="row">                <div class="col offset-m1 m3 s12">                    <i class="material-icons green-text" style="font-size: 8em;">check_circle</i>                </div>                <div class="col m7 s12 mtop-3">                    <h4 id="ok-text">Success message</h4>                </div>            </div>            </div>    </div>    <div id="err-popup" class="modal popup">        <div class="modal-content" style="overflow: hidden;">            <div class="row">                <div class="col offset-m1 m3 s12">                    <i class="material-icons red-text" style="font-size: 8em;">error</i>                </div>                <div class="col m7 s12 mtop-3">                    <h4 id="error-text">Error message</h4>                </div>            </div>            </div>    </div>    <!--  Loader  -->    <tag:loader name="loader" />    <!-- Script -->    <tag:script />    <script type="text/javascript" src="../js/instascan.min.js"></script>    <script type="text/javascript">    	function sendCode(code, espace, nom, loader, okPopup, errPopup) {    		loader.open();            const result = espace ? espace + "/" + code : code;            $.ajax({            	type: "POST",            	url: "${base}api/badge/" + result,            	error: () => {            		$("#error-text").html('Une erreur est survenue');            		loader.close();            		errPopup.open();            	},            	success: (result) => {            		loader.close();            		if (result.success) {            			$("#ok-text").html(result.data.msg.replace("#ESPACE#", nom));            			okPopup.open();            		} else {            			$("#error-text").html(result.data);            			errPopup.open();            		}            	},            });    	}        	$(document).ready(() => {    		const okPopup = M.Modal.getInstance($('#ok-popup'));    		const errPopup = M.Modal.getInstance($('#err-popup'));    		const loader = M.Modal.getInstance($('#loader'));    		    		// Lecteur cookie espace            const espace = getCookie("microfolies.lens.espace");    		// Si pas de cookie retour sur la page d'accueil            if (espace === undefined) {                window.location.href = "${base}";            }    		    		// Recupération du nom reel de l'espace pour le titre    		loader.open();    		let nom = espace.capitalize();    		$.ajax({                type: "GET",                url: "${base}api/espace/get/" + espace,                error: () => {                	loader.close();                	$('#title').html(nom);                },                success: (result) => {                	loader.close();                	nom = result.data.libelle.capitalize();                	$('#title').html(nom);                },            });                        // Scanner QRcode            const scanner = new Instascan.Scanner({ video: document.getElementById('qr-preview') });            scanner.addListener('scan', function (content) {            	sendCode(content, espace, nom, loader, okPopup, errPopup);            });            Instascan.Camera.getCameras().then(function (cameras) {                if (cameras.length > 0) {                    scanner.start(cameras[0]);                }                else {                    console.error('No cameras found.');                }            }).catch(err => {                console.error(err);            });                        // Formulaire            $('#code-input').on('keyup', function() {            	const regex = /[A-Za-z0-9]{4}/gm;            	if (regex.test($(this).val()) && $(this).val().length == 4) {            		$(this).addClass('valid');            		$(this).removeClass('invalid');            		$("#code-btn").attr('disabled', false);            	} else {            		$(this).addClass('invalid');            		$(this).removeClass('valid');            		$("#code-helper").attr('data-error', 'Code invalide, exemple de code : Az6y');            		$("#code-btn").attr('disabled', true);            	}            });            $('#code-btn').on('click', () => {            	sendCode($('#code-input').val(), espace, nom, loader, okPopup, errPopup);            	$('#code-input').val('');            });    	});    </script></body></html>
 |