Advertisement
Guest User

Untitled

a guest
Dec 11th, 2016
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.69 KB | None | 0 0
  1. function startApp() {
  2. //clear user auth data
  3. sessionStorage.clear()
  4.  
  5. showHideMenuLinks()
  6. $('#infoBox, #errorBox, #loadingBox').hide()
  7.  
  8.  
  9. showView('viewAppHome')
  10.  
  11. //bind navigation menu links
  12. $('#linkMenuAppHome').click(showHomeAppView)
  13. $('#linkMenuUserHome').click(showHomeUserView)
  14. $('#linkMenuLogin').click(showLoginView)
  15. $('#linkMenuRegister').click(showRegisterView)
  16. $('#linkMenuMyMessages').click(showMyMessages)
  17. $('#linkMenuArchiveSent').click(showArchiveSend)
  18. $('#linkMenuSendMessage').click(showSendMessages)
  19. $('#linkMenuLogout').click(logoutUser)
  20.  
  21. //bind the form submit buttons
  22. $('#formLogin').submit(loginUser)
  23. $('#formRegister').submit(registerUser)
  24. $('#formSendMessage').submit(sendMessage)
  25.  
  26. //bind the info/error boxes: hide on click
  27. $('#infoBox, #errorBox').click(function () {
  28. $(this).fadeOut()
  29. })
  30.  
  31. // Attach AJAX "loading" event listener
  32. $(document).on({
  33. ajaxStart: function () {
  34. $("#loadingBox").show()
  35. },
  36. ajaxStop: function () {
  37. $("#loadingBox").hide()
  38. }
  39. });
  40.  
  41.  
  42. const kinveyBaseUrl = "https://baas.kinvey.com/";
  43. const kinveyAppKey = "kid_Sk10T_cmg";
  44. const kinveyAppSecret = "e0bac17dd78d45a3ab05b7967a908850";
  45. const kinveyAppAuthHeaders = {
  46. 'Authorization': "Basic " + btoa(kinveyAppKey + ":" + kinveyAppSecret),
  47. 'Content-type': "application/json"
  48. };
  49.  
  50. function setUsernameInLink() {
  51. $('#spanMenuLoggedInUser').text('Hello, ' + sessionStorage.getItem('username'))
  52. }
  53.  
  54. function showHideMenuLinks() {
  55. $('#menu a').hide()
  56. $('#menu span').hide()
  57. if (sessionStorage.getItem('authToken')) {
  58. setUsernameInLink()
  59. //logged in user
  60. $('#linkMenuUserHome').show()
  61. $('#linkMenuMyMessages').show()
  62. $('#linkMenuArchiveSent').show()
  63. $('#linkMenuSendMessage').show()
  64. $('#linkMenuLogout').show()
  65. $('#spanMenuLoggedInUser').show()
  66. } else {
  67. //no user logged in
  68. $('#linkMenuAppHome').show()
  69. $('#linkMenuLogin').show()
  70. $('#linkMenuRegister').show()
  71. }
  72. }
  73.  
  74. function showView(viewName) {
  75. // Hide all views and show the selected view only
  76. $('main > section').hide();
  77. $('#' + viewName).show();
  78. }
  79.  
  80. function showMyMessages(){
  81. downloadReceivedMessages()
  82. showView('viewMyMessages')
  83. }
  84.  
  85. function showArchiveSend(){
  86. downloadSentedMessage()
  87. showView('viewArchiveSent')
  88. }
  89.  
  90. function showHomeAppView() {
  91. showView('viewAppHome')
  92. }
  93.  
  94. function showHomeUserView() {
  95. $('#linkUserHomeMyMessages').on('click',() => showMyMessages())
  96. $('#linkUserHomeSendMessage').on('click',() => showSendMessages())
  97. $('#linkUserHomeArchiveSent').on('click',() => showArchiveSend())
  98.  
  99.  
  100. showView('viewUserHome')
  101. $('#viewUserHomeHeading').text('Welcome, ' + sessionStorage.getItem('username'))
  102. }
  103.  
  104. function showSendMessages() {
  105. showView('viewSendMessage')
  106. getRecipientsForOption()
  107. $('#formSendMessage').trigger('reset')
  108. }
  109.  
  110. function sendMessage(event){
  111. event.preventDefault()
  112.  
  113. $.ajax({
  114. method: "GET",
  115. url: kinveyBaseUrl + ''
  116. })
  117.  
  118. let data = {
  119. sender_username: sessionStorage.getItem('username') ,
  120. text: $('#msgText').val(),
  121. recipient_username: $('select[name=recipient] option:selected').val()
  122. }
  123.  
  124.  
  125. $.ajax({
  126. method: "POST",
  127. url: kinveyBaseUrl + 'appdata/' + kinveyAppKey + '/messages',
  128. headers: getKinveyUserAuthHeaders(),
  129. data: data,
  130. success: sendMessageSuccess,
  131. error: handleAjaxError
  132. })
  133.  
  134. function sendMessageSuccess(response){
  135. showInfo("Message send successful.")
  136. showArchiveSend()
  137. }
  138. }
  139.  
  140.  
  141. function getRecipientsForOption(){
  142. $('#msgRecipientUsername').empty()
  143.  
  144. $.ajax({
  145. method: "GET",
  146. url: kinveyBaseUrl + 'user/' + kinveyAppKey,
  147. headers: getKinveyUserAuthHeaders(),
  148. success: getRecipientsSuccessful,
  149. error: handleAjaxError
  150. })
  151.  
  152. function getRecipientsSuccessful(users){
  153. let usersForOption = []
  154. for(let user of users){
  155. usersForOption.push(user)
  156. }
  157. for(let option of usersForOption){
  158. $('#msgRecipientUsername').append($('<option>', {
  159. value: option.username,
  160. text : formatSender(option.name, option.username)
  161. }));
  162. }
  163.  
  164. }
  165. }
  166.  
  167. function downloadSentedMessage(){
  168. $.ajax({
  169. method: "GET",
  170. url: kinveyBaseUrl + 'appdata/' + kinveyAppKey + '/messages?query={"sender_username":"' + sessionStorage.getItem('username') + '"}',
  171. headers: getKinveyUserAuthHeaders(),
  172. success: downloadMessagesSuccessful,
  173. error: handleAjaxError
  174. })
  175.  
  176. function downloadMessagesSuccessful(messages){
  177. $('#sentMessages table tbody').empty()
  178. for(let message of messages){
  179. let tr = $('<tr>')
  180. .append($('<td>')
  181. .text(message.recipient_username))
  182. .append($('<td>')
  183. .text(message.text))
  184. .append($('<td>')
  185. .text(formatDate(message._kmd.lmt)))
  186. .append($('<td>')
  187. .append($("<button>").text('Delete').on('click', () => deleteMessage(message._id))))
  188.  
  189. tr.appendTo($('#sentMessages table tbody'))
  190. }
  191. }
  192. }
  193.  
  194. function deleteMessage(id){
  195. $.ajax({
  196. method: "DELETE",
  197. url: kinveyBaseUrl + 'appdata/' + kinveyAppKey + '/messages/' + id,
  198. headers: getKinveyUserAuthHeaders(),
  199. success: deleteMessageSuccess,
  200. error: handleAjaxError
  201. })
  202.  
  203. function deleteMessageSuccess(){
  204. showArchiveSend()
  205. showInfo('Message deleted successful.')
  206. }
  207. }
  208.  
  209. function formatDate(dateISO8601) {
  210. let date = new Date(dateISO8601);
  211. if (Number.isNaN(date.getDate()))
  212. return '';
  213. return date.getDate() + '.' + padZeros(date.getMonth() + 1) +
  214. "." + date.getFullYear() + ' ' + date.getHours() + ':' +
  215. padZeros(date.getMinutes()) + ':' + padZeros(date.getSeconds());
  216.  
  217. function padZeros(num) {
  218. return ('0' + num).slice(-2);
  219. }
  220. }
  221.  
  222. function formatSender(name, username) {
  223. if (!name)
  224. return username;
  225. else
  226. return username + ' (' + name + ')';
  227. }
  228.  
  229. function downloadReceivedMessages(){
  230. $.ajax({
  231. method: "GET",
  232. url: kinveyBaseUrl + 'appdata/' + kinveyAppKey + '/messages?query={"recipient_username":"' + sessionStorage.getItem('username') + '"}',
  233. headers: getKinveyUserAuthHeaders(),
  234. success: downloadMessagesSuccesful,
  235. error: handleAjaxError
  236. })
  237.  
  238. function downloadMessagesSuccesful(messages){
  239. $('#myMessages table tbody').empty()
  240. for(let message of messages){
  241. let tr = $('<tr>')
  242. .append($('<td>')
  243. .text(formatSender(message.sender_name, message.sender_username)))
  244. .append($('<td>')
  245. .text(message.text))
  246. .append($('<td>')
  247. .text(formatDate(message._kmd.lmt)))
  248.  
  249. tr.appendTo($('#myMessages table tbody'))
  250. }
  251.  
  252. }
  253. }
  254.  
  255.  
  256. function showLoginView() {
  257. showView('viewLogin')
  258. $('#formLogin').trigger('reset')
  259. }
  260.  
  261. function showRegisterView() {
  262. showView('viewRegister')
  263. $('#formRegister').trigger('reset')
  264. }
  265.  
  266. function registerUser(event) {
  267. event.preventDefault()
  268.  
  269. let data
  270.  
  271. if($('#formRegister input[name=name]').val() == ''){
  272. data = {
  273. username: $('#formRegister input[name=username]').val(),
  274. password: $('#formRegister input[name=password]').val()
  275. }
  276. } else {
  277. data = {
  278. username: $('#formRegister input[name=username]').val(),
  279. password: $('#formRegister input[name=password]').val(),
  280. name: $('#formRegister input[name=name]').val()
  281. }
  282. }
  283.  
  284.  
  285.  
  286. $.ajax({
  287. method: "POST",
  288. url: kinveyBaseUrl + 'user/' + kinveyAppKey + '/',
  289. headers: kinveyAppAuthHeaders,
  290. data: JSON.stringify(data),
  291. success: registerUserSuccess,
  292. error: handleAjaxError
  293. })
  294.  
  295. function registerUserSuccess(userInfo) {
  296. saveAuthInSession(userInfo)
  297. showHideMenuLinks()
  298. showHomeUserView()
  299. showInfo('User registration successful.')
  300. }
  301.  
  302. }
  303.  
  304.  
  305. function saveAuthInSession(userInfo) {
  306. sessionStorage.setItem('username', userInfo.username)
  307. sessionStorage.setItem('authToken', userInfo._kmd.authtoken)
  308. sessionStorage.setItem('userId', userInfo._id)
  309. $('#loggedInUSer').text('Welcome, ' + userInfo.username)
  310. }
  311.  
  312.  
  313. function showInfo(msg) {
  314. $('#infoBox').text(msg)
  315. setTimeout(function () {
  316. $('#infoBox').fadeOut()
  317. }, 3000)
  318. }
  319.  
  320.  
  321. function handleAjaxError(response) {
  322. let errorMsg = JSON.stringify(response);
  323. if (response.readyState === 0)
  324. errorMsg = "Cannot connect due to network error.";
  325. if (response.responseJSON && response.responseJSON.description)
  326. errorMsg = response.responseJSON.description;
  327. showError(errorMsg);
  328. }
  329.  
  330. function showError(errorMsg) {
  331. $('#errorBox').text('Error: ' + errorMsg)
  332. $('#errorBox').show()
  333. }
  334.  
  335.  
  336. function getKinveyUserAuthHeaders() {
  337. return {
  338. "Authorization": "Kinvey " + sessionStorage.getItem('authToken')
  339. }
  340. }
  341.  
  342. function logoutUser() {
  343. $.ajax({
  344. method: "POST",
  345. url: kinveyBaseUrl + 'user/' + kinveyAppKey + '/_logout',
  346. headers: getKinveyUserAuthHeaders(),
  347. success: logoutSuccess,
  348. error: handleAjaxError
  349. })
  350.  
  351. function logoutSuccess(){
  352. sessionStorage.clear()
  353. $('#loggedInUser').text('')
  354. showInfo('Logout successful.')
  355. showHomeAppView()
  356. showHideMenuLinks()
  357. }
  358. }
  359.  
  360.  
  361. function loginUser(event) {
  362. event.preventDefault()
  363.  
  364. let userData = {
  365. username: $('#formLogin input[name=username]').val(),
  366. password: $('#formLogin input[name=password]').val()
  367. };
  368.  
  369. $.ajax({
  370. method: "POST",
  371. url: kinveyBaseUrl + 'user/' + kinveyAppKey + '/login',
  372. data: JSON.stringify(userData),
  373. headers: kinveyAppAuthHeaders,
  374. success: loginUserSuccess,
  375. error: handleAjaxError
  376. })
  377.  
  378. function loginUserSuccess(userInfo) {
  379. saveAuthInSession(userInfo)
  380. showHideMenuLinks()
  381. showHomeUserView()
  382. showInfo('Login successful.')
  383. }
  384.  
  385. }
  386.  
  387. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement