07041526d9a14144f912d05ea6801ae551d4fc71
[codereview/qtwebservice.git] / examples / webservice / official / root / examples / chat.js
1 /* Copyright (c) 2012 QtWebService Project.
2  * All rights reserved.
3  * 
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above copyright
9  *       notice, this list of conditions and the following disclaimer in the
10  *       documentation and/or other materials provided with the distribution.
11  *     * Neither the name of the QtWebService nor the
12  *       names of its contributors may be used to endorse or promote products
13  *       derived from this software without specific prior written permission.
14  * 
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18  * DISCLAIMED. IN NO EVENT SHALL QTWEBSERVICE BE LIABLE FOR ANY
19  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 function connect(url) {
28     if ("WebSocket" in window) {
29         ws = new WebSocket(url, ["chat"]);
30     } else if ("MozWebSocket" in window) {
31         ws = new MozWebSocket(url, ["chat"]);
32     }
33     ws.onopen = function() {
34         if (document.getElementById('name').value.length === 0) {
35             document.getElementById('name').focus();
36         } else {
37             document.getElementById('message').focus();
38         }
39     }
40     ws.onmessage = function(message) {
41         addItem(JSON.parse(message.data));
42     }
43 }
44
45 function post() {
46     var input = document.getElementById('message');
47     if (document.getElementById('name').value.length === 0) {
48         document.getElementById('name').focus();
49     } else if (input.value.length === 0) {
50         input.focus();
51     } else {
52         var message = {};
53         message.action = "post";
54         message.user = document.getElementById('name').value;
55         message.message = input.value;
56         ws.send(JSON.stringify(message));
57         input.value = '';
58         input.focus();
59     }
60 }
61
62 function addItem(data) {
63     var dl = document.getElementById("dl");
64
65     var dd = document.createElement("dd");
66     dd.innerHTML = data.message
67     if (dl.children.length > 2) {
68         dl.insertBefore(dd, dl.children[2])
69     } else {
70         dl.appendChild(dd)
71     }
72
73     var dt = document.createElement("dt");
74     dt.innerHTML = data.user
75     dl.insertBefore(dt, dd)
76 }