index.jsp 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="tag" tagdir="/WEB-INF/tags" %>
  4. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  5. <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  6. <c:set var="req" value="${pageContext.request}" />
  7. <c:set var="url">${req.requestURL}</c:set>
  8. <c:set var="base" value="${fn:substring(url, 0, fn:length(url) - fn:length(req.requestURI))}${req.contextPath}/" />
  9. <!DOCTYPE html>
  10. <html>
  11. <head>
  12. <tag:head title="Scan" />
  13. </head>
  14. <body class="grey lighten-3">
  15. <!-- Header -->
  16. <header class="navbar-fixed">
  17. <nav class="red">
  18. <div class="nav-wrapper">
  19. <span class="brand-logo center mtop-half hide-on-med-and-down"><img src="../img/logo.png"
  20. title="Logo Microfolie" class="responsive-img" style="max-width: 128px;" /></span>
  21. <span class="brand-logo center hide-on-large-only">Microfolie Lens</span>
  22. <div class="left mleft-2 hide-on-med-and-down">
  23. <span>
  24. <h5>Microfolie Lens</h5>
  25. </span>
  26. </div>
  27. </div>
  28. </nav>
  29. </header>
  30. <div class="mtop-5 hide-on-med-and-down"></div>
  31. <!-- Main -->
  32. <main class="container">
  33. <div class="row">
  34. <div class="col s12 center-align">
  35. <h3 id="title">QR Code Scanner</h3>
  36. </div>
  37. </div>
  38. <div class="row">
  39. <div class="col s12 center-align">
  40. <video id="qr-preview"></video>
  41. </div>
  42. </div>
  43. </main>
  44. <!-- Popup -->
  45. <div id="ok-popup" class="modal popup">
  46. <div class="modal-content" style="overflow: hidden;">
  47. <div class="row">
  48. <div class="col offset-m1 m3 s12">
  49. <i class="material-icons green-text" style="font-size: 8em;">check_circle</i>
  50. </div>
  51. <div class="col m7 s12 mtop-3">
  52. <h4 id="ok-text">Success message</h4>
  53. </div>
  54. </div>
  55. </div>
  56. </div>
  57. <div id="err-popup" class="modal popup">
  58. <div class="modal-content" style="overflow: hidden;">
  59. <div class="row">
  60. <div class="col offset-m1 m3 s12">
  61. <i class="material-icons red-text" style="font-size: 8em;">error</i>
  62. </div>
  63. <div class="col m7 s12 mtop-3">
  64. <h4 id="error-text">Error message</h4>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. <!-- Loader -->
  70. <tag:loader name="loader" />
  71. <!-- Script -->
  72. <tag:script />
  73. <script type="text/javascript" src="../js/instascan.min.js"></script>
  74. <script type="text/javascript">
  75. $(document).ready(() => {
  76. const okPopup = M.Modal.getInstance($('#ok-popup'));
  77. const errPopup = M.Modal.getInstance($('#err-popup'));
  78. const loader = M.Modal.getInstance($('#loader'));
  79. // Lecteur cookie espace
  80. const espace = getCookie("microfolies.lens.espace");
  81. // Si pas de cookie retour sur la page d'accueil
  82. if (espace === undefined) {
  83. window.location.href = "${base}";
  84. }
  85. // Recupération du nom reel de l'espace pour le titre
  86. loader.open();
  87. let nom = espace.capitalize();
  88. $.ajax({
  89. type: "GET",
  90. url: "${base}api/espace/get/" + espace,
  91. error: () => {
  92. loader.close();
  93. $('#title').html(nom);
  94. },
  95. success: (result) => {
  96. loader.close();
  97. nom = result.data.libelle.capitalize();
  98. $('#title').html(nom);
  99. },
  100. });
  101. //Scanner QRcode
  102. const scanner = new Instascan.Scanner({ video: document.getElementById('qr-preview') });
  103. scanner.addListener('scan', function (content) {
  104. loader.open();
  105. const result = espace ? espace + "/" + content : content;
  106. $.ajax({
  107. type: "POST",
  108. url: "${base}api/badge/" + result,
  109. error: () => {
  110. $("#error-text").html('Une erreur est survenue');
  111. loader.close();
  112. errPopup.open();
  113. },
  114. success: (result) => {
  115. loader.close();
  116. if (result.success) {
  117. $("#ok-text").html(result.data.msg.replace("#ESPACE#", nom));
  118. okPopup.open();
  119. } else {
  120. $("#error-text").html(result.data);
  121. errPopup.open();
  122. }
  123. },
  124. });
  125. });
  126. Instascan.Camera.getCameras().then(function (cameras) {
  127. if (cameras.length > 0) {
  128. scanner.start(cameras[0]);
  129. }
  130. else {
  131. console.error('No cameras found.');
  132. }
  133. }).catch(err => {
  134. console.error(err);
  135. });
  136. });
  137. </script>
  138. </body>
  139. </html>