Advertisement
stanly65

h_ex_messages

Aug 20th, 2017
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function startApp(){
  2.     const kinveyBaseUrl = "https://baas.kinvey.com/";
  3.     const kinveyAppKey = "kid_BJrFWY5ml";
  4.     const kinveyAppSecret = "61431f515ab54f77a2a074c258139c30";
  5.     const kinveyAppAuthHeaders = {
  6.         "Authorization": "Basic " + btoa(kinveyAppKey + ":" + kinveyAppSecret)
  7.     };
  8.  
  9.     sessionStorage.clear();
  10.     showHideMenuLinks();
  11.     showAppHomeView();
  12.  
  13.     $('#linkMenuAppHome').click(showAppHomeView);
  14.     $('#linkMenuLogin').click(showLoginView);
  15.     $('#linkMenuRegister').click(showRegisterView);
  16.    
  17.     $('#linkMenuUserHome').click(showUserHomeView);
  18.     $('#linkMenuLogout').click(logoutUser);
  19.  
  20.     $('#formRegister').submit(registerUser);
  21.     $('#formLogin').submit(loginUser);
  22.     $('#formSendMessage').submit(sendMessage);
  23.  
  24.     $('#linkMenuMyMessages, #linkUserHomeMyMessages').click(showInbox);
  25.     $('#linkMenuArchiveSent, #linkUserHomeArchiveSent').click(showOutbox);
  26.     $('#linkMenuSendMessage, #linkUserHomeSendMessage').click(loadUsers);
  27.  
  28.     $('#infoBox, #errorBox').click(function () {
  29.         $(this).fadeOut();
  30.     });
  31.  
  32.     $(document).on({
  33.         ajaxStart: function () {
  34.             $('#loadingBox').show();
  35.         },
  36.         ajaxStop: function () {
  37.             $('#loadingBox').hide();
  38.         }
  39.     });
  40.  
  41.     function showHideMenuLinks() {
  42.         $('main > div').hide();
  43.         if(sessionStorage.getItem('authToken')){
  44.             $('.useronly').show();
  45.             $('.anonymous').hide();
  46.         } else {
  47.             $('.anonymous').show();
  48.             $('.useronly').hide();
  49.         }
  50.     }
  51.  
  52.     function showView(viewName) {
  53.         $('main > section').hide();
  54.         $('#' + viewName).show();
  55.     }
  56.    
  57.     function showAppHomeView() {
  58.         showView('viewAppHome');
  59.     }
  60.  
  61.     function showLoginView() {
  62.         showView('viewLogin');
  63.     }
  64.  
  65.     function showRegisterView() {
  66.         showView('viewRegister');
  67.     }
  68.  
  69.     function showUserHomeView() {
  70.         showView('viewUserHome');
  71.     }
  72.  
  73.     function showMessagesView() {
  74.         showView('viewMyMessages')
  75.     }
  76.  
  77.     function showArhiveMessagesView() {
  78.         showView('viewArchiveSent');
  79.     }
  80.  
  81.     function showSendMessageView() {
  82.         showView('viewSendMessage');
  83.     }
  84.  
  85.     function handleAjaxError(response) {
  86.         let errorMsg = JSON.stringify(response);
  87.         if(response.readyState === 0) {
  88.             errorMsg = "Cannot connect due to network error.";
  89.         }
  90.         if(response.responseJSON && response.responseJSON.description) {
  91.             errorMsg = response.responseJSON.description;
  92.         }
  93.  
  94.         showError(errorMsg);
  95.     }
  96.  
  97.     function showInfo(message) {
  98.         $('#infoBox').text(message);
  99.         $('#infoBox').show();
  100.         setTimeout(function () {
  101.             $('#infoBox').fadeOut();
  102.         }, 3000);
  103.     }
  104.  
  105.     function showError(errorMsg) {
  106.         $('#errorBox').text("Error: " + errorMsg);
  107.         $('#errorBox').show();
  108.     }
  109.  
  110.     function registerUser(event) {
  111.         event.preventDefault();
  112.         let userData = {
  113.             username: $('#formRegister input[name=username]').val(),
  114.             password: $('#formRegister input[name=password]').val(),
  115.             name: $('#formRegister input[name=name]').val()
  116.         };
  117.  
  118.         $.ajax({
  119.             method: "POST",
  120.             url: kinveyBaseUrl + "user/" + kinveyAppKey + "/",
  121.             headers: kinveyAppAuthHeaders,
  122.             data: userData,
  123.             success: registerSuccess,
  124.             error: handleAjaxError
  125.         });
  126.  
  127.         function registerSuccess(userInfo) {
  128.             $('form input[type=text], form input[type=password]').val('');
  129.             saveAuthInSession(userInfo);
  130.             showHideMenuLinks();
  131.             showUserHomeView();
  132.             showInfo('User registration successful.');
  133.         }
  134.     }
  135.  
  136.     function saveAuthInSession(userInfo) {
  137.         let userAuth = userInfo._kmd.authtoken;
  138.         sessionStorage.setItem('authToken', userAuth);
  139.         let name = userInfo.name;
  140.         sessionStorage.setItem('name', name);
  141.         let username = userInfo.username;
  142.         sessionStorage.setItem('username', username);
  143.         $('#spanMenuLoggedInUser').text("Welcome, " + username + "!");
  144.         $('#viewUserHomeHeading').text("Welcome, " + username + "!");
  145.     }
  146.  
  147.     function loginUser(event) {
  148.         event.preventDefault();
  149.  
  150.         let userData = {
  151.             username: $('#formLogin input[name=username]').val(),
  152.             password: $('#formLogin input[name=password]').val()
  153.         };
  154.  
  155.         $.ajax({
  156.             method: "POST",
  157.             url: kinveyBaseUrl + "user/" + kinveyAppKey + "/login",
  158.             headers: kinveyAppAuthHeaders,
  159.             data: userData,
  160.             success: loginSuccess,
  161.             error: handleAjaxError
  162.         });
  163.  
  164.         function loginSuccess(userInfo) {
  165.             $('form input[type=text], form input[type=password]').val('');
  166.             saveAuthInSession(userInfo);
  167.             showHideMenuLinks();
  168.             showUserHomeView();
  169.             showInfo('Login successful.');
  170.         }
  171.     }
  172.  
  173.     function logoutUser() {
  174.         $.ajax({
  175.             method: "POST",
  176.             url: kinveyBaseUrl + "user/" + kinveyAppKey + "/_logout",
  177.             headers: getKinveyUserAuthHeaders(),
  178.             success: logoutSuccess,
  179.             error: handleAjaxError
  180.         });
  181.        
  182.         function logoutSuccess() {
  183.             sessionStorage.clear();
  184.             showHideMenuLinks();
  185.             showAppHomeView();
  186.             showInfo("Logout successful");
  187.         }
  188.     }
  189.  
  190.     function formatDate(dateISO8601) {
  191.         let date = new Date(dateISO8601);
  192.         if (Number.isNaN(date.getDate()))
  193.             return '';
  194.         return date.getDate() + '.' + padZeros(date.getMonth() + 1) +
  195.             "." + date.getFullYear() + ' ' + date.getHours() + ':' +
  196.             padZeros(date.getMinutes()) + ':' + padZeros(date.getSeconds());
  197.  
  198.         function padZeros(num) {
  199.             return ('0' + num).slice(-2);
  200.         }
  201.     }
  202.  
  203.  
  204.     function formatSender(name, username) {
  205.         if (!name)
  206.             return username;
  207.         else
  208.             return username + ' (' + name + ')';
  209.     }
  210.  
  211.     function showInbox() {
  212.         $.ajax({
  213.             method: "GET",
  214.             url: kinveyBaseUrl + "appdata/" + kinveyAppKey + `/messages?query={"recipient_username":"${sessionStorage.getItem('username')}"}`,
  215.             headers: getKinveyUserAuthHeaders(),
  216.             success: showInboxSuccess,
  217.             error: handleAjaxError
  218.         });
  219.  
  220.         function showInboxSuccess(messages) {
  221.  
  222.             $('#myMessages table tbody').empty();
  223.             for(let message of messages){
  224.                 $('#myMessages table tbody')
  225.                     .append($('<tr>')
  226.                         .append($('<td>').text(formatSender(message.sender_name, message.sender_username)))
  227.                         .append($('<td>').text(message.text))
  228.                         .append($('<td>').text(formatDate(message._kmd.lmt)))
  229.                     );
  230.             }
  231.  
  232.             showMessagesView();
  233.         }
  234.     }
  235.  
  236.     function showOutbox() {
  237.         $.ajax({
  238.             method: "GET",
  239.             url: kinveyBaseUrl + "appdata/" + kinveyAppKey + `/messages?query={"sender_username":"${sessionStorage.getItem('username')}"}`,
  240.             headers: getKinveyUserAuthHeaders(),
  241.             success: showOutboxSuccess,
  242.             error: handleAjaxError
  243.         });
  244.        
  245.         function showOutboxSuccess(messages) {
  246.             $('#sentMessages table tbody').empty();
  247.  
  248.             for(let message of messages){
  249.                 let deleteLink = $('<button>').text('Delete').click(() => deleteMessage(message._id));
  250.                 $('#sentMessages table tbody')
  251.                     .append($('<tr>')
  252.                         .append($('<td>').text(message.recipient_username))
  253.                         .append($('<td>').text(message.text))
  254.                         .append($('<td>').text(formatDate(message._kmd.lmt)))
  255.                         .append($('<td>').append(deleteLink))
  256.                     )
  257.             }
  258.  
  259.             showArhiveMessagesView();
  260.         }
  261.     }
  262.  
  263.     function deleteMessage(id) {
  264.         $.ajax({
  265.             method: "DELETE",
  266.             url: kinveyBaseUrl + "appdata/" + kinveyAppKey + "/messages/" + id,
  267.             headers: getKinveyUserAuthHeaders(),
  268.             success: deleteMessageSuccess,
  269.             error: handleAjaxError
  270.         });
  271.  
  272.         function deleteMessageSuccess() {
  273.             showOutbox();
  274.             showInfo('Message deleted.');
  275.         }
  276.     }
  277.  
  278.     function getKinveyUserAuthHeaders() {
  279.         return {
  280.             "Authorization": "Kinvey " + sessionStorage.getItem('authToken')
  281.         };
  282.     }
  283.  
  284.     function loadUsers() {
  285.         $.ajax({
  286.             method: "GET",
  287.             url: kinveyBaseUrl + "user/" + kinveyAppKey,
  288.             headers: getKinveyUserAuthHeaders(),
  289.             success: loadUsersSuccess,
  290.             error: handleAjaxError
  291.         });
  292.        
  293.         function loadUsersSuccess(users) {
  294.             $('#formSendMessage select').empty();
  295.  
  296.             for(let user of users){
  297.                 let name = null;
  298.                 if(user.name){
  299.                     name = user.name;
  300.                 }
  301.  
  302.                 $('#formSendMessage select')
  303.                     .append($('<option>').val(user.username).text(formatSender(name, user.username)));
  304.             }
  305.            
  306.             showSendMessageView();
  307.         }
  308.     }
  309.  
  310.     function sendMessage(event) {
  311.         event.preventDefault();
  312.  
  313.         let messageData = {
  314.             sender_username: sessionStorage.getItem('username'),
  315.             sender_name: sessionStorage.getItem('name'),
  316.             recipient_username: $('#formSendMessage select').val(),
  317.             text: $('#msgText').val()
  318.         };
  319.  
  320.         $.ajax({
  321.             method: "POST",
  322.             url: kinveyBaseUrl + "appdata/" + kinveyAppKey + "/messages",
  323.             headers: getKinveyUserAuthHeaders(),
  324.             data: messageData,
  325.             success: sendMessageSuccess,
  326.             error: handleAjaxError
  327.         });
  328.        
  329.         function sendMessageSuccess() {
  330.             $('form input[type=text], form input[type=password]').val('');
  331.             showOutbox();
  332.             showInfo('Message sent.');
  333.         }
  334.     }
  335. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement