djphrancis

chat_ui (jQuery, ES6)

Feb 21st, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
jQuery 2.88 KB | None | 0 0
  1. // jQuery selectors
  2. const $sendMessage = $('#send-message')
  3. const $messages = $('#messages')
  4. const $room = $('#room')
  5. const $roomList = $('#room-list')
  6. const $sendForm = $('#send-form')
  7.  
  8. const socket = io.connect()
  9. const chatApp = new Chat(socket)
  10.  
  11. const divEscapedContentElement = message => {
  12.   return $('<div></div>').text(message)
  13. }
  14.  
  15. const divSystemContentElement = message => {
  16.   return $('<div></div>').html('<i>' + message + '</i>')
  17. }
  18.  
  19. const processUserInput = chatApp => {
  20.   const message = $sendMessage.val()
  21.   if (isCommand(message)) {
  22.     const systemMessage = chatApp.processCommand(message)
  23.     if (systemMessage) {
  24.       $messages.append(divSystemContentElement(systemMessage))
  25.     }
  26.   }
  27.   else {
  28.     // broadcast non-command input to other users
  29.     chatApp.sendMessage($room.text(), message)
  30.     $messages.append(divEscapedContentElement(message))
  31.     $messages.scrollTop($messages.prop('scrollHeight'))
  32.   }
  33.   $sendMessage.val('')
  34. }
  35.  
  36. // if user input starts with a slash, treat it as a command
  37. const isCommand = message => {
  38.   return message.charAt(0) === '/'
  39. }
  40.  
  41.  
  42.  
  43. $(document).ready(() => {
  44.   const documentMain = () => {
  45.     socket.on('nameResult', displayNameChangeResults)
  46.     socket.on('joinResult', displayRoomJoinResults)
  47.     socket.on('message', displayReceivedMessage)
  48.     socket.on('rooms', displayAvailableRoomsList)
  49.  
  50.     // request list of rooms intermittently
  51.     setInterval(() => {
  52.       socket.emit('rooms')
  53.     }, 1000)
  54.  
  55.     $sendMessage.focus()
  56.  
  57.     // allow submitting the form to send a chat message
  58.     $sendForm.submit(() => {
  59.       processUserInput(chatApp)
  60.       return false
  61.     })
  62.   }
  63.  
  64.   const displayNameChangeResults = result => {
  65.     let message
  66.     if (result.success) {
  67.       message = 'You are now known as ' + result.name + '.'
  68.     }
  69.     else {
  70.       message = result.message
  71.     }
  72.     $messages.append(divSystemContentElement(message))
  73.   }
  74.  
  75.   const displayRoomJoinResults = result => {
  76.     $room.text(result.room)
  77.     $messages.append(divSystemContentElement('Room changed'))
  78.   }
  79.  
  80.   const displayReceivedMessage = message => {
  81.     const newMessage = $('<div></div>').text(message.text)
  82.     $messages.append(newMessage)
  83.   }
  84.  
  85.   const displayAvailableRoomsList = rooms => {
  86.     $roomList.empty()
  87.     for (let room in rooms) {
  88.       room = room.substring(1, room.length)
  89.       if (room !== '') {
  90.         $roomList.append(divEscapedContentElement(room))
  91.       }
  92.     }
  93.     // allow click of room name to change to that room
  94.     $roomList.find('div').click(() => {
  95.       chatApp.processCommand('/join ' + $(this).text())
  96.       $sendMessage.focus()
  97.     })
  98.     allowClickingRoomNameToJoin()
  99.   }
  100.  
  101.   const allowClickingRoomNameToJoin = () => {
  102.     $roomList.find('div').click(() => {
  103.       chatApp.processCommand('/join ' + $(this).text())
  104.       $sendMessage.focus()
  105.     })
  106.   }
  107.  
  108.   documentMain()
  109.  
  110. })
Advertisement
Add Comment
Please, Sign In to add comment