~ubuntu-branches/ubuntu/lucid/jwchat/lucid

« back to all changes in this revision

Viewing changes to groupchat.html.sr

  • Committer: Bazaar Package Importer
  • Author(s): Torsten Werner
  • Date: 2008-08-24 15:02:53 UTC
  • mfrom: (3.1.4 intrepid)
  • Revision ID: james.westby@ubuntu.com-20080824150253-h0z39rzjmo4lc1k5
Tags: 1.0beta3-3
* Clean up README.Debian. (Closes: #481320)
* Add brazilian debconf messages translation. (Closes: #481522)
* Add swedish debconf messages translation. (Closes: #494887)
* Add italian debconf messages translation. (Closes: #495780)
* Add russian debconf messages translation. (Closes: #495573)
* Add finnish debconf messages translation. (Closes: #496227)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
 
<html>
3
 
  <head>
4
 
    <title>JWChat - Groupchat</title>
5
 
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
6
 
<script>
7
 
 // this one's needed to make roster.js work
8
 
var JABBERSERVER = opener.JABBERSERVER;
9
 
</script>
10
 
    <script src="shared.js"></script>
11
 
    <script src="browsercheck.js"></script>
12
 
    <script src="emoticons.js"></script>
13
 
    <script src="config.js"></script>
14
 
    <script src="statusLed.js"></script>
15
 
    <script src="xmlextras.js"></script>
16
 
    <script src="JSJaCPacket.js"></script>
17
 
    <script src="roster.js"></script>
18
 
    <script language="JavaScript1.2">
19
 
<!--
20
 
var colors = new Array('maroon','green','olive','navy','purple','teal','red','blue');
21
 
 
22
 
var scrollHeight = 0;
23
 
function putMsgHTML(msg,mtime,user,usercolor,err) {
24
 
  var msgHTML = '';
25
 
  
26
 
  msg = msgFormat(msg);
27
 
 
28
 
  msgHTML += "<div><span class=time>["+mtime+"] </span>";    
29
 
  
30
 
  if (msg.match(/^\/me /)) {
31
 
    msg = msg.replace(/^\/me /,"<span style=\"color:green;font-weight:bold;\" class=msgnick title='@ "+mtime+"'>*&nbsp;"+user+"</span> ");
32
 
  } else if (user != group) {
33
 
    msgHTML += "<span style=\"color:"+usercolor+";\" class=msgnick title='@ "+mtime+"'>&lt;" + user + "&gt;</span>";
34
 
  }
35
 
 
36
 
  if (user == group) {/* channel status messages */
37
 
                if (err)
38
 
                        msgHTML += "<span style=\"font-weight:bold;color:red;\">"+msg+"</span>";
39
 
                else
40
 
                        msgHTML += "<span style=\"font-weight:bold;\">"+msg+"</span>";
41
 
  } else {
42
 
                if (user != nick && meRegExp.test(msg) && !notHREFMeRegExp.test(msg))
43
 
                        msgHTML += "&nbsp;" + msg.replace(meRegExp,"<span class='highlighted'>$1</span>");
44
 
                else 
45
 
                        msgHTML += "&nbsp;" + msg;
46
 
        }
47
 
 
48
 
        msgHTML += "</div>";
49
 
 
50
 
        var scroll_bottom = false;
51
 
        if (cFrame.body.scrollTop+cFrame.body.clientHeight >= cFrame.body.scrollHeight)
52
 
                scroll_bottom = true;
53
 
                                
54
 
  cFrame.body.innerHTML += msgHTML;
55
 
 
56
 
        if (scroll_bottom)
57
 
                                frames.groupchatChat.groupchatIChat.scrollTo(0,cFrame.body.scrollHeight);
58
 
}
59
 
 
60
 
function popMsgs() {
61
 
 
62
 
  if (!user) 
63
 
    user = srcW.roster.getUserByJID(group);
64
 
 
65
 
  while (user.chatmsgs.length>0) {
66
 
    var msg;
67
 
    if (is.ie5||is.op) {
68
 
      msg = user.chatmsgs[0];
69
 
      user.chatmsgs = user.chatmsgs.slice(1,user.chatmsgs.length);
70
 
    } else
71
 
      msg = user.chatmsgs.shift();
72
 
 
73
 
                var from = msg.getFrom();
74
 
    if (msg.getFrom().indexOf('/') != -1)
75
 
      from = msg.getFrom().substring(msg.getFrom().indexOf('/')+1);
76
 
 
77
 
                /* get date */
78
 
                var timestamp;
79
 
                if (msg.jwcTimestamp)
80
 
                        timestamp = msg.jwcTimestamp;
81
 
                else
82
 
                        timestamp = new Date();
83
 
 
84
 
                var mtime = '';
85
 
                if (new Date() - timestamp > 24*3600*1000)
86
 
                        mtime += timestamp.toLocaleDateString() + " ";
87
 
                
88
 
                mtime += timestamp.toLocaleTimeString();
89
 
    
90
 
    /* look for a subject */
91
 
    if (msg.getSubject()) { // set topic
92
 
      user.roster.subject = msg.getSubject();
93
 
      frames.groupchatTop.document.forms[0].elements['subject'].value = msg.getSubject();
94
 
                        putMsgHTML("/me has set the topic to: "+msg.getSubject(), mtime, from);
95
 
                        return;
96
 
    }
97
 
 
98
 
    if(!msg.getBody() || msg.getBody() == '')
99
 
                                return;
100
 
        
101
 
    /* calculate color */
102
 
    var charSum = 0;
103
 
    for (var i=0; i<from.length; i++)
104
 
      charSum += from.charCodeAt(i);
105
 
    
106
 
    putMsgHTML(msg.getBody(),mtime,from,colors[charSum%(colors.length)]);
107
 
  }
108
 
 
109
 
        /* disabled: it's annoying */
110
 
        //  if (srcW.focusWindows) frames.groupchatBottom.document.forms[0].msgbox.focus();
111
 
}
112
 
 
113
 
function displayTimestamp() {
114
 
  var tstyle;
115
 
  if (is.ie) {
116
 
    tstyle = cFrame.styleSheets('timestampstyle');
117
 
    tstyle.disabled = opener.top.timestamps;
118
 
  } else {
119
 
    tstyle = cFrame.getElementById("timestampstyle");
120
 
    tstyle.sheet.disabled = opener.top.timestamps;
121
 
  }
122
 
}
123
 
 
124
 
function updateMe() {
125
 
 
126
 
        frames.groupchatTop.document.forms[0].subject.disabled = (roster.me.role == 'none');
127
 
        frames.groupchatBottom.document.forms[0].submit.disabled = (roster.me.role == 'none');
128
 
 
129
 
        if (roster.me.affiliation == 'owner')
130
 
                frames.groupchatBottom.document.getElementById('config_chan_button').style.display = '';
131
 
        else
132
 
                frames.groupchatBottom.document.getElementById('config_chan_button').style.display = 'none';
133
 
 
134
 
        if (roster.me.role == 'none') {// seems we left
135
 
                cFrame.body.innerHTML += "<span style='color:red';>"+"Disconnected."+"</span><br>";
136
 
                frames.groupchatChat.groupchatIChat.scrollTo(0,cFrame.body.scrollHeight);
137
 
        }
138
 
 
139
 
        if (frames.groupchatRoster.updateMe)
140
 
                frames.groupchatRoster.updateMe();
141
 
}
142
 
 
143
 
function changeUserStat(jid,stat,val,confirm,reason) {
144
 
  var user = roster.getUserByJID(jid);
145
 
        var iq = new JSJaCIQ();
146
 
        iq.setType('set');
147
 
        iq.setTo(group);
148
 
 
149
 
        var query = iq.setQuery('http://jabber.org/protocol/muc#admin');
150
 
        var item = query.appendChild(iq.getDoc().createElement('item'));
151
 
        item.setAttribute('nick',user.name);
152
 
 
153
 
        item.setAttribute(stat,val);
154
 
        
155
 
  if (reason || (confirm && (reason = prompt("Reason","")) != ''))
156
 
                item.appendChild(iq.getDoc().createElement('reason')).appendChild(iq.getDoc().createTextNode(reason));
157
 
 
158
 
        me = this;
159
 
        srcW.con.send(iq,me.handleError);
160
 
}
161
 
 
162
 
function handleError(iq) {
163
 
        // handle error
164
 
        if (iq && iq.getType() == 'error') {
165
 
                srcW.Debug.log(iq.getDoc().xml,1);
166
 
                var error = iq.getNode().getElementsByTagName('error').item(0);
167
 
                if (error) {
168
 
                        var msg = '';
169
 
                        for (var i=0; i<error.childNodes.length; i++) {
170
 
                                switch (error.childNodes.item(i).nodeName) {
171
 
                                case 'not-allowed':
172
 
                                        putMsgHTML("Not Allowed",new Date(),group,null,true);
173
 
                                        break;
174
 
                                case 'forbidden':
175
 
                                        putMsgHTML("Forbidden",new Date(),group,null,true);
176
 
                                        break;
177
 
                                case 'item-not-found':
178
 
                                        putMsgHTML("Not Found",new Date(),group,null,true);
179
 
                                        break;
180
 
                                default:
181
 
                                        putMsgHTML(error.childNodes.item(i).nodeName,new Date(),group,null,true);
182
 
                                        break;
183
 
                                }
184
 
                        }
185
 
                }
186
 
        }
187
 
}
188
 
 
189
 
function changeRole(jid,role,confirm,reason) {
190
 
  changeUserStat(jid,"role",role,confirm,reason);
191
 
}
192
 
 
193
 
function changeAffiliation(jid,affil,confirm,reason) {
194
 
  changeUserStat(jid,"affiliation",affil,confirm);
195
 
}
196
 
 
197
 
var configW
198
 
function openConfig() {
199
 
        if (!configW || configW.closed)
200
 
                configW = open("groupchatconfig.html","gccW"+makeWindowName(jid),"width=480,height=380,resizable=yes,scrollbars=yes");
201
 
                configW.focus();
202
 
        return false;
203
 
}
204
 
 
205
 
function cleanUp() {
206
 
        if (configW && !configW.closed)
207
 
                configW.close();
208
 
}
209
 
 
210
 
function part() {
211
 
        cleanUp();
212
 
 
213
 
  if (srcW.con) {
214
 
                var presence = new JSJaCPresence();
215
 
                presence.setType('unavailable');
216
 
                presence.setTo(group);
217
 
                srcW.con.syncSend(presence);
218
 
        }
219
 
 
220
 
  if (!user.messages.length && !user.chatmsgs.length && srcW && srcW.roster) {
221
 
    srcW.roster.removeUser(user);
222
 
    srcW.roster.print();
223
 
  }
224
 
}
225
 
 
226
 
/* global vars */
227
 
var srcW,user,roster,cFrame,jid,nick,pass,meRegExp,notHREFMeRegExp;
228
 
 
229
 
function init() {
230
 
  getArgs();
231
 
  
232
 
  srcW = opener;
233
 
 
234
 
  jid = passedArgs['jid'];
235
 
        group = jid;
236
 
 
237
 
        if (typeof(passedArgs['nick']) != 'undefined')
238
 
                nick = passedArgs['nick'];
239
 
        if(typeof(nick) == 'undefined' || nick == '')
240
 
                nick = srcW.roster.nick; // guess a nick
241
 
 
242
 
        meRegExp = new RegExp("\\b("+nick+")\\b","i");
243
 
        notHREFMeRegExp = new RegExp("href=\"\\S*\\b"+nick+"\\b\\S*\"","i");
244
 
 
245
 
        if (passedArgs['pass'] != 'undefined')
246
 
                pass = passedArgs['pass'];
247
 
 
248
 
  srcW.Debug.log("groupchat room: "+jid+", nick: "+nick + ", pass: "+pass ,2);
249
 
  
250
 
        // send presence
251
 
        var aPresence = new JSJaCPresence();
252
 
        aPresence.setTo(group+'/'+nick);
253
 
 
254
 
        var x = aPresence.getDoc().createElement('x');
255
 
        x.setAttribute('xmlns','http://jabber.org/protocol/muc');
256
 
        if (typeof(pass) != 'undefined' && pass != '')
257
 
                x.appendChild(aPresence.getDoc().createElement('password')).appendChild(aPresence.getDoc().createTextNode(pass));
258
 
 
259
 
        aPresence.getNode().appendChild(x);
260
 
 
261
 
        if (srcW.onlstat != 'available' && srcW.onlstat != 'invisible')
262
 
                aPresence.setShow(srcW.onlstat);
263
 
 
264
 
        if (srcW.onlmsg != '')
265
 
                aPresence.setStatus(srcW.onlmsg);
266
 
 
267
 
        srcW.Debug.log("sending muc presence:\n"+aPresence.getDoc().xml,3);
268
 
 
269
 
        srcW.con.send(aPresence);
270
 
  
271
 
  cFrame = frames.groupchatChat.groupchatIChat.document;
272
 
 
273
 
  user = srcW.roster.getUserByJID(group);
274
 
  if(!user) {
275
 
    user = srcW.roster.addUser(new RosterUser(group,'',["Chat Rooms"],group.substring(0,group.indexOf('@'))));
276
 
    user.chatW = window.self;
277
 
  }
278
 
  user.status = 'available';
279
 
  srcW.roster.print();
280
 
  
281
 
  user.roster = new GroupchatRoster(window.self);
282
 
  user.roster.nick = nick; // remember my nickname
283
 
  roster = user.roster;
284
 
  //        user.roster.print();
285
 
  
286
 
        //  document.title += " - " + group;
287
 
  document.title = group+'/'+nick;
288
 
 
289
 
  popMsgs();
290
 
  displayTimestamp();
291
 
}
292
 
 
293
 
function keyPressed(e) {
294
 
  if (e.keyCode == 27)
295
 
    window.close();
296
 
}
297
 
 
298
 
function updateStyleIE() {
299
 
  if (user)
300
 
    user.roster.updateStyleIE();
301
 
}
302
 
 
303
 
onkeydown = keyPressed;
304
 
onload = init;
305
 
onunload = part;
306
 
onresize = updateStyleIE;
307
 
//-->
308
 
    </script>
309
 
 
310
 
    <script for="document" event="onkeydown()" language="JScript">
311
 
      <!--
312
 
      if (window.event.keyCode == 27)
313
 
      window.close();
314
 
      //-->
315
 
    </script>
316
 
  </head>
317
 
 
318
 
                <frameset cols="75%,*" frameborder=2 framespacing=2 border=2 bordercolor=black>
319
 
                        <frameset rows="40,*,90" frameborder=2 framespacing=2 border=2 bordercolor=black>
320
 
                                <frame src="groupchat_top.html" name="groupchatTop" scrolling="no" />
321
 
                                <frame src="groupchat_chat.html" name="groupchatChat" scrolling="no" />
322
 
                                <frame src="groupchat_bottom.html" name="groupchatBottom" scrolling="no" />
323
 
      </frameset>
324
 
      <frame src="groupchat_roster.html" name="groupchatRoster" scrolling="no" />
325
 
    </frameset>
326
 
</html>