[
  {
    "path": "README.md",
    "content": "# Build A Group-Chat App in 30 Lines Using Node.js\n\nA simple and (hopefully) to-the-point tutorial to build your first group-chat application using Node.js in less than 30 lines of code.\n\n## Running the program\n\nRun the program by using\n\n```shell\n$ node index.js\n```\n"
  },
  {
    "path": "index.js",
    "content": "const express = require('express');\r\nconst app = express();\r\nconst http = require('http').Server(app);\r\nconst io = require('socket.io')(http);\r\n\r\napp.get('/', function(req, res) {\r\n    res.render('index.ejs');\r\n});\r\n\r\nio.sockets.on('connection', function(socket) {\r\n    socket.on('username', function(username) {\r\n        socket.username = username;\r\n        io.emit('is_online', '🔵 <i>' + socket.username + ' join the chat..</i>');\r\n    });\r\n\r\n    socket.on('disconnect', function(username) {\r\n        io.emit('is_online', '🔴 <i>' + socket.username + ' left the chat..</i>');\r\n    })\r\n\r\n    socket.on('chat_message', function(message) {\r\n        io.emit('chat_message', '<strong>' + socket.username + '</strong>: ' + message);\r\n    });\r\n\r\n});\r\n\r\nconst server = http.listen(8080, function() {\r\n    console.log('listening on *:8080');\r\n});"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"node-simple-group-chat\",\n  \"version\": \"1.0.0\",\n  \"description\": \"A simple group chat built using Node.js and Socket.io\",\n  \"main\": \"index.js\",\n  \"scripts\": {\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"author\": \"Diky Hadna\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"ejs\": \"^2.6.1\",\n    \"express\": \"^4.16.4\",\n    \"socket.io\": \"^2.2.0\"\n  }\n}\n"
  },
  {
    "path": "views/index.ejs",
    "content": "<!DOCTYPE html>\r\n<html>\r\n  <head>\r\n    <title>Simple Group Chat on Node.js</title>\r\n    <style>\r\n        * { margin: 0; padding: 0; box-sizing: border-box; }\r\n        body { font: 13px Helvetica, Arial; }\r\n        form { background: #fff; padding: 3px; position: fixed; bottom: 0; width: 100%; border-color: #000; border-top-style: solid; border-top-width: 1px;}\r\n        form input { border-style: solid; border-width: 1px; padding: 10px; width: 85%; margin-right: .5%; }\r\n        form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; margin-left: 2%; }\r\n        #messages { list-style-type: none; margin: 0; padding: 0; }\r\n        #messages li { padding: 5px 10px; }\r\n        #messages li:nth-child(odd) { background: #eee; }\r\n    </style>\r\n    <script src=\"../../socket.io/socket.io.js\"></script>\r\n    <script src=\"http://code.jquery.com/jquery-1.10.1.min.js\"></script>\r\n  </head>\r\n  <body>\r\n    <ul id=\"messages\"></ul>\r\n    <form action=\"/\" method=\"POST\" id=\"chatForm\">\r\n      <input id=\"txt\" autocomplete=\"off\" autofocus=\"on\" oninput=\"isTyping()\" placeholder=\"type your message here...\" /><button>Send</button>\r\n    </form>\r\n    <script>\r\n            var socket = io.connect('http://localhost:8080');\r\n\r\n            // submit text message without reload/refresh the page\r\n            $('form').submit(function(e){\r\n                e.preventDefault(); // prevents page reloading\r\n                socket.emit('chat_message', $('#txt').val());\r\n                $('#txt').val('');\r\n                return false;\r\n            });\r\n\r\n            // append the chat text message\r\n            socket.on('chat_message', function(msg){\r\n                $('#messages').append($('<li>').html(msg));\r\n            });\r\n\r\n            // append text if someone is online\r\n            socket.on('is_online', function(username) {\r\n                $('#messages').append($('<li>').html(username));\r\n            });\r\n\r\n            // ask username\r\n            var username = prompt('Please tell me your name');\r\n            socket.emit('username', username);\r\n\r\n    </script>\r\n  </body>\r\n</html>"
  }
]