index.html 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  6. <link type="text/css" rel="stylesheet" href="css/material-icons.css"/>
  7. <link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/>
  8. <link type="text/css" rel="stylesheet" href="css/style.min.css" media="screen,projection"/>
  9. <link type="text/css" rel="stylesheet" href="css/google-code-prettify/desert.css"/>
  10. <title>Titre</title>
  11. </head>
  12. <body class="grey lighten-4">
  13. <!-- Navbar -->
  14. <div id="navbar" class="navbar-fixed hide">
  15. <nav>
  16. <div class="nav-wrapper">
  17. <span class="brand-logo mleft-1">Note de <span data-bind="username"></span></span>
  18. <ul class="right hide-on-med-and-down">
  19. <li><a href="https://www.electronjs.org" target="_blank">Electron JS</a></li>
  20. <li><a href="https://gitlab.univ-artois.fr/arthur_brandao/conf-electron" target="_blank">Git Repository</a></li>
  21. <li><a href="reset.html">Reset</a></li>
  22. </ul>
  23. </div>
  24. </nav>
  25. </div>
  26. <!-- Main content -->
  27. <main>
  28. <div class="container">
  29. <div class="row">
  30. <div class="col s12 center-align">
  31. Bonjour
  32. <div class="input-field inline">
  33. <input type="text" data-model="username" onblur="saveUserName(this)">
  34. </div>
  35. </div>
  36. </div>
  37. <div class="row" data-loop="card">
  38. <div class="col s12 m6 l4">
  39. <div class="card">
  40. <div class="card-content zoom-in selectable" onclick="selectCard(this)">
  41. <span class="hide" data-val="id"></span>
  42. <span class="card-title" data-val="title"></span>
  43. </div>
  44. <div class="card-action">
  45. <a href="#" class="card-edit">Modifier</a>
  46. <a href="#" onclick="deleteCard(this, true)">Supprimer</a>
  47. </div>
  48. </div>
  49. </div>
  50. </div>
  51. </div>
  52. </main>
  53. <!-- Modal Structure -->
  54. <div class="modal">
  55. <div class="modal-content">
  56. <h4 id="modal-title"></h4>
  57. <div id="modal-content"></div>
  58. </div>
  59. <div class="modal-footer">
  60. <a id="modal-edit" href="#!" class="waves-effect waves-red btn-flat">Modifier</a>
  61. <span id="modal-delete" class="modal-close waves-effect waves-red btn-flat" onclick="deleteCard(this, false)">Supprimer</span>
  62. <span class="modal-close waves-effect waves-red btn-flat">Fermer</span>
  63. </div>
  64. </div>
  65. <!-- Add button -->
  66. <div class="fixed-action-btn">
  67. <a id="float-add-btn" href="edit.html" class="btn-floating btn-large waves-effect waves-light red hide tooltipped" data-position="left" data-tooltip="Ajouter">
  68. <i class="large material-icons">add</i>
  69. </a>
  70. </div>
  71. <!-- Discovery -->
  72. <div class="tap-target" data-target="float-add-btn">
  73. <div class="tap-target-content">
  74. <h5>Ajouter une note</h5>
  75. <p>Pour ajouter une note il suffit de cliquer sur ce bouton<br>(cliquez n'importe où pour faire disparaitre)</p>
  76. </div>
  77. </div>
  78. <!-- Loader -->
  79. <div id="page-loader" class="bg-loader grey darken-4">
  80. <div class="loader progress">
  81. <div class="indeterminate"></div>
  82. </div>
  83. </div>
  84. <script type="text/javascript" src="../node_modules/jquery/dist/jquery.min.js"></script>
  85. <script type="text/javascript" src="../node_modules/marked/marked.min.js"></script>
  86. <script type="text/javascript" src="../node_modules/dompurify/dist/purify.min.js"></script>
  87. <script type="text/javascript" src="js/materialize.min.js"></script>
  88. <script type="text/javascript" src="js/google-code-prettify/prettify.js"></script>
  89. <script type="text/javascript" src="js/script.js"></script>
  90. <script type="text/javascript" src="js/binder.js"></script>
  91. <script type="text/javascript">
  92. var scope;
  93. var modal;
  94. const editPage = 'edit.html';
  95. //When wep page is ready
  96. $(document).ready(() => {
  97. // Load data from server
  98. loadData(true).then((data) => {
  99. // Set up data and print
  100. scope = binder({
  101. card: data
  102. });
  103. scope.username = localStorage.username ? localStorage.username : 'Utilisateur';
  104. printContent(scope);
  105. // Show page
  106. setTimeout(() => {
  107. pageLoader(false);
  108. //Show discovery the first time
  109. if (!localStorage.discovery) {
  110. // Load discovery
  111. const discovery = M.TapTarget.init(document.querySelectorAll('.tap-target'), {onClose: () => {
  112. localStorage.setItem('discovery', true)
  113. }})[0];
  114. setTimeout(() => {discovery.open();}, 500);
  115. }
  116. }, 500);
  117. });
  118. // Load floating button
  119. const floatingButton = M.FloatingActionButton.init(document.querySelectorAll('.fixed-action-btn'))[0];
  120. // Load modal
  121. modal = M.Modal.init(document.querySelectorAll('.modal'))[0];
  122. // Load tooltip
  123. const tooltip = M.Tooltip.init(document.querySelectorAll('.tooltipped'))[0];
  124. });
  125. function printContent(scope) {
  126. for(element of scope.card) {
  127. element.content = element.content.toHTML();
  128. }
  129. looper(scope);
  130. for (cardEdit of $('.card-edit')) {
  131. const id = $($($(cardEdit).parents()[1]).children()[0]).children()[0].innerHTML;
  132. $(cardEdit).attr('href', `${editPage}?id=${id}`);
  133. }
  134. PR.prettyPrint();
  135. }
  136. function saveUserName(input) {
  137. if (input.value.trim() === '') {
  138. localStorage.removeItem('username');
  139. } else {
  140. localStorage.setItem('username', input.value);
  141. }
  142. }
  143. function selectCard(card) {
  144. const promise = loadData();
  145. const idElement = card.querySelector('[data-val=id]');
  146. const id = idElement.innerHTML;
  147. promise.then(data => {
  148. $('#modal-title').html(data[id].title);
  149. $('#modal-content').html(data[id].content.toHTML())
  150. $('#modal-delete').attr('data-id', id);
  151. $('#modal-edit').attr('href', `${editPage}?id=${id}`);
  152. PR.prettyPrint();
  153. modal.open();
  154. });
  155. }
  156. function deleteCard(span, fromCard) {
  157. let card;
  158. let id;
  159. // Get id and card element to remove
  160. if (fromCard) {
  161. card = $(span).parents();
  162. id = $($(card[1]).children()[0]).children()[0].innerHTML;
  163. } else {
  164. id = $(span).attr('data-id');
  165. idElements = document.querySelectorAll('[data-val=id]');
  166. for (idElement of idElements) {
  167. if (idElement.innerHTML === id) {
  168. card = $(idElement).parents();
  169. }
  170. }
  171. }
  172. // If card in local storage remove
  173. if (localStorage[id]) {
  174. localStorage.removeItem(id);
  175. let list = JSON.parse(localStorage.list);
  176. list.removeItem(id);
  177. localStorage.setItem('list', JSON.stringify(list));
  178. }
  179. // Remove card on the DOM
  180. card[2].remove();
  181. }
  182. function pageLoader(active) {
  183. if (active) {
  184. $('#page-loader').removeClass('hide');
  185. $('#navbar').addClass('hide');
  186. $('#float-add-btn').addClass('hide');
  187. } else {
  188. $('#float-add-btn').removeClass('hide');
  189. $('#navbar').removeClass('hide');
  190. $('#page-loader').addClass('hide');
  191. }
  192. }
  193. </script>
  194. </body>
  195. </html>