A self hosted chat application with end-to-end encrypted messaging.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

295 lines
16 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
  1. <!DOCTYPE html>
  2. <html xmlns:th="http://www.thymeleaf.org">
  3. <head>
  4. <script src="https://code.jquery.com/jquery-2.1.4.min.js" th:if="false"></script>
  5. <script src="http://blackpeppersoftware.github.io/thymeleaf-fragment.js/thymeleaf-fragment.js" defer="defer" th:if="false"></script>
  6. <div th:replace="fragments/head :: headFragment">
  7. <meta charset="UTF-8">
  8. <title id="pageTitle">Chat</title>
  9. </div>
  10. <script src="./../../javascript/bundle.js" th:src="@{'/js/' + ${@environment.getProperty('chat-bundle')}}" defer></script>
  11. <link rel="stylesheet" th:href="@{/css/chat.css}" href="../../resources/static/css/chat.css">
  12. </head>
  13. <body>
  14. <div th:include="fragments/navbar :: navbarFragment"></div>
  15. <header id="chat-section">
  16. <div class="dark-overlay">
  17. <div class="chat-inner container bg-primary">
  18. <div class="row">
  19. <div class="col-sm d-lg-block">
  20. <h1 class="display-4">Chat with your friends</h1>
  21. <div class="d-flex">
  22. <div class="p-4 align-self-start">
  23. </div>
  24. <div class="p-4 align-self-end">
  25. Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laboriosam dolorem nostrum consequatur eos voluptates. Ipsam ullam quos illo qui. Quaerat corrupti nisi numquam rerum quasi nesciunt deserunt fugit commodi consequatur!
  26. </div>
  27. </div>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. </header>
  33. <div class="container-fluid h-100">
  34. <div class="row justify-content-center h-100 mt-3">
  35. <div class="col-md-4 col-xl-3 chat">
  36. <div class="card mb-sm-3 mb-md-0 contacts_card">
  37. <div class="card-header">
  38. <form action="#" id="user-search">
  39. <div class="input-group">
  40. <input type="text" placeholder="Search..." id="user-search-term" class="form-control search">
  41. <button class="search-cancel" id="user-search-cancel" hidden><i class="fas fa-times"></i></button>
  42. <div class="input-group-prepend">
  43. <button class="input-group-text search_btn"><i class="fas fa-search"></i></button>
  44. </div>
  45. </div>
  46. </form>
  47. </div>
  48. <div class="card-body contacts_body">
  49. <ui class="contacts">
  50. <li class="active">
  51. <div class="d-flex bd-highlight">
  52. <div class="img_cont">
  53. <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg" class="rounded-circle user_img">
  54. <span class="online_icon"></span>
  55. </div>
  56. <div class="user_info">
  57. <span>Khalid</span>
  58. <p>Kalid is online</p>
  59. </div>
  60. </div>
  61. </li>
  62. </ui>
  63. <ui class="contacts" id="contacts-box">
  64. <th:block th:each="au: ${activeUsers}">
  65. <li name="user-box" class="user-box">
  66. <div class="d-flex bd-highlight">
  67. <div class="img_cont">
  68. <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg" class="rounded-circle user_img">
  69. <span th:if="${au.online == true}" class="online_icon"></span>
  70. </div>
  71. <div class="user_info">
  72. <span class="to-user-span" th:text="${au.userName}">Khalid</span>
  73. <div th:switch="${au.online}">
  74. <p th:case="true" th:text="${au.userName} + ' is online'">Khalid is online</p>
  75. <th:block th:case="false">
  76. <th:block th:if="${au.lastActive == null}">
  77. <p th:text="'User has not logged in yet'"></p>
  78. </th:block>
  79. <th:block th:if="${au.lastActive != null}">
  80. <p th:text="'Last active ' + ${au.lastActive}">Last active 3 hours ago</p>
  81. </th:block>
  82. <!-- <p th:case="${au.online == true}" th:text="${au.userName} + ' is online'">Khalid is online</p>
  83. <p th:if="${au.online == false}" th:text="${au.userName} + ' is offline' + ' Last active = ' + ${au.lastActive}">Khalid is offline. -->
  84. <!-- <span th:text="'Last active = ' + ${au.lastActive}"></span> -->
  85. </th:block>
  86. </div>
  87. </div>
  88. <div class="d-flex flex-column ml-auto">
  89. <div class="text-right">Dec 25</div>
  90. <div style="color: rgba(255,255,255,0.7);">Hello how are you</div>
  91. </div>
  92. </div>
  93. </li>
  94. </th:block>
  95. </ui>
  96. </div>
  97. <div class="card-footer"></div>
  98. </div>
  99. </div>
  100. <div class="col-md-8 col-xl-6 chat">
  101. <div class="card" id="no-user-selected">
  102. <div class="m-auto">
  103. <div class="d-flex justify-content-center">
  104. <div class="align-self-center">
  105. <h2 class="display-4 no-user-selected-h2">Please select a user</h2>
  106. <input class="form-control type_msg" size="10" type="password" id="passphrase-initial" placeholder="Passphrase " required>
  107. </div>
  108. </div>
  109. </div>
  110. </div>
  111. <div class="card" id="chat-card" hidden>
  112. <div class="card-header msg_head">
  113. <div class="d-flex bd-highlight">
  114. <div class="img_cont">
  115. <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg" class="rounded-circle user_img">
  116. <!-- <span class="online_icon"></span> -->
  117. </div>
  118. <div class="user_info">
  119. <span id="user-name-span">Chat with Khalid</span>
  120. <p id="num-messages-p">1767 Messages</p>
  121. </div>
  122. <div class="video_cam">
  123. <span><i class="fas fa-video"></i></span>
  124. <span><i class="fas fa-phone"></i></span>
  125. </div>
  126. </div>
  127. <span id="action_menu_btn"><i class="fas fa-ellipsis-v"></i></span>
  128. <div class="action_menu">
  129. <ul>
  130. <li><i class="fas fa-user-circle"></i> View profile</li>
  131. <li><i class="fas fa-users"></i> Add to close friends</li>
  132. <li><i class="fas fa-plus"></i> Add to group</li>
  133. <li><i class="fas fa-ban"></i> Block</li>
  134. </ul>
  135. </div>
  136. </div>
  137. <div class="card-body msg_card_body" id="chat-area-new">
  138. </div>
  139. <div class="card-footer">
  140. <form action="#" th:object="${chatMessageDTO}" method="post" id="chatMessageForm" class="needs-validation" novalidate>
  141. <div class="input-group">
  142. <div class="input-group-append">
  143. <span class="input-group-text attach_btn"><i class="fas fa-paperclip"></i></span>
  144. </div>
  145. <input class="form-control type_msg" size="10" type="password" id="passphrase" placeholder="Passphrase " required>
  146. <textarea name="" id="chatInput" class="form-control type_msg" placeholder="Type your message..." required></textarea>
  147. <div class="input-group-append">
  148. <button class="input-group-text send_btn"><i class="fas fa-location-arrow"></i></button>
  149. </div>
  150. </div>
  151. </form>
  152. </div>
  153. </div>
  154. </div>
  155. </div>
  156. </div>
  157. <section hidden>
  158. <div class="container">
  159. <div class="row">
  160. <div class="col-sm">
  161. <h4 class="display-4 text-center py-2">Chat</h4>
  162. <div class="card text-white bg-primary mb-3 card-form rounded mx-auto">
  163. <div class="card-body rounded">
  164. <!-- <h4 class="card-title">Chat</h4> -->
  165. <div class="form-group">
  166. <textarea id="chatTextArea" class="form-control-lg py-2" disabled></textarea>
  167. </div>
  168. <!-- <form action="#" th:action="@{/seedstartermng}" th:object="${seedStarter}" method="post"> -->
  169. <!-- th:action="@{/api/chat}" -->
  170. <div class="card-text">
  171. </div>
  172. <form action="#" th:object="${chatMessageDTO}" method="post" class="needs-validation" novalidate>
  173. <div class="row">
  174. <div class="col-3">
  175. <div class="form-group">
  176. <label class="lead" for="toUser">User to send to: </label>
  177. <th:block th:each="userName: ${userNames}">
  178. <input class="form-control" type="radio" th:field="*{toUser}" th:value="${userName}">
  179. <label class="btn btn-secondary" th:for="${#ids.prev('toUser')}" th:text="${userName}">
  180. Demo User
  181. </label>
  182. </th:block>
  183. </div>
  184. </div>
  185. <div class="col">
  186. <div class="my-form-inputs container">
  187. <div class="form-group">
  188. <label for="chatInput">Your message: </label>
  189. <textarea class="form-control" type="text" required></textarea>
  190. <div class="invalid-feedback">
  191. Cannot be empty
  192. </div>
  193. </div>
  194. <div class="form-group">
  195. <label for="passphrase">Passphrase: </label>
  196. <input class="form-control" type="password" required>
  197. </div>
  198. <div class="form-group text-center">
  199. <button class="btn btn-secondary mx-auto">Submit</button>
  200. </div>
  201. </div>
  202. </div>
  203. </div>
  204. </form>
  205. </div>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. </section>
  211. <template id="msg_container_template">
  212. <div class="d-flex justify-content-start mb-4">
  213. <div class="img_cont_msg">
  214. <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg" class="rounded-circle user_img_msg">
  215. </div>
  216. <div class="msg msg_container">
  217. {{{message}}}
  218. <span class="msg_time">{{msgDateFormat messageTime}}</span>
  219. </div>
  220. </div>
  221. </template>
  222. <template id="msg_container_send_template">
  223. <div class="d-flex justify-content-end mb-4">
  224. <div class="msg msg_container_send">
  225. {{{message}}}
  226. <span class="msg_time_send">{{msgDateFormat messageTime}}</span>
  227. </div>
  228. <!-- <div class="img_cont_msg">
  229. <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg"
  230. class="rounded-circle user_img_msg">
  231. </div> -->
  232. {{{avatar}}}
  233. </div>
  234. </template>
  235. <template id="user-contact-online-template">
  236. <li name="user-box" class="user-box">
  237. <div class="d-flex bd-highlight">
  238. <div class="img_cont">
  239. <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg" class="rounded-circle user_img">
  240. <span class="online_icon"></span>
  241. </div>
  242. <div class="user_info">
  243. <span class="to-user-span">{{userName}}</span>
  244. <p>{{userName}} is online</p>
  245. </div>
  246. <div class="d-flex flex-column ml-auto">
  247. <div class="text-right">Dec 25</div>
  248. <div style="color: rgba(255,255,255,0.7);">Hello how are you</div>
  249. </div>
  250. </div>
  251. </li>
  252. </template>
  253. <template id="user-contact-offline-template">
  254. <li name="user-box" class="user-box">
  255. <div class="d-flex bd-highlight">
  256. <div class="img_cont">
  257. <img src="https://static.turbosquid.com/Preview/001292/481/WV/_D.jpg" class="rounded-circle user_img">
  258. </div>
  259. <div class="user_info">
  260. <span class="to-user-span">{{userName}}</span>
  261. <p>Last active {{fromNow lastActive}}</p>
  262. </div>
  263. <div class="d-flex flex-column ml-auto">
  264. <div class="text-right">Dec 25</div>
  265. <div style="color: rgba(255,255,255,0.7);">Hello how are you</div>
  266. </div>
  267. </div>
  268. </li>
  269. </template>
  270. </body>
  271. <!-- <script th:src="@{js/chat.js}" type="text/javascript"></script> -->
  272. <!-- <script src="../static/js/bundle.js" th:src="@{/js/bundle.js}"></script> -->
  273. <script src="../static/js/chatStatic.js" th:if="false"></script>
  274. </html>
  275. <!-- <div th:include="::frag (${value1},${value2})">...</div>
  276. <div th:include="::frag (onevar=${value1},twovar=${value2})">...</div> -->