1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4
<title>JWChat - Chat</title>
5
<meta http-equiv="content-type" content="text/html; charset=utf-8">
6
<script src="shared.js"></script>
7
<script src="browsercheck.js"></script>
8
<script src="emoticons.js"></script>
9
<script src="switchStyle.js"></script>
10
<script src="statusLed.js"></script>
11
<script src="xmlextras.js"></script>
12
<script src="jsjac.js"></script>
20
function putMsgHTML(msg) {
25
if (msg.getType() == 'error') {
26
var error = aJSJaCPacket.getNode().getElementsByTagName('error').item(0);
27
if (error && error.getElementsByTagName('text').item(0))
28
body = error.getElementsByTagName('text').item(0).firstChild.nodeValue;
35
now = msg.jwcTimestamp;
39
var mtime = (now.getHours()<10)? "0" + now.getHours() : now.getHours();
41
mtime += (now.getMinutes()<10)? "0" + now.getMinutes() : now.getMinutes();
43
mtime += (now.getSeconds()<10)? "0" + now.getSeconds() : now.getSeconds();
45
if (msg.getTo() == user.jid){ // msg sent by me
46
nick = htmlEnc(srcW.roster.nick);
55
msgHTML += "<div title=\"@ "+mtime+"\" cDate=\""+now.getTime()+"\" dir=\""+dir+"\" body=\""+htmlEnc(body)+"\"><span class=time>["+mtime+"] </span>";
56
body = msgFormat(body);
58
msgHTML += "<span style='color:red;'> ";
59
} else if (body.match(/^\/me /)) {
60
body = body.replace(/^\/me /,"<span style=\"color:green;font-weight:bold;\" class=msgnick>* "+nick+"</span> ");
62
msgHTML += "<span style=\"color:"+nickcolor+";\" class=msgnick><" + nick + "></span> ";
69
var auto_scroll = false;
70
if (cFrame.body.scrollTop+cFrame.body.clientHeight >= cFrame.body.scrollHeight) // scrollbar at bottom
73
cFrame.body.innerHTML += msgHTML;
76
chat.scrollTo(0,cFrame.body.scrollHeight);
80
while (user.chatmsgs.length>0) {
83
msg = user.chatmsgs[0];
84
user.chatmsgs = user.chatmsgs.slice(1,user.chatmsgs.length);
86
msg = user.chatmsgs.shift();
92
if (jwcMain.focusWindows) {
94
document.forms.chatform.msgbox.focus();
96
if (user.lastsrc != null && user.messages.length == 0) {
97
var images = srcW.roster.getUserIcons(user.jid);
98
for (var i=0; i<images.length; i++)
99
images[i].src = user.lastsrc;
101
if (srcW.roster.usersHidden && user.status == 'unavailable') // remove user from roster if not available any more
106
function openUserInfo() {
107
return jwcMain.openUserInfo(user.jid);
110
function openUserHistory() {
111
return jwcMain.openUserHistory(user.jid);
114
function updateUserPresence() {
115
// var user = srcW.roster.getUserByJID(jid);
116
var awaymsg = document.getElementById('awaymsg');
117
document.getElementById('user_name').innerHTML = user.name;
118
if (user.statusMsg) {
119
awaymsg.style.display = '';
120
awaymsg.innerHTML = htmlEnc(user.statusMsg);
122
awaymsg.style.display = 'none';
124
var img = document.images['statusLed'];
125
img.src = eval(user.status + "Led").src;
128
function submitClicked() {
129
var body = document.forms[0].elements["msgbox"].value;
130
if (body == '') // don't send empty message
133
var aMessage = new JSJaCMessage();
134
aMessage.setType('chat');
135
aMessage.setTo(user.jid);
136
aMessage.setBody(body);
138
jwcMain.con.send(aMessage);
140
// insert into chat window
141
putMsgHTML(aMessage);
143
// add message to our message history
144
jwcMain.addtoHistory(body);
145
document.forms["chatform"].msgbox.value=''; // empty box
146
document.forms["chatform"].msgbox.focus(); // set focus back on input field
155
jid = passedArgs['jid'];
157
if (opener.top.roster) {
164
alert("error starting chat");
170
cFrame = chat.document;
171
user = srcW.roster.getUserByJID(jid);
172
document.title = "Chat with "+user.name;
174
document.getElementById('user_name').innerHTML = user.name;
176
if (typeof(srcW.loghost) == 'undefined')
177
document.getElementById('hist_button').style.display = 'none';
179
updateUserPresence();
185
function displayTimestamp() {
188
tstyle = cFrame.styleSheets('timestampstyle');
189
tstyle.disabled = jwcMain.timestamps;
191
tstyle = cFrame.getElementById("timestampstyle");
192
tstyle.sheet.disabled = jwcMain.timestamps;
197
var group_open = new Image();
198
group_open.src = 'images/group_open.gif';
199
var group_close = new Image();
200
group_close.src = 'images/group_close.gif';
201
var msgbox_toggled = false;
202
function toggle_msgbox(el) {
203
if (msgbox_toggled) {
204
document.getElementById('msgbox').style.height = '1.4em';
205
document.getElementById('chat').style.height = '100%';
206
document.getElementById('submitbutton').style.display = 'none';
207
el.src = group_close.src;
209
document.getElementById('msgbox').style.height = '4.2em';
210
document.getElementById('chat').style.height = '99%';
211
document.getElementById('submitbutton').style.display = '';
212
el.src = group_open.src;
214
msgbox_toggled = !msgbox_toggled;
217
function msgboxKeyPressed(el,e) {
219
if (window.event) { e = window.event; keycode = window.event.keyCode; }
220
else if (e) keycode = e.which;
226
if (!msgbox_toggled) {
227
toggle_msgbox(document.getElementById('toggle_icon'));
231
return submitClicked();
237
function msgboxKeyDown(el,e) {
239
if (window.event) { e = window.event; keycode = window.event.keyCode; }
240
else if (e) keycode = e.which;
246
el.value = jwcMain.getHistory('up', el.value);
247
el.focus(); el.select();
250
case 40: // shift+down
252
el.value = jwcMain.getHistory('down', el.value);
253
el.focus(); el.select();
257
if (e.ctrlKey) { // ctrl+l
258
chat.document.body.innerHTML = '';
270
if (!srcW.enableLog || typeof(srcW.loghost) == 'undefined')
273
var nodes = cFrame.body.getElementsByTagName("div");
274
if (nodes.length == 0)
277
var aIQ = new JSJaCIQ();
279
aIQ.setTo(jwcMain.loghost);
280
var aStore = aIQ.getNode().appendChild(aIQ.getDoc().createElement('store'));
281
aStore.setAttribute('xmlns','http://jabber.org/protocol/archive');
282
aStore.setAttribute('with',user.jid);
283
aStore.setAttribute('start',jabberDate(cDate));
285
for (var i=0; i<nodes.length; i++) {
286
var node = nodes.item(i);
288
var aItem = aStore.appendChild(aIQ.getDoc().createElement(node.getAttribute('dir')));
289
aItem.setAttribute('secs',Math.round((node.getAttribute('cDate')-cDate.getTime())/1000));
290
aItem.appendChild(aIQ.getDoc().createElement("body")).appendChild(aIQ.getDoc().createTextNode(node.getAttribute('body')));
293
jwcMain.Debug.log(aIQ.xml(),2);
294
jwcMain.con.send(aIQ);
302
<body style="margin:8px;">
303
<table width="100%" height="100%">
305
<table border=0 cellspacing=0 cellpadding=0 width="100%">
307
<td width="100%" valign=top><img src="images/unavailable.gif" name="statusLed" width=16 height=16 border=0 align=left><span id="user_name" class="link" onClick="return openUserInfo();" style="padding:2px;" title="Click to show user's vcard"></span><br clear=all>
308
<span id="awaymsg" class="statusMsg"></span></td>
309
<td align=right valign=top><button id='hist_button' onClick="return openUserHistory();">History</button></td></table>
311
<tr><td width="100%" height="100%" colspan=2><iframe src="chat_iframe.html" id="chat" name="chat" scrolling="auto"></iframe></td></tr>
312
<form name="chatform" style="border:0px;margin:0px;padding:0px;">
314
<td valign=top><img id="toggle_icon" src="images/group_close.gif" width="14" height="14" onClick="toggle_msgbox(this);"></td>
316
<textarea id="msgbox" wrap="virtual" style="width:100%;height:1.4em;" onKeyPress="return msgboxKeyPressed(this,event);" onKeyDown="return msgboxKeyDown(this,event);"></textarea>
319
<tr id="submitbutton" style="display:none;"><td colspan=2 align=right><button onClick="submitClicked(); return false;">Send</button></td></tr>