| /* | |
| * Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved. | |
| * | |
| * This program and the accompanying materials are made available under the | |
| * terms of the Eclipse Public License v. 2.0, which is available at | |
| * http://www.eclipse.org/legal/epl-2.0. | |
| * | |
| * This Source Code may also be made available under the following Secondary | |
| * Licenses when the conditions for such availability set forth in the | |
| * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | |
| * version 2 with the GNU Classpath Exception, which is available at | |
| * https://www.gnu.org/software/classpath/license.html. | |
| * | |
| * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | |
| */ | |
| var count = 0; | |
| var loop = 0; | |
| var websocket = null; | |
| var name = null; | |
| var url = 'ws://' + document.location.host + document.location.pathname + 'chat'; | |
| var app = { | |
| initialize: function() { | |
| if ("WebSocket" in window) { | |
| $('login-name').focus(); | |
| app.listen(); | |
| } else { | |
| $('missing-sockets').style.display = 'inherit'; | |
| $('login-name').style.display = 'none'; | |
| $('login-button').style.display = 'none'; | |
| $('display').style.display = 'none'; | |
| } | |
| }, | |
| listen: function() { | |
| $('websockets-frame').src = app.url + '?' + count; | |
| count ++; | |
| }, | |
| login: function() { | |
| name = $F('login-name'); | |
| if (! name.length > 0) { | |
| $('system-message').style.color = 'red'; | |
| $('login-name').focus(); | |
| return; | |
| } | |
| $('system-message').style.color = '#2d2b3d'; | |
| $('system-message').innerHTML = name + ':'; | |
| $('login-button').disabled = true; | |
| $('login-form').style.display = 'none'; | |
| $('message-form').style.display = ''; | |
| websocket = new WebSocket(url); | |
| websocket.name = name; | |
| websocket.onopen = function() { | |
| // Web Socket is connected. You can send data by send() method | |
| websocket.send('login:' + name); | |
| }; | |
| websocket.onmessage = function (evt) { | |
| eval(evt.data); | |
| $('message').disabled = false; | |
| $('post-button').disabled = false; | |
| $('message').focus(); | |
| $('message').value = ''; | |
| }; | |
| websocket.onclose = function() { | |
| var p = document.createElement('p'); | |
| p.innerHTML = name + ': has left the chat'; | |
| $('display').appendChild(p); | |
| new Fx.Scroll('display').down(); | |
| }; | |
| }, | |
| post: function() { | |
| var message = $F('message'); | |
| if (!message > 0) { | |
| return; | |
| } | |
| $('message').disabled = true; | |
| $('post-button').disabled = true; | |
| websocket.send(message); | |
| }, | |
| update: function(data) { | |
| if (data) { | |
| var p = document.createElement('p'); | |
| p.innerHTML = data.message; | |
| $('display').appendChild(p); | |
| new Fx.Scroll('display').down(); | |
| } | |
| } | |
| }; | |
| var rules = { | |
| '#login-name': function(elem) { | |
| Event.observe(elem, 'keydown', function(e) { | |
| if (e.keyCode == 13) { | |
| $('login-button').focus(); | |
| } | |
| }); | |
| }, | |
| '#login-button': function(elem) { | |
| elem.onclick = app.login; | |
| }, | |
| '#message': function(elem) { | |
| Event.observe(elem, 'keydown', function(e) { | |
| if (e.shiftKey && e.keyCode == 13) { | |
| $('post-button').focus(); | |
| } | |
| }); | |
| }, | |
| '#post-button': function(elem) { | |
| elem.onclick = app.post; | |
| } | |
| }; |