1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4
<title>JWChat - Modify</title>
5
<script src="switchStyle.js"></script>
6
<script src="shared.js"></script>
7
<script src="xmlextras.js"></script>
8
<script src="JSJaCPacket.js"></script>
10
var deltaItems = new Array(); // contains table rows
12
function add2deltaItems(row,state) {
13
var item = new Object();
14
if (row.childNodes.item(0).innerHTML == '' && row.childNodes.item(1).innerHTML == '') // neither nick nor jid supplied
16
if (row.childNodes.item(0).innerHTML != '')
17
item.nick = row.childNodes.item(0).innerHTML;
18
if (row.childNodes.item(1).innerHTML != '')
19
item.jid = row.childNodes.item(1).innerHTML;
20
if (row.childNodes.item(2).innerHTML != '')
21
item.reason = row.childNodes.item(2).innerHTML;
23
if (queryType == 'role_based')
24
item.state = "role="+state;
26
item.state = "affiliation="+state;
28
deltaItems[deltaItems.length] = item;
31
function deltaAddItem(row,state) {
32
var statExp = /(.+)=(.+)/;
34
add2deltaItems(row,RegExp.$2);
37
function deltaDelItem(row) {
38
add2deltaItems(row,'none');
41
function handleIQSetList(iq) {
44
if (iq && iq.getType() == 'result') { // sucess
45
srcW.Debug.log(iq.getDoc().xml,2);
51
if (iq && iq.getType() == 'error') {
52
srcW.Debug.log(iq.getDoc().xml,1);
53
for (var i=0; i<iq.getNode().getElementsByTagName('item').length; i++) {
54
var item = iq.getNode().getElementsByTagName('item').item(i);
55
if (item.getAttribute('jid'))
56
html += "Item: "+item.getAttribute('jid')+"<br>";
57
else if (item.getAttribute('nick'))
58
html += "Nick: "+item.getAttribute('nick')+"<br>";
60
for (var j=0; j<iq.getNode().getElementsByTagName('error').length; j++)
61
var error = iq.getNode().getElementsByTagName('error').item(j);
62
html += "Error" + " " + error.getAttribute('code');
63
if (error.getElementsByTagName('text').item(0))
64
html += ": " + error.getElementsByTagName('text').item(0).firstChild.nodeValue;
67
document.getElementById('hint').innerHTML = '';
68
document.getElementById('hint').innerHTML = html;
70
deltaItems = new Array();
72
updateListFrame(modItems);
76
var iq = new JSJaCIQ();
78
iq.setTo(opener.parent.jid);
79
var query = iq.setQuery(args[1]);
81
for (var i in deltaItems) {
82
var item = query.appendChild(iq.getDoc().createElement('item'));
83
item.setAttribute(deltaItems[i].state.split('=')[0],deltaItems[i].state.split('=')[1]);
84
if (deltaItems[i].nick)
85
item.setAttribute('nick',deltaItems[i].nick);
86
if (deltaItems[i].jid)
87
item.setAttribute('jid',deltaItems[i].jid);
88
if (deltaItems[i].reason)
89
item.appendChild(iq.getDoc().createElement('reason')).appendChild(iq.getDoc().createTextNode(deltaItems[i].reason));
92
srcW.Debug.log(iq.getDoc().xml,2);
93
srcW.con.send(iq,me.handleIQSetList);
98
function deleteItem() {
99
if (!modifylistF.selectedRow) {
100
alert("Nothing selected");
104
deltaDelItem(modifylistF.selectedRow);
106
var modTableBody = modifylistF.document.getElementById('modTable').getElementsByTagName("TBODY").item(0);
107
modTableBody.removeChild(modifylistF.selectedRow);
110
modifylistF.selectedRow = null;
111
document.getElementById('delete_button').disabled = true;
116
var row = modifylistF.document.createElement("TR");
118
var cell = modifylistF.document.createElement("TD");
119
var textN = modifylistF.document.createTextNode(document.forms['add_item'].nick.value);
120
cell.appendChild(textN);
121
row.appendChild(cell);
123
cell = modifylistF.document.createElement("TD");
124
textN = modifylistF.document.createTextNode(document.forms['add_item'].jid.value);
125
cell.appendChild(textN);
126
row.appendChild(cell);
128
cell = modifylistF.document.createElement("TD");
129
textN = modifylistF.document.createTextNode(document.forms['add_item'].reason.value);
130
cell.appendChild(textN);
131
row.appendChild(cell);
133
deltaAddItem(row,args[0]);
135
modifylistF.document.getElementById('modTable').getElementsByTagName('TBODY').item(0).appendChild(row);
137
// tell frame about it
141
document.forms['add_item'].reset();
142
document.getElementById('add_button').disabled = true;
146
function activateAddButton() {
147
document.getElementById('add_button').disabled = false;
150
function updateListFrame(modItems) {
152
modifylistF.document.body.innerHTML = '';
154
var myTable = modifylistF.document.createElement("TABLE");
156
var myTableHead = modifylistF.document.createElement("THEAD");
157
var myTableBody = modifylistF.document.createElement("TBODY");
159
var row = modifylistF.document.createElement("TR");
160
var header = new Array("Nick","JID","Reason");
162
for (var i in header) {
163
cell = modifylistF.document.createElement("TH");
164
cell.appendChild(modifylistF.document.createTextNode(header[i]));
165
row.appendChild(cell);
167
myTableHead.appendChild(row);
168
myTable.appendChild(myTableHead);
170
for (var i=0; i<modItems.length; i++) {
171
var item = modItems.item(i);
172
row = modifylistF.document.createElement("TR");
174
cell = modifylistF.document.createElement("TD");
175
textN = modifylistF.document.createTextNode((typeof(item.getAttribute('nick')) != 'undefined')?item.getAttribute('nick'):'');
176
cell.appendChild(textN);
177
row.appendChild(cell);
179
cell = modifylistF.document.createElement("TD");
180
textN = modifylistF.document.createTextNode((typeof(item.getAttribute('jid')) != 'undefined')?item.getAttribute('jid'):'');
181
cell.appendChild(textN);
182
row.appendChild(cell);
184
cell = modifylistF.document.createElement("TD");
185
textN = modifylistF.document.createTextNode((item.firstChild && item.firstChild.nodeName == 'reason' && item.firstChild.firstChild)?item.firstChild.firstChild.nodeValue:'');
186
cell.appendChild(textN);
187
row.appendChild(cell);
189
myTableBody.appendChild(row);
192
myTable.appendChild(myTableBody);
194
myTable.setAttribute("id","modTable");
195
myTable.setAttribute("WIDTH","100%");
196
myTable.setAttribute("BORDER","0");
197
myTable.setAttribute("CELLSPACING","0");
198
myTable.setAttribute("CELLPADDING","0");
199
myTable.setAttribute("RULES","rows");
202
modifylistF.document.body.appendChild(myTable);
204
// tell frame about it
209
function handleIQGetList(iq) {
210
if (!iq || iq.getType() == 'error') {
211
document.getElementById('hint').innerHTML = "An Error has occured";
213
srcW.Debug.log(iq.getDoc().xml,1);
217
srcW.Debug.log(iq.getDoc().xml,2);
219
if (!iq.getQuery().childNodes.length) {
220
document.getElementById('hint').innerHTML = "No items found";
223
modItems = iq.getQuery().getElementsByTagName('item');
225
updateListFrame(modItems);
232
srcW = opener.parent.top.srcW;
235
search = self.location.href;
236
search = search.split('?');
240
args = args.split('&');
241
args[2] = unescape(args[2]);
245
if (args[0].indexOf("role") != 0 && args[0].indexOf("affiliation") != 0)
246
return; // it's your fault
249
if (args[0].indexOf("role") == 0)
250
queryType = 'role_based';
252
queryType = 'affiliation_based';
254
roster = srcW.roster;
256
var iq = new JSJaCIQ();
258
iq.setTo(opener.parent.jid);
259
var query = iq.setQuery(args[1]);
260
query.appendChild(iq.getDoc().createElement('item')).setAttribute(args[0].split('=')[0],args[0].split('=')[1]);
261
srcW.Debug.log(iq.getDoc().xml,2);
263
srcW.con.send(iq,me.handleIQGetList);
265
document.getElementById('title').innerHTML = "Modify "+args[2];
266
document.title += " " + args[2];
269
opener.document.getElementById('list_selector').selectedIndex = 0;
271
// disable buttons on start
272
document.getElementById('add_button').disabled = true;
273
document.getElementById('delete_button').disabled = true;
276
function keyPressed(e) {
285
onkeydown = keyPressed;
287
<script for="document" event="onkeydown()" language="JScript">
289
return keyPressed(window.event);
292
<style type="text/css">
293
h1 { font-size: 1.5em; }
294
th { font-size: 0.8em; text-align: right; }
297
<body style="margin:8px;">
298
<table width="100%" height="100%">
299
<tr><td><h1 id="title"> </h1></td></tr>
300
<tr><td><span id="hint"> </span></td></tr>
301
<tr><td width="100%" height="100%"><iframe src="groupchat_modifylist_iframe.html" id="modifylistF" name="modifylistF" scrolling="auto" style="width: 100%; height: 100%"></iframe></td></tr>
302
<tr><td><form name="add_item">
304
<tr><th>Nick</th><td><input type="text" name="nick" onkeydown="activateAddButton();"></td></tr>
305
<tr><th>JID</th><td><input type="text" name="jid" style="width: 100%;" onkeydown="activateAddButton();"></td></tr>
306
<tr><th>Reason</th><td><input type="text" name="reason" style="width: 100%;" onkeydown="activateAddButton();"></td></tr>
309
<tr><td><hr noshade size=1></td></tr>
310
<tr><td align="right">
311
<button id="add_button" onClick="return addItem();">Add</button> <button id="delete_button" onClick="return deleteItem();">Delete</button> <button type="submit" id="save_button" onClick="return doSub();">Save</button>