index.jsp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. <meta charset="UTF-8">
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  14. <link type="text/css" rel="stylesheet" href="../css/material-icons.css" />
  15. <link type="text/css" rel="stylesheet" href="../css/materialize.min.css" media="screen,projection" />
  16. <link type="text/css" rel="stylesheet" href="../css/style.min.css" media="screen,projection" />
  17. <link rel="icon" href="../img/favicon.ico" />
  18. <title>Scan - Microfolie Lens</title>
  19. </head>
  20. <body class="grey lighten-3">
  21. <!-- Header -->
  22. <header class="navbar-fixed">
  23. <nav class="red">
  24. <div class="nav-wrapper">
  25. <span class="brand-logo center mtop-half hide-on-med-and-down"><img src="../img/logo.png"
  26. title="Logo Microfolie" class="responsive-img" style="max-width: 128px;" /></span>
  27. <span class="brand-logo center hide-on-large-only">Microfolie Lens</span>
  28. <div class="left mleft-2 hide-on-med-and-down">
  29. <span>
  30. <h5>Microfolie Lens</h5>
  31. </span>
  32. </div>
  33. </div>
  34. </nav>
  35. </header>
  36. <div class="mtop-5 hide-on-med-and-down"></div>
  37. <!-- Main -->
  38. <main class="container">
  39. <div class="row">
  40. <div class="col s12 center-align">
  41. <h3 id="title">QR Code Scanner</h3>
  42. </div>
  43. </div>
  44. <div class="row">
  45. <div class="col s12 center-align">
  46. <video id="qr-preview"></video>
  47. </div>
  48. </div>
  49. </main>
  50. <!-- Popup -->
  51. <div id="ok-popup" class="modal popup">
  52. <div class="modal-content" style="overflow: hidden;">
  53. <div class="row">
  54. <div class="col offset-m1 m3 s12">
  55. <i class="material-icons green-text" style="font-size: 8em;">check_circle</i>
  56. </div>
  57. <div class="col m7 s12 mtop-3">
  58. <h4 id="ok-text">Success message</h4>
  59. </div>
  60. </div>
  61. </div>
  62. </div>
  63. <div id="err-popup" class="modal popup">
  64. <div class="modal-content" style="overflow: hidden;">
  65. <div class="row">
  66. <div class="col offset-m1 m3 s12">
  67. <i class="material-icons red-text" style="font-size: 8em;">error</i>
  68. </div>
  69. <div class="col m7 s12 mtop-3">
  70. <h4 id="error-text">Error message</h4>
  71. </div>
  72. </div>
  73. </div>
  74. </div>
  75. <!-- Loader -->
  76. <tag:loader name="loader" />
  77. <!-- Script -->
  78. <script type="text/javascript" src="../js/jquery.min.js"></script>
  79. <script type="text/javascript" src="../js/materialize.min.js"></script>
  80. <script type="text/javascript" src="../js/script.js"></script>
  81. <!-- Script pour cette page-->
  82. <script type="text/javascript" src="../js/instascan.min.js"></script>
  83. <script type="text/javascript">
  84. $(document).ready(() => {
  85. const okPopup = M.Modal.getInstance($('#ok-popup'));
  86. const errPopup = M.Modal.getInstance($('#err-popup'));
  87. const loader = M.Modal.getInstance($('#loader'));
  88. // Lecteur cookie espace
  89. const espace = getCookie("microfolies.lens.espace");
  90. // Si pas de cookie retour sur la page d'accueil
  91. if (espace === undefined) {
  92. window.location.href = "${base}";
  93. }
  94. // Changement nom titre
  95. $('#title').html(espace.capitalize());
  96. //Scanner QRcode
  97. const scanner = new Instascan.Scanner({ video: document.getElementById('qr-preview') });
  98. scanner.addListener('scan', function (content) {
  99. loader.open();
  100. const result = espace ? espace + "/" + content : content;
  101. $.ajax({
  102. type: "POST",
  103. url: "${base}api/badge/" + result,
  104. error: () => {
  105. $("#error-text").html('Une erreur est survenue');
  106. loader.close();
  107. errPopup.open();
  108. },
  109. success: (result) => {
  110. loader.close();
  111. if (result.success) {
  112. $("#ok-text").html(result.data.msg);
  113. okPopup.open();
  114. } else {
  115. $("#error-text").html(result.data);
  116. errPopup.open();
  117. }
  118. },
  119. });
  120. });
  121. Instascan.Camera.getCameras().then(function (cameras) {
  122. if (cameras.length > 0) {
  123. scanner.start(cameras[0]);
  124. }
  125. else {
  126. console.error('No cameras found.');
  127. }
  128. }).catch(err => {
  129. console.error(err);
  130. });
  131. });
  132. </script>
  133. </body>
  134. </html>