index.jsp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. $.ajax({
  88. type: "GET",
  89. url: "${base}api/espace/get/" + espace,
  90. error: () => {
  91. loader.close();
  92. $('#title').html(espace.capitalize());
  93. },
  94. success: (result) => {
  95. loader.close();
  96. $('#title').html(result.data.libelle.capitalize());
  97. },
  98. });
  99. //Scanner QRcode
  100. const scanner = new Instascan.Scanner({ video: document.getElementById('qr-preview') });
  101. scanner.addListener('scan', function (content) {
  102. loader.open();
  103. const result = espace ? espace + "/" + content : content;
  104. $.ajax({
  105. type: "POST",
  106. url: "${base}api/badge/" + result,
  107. error: () => {
  108. $("#error-text").html('Une erreur est survenue');
  109. loader.close();
  110. errPopup.open();
  111. },
  112. success: (result) => {
  113. loader.close();
  114. if (result.success) {
  115. $("#ok-text").html(result.data.msg);
  116. okPopup.open();
  117. } else {
  118. $("#error-text").html(result.data);
  119. errPopup.open();
  120. }
  121. },
  122. });
  123. });
  124. Instascan.Camera.getCameras().then(function (cameras) {
  125. if (cameras.length > 0) {
  126. scanner.start(cameras[0]);
  127. }
  128. else {
  129. console.error('No cameras found.');
  130. }
  131. }).catch(err => {
  132. console.error(err);
  133. });
  134. });
  135. </script>
  136. </body>
  137. </html>