- Timestamp:
- 05/20/11 16:48:19 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2/jabberit_messenger/jmessenger/js/trophyim.js
r4420 r4475 17 17 this.processor = new XSLTProcessor(); 18 18 this.processor.importStylesheet(this.xmlRender( 19 '<xsl:stylesheet version="1.0"\19 '<xsl:stylesheet version="1.0"\ 20 20 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\ 21 21 <xsl:output method="html" indent="yes"/><xsl:template\ … … 68 68 } 69 69 var renderObj = this.parser.parseFromString(xmlString, 70 "application/xml");70 "application/xml"); 71 71 } catch(e) { 72 72 alert("TrophyIM Error: Cannot create new html for page"); … … 84 84 */ 85 85 getHTML : function(page) 86 86 { 87 87 return this.xmlParse(HTMLSnippets[page]); 88 88 }, … … 96 96 */ 97 97 getScript : function(script) 98 98 { 99 99 var newscript = document.createElement('script'); 100 100 newscript.setAttribute('src', script); … … 112 112 113 113 114 controll : {notificationNewUsers : 0}, 115 116 /** AutoConnection 114 controll : { 115 notificationNewUsers : 0 116 }, 117 118 /** AutoConnection 117 119 * 118 120 */ 119 121 120 autoConnection : {connect : true}, 121 122 /** Active Chat Room 122 autoConnection : { 123 connect : true 124 }, 125 126 /** Active Chat Room 123 127 * 124 128 */ 125 129 126 activeChatRoom : {name : []}, 127 128 /** Object: chatHistory 130 activeChatRoom : { 131 name : [] 132 }, 133 134 /** Object: chatHistory 129 135 * 130 136 * Stores chat history (last 10 message) and current presence of active … … 132 138 */ 133 139 134 135 136 140 chatHistory : {}, 141 142 /** Constants: 137 143 * 138 144 * (Boolean) stale_roster - roster is stale and needs to be rewritten. 139 145 */ 140 146 141 constants : {stale_roster: false}, 142 143 /** PosWindow 147 constants : { 148 stale_roster: false 149 }, 150 151 /** PosWindow 144 152 * 145 153 */ 146 posWindow : {left : 400, top : 100}, 147 148 /** StatusConnection 154 posWindow : { 155 left : 400, 156 top : 100 157 }, 158 159 /** StatusConnection 149 160 * 150 161 */ 151 162 152 statusConn : {connected : false}, 153 154 /** TimeOut Render Roster 163 statusConn : { 164 connected : false 165 }, 166 167 /** TimeOut Render Roster 155 168 * 156 169 * 157 170 */ 158 171 159 _timeOut : {renderRoster : null}, 160 161 162 /** Remove Contact ( type = set ) 172 _timeOut : { 173 renderRoster : null 174 }, 175 176 177 /** Remove Contact ( type = set ) 163 178 * 164 179 * 165 180 */ 166 181 167 removeResult : {idResult : []}, 168 169 /** Function: setCookie 182 removeResult : { 183 idResult : [] 184 }, 185 186 /** Function: setCookie 170 187 * 171 188 * Sets cookie name/value pair. Date and path are auto-selected. … … 176 193 */ 177 194 178 179 195 setCookie : function(name, value) 196 { 180 197 var expire = new Date(); 181 198 expire.setDate(expire.getDate() + 365); … … 183 200 }, 184 201 185 202 /** Function: delCookie 186 203 * 187 204 * Deletes cookie … … 191 208 */ 192 209 193 194 210 delCookie : function(name) 211 { 195 212 var expire = new Date(); 196 213 expire.setDate(expire.getDate() - 365); … … 199 216 }, 200 217 201 218 /** Function: getCookies 202 219 * 203 220 * Retrieves all trophyim cookies into an indexed object. Inteneded to be … … 208 225 */ 209 226 210 211 227 getCookies : function() 228 { 212 229 var cObj = {}; 213 230 var cookies = document.cookie.split(';'); … … 215 232 for(var i = 0 ; i < cookies.length; i++ ) 216 233 { 217 234 while ( cookies[i].charAt(0) == ' ') 218 235 { 219 236 cookies[i] = cookies[i].substring(1,cookies[i].length); … … 237 254 */ 238 255 239 240 241 242 { 243 256 load : function() 257 { 258 if( loadscript.getUserCurrent() == null ) 259 { 260 loadscript.setUserCurrent(); 244 261 } 245 262 246 247 248 249 250 251 252 253 254 255 256 257 },258 259 /** Function: storeData263 if ( !TrophyIM.statusConn.connected ) 264 { 265 TrophyIM.cookies = TrophyIM.getCookies(); 266 267 //Wait a second to give scripts time to load 268 setTimeout( "TrophyIM.showLogin()", 550 ); 269 } 270 else 271 { 272 loadscript.rosterDiv(); 273 } 274 }, 275 276 /** Function: storeData 260 277 * 261 278 * Store all our data in the JSONStore, if it is active 262 279 */ 263 280 264 storeData : function()265 {281 storeData : function() 282 { 266 283 if ( TrophyIM.connection && TrophyIM.connection.connected ) 267 284 { 268 285 TrophyIM.setCookie('trophyim_bosh_xid', TrophyIM.connection.jid + "|" + 269 TrophyIM.connection.sid + "|" + TrophyIM.connection.rid);286 TrophyIM.connection.sid + "|" + TrophyIM.connection.rid); 270 287 TrophyIM.rosterObj.save(); 271 288 } … … 280 297 281 298 showLogin : function() 282 299 { 283 300 /** 284 301 * … … 288 305 */ 289 306 290 291 { 292 307 if ( typeof(JSON) != undefined && typeof(Strophe) != undefined ) 308 { 309 TrophyIM.JSONStore = new TrophyIMJSONStore(); 293 310 294 295 { 296 311 if ( TrophyIM.JSONStore.store_working && TrophyIM.cookies['trophyim_bosh_xid'] ) 312 { 313 var xids = TrophyIM.cookies['trophyim_bosh_xid'].split("|"); 297 314 TrophyIM.delCookie('trophyim_bosh_xid'); 298 315 TrophyIM.constants.stale_roster = true; 299 316 300 317 TrophyIM.connection = new Strophe.Connection(TROPHYIM_BOSH_SERVICE); 301 318 TrophyIM.connection.rawInput = TrophyIM.rawInput; 302 319 TrophyIM.connection.rawOutput = TrophyIM.rawOutput; … … 308 325 else 309 326 { 310 311 312 313 314 315 327 // List Contact 328 loadscript.rosterDiv(); 329 330 // Get User Current; 331 var _getUserCurrent = null; 332 _getUserCurrent = loadscript.getUserCurrent(); 316 333 317 318 319 320 321 322 323 324 334 if( _getUserCurrent == null ) 335 { 336 setTimeout( "TrophyIM.showLogin()", 500 ); 337 } 338 else 339 { 340 TrophyIM.login( Base64.decode( _getUserCurrent.jid ), Base64.decode( _getUserCurrent.password )); 341 } 325 342 } 326 343 } 327 344 else 328 345 { 329 330 } 331 }, 332 333 346 setTimeout("TrophyIM.showLogin()", 500); 347 } 348 }, 349 350 /** Function: log 334 351 * 335 352 * This function logs the given message in the trophyimlog div … … 361 378 */ 362 379 rawInput : function (data) 363 380 { 364 381 Strophe.debug("RECV: " + data); 365 382 }, … … 370 387 */ 371 388 rawOutput : function (data) 372 389 { 373 390 Strophe.debug("SEND: " + data); 374 391 }, … … 382 399 */ 383 400 login : function() 384 385 386 387 401 { 402 if ( TrophyIM.JSONStore.store_working ) 403 { 404 //In case they never logged out 388 405 TrophyIM.JSONStore.delData(['groups','roster', 'active_chat', 'chat_history']); 389 406 } 390 407 391 408 TrophyIM.connection = new Strophe.Connection(TROPHYIM_BOSH_SERVICE); 392 409 TrophyIM.connection.rawInput = TrophyIM.rawInput; 393 410 TrophyIM.connection.rawOutput = TrophyIM.rawOutput; 394 411 //Strophe.log = TrophyIM.log; 395 412 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 413 if ( arguments.length > 0 ) 414 { 415 var barejid = arguments[0]; 416 var password = arguments[1]; 417 418 TrophyIM.connection.connect( barejid + TROPHYIM_RESOURCE, password, TrophyIM.onConnect ); 419 } 420 else 421 { 422 423 var barejid = document.getElementById('trophyimjid').value 424 var fulljid = barejid + TROPHYIM_RESOURCE; 425 var password = document.getElementById('trophyimpass').value; 426 var button = document.getElementById('trophyimconnect'); 427 428 loadscript.setUserCurrent( barejid, password); 429 430 if ( button.value == 'connect' ) 431 { 432 button.value = 'disconnect'; 433 //TrophyIM.connection.connect( fulljid , password, TrophyIM.onConnect ); 417 434 418 419 420 421 422 423 435 TrophyIM.login( barejid, password ); 436 _winBuild('window_login_page', 'remove'); 437 } 438 } 439 440 TrophyIM.setCookie('trophyimjid', barejid); 424 441 }, 425 442 … … 429 446 */ 430 447 logout : function() 431 432 448 { 449 TrophyIM.autoConnection.connect = false; 433 450 434 451 TrophyIM.delCookie('trophyim_bosh_xid'); 435 452 436 453 delete TrophyIM['cookies']['trophyim_bosh_xid']; … … 444 461 */ 445 462 onConnect : function(status) 446 447 448 449 450 451 452 453 } 454 455 456 457 463 { 464 var loading_gif = document.getElementById("JabberIMRosterLoadingGif"); 465 466 if( status == Strophe.Status.CONNECTING ) 467 { 468 loading_gif.style.display = "block"; 469 Strophe.info('Strophe is connecting.'); 470 } 471 472 if( status == Strophe.Status.CONNFAIL ) 473 { 474 TrophyIM.delCookie('trophyim_bosh_xid'); 458 475 TrophyIM.statusConn.connected = false; 459 476 loading_gif.style.display = "block"; 460 477 } 461 478 462 463 464 465 } 466 467 468 469 470 471 479 if( status == Strophe.Status.DISCONNECTING ) 480 { 481 TrophyIM.statusConn.connected = false; 482 } 483 484 if( status == Strophe.Status.DISCONNECTED ) 485 { 486 if( TrophyIM.autoConnection.connect ) 487 { 488 loading_gif.style.display = "block"; 472 489 473 490 TrophyIM.delCookie('trophyim_bosh_xid'); 474 491 475 492 TrophyIM.statusConn.connected = false; 476 493 477 478 479 494 setTimeout(function() 495 { 496 TrophyIM.showLogin(); 480 497 481 498 },10000); 482 499 483 500 loadscript.clrAllContacts(); 484 501 485 502 loadscript.setStatusJabber(i18n.STATUS_ANAVAILABLE,"unavailable"); 486 503 487 488 489 490 } 491 492 493 494 495 504 delete TrophyIM.rosterObj.roster; 505 delete TrophyIM.rosterObj.groups; 506 } 507 } 508 509 if( status == Strophe.Status.CONNECTED ) 510 { 511 loadscript.setStatusJabber(i18n.STATUS_AVAILABLE,'available'); 512 TrophyIM.statusConn.connected = true; 496 513 TrophyIM.showClient(); 497 514 } … … 504 521 */ 505 522 showClient : function() 506 523 { 507 524 TrophyIM.setCookie('trophyim_bosh_xid', TrophyIM.connection.jid + "|" + 508 TrophyIM.connection.sid + "|" + TrophyIM.connection.rid);525 TrophyIM.connection.sid + "|" + TrophyIM.connection.rid); 509 526 510 527 TrophyIM.rosterObj = new TrophyIMRoster(); … … 514 531 TrophyIM.connection.addHandler(TrophyIM.onMessage, null, 'message', null, null, null); 515 532 516 //Get roster then announce presence. 517 TrophyIM.connection.send($iq({type: 'get', xmlns: Strophe.NS.CLIENT}).c('query', {xmlns: Strophe.NS.ROSTER}).tree()); 533 //Get roster then announce presence. 534 TrophyIM.connection.send($iq({ 535 type: 'get', 536 xmlns: Strophe.NS.CLIENT 537 }).c('query', { 538 xmlns: Strophe.NS.ROSTER 539 }).tree()); 518 540 TrophyIM.connection.send($pres().tree()); 519 541 setTimeout( TrophyIM.renderRoster, 1000); 520 542 }, 521 543 … … 558 580 var to = msg.getAttribute('to'); 559 581 var id = msg.getAttribute('id'); 560 var reply = $iq({type: 'result', to: from, from: to, id: id}).c('query', 561 {name: "TrophyIM", version: TROPHYIM_VERSION, os: 562 "Javascript-capable browser"}); 582 var reply = $iq({ 583 type: 'result', 584 to: from, 585 from: to, 586 id: id 587 }).c('query', 588 589 { 590 name: "TrophyIM", 591 version: TROPHYIM_VERSION, 592 os: 593 "Javascript-capable browser" 594 }); 563 595 TrophyIM.connection.send(reply.tree()); 564 596 } … … 572 604 573 605 onRoster : function(msg) 574 575 576 577 578 579 580 581 582 606 { 607 var roster_items = msg.firstChild.getElementsByTagName('item'); 608 609 for (var i = 0; i < roster_items.length; i++) 610 { 611 with(roster_items[i]) 612 { 613 var groups = getElementsByTagName('group'); 614 var group_array = []; 583 615 584 585 586 587 588 589 590 591 592 593 594 595 616 for( var g = 0 ; g < groups.length; g++ ) 617 { 618 if( groups[g].hasChildNodes() ) 619 group_array[group_array.length] = groups[g].firstChild.nodeValue; 620 } 621 622 if( getAttribute('ask') && getAttribute('ask').toString() === "subscribe" ) 623 { 624 if( getAttribute('subscription').toString() === "none" ) 625 { 626 TrophyIM.rosterObj.addContact( getAttribute('jid'), getAttribute('ask'), getAttribute('name'), group_array ); 627 } 596 628 597 if( getAttribute('subscription').toString() === "remove" ) 598 { 599 TrophyIM.rosterObj.removeContact( getAttribute('jid').toString() ); 600 } 601 } 602 else 603 { 604 if( ( getAttribute('ask') == null && getAttribute('subscription').toString() === "remove" ) || getAttribute('subscription').toString() === "remove" ) 605 { 606 TrophyIM.rosterObj.removeContact( getAttribute('jid').toString() ); 607 } 608 else 609 { 610 TrophyIM.rosterObj.addContact( getAttribute('jid'), getAttribute('subscription'), getAttribute('name'), group_array ); 611 } 612 } 613 } 614 } 615 616 if ( msg.getAttribute('type') == 'set' ) 617 { 618 var _iq = $iq({type: 'reply', id: msg.getAttribute('id'), to: msg.getAttribute('from')}); 619 TrophyIM.connection.send( _iq.tree()); 620 } 621 622 return true; 629 if( getAttribute('subscription').toString() === "remove" ) 630 { 631 TrophyIM.rosterObj.removeContact( getAttribute('jid').toString() ); 632 } 633 } 634 else 635 { 636 if( ( getAttribute('ask') == null && getAttribute('subscription').toString() === "remove" ) || getAttribute('subscription').toString() === "remove" ) 637 { 638 TrophyIM.rosterObj.removeContact( getAttribute('jid').toString() ); 639 } 640 else 641 { 642 TrophyIM.rosterObj.addContact( getAttribute('jid'), getAttribute('subscription'), getAttribute('name'), group_array ); 643 } 644 } 645 } 646 } 647 648 if ( msg.getAttribute('type') == 'set' ) 649 { 650 var _iq = $iq({ 651 type: 'reply', 652 id: msg.getAttribute('id'), 653 to: msg.getAttribute('from') 654 }); 655 TrophyIM.connection.send( _iq.tree()); 656 } 657 658 return true; 623 659 }, 624 660 … … 629 665 630 666 onPresence : function(msg) 631 632 633 634 635 667 { 668 // Get Presences ChatRoom 669 TrophyIM.onPresenceChatRoom( msg ); 670 671 var type = msg.getAttribute('type') ? msg.getAttribute('type') : 'available'; 636 672 var show = msg.getElementsByTagName('show').length ? Strophe.getText(msg.getElementsByTagName('show')[0]) : type; 637 673 var status = msg.getElementsByTagName('status').length ? Strophe.getText(msg.getElementsByTagName('status')[0]) : ''; 638 674 var priority = msg.getElementsByTagName('priority').length ? parseInt(Strophe.getText(msg.getElementsByTagName('priority')[0])) : 0; 639 675 640 641 642 643 644 645 646 647 648 649 650 651 676 if( msg.getAttribute('from').toString().indexOf( TROPHYIM_CHATROOM ) < 0 ) 677 { 678 var _from = Strophe.getBareJidFromJid( msg.getAttribute('from') ); 679 var _flag = true; 680 681 if( TrophyIM.removeResult.idResult.length > 0 ) 682 { 683 for( var i = 0 ; i < TrophyIM.removeResult.idResult.length; i++ ) 684 { 685 if( TrophyIM.removeResult.idResult[i] == _from ) 686 { 687 _flag = false; 652 688 653 689 TrophyIM.removeResult.idResult.splice(i,1); 654 690 655 691 i--; 656 692 657 658 659 660 661 693 if( show.toLowerCase() === 'subscribe' ) 694 _flag = true; 695 } 696 } 697 } 662 698 663 664 665 } 666 667 699 if( _flag ) 700 TrophyIM.rosterObj.setPresence( msg.getAttribute('from'), priority, show, status ); 701 } 702 703 return true; 668 704 }, 669 705 … … 717 753 if( xmlns.indexOf("http://jabber.org/protocol/muc#user") == 0 ) 718 754 { 719 var _from = xquery[i].parentNode.getAttribute('from'); 720 var _to = xquery[i].parentNode.getAttribute('to'); 721 722 // Get NameChatRoom 723 var nameChatRoom = Strophe.getBareJidFromJid( _from ); 724 725 // Get nickName 726 var nickName = Strophe.getResourceFromJid( _from ); 727 728 // Get Type/Show 729 var type = ( xquery[i].parentNode.getAttribute('type') != null ) ? xquery[i].parentNode.getAttribute('type') : 'available' ; 730 var show = ( xquery[i].parentNode.firstChild.nodeName == "show" ) ? xquery[i].parentNode.firstChild.firstChild.nodeValue : type; 731 732 var _idElement = nameChatRoom + "_UserChatRoom__" + nickName; 733 734 var _UserChatRoom = document.createElement("div"); 735 _UserChatRoom.id = _idElement; 736 _UserChatRoom.style.paddingLeft = '18px'; 737 _UserChatRoom.style.margin = '3px 0px 0px 2px'; 738 _UserChatRoom.style.background = 'url("'+path_jabberit+'templates/default/images/' + show + '.gif") no-repeat center left'; 739 _UserChatRoom.appendChild( document.createTextNode( nickName ) ); 740 741 var nodeUser = document.getElementById( _idElement ); 742 743 if( nodeUser == null ) 755 var _from = xquery[i].parentNode.getAttribute('from'); 756 var _to = xquery[i].parentNode.getAttribute('to'); 757 758 // Get NameChatRoom 759 var nameChatRoom = Strophe.getBareJidFromJid( _from ); 760 761 // Get nickName 762 var nickName = Strophe.getResourceFromJid( _from ); 763 764 // Get Type/Show 765 var type = ( xquery[i].parentNode.getAttribute('type') != null ) ? xquery[i].parentNode.getAttribute('type') : 'available' ; 766 var show = ( xquery[i].parentNode.firstChild.nodeName == "show" ) ? xquery[i].parentNode.firstChild.firstChild.nodeValue : type; 767 768 var _idElement = nameChatRoom + "_UserChatRoom__" + nickName; 769 770 var _UserChatRoom = document.createElement("div"); 771 _UserChatRoom.id = _idElement; 772 _UserChatRoom.style.paddingLeft = '18px'; 773 _UserChatRoom.style.margin = '3px 0px 0px 2px'; 774 _UserChatRoom.style.background = 'url("'+path_jabberit+'templates/default/images/' + show + '.gif") no-repeat center left'; 775 _UserChatRoom.appendChild( document.createTextNode( nickName ) ); 776 777 var nodeUser = document.getElementById( _idElement ); 778 779 if( nodeUser == null ) 780 { 781 if( document.getElementById( nameChatRoom + '__roomChat__participants' ) != null ) 744 782 { 745 if( document.getElementById( nameChatRoom + '__roomChat__participants' ) != null ) 746 { 747 nameChatRoom = document.getElementById( nameChatRoom + '__roomChat__participants' ); 748 nameChatRoom.appendChild( _UserChatRoom ); 749 } 750 else 751 { 752 if( type != 'unavailable' ) 753 { 754 TrophyIM.makeChatRoom( nameChatRoom, nameChatRoom.substring(0, nameChatRoom.indexOf('@'))); 755 nameChatRoom = document.getElementById( nameChatRoom + '__roomChat__participants' ); 756 nameChatRoom.appendChild( _UserChatRoom ); 757 } 758 } 783 nameChatRoom = document.getElementById( nameChatRoom + '__roomChat__participants' ); 784 nameChatRoom.appendChild( _UserChatRoom ); 759 785 } 760 786 else 761 787 { 762 if( type == 'unavailable' ) 763 { 764 nodeUser.parentNode.removeChild( nodeUser ); 765 } 766 else if( show ) 767 { 768 nodeUser.style.backgroundImage = 'url("'+path_jabberit+'templates/default/images/' + show + '.gif")'; 769 } 788 if( type != 'unavailable' ) 789 { 790 TrophyIM.makeChatRoom( nameChatRoom, nameChatRoom.substring(0, nameChatRoom.indexOf('@'))); 791 nameChatRoom = document.getElementById( nameChatRoom + '__roomChat__participants' ); 792 nameChatRoom.appendChild( _UserChatRoom ); 793 } 770 794 } 795 } 796 else 797 { 798 if( type == 'unavailable' ) 799 { 800 nodeUser.parentNode.removeChild( nodeUser ); 801 } 802 else if( show ) 803 { 804 nodeUser.style.backgroundImage = 'url("'+path_jabberit+'templates/default/images/' + show + '.gif")'; 805 } 806 } 771 807 } 772 808 } … … 782 818 onMessage : function(msg) 783 819 { 784 785 786 820 var checkTime = function(i) 821 { 822 if ( i < 10 ) i= "0" + i; 787 823 788 789 824 return i; 825 }; 790 826 791 792 793 794 795 796 797 798 799 800 801 802 827 var messageDate = function( _date ) 828 { 829 var _dt = _date.substr( 0, _date.indexOf( 'T' ) ).split( '-' ); 830 var _hr = _date.substr( _date.indexOf( 'T' ) + 1, _date.length - _date.indexOf( 'T' ) - 2 ).split( ':' ); 831 832 ( _date = new Date ).setTime( Date.UTC( _dt[0], _dt[1] - 1, _dt[2], _hr[0], _hr[1], _hr[2] ) ); 833 834 return ( _date.toLocaleDateString( ).replace( /-/g, '/' ) + ' ' + _date.toLocaleTimeString( ) ); 835 }; 836 837 var data = new Date(); 838 var dtNow = checkTime(data.getHours()) + ":" + checkTime(data.getMinutes()) + ":" + checkTime(data.getSeconds()); 803 839 804 840 var from = msg.getAttribute('from'); … … 808 844 var stamp = ( delay[0] != null ) ? "<font style='color:red;'>" + messageDate(delay[0].getAttribute('stamp')) + "</font>" : dtNow; 809 845 810 811 812 813 814 815 816 817 818 819 820 821 846 var barejid = Strophe.getBareJidFromJid(from); 847 var jidChatRoom = Strophe.getResourceFromJid(from); 848 var jid_lower = barejid.toLowerCase(); 849 var contact = ""; 850 var state = ""; 851 852 var chatBox = document.getElementById(jid_lower + "__chatState"); 853 var chatStateOnOff = null; 854 var active = msg.getElementsByTagName('active'); 855 856 contact = barejid.toLowerCase(); 857 contact = contact.substring(0, contact.indexOf('@')); 822 858 823 if( TrophyIM.rosterObj.roster[barejid] ) 824 { 825 if( TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name'] ) 826 { 827 contact = TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name']; 828 } 829 } 830 831 // Message with body are "content message", this means state active 832 if ( elems.length > 0 ) 833 { 834 state = ""; 835 836 // Set notify chat state capability on when sender notify it themself 837 chatStateOnOff = document.getElementById(jid_lower + "__chatStateOnOff"); 838 839 if (active.length > 0 & chatStateOnOff != null ) 840 { 841 chatStateOnOff.value = 'on'; 842 } 843 844 // Get Message 845 var _message = document.createElement("div"); 846 var _text = Strophe.getText( elems[0] ); 847 848 // Events Javascript 849 _text = _text.replace(/onblur/gi,"EVENT_DENY"); 850 851 _text = _text.replace(/onchange/gi,"EVENT_DENY"); 852 853 _text = _text.replace(/onclick/gi,"EVENT_DENY"); 854 855 _text = _text.replace(/ondblclick/gi,"EVENT_DENY"); 856 857 _text = _text.replace(/onerror/gi,"EVENT_DENY"); 858 859 _text = _text.replace(/onfocus/gi,"EVENT_DENY"); 860 861 _text = _text.replace(/onkeydown/gi,"EVENT_DENY"); 862 863 _text = _text.replace(/onkeypress/gi,"EVENT_DENY"); 864 865 _text = _text.replace(/onkeyup/gi,"EVENT_DENY"); 866 867 _text = _text.replace(/onmousedown/gi,"EVENT_DENY"); 868 869 _text = _text.replace(/onmousemove/gi,"EVENT_DENY"); 870 871 _text = _text.replace(/onmouseout/gi,"EVENT_DENY"); 872 873 _text = _text.replace(/onmouseover/gi,"EVENT_DENY"); 874 875 _text = _text.replace(/onmouseup/gi,"EVENT_DENY"); 876 877 _text = _text.replace(/onresize/gi,"EVENT_DENY"); 878 879 _text = _text.replace(/onselect/gi,"EVENT_DENY"); 880 881 _text = _text.replace(/onunload/gi,"EVENT_DENY"); 882 883 // Events CSS 884 _text = _text.replace(/style/gi,"EVENT_DENY"); 885 886 // Tags HTML 887 _text = _text.replace(/img /gi,"IMG_DENY "); 888 889 _text = _text.replace(/script /gi,"SCRIPT_DENY "); 890 891 _text = _text.replace(/div /gi,"DIV_DENY "); 892 893 _text = _text.replace(/span /gi,"SPAN_DENY "); 894 895 _text = _text.replace(/iframe /gi,"IFRAME_DENY "); 896 897 _message.innerHTML = _text; 898 899 ////////// BEGIN XSS ////////////////////////////////////////////////// 900 // Delete Tags <SCRIPT> 901 var scripts = _message.getElementsByTagName('script_deny'); 902 for (var i = 0; i < scripts.length; i++){_message.removeChild(scripts[i--]);} 903 //////////////////////////////////////////////////// 904 905 // Delete Tags <IMG> 906 var _imgSrc = _message.getElementsByTagName('img_deny'); 907 for (var i = 0; i < _imgSrc.length; i++){_imgSrc[i].parentNode.removeChild( _imgSrc[i--] );} 908 //////////////////////////////////////////////////// 909 910 // Delete Tags <DIV> 911 var _Div = _message.getElementsByTagName('div_deny'); 912 for (var i = 0; i < _Div.length; i++){_Div[i].parentNode.removeChild( _Div[i--] );} 913 //////////////////////////////////////////////////// 914 915 // Delete Tags <SPAN> 916 var _Span = _message.getElementsByTagName('span_deny'); 917 for (var i = 0; i < _Span.length; i++){_Span[i].parentNode.removeChild( _Span[i--] );} 918 //////////////////////////////////////////////////// 919 920 // Delete Tags <IFRAME> 921 var _Iframe = _message.getElementsByTagName('iframe_deny'); 922 for (var i = 0; i < _Iframe.length; i++){_Iframe[i].parentNode.removeChild( _Iframe[i--] );} 923 924 // Delete Tags <A HREF> 925 var _aHref = _message.getElementsByTagName('a'); 926 for (var i = 0; i < _aHref.length; i++){_aHref[i].parentNode.removeChild( _aHref[i--] );} 927 928 _message.innerHTML = _message.innerHTML.replace(/^\s+|\s+$|^\n|\n$/g, ""); 929 ////////// END XSS ////////////////////////////////////////////////// 930 931 // Get Smiles 932 _message.innerHTML = loadscript.getSmiles( _message.innerHTML ); 933 934 if (type == 'chat' || type == 'normal') 935 { 936 if ( _message.hasChildNodes() ) 937 { 938 var message = 939 { 940 contact : "[" + stamp + "] <font style='font-weight:bold; color:black;'>" + contact + "</font>", 941 msg : "</br>" + _message.innerHTML 942 }; 943 944 TrophyIM.addMessage( TrophyIM.makeChat( from ), jid_lower, message ); 945 } 946 } 947 else if( type == 'groupchat') 948 { 949 if ( _message.hasChildNodes() ) 950 { 951 var message = 952 { 953 contact : "[" + stamp + "] <font style='font-weight:bold; color:black;'>" + jidChatRoom + "</font>", 954 msg : "</br>" + _message.innerHTML 955 }; 956 957 TrophyIM.addMessage( TrophyIM.makeChatRoom( barejid ), jid_lower, message ); 958 } 959 } 960 } 961 // Message without body are "content message", this mean state is not active 962 else 963 { 964 if( chatBox != null ) 965 state = TrophyIM.getChatState(msg); 966 } 967 968 // Clean chat status message some time later 969 var clearChatState = function() 970 { 971 chatBox.innerHTML=''; 972 } 973 974 if (chatBox != null) 975 { 976 var clearChatStateTimer; 977 978 chatBox.innerHTML = "<font style='font-weight:bold; color:grey; float:right;'>" + state + "</font>"; 979 980 var _composing = msg.getElementsByTagName('composing'); 981 982 if ( _composing.length == 0 ) 859 if( TrophyIM.rosterObj.roster[barejid] ) 860 { 861 if( TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name'] ) 862 { 863 contact = TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name']; 864 } 865 } 866 867 // Message with body are "content message", this means state active 868 if ( elems.length > 0 ) 869 { 870 state = ""; 871 872 // Set notify chat state capability on when sender notify it themself 873 chatStateOnOff = document.getElementById(jid_lower + "__chatStateOnOff"); 874 875 if (active.length > 0 & chatStateOnOff != null ) 876 { 877 chatStateOnOff.value = 'on'; 878 } 879 880 // Get Message 881 var _message = document.createElement("div"); 882 var _text = Strophe.getText( elems[0] ); 883 884 // Events Javascript 885 _text = _text.replace(/onblur/gi,"EVENT_DENY"); 886 887 _text = _text.replace(/onchange/gi,"EVENT_DENY"); 888 889 _text = _text.replace(/onclick/gi,"EVENT_DENY"); 890 891 _text = _text.replace(/ondblclick/gi,"EVENT_DENY"); 892 893 _text = _text.replace(/onerror/gi,"EVENT_DENY"); 894 895 _text = _text.replace(/onfocus/gi,"EVENT_DENY"); 896 897 _text = _text.replace(/onkeydown/gi,"EVENT_DENY"); 898 899 _text = _text.replace(/onkeypress/gi,"EVENT_DENY"); 900 901 _text = _text.replace(/onkeyup/gi,"EVENT_DENY"); 902 903 _text = _text.replace(/onmousedown/gi,"EVENT_DENY"); 904 905 _text = _text.replace(/onmousemove/gi,"EVENT_DENY"); 906 907 _text = _text.replace(/onmouseout/gi,"EVENT_DENY"); 908 909 _text = _text.replace(/onmouseover/gi,"EVENT_DENY"); 910 911 _text = _text.replace(/onmouseup/gi,"EVENT_DENY"); 912 913 _text = _text.replace(/onresize/gi,"EVENT_DENY"); 914 915 _text = _text.replace(/onselect/gi,"EVENT_DENY"); 916 917 _text = _text.replace(/onunload/gi,"EVENT_DENY"); 918 919 // Events CSS 920 _text = _text.replace(/style/gi,"EVENT_DENY"); 921 922 // Tags HTML 923 _text = _text.replace(/img /gi,"IMG_DENY "); 924 925 _text = _text.replace(/script /gi,"SCRIPT_DENY "); 926 927 _text = _text.replace(/div /gi,"DIV_DENY "); 928 929 _text = _text.replace(/span /gi,"SPAN_DENY "); 930 931 _text = _text.replace(/iframe /gi,"IFRAME_DENY "); 932 933 _message.innerHTML = _text; 934 935 ////////// BEGIN XSS ////////////////////////////////////////////////// 936 // Delete Tags <SCRIPT> 937 var scripts = _message.getElementsByTagName('script_deny'); 938 for (var i = 0; i < scripts.length; i++){ 939 _message.removeChild(scripts[i--]); 940 } 941 //////////////////////////////////////////////////// 942 943 // Delete Tags <IMG> 944 var _imgSrc = _message.getElementsByTagName('img_deny'); 945 for (var i = 0; i < _imgSrc.length; i++){ 946 _imgSrc[i].parentNode.removeChild( _imgSrc[i--] ); 947 } 948 //////////////////////////////////////////////////// 949 950 // Delete Tags <DIV> 951 var _Div = _message.getElementsByTagName('div_deny'); 952 for (var i = 0; i < _Div.length; i++){ 953 _Div[i].parentNode.removeChild( _Div[i--] ); 954 } 955 //////////////////////////////////////////////////// 956 957 // Delete Tags <SPAN> 958 var _Span = _message.getElementsByTagName('span_deny'); 959 for (var i = 0; i < _Span.length; i++){ 960 _Span[i].parentNode.removeChild( _Span[i--] ); 961 } 962 //////////////////////////////////////////////////// 963 964 // Delete Tags <IFRAME> 965 var _Iframe = _message.getElementsByTagName('iframe_deny'); 966 for (var i = 0; i < _Iframe.length; i++){ 967 _Iframe[i].parentNode.removeChild( _Iframe[i--] ); 968 } 969 970 // Delete Tags <A HREF> 971 var _aHref = _message.getElementsByTagName('a'); 972 for (var i = 0; i < _aHref.length; i++){ 973 _aHref[i].parentNode.removeChild( _aHref[i--] ); 974 } 975 976 _message.innerHTML = _message.innerHTML.replace(/^\s+|\s+$|^\n|\n$/g, ""); 977 ////////// END XSS ////////////////////////////////////////////////// 978 979 // Get Smiles 980 _message.innerHTML = loadscript.getSmiles( _message.innerHTML ); 981 982 if (type == 'chat' || type == 'normal') 983 { 984 if ( _message.hasChildNodes() ) 985 { 986 var message = 987 { 988 contact : "[" + stamp + "] <font style='font-weight:bold; color:black;'>" + contact + "</font>", 989 msg : "</br>" + _message.innerHTML 990 }; 991 992 TrophyIM.addMessage( TrophyIM.makeChat( from ), jid_lower, message ); 993 } 994 } 995 else if( type == 'groupchat') 996 { 997 if ( _message.hasChildNodes() ) 998 { 999 var message = 1000 { 1001 contact : "[" + stamp + "] <font style='font-weight:bold; color:black;'>" + jidChatRoom + "</font>", 1002 msg : "</br>" + _message.innerHTML 1003 }; 1004 1005 TrophyIM.addMessage( TrophyIM.makeChatRoom( barejid ), jid_lower, message ); 1006 } 1007 } 1008 } 1009 // Message without body are "content message", this mean state is not active 1010 else 1011 { 1012 if( chatBox != null ) 1013 state = TrophyIM.getChatState(msg); 1014 } 1015 1016 // Clean chat status message some time later 1017 var clearChatState = function() 1018 { 1019 chatBox.innerHTML=''; 1020 } 1021 1022 if (chatBox != null) 1023 { 1024 var clearChatStateTimer; 1025 1026 chatBox.innerHTML = "<font style='font-weight:bold; color:grey; float:right;'>" + state + "</font>"; 1027 1028 var _composing = msg.getElementsByTagName('composing'); 1029 1030 if ( _composing.length == 0 ) 983 1031 984 985 986 987 988 989 990 991 992 1032 clearChatStateTimer = setTimeout(clearChatState, 2000); 1033 else 1034 clearTimeout(clearChatStateTimer); 1035 } 1036 1037 return true; 1038 }, 1039 1040 /** Function: getChatState 993 1041 * 994 1042 * Parameters: … … 996 1044 * (string) jid - the jid of chat box to update the chat state to. 997 1045 */ 998 999 1000 1046 getChatState : function(msg) 1047 { 1048 var state = msg.getElementsByTagName('inactive'); 1001 1049 1002 1003 1004 1005 1006 1007 1008 1050 if ( state.length > 0 ) 1051 { 1052 return i18n.INACTIVE; 1053 } 1054 else 1055 { 1056 state = msg.getElementsByTagName('gone'); 1009 1057 if ( state.length > 0 ) 1010 1058 { 1011 1012 1059 return i18n.GONE; 1060 } 1013 1061 else 1014 1062 { 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1063 state = msg.getElementsByTagName('composing'); 1064 if ( state.length > 0 ) 1065 { 1066 return i18n.COMPOSING; 1067 } 1068 else 1069 { 1070 state = msg.getElementsByTagName('paused'); 1071 if ( state.length > 0 ) 1072 { 1073 return i18n.PAUSED; 1074 } 1075 } 1076 } 1077 } 1078 1079 return ''; 1080 }, 1081 1082 /** Function: makeChat 1035 1083 * 1036 1084 * Make sure chat window to given fulljid exists, switching chat context to … … 1040 1088 makeChat : function(fulljid) 1041 1089 { 1042 1043 1044 1045 1046 1047 'enabledPopUp' : ( ( loadscript.getIsIE() ) ? "none" : "block" ),1048 1049 'jidTo': barejid,1050 1051 1052 1053 1054 1090 var barejid = Strophe.getBareJidFromJid(fulljid); 1091 var titleWindow = ""; 1092 1093 var paramsChatBox = 1094 { 1095 'enabledPopUp' : ( ( loadscript.getBrowserCompatible() ) ? "block" : "none" ), 1096 'idChatBox' : barejid + "__chatBox", 1097 'jidTo' : barejid, 1098 'path_jabberit' : path_jabberit 1099 }; 1100 1101 titleWindow = barejid.toLowerCase(); 1102 titleWindow = titleWindow.substring(0, titleWindow.indexOf('@')); 1055 1103 1056 1104 if( TrophyIM.rosterObj.roster[barejid] ) … … 1058 1106 if( TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name'] ) 1059 1107 { 1060 1108 titleWindow = TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name']; 1061 1109 } 1062 1110 } … … 1065 1113 TrophyIM.posWindow.top = TrophyIM.posWindow.top + 10; 1066 1114 if( TrophyIM.posWindow.top > 200 ) 1067 1115 TrophyIM.posWindow.top = 100; 1068 1116 1069 1117 // Position Left 1070 1118 TrophyIM.posWindow.left = TrophyIM.posWindow.left + 5; 1071 1119 if( TrophyIM.posWindow.left > 455 ) 1072 1120 TrophyIM.posWindow.left = 400; 1073 1121 1074 1122 var _content = document.createElement( 'div' ); 1075 _content.innerHTML = loadscript.parse( "chat_box", "chatBox.xsl", paramsChatBox);1076 _content = _content.firstChild;1123 _content.innerHTML = loadscript.parse( "chat_box", "chatBox.xsl", paramsChatBox); 1124 _content = _content.firstChild; 1077 1125 1078 1126 var _messages = _content.firstChild.firstChild; 1127 1128 1079 1129 var _textarea = _content.getElementsByTagName( 'textarea' ).item( 0 ); 1080 var _send 1081 1130 var _send = _content.getElementsByTagName( 'input' ).item( 0 ); 1131 var _chatStateOnOff = _content.getElementsByTagName( 'input' ).item( 1 ); 1082 1132 1083 1133 var _send_message = function( ) 1084 1134 { 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1135 if ( ! TrophyIM.sendMessage( barejid, _textarea.value ) ) 1136 return false; 1137 1138 // Add Message in chatBox; 1139 TrophyIM.addMessage( _messages, barejid, { 1140 contact : "<font style='font-weight:bold; color:red;'>" + i18n.ME + "</font>", 1141 msg : "<br/>" + _textarea.value 1142 } ); 1143 1144 _textarea.value = ''; 1145 _textarea.focus( ); 1096 1146 }; 1097 1147 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1148 var composingTimer_ = 0; 1149 var isComposing_ = 0; 1150 var timeCounter; 1151 1152 var setComposing = function( ) 1153 { 1154 var checkComposing = function() 1155 { 1156 if (!isComposing_) { 1157 // User stopped composing 1158 composingTimer_ = 0; 1159 clearInterval(timeCounter); 1160 TrophyIM.sendContentMessage(barejid, 'paused'); 1161 } else { 1162 TrophyIM.sendContentMessage(barejid, 'composing'); 1163 } 1164 isComposing_ = 0; // Reset composing 1165 } 1166 1167 if (!composingTimer_) { 1168 /* User (re)starts composing */ 1169 composingTimer_ = 1; 1170 timeCounter = setInterval(checkComposing,4000); 1171 } 1172 isComposing_ = 1; 1173 }; 1124 1174 1125 1175 loadscript.configEvents( _send, 'onclick', _send_message ); 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 width: 387,1144 height: 375,1145 1146 left: TrophyIM.posWindow.left,1147 1148 1149 1150 zindex: loadscript.getZIndex(),1151 title: titleWindow,1152 closeAction: "hidden",1153 1154 1176 loadscript.configEvents( _textarea, 'onkeyup', function( e ) 1177 { 1178 if ( e.keyCode == 13 ){ 1179 _send_message( ); 1180 // User stopped composing 1181 composingTimer_ = 0; 1182 clearInterval(timeCounter); 1183 }else{ 1184 if (_chatStateOnOff.value == 'on') 1185 setComposing(); 1186 } 1187 } ); 1188 1189 var winChatBox = 1190 { 1191 id_window : "window_chat_area_" + barejid, 1192 barejid : barejid, 1193 width : 387, 1194 height : 375, 1195 top : TrophyIM.posWindow.top, 1196 left : TrophyIM.posWindow.left, 1197 draggable : true, 1198 visible : "display", 1199 resizable : true, 1200 zindex : loadscript.getZIndex(), 1201 title : titleWindow, 1202 closeAction : "hidden", 1203 content : _content 1204 } 1155 1205 1156 1157 1158 1159 1206 _win = _winBuild(winChatBox); 1207 1208 // Notification New Message 1209 loadscript.notification(barejid); 1160 1210 1161 1162 1211 // Photo User; 1212 loadscript.getPhotoUser(barejid); 1163 1213 1164 _textarea.focus( ); 1165 1166 return ( _messages = _win.content( ).firstChild ); 1167 }, 1168 1169 /** Function: makeChatRoom 1214 _textarea.focus( ); 1215 1216 _messages = _win.content( ).firstChild; 1217 1218 while ( _messages && _messages.nodeType !== 1 ) 1219 { 1220 _messages = _messages.nextSibling; 1221 } 1222 1223 return ( _messages ); 1224 }, 1225 1226 /** Function: makeChatRoom 1170 1227 * 1171 1228 * … … 1175 1232 makeChatRoom : function() 1176 1233 { 1177 1178 1234 var jidChatRoom = arguments[0]; 1235 var titleWindow = "ChatRoom - " + unescape(arguments[1]); 1179 1236 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1237 var paramsChatRoom = 1238 { 1239 'idChatRoom' : jidChatRoom + "__roomChat", 1240 'jidTo' : jidChatRoom, 1241 'lang_Send' : i18n.SEND, 1242 'lang_Leave_ChatRoom' : i18n.LEAVE_CHATROOM, 1243 'path_jabberit' : path_jabberit 1244 }; 1245 1246 // Position Top 1190 1247 TrophyIM.posWindow.top = TrophyIM.posWindow.top + 10; 1191 1248 if( TrophyIM.posWindow.top > 200 ) 1192 1249 TrophyIM.posWindow.top = 100; 1193 1250 1194 1251 // Position Left 1195 1252 TrophyIM.posWindow.left = TrophyIM.posWindow.left + 5; 1196 1253 if( TrophyIM.posWindow.left > 455 ) 1197 1254 TrophyIM.posWindow.left = 400; 1198 1255 1199 1256 var _content = document.createElement( 'div' ); … … 1203 1260 var _messages = _content.firstChild.firstChild; 1204 1261 var _textarea = _content.getElementsByTagName( 'textarea' ).item( 0 ); 1205 var _send 1262 var _send = _content.getElementsByTagName( 'input' ).item( 0 ); 1206 1263 var _leaveChatRoom = _content.getElementsByTagName( 'input' ).item( 1 ); 1207 1264 1208 1265 var _send_message = function( ) 1209 1266 { 1210 1211 1267 if ( ! TrophyIM.sendMessageChatRoom( jidChatRoom, _textarea.value ) ) 1268 return false; 1212 1269 1213 1270 _textarea.value = ''; 1214 1271 1215 1272 _textarea.focus( ); 1216 1273 }; 1217 1274 … … 1219 1276 loadscript.configEvents( _leaveChatRoom, 'onclick', function( ) 1220 1277 { 1221 1278 TrophyIM.leaveChatRoom( jidChatRoom ); 1222 1279 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1280 if( TrophyIM.activeChatRoom.name.length > 0 ) 1281 { 1282 for( var i = 0; i < TrophyIM.activeChatRoom.name.length ; i++ ) 1283 { 1284 if( TrophyIM.activeChatRoom.name[i].indexOf( jidChatRoom ) >= 0 ) 1285 { 1286 TrophyIM.activeChatRoom.name[i] = ""; 1287 } 1288 } 1289 } 1233 1290 1234 1235 1236 1291 setTimeout( function() 1292 { 1293 _winBuild("window_chat_room_" + jidChatRoom, "remove"); 1237 1294 1238 1295 }, 650 ); 1239 1296 1240 1297 }); 1241 1298 1242 1243 1244 1245 1246 1247 1248 1299 loadscript.configEvents( _textarea, 'onkeyup', function( e ) 1300 { 1301 if ( e.keyCode == 13 ) 1302 { 1303 _send_message( ); 1304 } 1305 }); 1249 1306 1250 1251 1252 1253 1254 width: 500,1255 height: 450,1256 1257 left: TrophyIM.posWindow.left,1258 1259 1260 1261 zindex: loadscript.getZIndex(),1262 title: titleWindow,1263 closeAction: "hidden",1264 1265 1307 var winChatRoom = 1308 { 1309 id_window : "window_chat_room_" + arguments[0], 1310 barejid : jidChatRoom, 1311 width : 500, 1312 height : 450, 1313 top : TrophyIM.posWindow.top, 1314 left : TrophyIM.posWindow.left, 1315 draggable : true, 1316 visible : "display", 1317 resizable : true, 1318 zindex : loadscript.getZIndex(), 1319 title : titleWindow, 1320 closeAction : "hidden", 1321 content : _content 1322 } 1266 1323 1267 _win = _winBuild(winChatRoom); 1268 1269 return ( _messages = _win.content( ).firstChild ); 1270 1271 }, 1272 1273 /** Function addContacts 1324 _win = _winBuild(winChatRoom); 1325 1326 1327 _messages = _win.content( ).firstChild; 1328 1329 while ( _messages && _messages.nodeType !== 1 ) 1330 { 1331 _messages = _messages.nextSibling; 1332 } 1333 1334 return ( _messages ); 1335 }, 1336 1337 /** Function addContacts 1274 1338 * 1275 1339 * Parameters: … … 1280 1344 */ 1281 1345 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1346 addContact : function( jidTo, name, group ) 1347 { 1348 var _flag = true; 1349 1350 if( TrophyIM.removeResult.idResult.length > 0 ) 1351 { 1352 for( var i = 0 ; i < TrophyIM.removeResult.idResult.length; i++ ) 1353 { 1354 if( TrophyIM.removeResult.idResult[i] == jidTo ) 1355 { 1356 _flag = false; 1293 1357 1294 1358 TrophyIM.removeResult.idResult.splice(i,1); 1295 1359 1296 i--; 1297 } 1298 } 1299 } 1300 1301 if( _flag ) 1302 { 1303 // Add Contact 1304 var _id = TrophyIM.connection.getUniqueId('add'); 1305 var newContact = $iq({type: 'set', id: _id}); 1306 newContact = newContact.c('query').attrs({xmlns : 'jabber:iq:roster'}); 1307 newContact = newContact.c('item').attrs({jid: jidTo, name:name}); 1308 newContact = newContact.c('group').t(group).tree(); 1309 1310 TrophyIM.connection.send(newContact); 1311 } 1312 }, 1360 i--; 1361 } 1362 } 1363 } 1364 1365 if( _flag ) 1366 { 1367 // Add Contact 1368 var _id = TrophyIM.connection.getUniqueId('add'); 1369 var newContact = $iq({ 1370 type: 'set', 1371 id: _id 1372 }); 1373 newContact = newContact.c('query').attrs({ 1374 xmlns : 'jabber:iq:roster' 1375 }); 1376 newContact = newContact.c('item').attrs({ 1377 jid: jidTo, 1378 name:name 1379 }); 1380 newContact = newContact.c('group').t(group).tree(); 1381 1382 TrophyIM.connection.send(newContact); 1383 } 1384 }, 1313 1385 1314 1386 /** Function: add … … 1321 1393 addMessage : function( chatBox, jid, msg ) 1322 1394 { 1323 1324 1395 // Get Smiles 1396 msg.msg = loadscript.getSmiles( msg.msg ); 1325 1397 1326 1327 1328 1398 var messageDiv = document.createElement("div"); 1399 messageDiv.style.margin = "3px 0px 1em 3px"; 1400 messageDiv.innerHTML = msg.contact + " : " + msg.msg ; 1329 1401 1330 1331 1402 chatBox.appendChild(messageDiv); 1403 chatBox.scrollTop = chatBox.scrollHeight; 1332 1404 }, 1333 1405 … … 1339 1411 renameContact : function( jid ) 1340 1412 { 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1413 // Name 1414 var name = TrophyIM.rosterObj.roster[jid].contact.name; 1415 1416 if(( name = prompt(i18n.ASK_NEW_NAME_QUESTION + name + "!", name ))) 1417 if(( name = name.replace(/^\s+|\s+$|^\n|\n$/g,"")) == "" ) 1418 name = ""; 1419 1420 if( name == null || name == "") 1421 name = ""; 1422 1423 var jidTo = jid 1424 var name = ( name ) ? name : TrophyIM.rosterObj.roster[jid].contact.name; 1425 var group = TrophyIM.rosterObj.roster[jid].contact.groups[0]; 1354 1426 1355 1427 TrophyIM.addContact( jidTo, name, group ); 1356 1428 1357 1429 document.getElementById('itenContact_' + jid ).innerHTML = name; 1358 1430 }, 1359 1431 … … 1365 1437 renameGroup : function( jid ) 1366 1438 { 1367 1368 1439 var group = TrophyIM.rosterObj.roster[jid].contact.groups[0]; 1440 var presence = TrophyIM.rosterObj.roster[jid].presence; 1369 1441 1370 1442 // Group 1371 1443 if(( group = prompt( i18n.ASK_NEW_GROUP_QUESTION, group ))) 1372 1373 1444 if(( group = group.replace(/^\s+|\s+$|^\n|\n$/g,"")) == "" ) 1445 group = ""; 1374 1446 1375 1447 if( group == null || group == "") 1376 1377 1378 1379 1380 1381 1382 1383 1384 1448 group = ""; 1449 1450 var jidTo = TrophyIM.rosterObj.roster[jid].contact.jid; 1451 var name = TrophyIM.rosterObj.roster[jid].contact.name; 1452 var group = ( group ) ? group : TrophyIM.rosterObj.roster[jid].contact.groups[0]; 1453 1454 TrophyIM.rosterObj.removeContact( jid ); 1455 1456 TrophyIM.addContact( jidTo, name, group ); 1385 1457 1386 1387 1388 1458 document.getElementById("JabberIMRoster").innerHTML = ""; 1459 1460 TrophyIM.renderRoster(); 1389 1461 1390 1391 1392 1393 1394 1395 1462 setTimeout(function() 1463 { 1464 for( var i in presence ) 1465 { 1466 if ( presence[ i ].constructor == Function ) 1467 continue; 1396 1468 1397 1398 1399 1469 TrophyIM.rosterObj.setPresence( jid, presence[i].priority, presence[i].show, presence[i].status); 1470 } 1471 },500); 1400 1472 }, 1401 1473 … … 1407 1479 createChatRooms : function() 1408 1480 { 1409 1410 1481 var nickName = document.getElementById('nickName_chatRoom_jabberit').value; 1482 var nameChatRoom = document.getElementById('name_ChatRoom_jabberit').value; 1411 1483 1412 1484 var _from = Base64.decode( loadscript.getUserCurrent().jid ) + TROPHYIM_RESOURCE; 1413 1485 var _to = escape( nameChatRoom ) + "@" + TROPHYIM_CHATROOM + "/" + nickName ; 1414 var new_room = $pres( {from: _from, to: _to} ).c( "x", {xmlns: Strophe.NS.MUC} ); 1415 1416 TrophyIM.activeChatRoom.name[ TrophyIM.activeChatRoom.name.length ] = _to; 1417 1418 TrophyIM.connection.send( new_room.tree() ); 1486 var new_room = $pres( { 1487 from: _from, 1488 to: _to 1489 } ).c( "x", { 1490 xmlns: Strophe.NS.MUC 1491 } ); 1492 1493 TrophyIM.activeChatRoom.name[ TrophyIM.activeChatRoom.name.length ] = _to; 1494 1495 TrophyIM.connection.send( new_room.tree() ); 1419 1496 }, 1420 1497 … … 1426 1503 joinChatRoom : function( roomName ) 1427 1504 { 1428 var presence = $pres( {from: TrophyIM.connection.jid, to: roomName} ).c("x",{xmlns: Strophe.NS.MUC}); 1505 var presence = $pres( { 1506 from: TrophyIM.connection.jid, 1507 to: roomName 1508 } ).c("x",{ 1509 xmlns: Strophe.NS.MUC 1510 }); 1429 1511 1430 1512 TrophyIM.connection.send( presence ); 1431 1513 }, 1432 1514 … … 1438 1520 leaveChatRoom : function( roomName ) 1439 1521 { 1440 1522 var room_nick = roomName; 1441 1523 1442 1524 var presenceid = TrophyIM.connection.getUniqueId(); 1443 1525 1444 var presence = $pres( {type: "unavailable", id: presenceid, from: TrophyIM.connection.jid, to: room_nick} ).c("x",{xmlns: Strophe.NS.MUC}); 1526 var presence = $pres( { 1527 type: "unavailable", 1528 id: presenceid, 1529 from: TrophyIM.connection.jid, 1530 to: room_nick 1531 } ).c("x",{ 1532 xmlns: Strophe.NS.MUC 1533 }); 1445 1534 1446 1535 TrophyIM.connection.send( presence ); … … 1454 1543 getListRooms : function() 1455 1544 { 1456 1457 1458 1459 1460 1461 1545 if( TrophyIM.statusConn.connected ) 1546 { 1547 var _error_return = function(element) 1548 { 1549 alert("ERRO : Tente novamente !"); 1550 }; 1462 1551 1463 var iq = $iq({to: TROPHYIM_CHATROOM, type: "get"}).c("query",{xmlns: Strophe.NS.DISCO_ITEMS}); 1552 var iq = $iq({ 1553 to: TROPHYIM_CHATROOM, 1554 type: "get" 1555 }).c("query",{ 1556 xmlns: Strophe.NS.DISCO_ITEMS 1557 }); 1464 1558 1465 1466 1467 1468 1469 1470 1559 TrophyIM.connection.sendIQ( iq, loadscript.listRooms, _error_return, 500 ); 1560 } 1561 else 1562 { 1563 alert( "ERRO : Sem conexão com o servidor " + TROPHYIM_CHATROOM ); 1564 } 1471 1565 }, 1472 1566 … … 1479 1573 removeContact : function( jidTo ) 1480 1574 { 1481 1482 1483 1484 1485 1486 1575 var divItenContact = null; 1576 1577 if( ( divItenContact = document.getElementById('itenContact_' + jidTo ))) 1578 { 1579 // Remove Contact 1580 var _id = TrophyIM.connection.getUniqueId(); 1487 1581 1488 // Controller Result 1489 TrophyIM.removeResult.idResult[ TrophyIM.removeResult.idResult.length ] = jidTo; 1490 1491 var delContact = $iq({type: 'set', id: _id}) 1492 delContact = delContact.c('query').attrs({xmlns : 'jabber:iq:roster'}); 1493 delContact = delContact.c('item').attrs({jid: jidTo, subscription:'remove'}).tree(); 1494 1495 TrophyIM.connection.send( delContact ); 1582 // Controller Result 1583 TrophyIM.removeResult.idResult[ TrophyIM.removeResult.idResult.length ] = jidTo; 1584 1585 var delContact = $iq({ 1586 type: 'set', 1587 id: _id 1588 }) 1589 delContact = delContact.c('query').attrs({ 1590 xmlns : 'jabber:iq:roster' 1591 }); 1592 delContact = delContact.c('item').attrs({ 1593 jid: jidTo, 1594 subscription:'remove' 1595 }).tree(); 1596 1597 TrophyIM.connection.send( delContact ); 1496 1598 1497 1599 loadscript.removeElement( document.getElementById('itenContactNotification_' + jidTo ) ); 1498 1600 1499 1500 1601 var spanShow = document.getElementById('span_show_itenContact_' + jidTo ) 1602 spanShow.parentNode.removeChild(spanShow); 1501 1603 1502 1604 loadscript.removeGroup( divItenContact.parentNode ); 1503 1605 1504 1505 1606 divItenContact.parentNode.removeChild(divItenContact); 1607 } 1506 1608 }, 1507 1609 … … 1512 1614 */ 1513 1615 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1616 renderRoster : function() 1617 { 1618 var roster_div = document.getElementById('JabberIMRoster'); 1619 1620 if( roster_div ) 1621 { 1622 var users = new Array(); 1623 1624 var loading_gif = document.getElementById("JabberIMRosterLoadingGif"); 1625 1626 if( loading_gif.style.display == "block" ) 1627 loading_gif.style.display = "none"; 1526 1628 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1629 for( var user in TrophyIM.rosterObj.roster ) 1630 { 1631 if ( TrophyIM.rosterObj.roster[ user ].constructor == Function ) 1632 continue; 1633 1634 users[users.length] = TrophyIM.rosterObj.roster[user].contact.jid; 1635 } 1636 1637 users.sort(); 1638 1639 var groups = new Array(); 1640 var flagGeral = false; 1641 1642 for (var group in TrophyIM.rosterObj.groups) 1643 { 1644 if ( TrophyIM.rosterObj.groups[ group ].constructor == Function ) 1645 continue; 1544 1646 1545 1546 1647 if( group ) 1648 groups[groups.length] = group; 1547 1649 1548 1549 1650 if( group == "Geral" ) 1651 flagGeral = true; 1550 1652 } 1551 1653 1552 1553 1654 if( !flagGeral && users.length > 0 ) 1655 groups[groups.length] = "Geral"; 1554 1656 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1657 groups.sort(); 1658 1659 for ( var i = 0; i < groups.length; i++ ) 1660 { 1661 TrophyIM.renderGroups( groups[i] , roster_div ); 1662 } 1663 1664 TrophyIM.renderItensGroup( users, roster_div ); 1665 } 1666 1667 TrophyIM._timeOut.renderRoster = setTimeout("TrophyIM.renderRoster()", 1000 ); 1668 }, 1567 1669 1568 1670 /** Function: renderGroups … … 1571 1673 */ 1572 1674 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1675 renderGroups: function( nameGroup, element ) 1676 { 1677 var _addGroup = function() 1678 { 1679 var _nameGroup = nameGroup; 1680 var _element = element; 1681 1682 var paramsGroup = 1683 { 1684 'nameGroup' : _nameGroup, 1685 'path_jabberit' : path_jabberit 1686 } 1687 1688 _element.innerHTML += loadscript.parse("group","groups.xsl", paramsGroup); 1689 } 1690 1691 if( !element.hasChildNodes() ) 1692 { 1693 _addGroup(); 1694 } 1695 else 1696 { 1697 var _NodeChild = element.firstChild; 1698 var flagAdd = false; 1699 1700 while( _NodeChild ) 1701 { 1702 if( _NodeChild.childNodes[0].nodeName.toLowerCase() === "span" ) 1703 { 1704 if( _NodeChild.childNodes[0].childNodes[0].nodeValue === nameGroup ) 1705 { 1706 flagAdd = true; 1707 } 1708 } 1607 1709 1608 1609 1610 1611 1612 1613 1614 1615 1616 1710 _NodeChild = _NodeChild.nextSibling; 1711 } 1712 1713 if( !flagAdd ) 1714 { 1715 _addGroup(); 1716 } 1717 } 1718 }, 1617 1719 1618 1720 /** Function: renderItensGroup … … 1621 1723 */ 1622 1724 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1725 renderItensGroup : function( users, element ) 1726 { 1727 var addItem = function() 1728 { 1729 if( arguments.length > 0 ) 1730 { 1731 // Get Arguments 1732 var objContact = arguments[0]; 1733 var group = arguments[1]; 1734 var element = arguments[2]; 1735 var showOffline = loadscript.getShowContactsOffline(); 1634 1736 1635 1636 1637 1638 1639 1737 // Presence e Status 1738 var presence = "unavailable"; 1739 var status = ""; 1740 var statusColor = "black"; 1741 var statusDisplay = "none"; 1640 1742 1641 1743 var _resource = ""; 1642 1744 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1745 // Set Presence 1746 var _presence = function(objContact) 1747 { 1748 if (objContact.presence) 1749 { 1750 for (var resource in objContact.presence) 1751 { 1752 if ( objContact.presence[resource].constructor == Function ) 1753 continue; 1754 1755 if( objContact.presence[resource].show != 'invisible' ) 1756 presence = objContact.presence[resource].show; 1757 1758 if( objContact.contact.subscription != "both") 1759 presence = 'subscription'; 1658 1760 1659 1660 1661 1662 1663 1664 1665 1666 1761 if( objContact.presence[resource].status ) 1762 { 1763 status = " ( " + objContact.presence[resource].status + " ) "; 1764 statusDisplay = "block"; 1765 } 1766 } 1767 } 1768 }; 1667 1769 1668 1669 1670 1671 1672 1673 1674 1675 1770 // Set Subscription 1771 var _subscription = function( objContact ) 1772 { 1773 if( objContact.contact.subscription != "both" ) 1774 { 1775 switch( objContact.contact.subscription ) 1776 { 1777 case "none" : 1676 1778 1677 1678 1679 1680 1681 1779 status = " (( " + i18n.ASK_FOR_AUTH + " )) "; 1780 statusColor = "red"; 1781 break; 1782 1783 case "to" : 1682 1784 1683 1684 1685 1686 1687 1785 status = " (( " + i18n.CONTACT_ASK_FOR_AUTH + " )) "; 1786 statusColor = "orange"; 1787 break; 1788 1789 case "from" : 1688 1790 1689 1690 1691 1791 status = " (( " + i18n.AUTHORIZED + " )) "; 1792 statusColor = "green"; 1793 break; 1692 1794 1693 1795 case "subscribe" : 1694 1796 1695 1696 1697 1698 1699 1797 status = " (( " + i18n.AUTH_SENT + " )) "; 1798 statusColor = "red"; 1799 break; 1800 1801 case "not-in-roster" : 1700 1802 1701 1702 1703 1803 status = " (( " + i18n.ASK_FOR_AUTH_QUESTION + " )) "; 1804 statusColor = "orange"; 1805 break; 1704 1806 1705 1807 default : 1706 1808 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1809 break; 1810 } 1811 1812 statusDisplay = "block"; 1813 } 1814 }; 1815 1816 if( objContact.contact.subscription != "remove") 1817 { 1818 var itensJid = document.getElementById( "itenContact_" + objContact.contact.jid ); 1717 1819 1718 1719 1720 1721 1820 if( itensJid == null ) 1821 { 1822 // Name 1823 var nameContact = ""; 1722 1824 1723 1724 1725 1726 1727 1728 1729 1825 if ( objContact.contact.name ) 1826 nameContact = objContact.contact.name; 1827 else 1828 { 1829 nameContact = objContact.contact.jid; 1830 nameContact = nameContact.substring(0, nameContact.indexOf('@')); 1831 } 1730 1832 1731 1732 1833 // Get Presence 1834 _presence(objContact); 1733 1835 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1836 var paramsContact = 1837 { 1838 divDisplay : "block", 1839 id : 'itenContact_' + objContact.contact.jid , 1840 jid : objContact.contact.jid, 1841 nameContact : nameContact, 1842 path_jabberit : path_jabberit, 1843 presence : presence, 1844 spanDisplay : statusDisplay, 1845 status : status, 1846 statusColor : "black", 1847 subscription : objContact.contact.subscription, 1848 resource : _resource 1849 } 1748 1850 1749 1750 1851 // Get Authorization 1852 _subscription( objContact ); 1751 1853 1752 1753 1754 1854 if( group != "") 1855 { 1856 var _NodeChild = element.firstChild; 1755 1857 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1858 while( _NodeChild ) 1859 { 1860 if( _NodeChild.childNodes[0].nodeName.toLowerCase() === "span" ) 1861 { 1862 if( _NodeChild.childNodes[0].childNodes[0].nodeValue === group ) 1863 { 1864 _NodeChild.innerHTML += loadscript.parse("itens_group", "itensGroup.xsl", paramsContact); 1865 } 1866 } 1867 1868 _NodeChild = _NodeChild.nextSibling; 1869 } 1870 } 1871 } 1872 else 1873 { 1874 // Get Presence 1875 _presence(objContact); 1876 1877 var is_open = itensJid.parentNode.childNodes[0].style.backgroundImage; 1878 is_open = is_open.indexOf("arrow_down.gif"); 1879 1880 // Get Authorization 1881 _subscription( objContact ); 1780 1882 1781 1782 1883 // Set subscription 1884 itensJid.setAttribute('subscription', objContact.contact.subscription ); 1783 1885 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1886 with ( document.getElementById('span_show_' + 'itenContact_' + objContact.contact.jid ) ) 1887 { 1888 if( presence == "unavailable" && !showOffline ) 1889 { 1890 style.display = "none"; 1891 } 1892 else 1893 { 1894 if( is_open > 0 ) 1895 { 1896 style.display = statusDisplay; 1897 style.color = statusColor; 1898 innerHTML = status; 1899 } 1900 } 1901 } 1800 1902 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1903 if( presence == "unavailable" && !showOffline ) 1904 { 1905 itensJid.style.display = "none"; 1906 } 1907 else 1908 { 1909 if( is_open > 0 ) 1910 { 1911 itensJid.style.display = "block"; 1912 } 1913 } 1812 1914 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1915 itensJid.style.background = "url('"+path_jabberit+"templates/default/images/" + presence + ".gif') no-repeat center left"; 1916 } 1917 1918 // Contact OffLine 1919 if( !objContact.presence && !showOffline ) 1920 { 1921 if( objContact.contact.subscription != "remove" ) 1922 { 1923 with ( document.getElementById('span_show_' + 'itenContact_' + objContact.contact.jid )) 1924 { 1925 style.display = "none"; 1926 } 1927 1928 with ( document.getElementById('itenContact_' + objContact.contact.jid ) ) 1929 { 1930 style.display = "none"; 1931 } 1932 } 1933 } 1934 } 1935 } 1936 }; 1937 1938 var flag = false; 1939 1940 for( var i = 0 ; i < users.length; i++ ) 1941 { 1942 if( TrophyIM.rosterObj.roster[users[i]].contact.jid != Base64.decode( loadscript.getUserCurrent().jid) ) 1943 { 1944 var _subscription = TrophyIM.rosterObj.roster[users[i]].contact.subscription; 1843 1945 1844 1845 1846 1847 1946 if( _subscription === "to" ) 1947 { 1948 flag = true; 1949 } 1848 1950 1849 1850 1851 1852 1951 if( _subscription === "not-in-roster") 1952 { 1953 flag = true; 1954 } 1853 1955 1854 1855 1856 1956 if( TrophyIM.rosterObj.roster[users[i]].contact.groups ) 1957 { 1958 var groups = TrophyIM.rosterObj.roster[users[i]].contact.groups; 1857 1959 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1960 if( groups.length > 0 ) 1961 { 1962 for( var j = 0; j < groups.length; j++ ) 1963 { 1964 addItem( TrophyIM.rosterObj.roster[users[i]], groups[j], element ); 1965 } 1966 } 1967 else 1968 { 1969 addItem( TrophyIM.rosterObj.roster[users[i]], "Geral", element ); 1970 } 1971 } 1972 else 1973 { 1974 addItem( TrophyIM.rosterObj.roster[users[i]], "Geral", element ); 1975 } 1976 } 1977 } 1978 1979 if( flag ) 1980 { 1981 if ( TrophyIM.controll.notificationNewUsers == 0 ) 1982 { 1983 loadscript.enabledNotificationNewUsers(); 1984 TrophyIM.controll.notificationNewUsers++; 1985 } 1986 } 1987 else 1988 { 1989 loadscript.disabledNotificationNewUsers(); 1990 TrophyIM.controll.notificationNewUsers = 0; 1991 } 1992 }, 1891 1993 1892 1994 /** Function: rosterClick … … 1895 1997 */ 1896 1998 1897 1898 1999 rosterClick : function(fulljid) 2000 { 1899 2001 TrophyIM.makeChat(fulljid); 1900 2002 }, 1901 2003 1902 2004 /** Function SetAutorization 1903 2005 * 1904 2006 */ 1905 2007 1906 1907 1908 2008 setAutorization : function( jidTo, jidFrom, _typeSubscription ) 2009 { 2010 var _id = TrophyIM.connection.getUniqueId(); 1909 2011 1910 TrophyIM.connection.send($pres( ).attrs({from: jidFrom, to: jidTo, type: _typeSubscription, id: _id}).tree()); 1911 }, 1912 1913 /** Function: setPresence 1914 * 1915 */ 1916 1917 setPresence : function( _type ) 1918 { 1919 var presence_chatRoom = ""; 1920 1921 if( _type != 'status') 1922 { 1923 if( _type == "unavailable" && TrophyIM.statusConn.connected ) 1924 { 1925 var loading_gif = document.getElementById("JabberIMRosterLoadingGif"); 2012 TrophyIM.connection.send($pres( ).attrs({ 2013 from: jidFrom, 2014 to: jidTo, 2015 type: _typeSubscription, 2016 id: _id 2017 }).tree()); 2018 }, 2019 2020 /** Function: setPresence 2021 * 2022 */ 2023 2024 setPresence : function( _type ) 2025 { 2026 var presence_chatRoom = ""; 2027 2028 if( _type != 'status') 2029 { 2030 if( _type == "unavailable" && TrophyIM.statusConn.connected ) 2031 { 2032 var loading_gif = document.getElementById("JabberIMRosterLoadingGif"); 1926 2033 1927 1928 2034 if( TrophyIM._timeOut.renderRoster != null ) 2035 clearTimeout(TrophyIM._timeOut.renderRoster); 1929 2036 1930 if( TrophyIM.statusConn.connected ) 1931 TrophyIM.connection.send($pres({type : _type}).tree()); 2037 if( TrophyIM.statusConn.connected ) 2038 TrophyIM.connection.send($pres({ 2039 type : _type 2040 }).tree()); 1932 2041 1933 1934 1935 1936 1937 2042 for( var i = 0; i < TrophyIM.connection._requests.length; i++ ) 2043 { 2044 if( TrophyIM.connection._requests[i] ) 2045 TrophyIM.connection._removeRequest(TrophyIM.connection._requests[i]); 2046 } 1938 2047 1939 2048 TrophyIM.logout(); 1940 2049 1941 2050 loadscript.clrAllContacts(); 1942 2051 1943 1944 2052 delete TrophyIM.rosterObj.roster; 2053 delete TrophyIM.rosterObj.groups; 1945 2054 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 2055 setTimeout(function() 2056 { 2057 if( loading_gif.style.display == "block" ) 2058 loading_gif.style.display = "none"; 2059 }, 1000); 2060 } 2061 else 2062 { 2063 if( !TrophyIM.autoConnection.connect ) 2064 { 2065 TrophyIM.autoConnection.connect = true; 2066 TrophyIM.load(); 2067 } 2068 else 2069 { 2070 if( TrophyIM.statusConn.connected ) 2071 { 2072 if( loadscript.getStatusMessage() != "" ) 2073 { 2074 var _presence = $pres( ); 2075 _presence.node.appendChild( Strophe.xmlElement( 'show' ) ).appendChild( Strophe.xmlTextNode( _type ) ); 2076 _presence.node.appendChild( Strophe.xmlElement( 'status' ) ).appendChild( Strophe.xmlTextNode( loadscript.getStatusMessage() )); 1968 2077 1969 2078 TrophyIM.connection.send( _presence.tree() ); 1970 2079 1971 1972 1973 1974 1975 2080 presence_chatRoom = _type; 2081 } 2082 else 2083 { 2084 TrophyIM.connection.send($pres( ).c('show').t(_type).tree()); 1976 2085 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 2086 presence_chatRoom = _type; 2087 } 2088 } 2089 } 2090 } 2091 } 2092 else 2093 { 2094 var _show = "available"; 2095 var _status = ""; 2096 2097 if( arguments.length < 2 ) 2098 { 2099 if( loadscript.getStatusMessage() != "" ) 2100 _status = prompt(i18n.TYPE_YOUR_MSG, loadscript.getStatusMessage()); 2101 else 2102 _status = prompt(i18n.TYPE_YOUR_MSG); 1994 2103 1995 2104 var _divStatus = document.getElementById("JabberIMStatusMessage"); 1996 2105 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2106 if( ( _status = _status.replace(/^\s+|\s+$|^\n|\n$/g,"") ) != "") 2107 _divStatus.firstChild.innerHTML = "( " + _status + " )"; 2108 } 2109 else 2110 { 2111 _status = arguments[1]; 2112 } 2113 2114 for( var resource in TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence ) 2115 { 2116 if ( TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence[ resource ].constructor == Function ) 2117 continue; 2009 2118 2010 2011 2012 2013 2014 2015 2016 2017 2018 2119 if ( TROPHYIM_RESOURCE === ("/" + resource) ) 2120 _show = TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence[resource].show; 2121 } 2122 2123 if ( TrophyIM.statusConn.connected ) 2124 { 2125 var _presence = $pres( ); 2126 _presence.node.appendChild( Strophe.xmlElement( 'show' ) ).appendChild( Strophe.xmlTextNode( _show ) ); 2127 _presence.node.appendChild( Strophe.xmlElement( 'status' ) ).appendChild( Strophe.xmlTextNode( _status ) ); 2019 2128 2020 2129 TrophyIM.connection.send( _presence.tree() ); 2021 2130 2022 presence_chatRoom = _show; 2023 } 2024 } 2025 2026 // Send Presence Chat Room 2027 if( TrophyIM.activeChatRoom.name.length > 0 ) 2028 { 2029 for( i = 0; i < TrophyIM.activeChatRoom.name.length; i++ ) 2030 { 2031 if( TrophyIM.activeChatRoom.name[i] != "" ) 2032 TrophyIM.connection.send($pres( {to : TrophyIM.activeChatRoom.name[i]} ).c('show').t( presence_chatRoom ) ); 2033 } 2034 } 2035 2036 }, 2037 2038 /** Function: sendMessage 2131 presence_chatRoom = _show; 2132 } 2133 } 2134 2135 // Send Presence Chat Room 2136 if( TrophyIM.activeChatRoom.name.length > 0 ) 2137 { 2138 for( i = 0; i < TrophyIM.activeChatRoom.name.length; i++ ) 2139 { 2140 if( TrophyIM.activeChatRoom.name[i] != "" ) 2141 TrophyIM.connection.send($pres( { 2142 to : TrophyIM.activeChatRoom.name[i] 2143 } ).c('show').t( presence_chatRoom ) ); 2144 } 2145 } 2146 2147 }, 2148 2149 /** Function: sendMessage 2039 2150 * 2040 2151 * Send message from chat input to user … … 2043 2154 sendMessage : function() 2044 2155 { 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2156 if (arguments.length > 0) 2157 { 2158 var jidTo = arguments[0]; 2159 var message_input = arguments[1]; 2160 2161 2162 message_input = message_input.replace(/^\s+|\s+$|^\n|\n$/g, ""); 2163 2164 if (message_input != "") { 2165 2166 // Send Message 2167 var newMessage = $msg({ 2168 to: jidTo, 2169 from: TrophyIM.connection.jid, 2170 type: 'chat' 2171 }); 2172 newMessage = newMessage.c('body').t(message_input); 2173 newMessage.up(); 2174 newMessage = newMessage.c('active').attrs({ 2175 xmlns: 'http://jabber.org/protocol/chatstates' 2176 }); 2177 // Send Message 2178 TrophyIM.connection.send(newMessage.tree()); 2068 2179 2069 2070 2071 2072 2073 2074 }, 2075 2076 2180 return true; 2181 } 2182 } 2183 2184 return false; 2185 }, 2186 2187 /** Function: sendMessage 2077 2188 * 2078 2189 * Send message to ChatRoom … … 2081 2192 sendMessageChatRoom : function( ) 2082 2193 { 2083 if( arguments.length > 0 ) 2084 { 2085 var room_nick = arguments[0]; 2086 var message = arguments[1]; 2087 var msgid = TrophyIM.connection.getUniqueId(); 2088 var msg = $msg({to: room_nick, type: "groupchat", id: msgid}).c("body",{xmlns: Strophe.NS.CLIENT}).t(message); 2194 if( arguments.length > 0 ) 2195 { 2196 var room_nick = arguments[0]; 2197 var message = arguments[1]; 2198 var msgid = TrophyIM.connection.getUniqueId(); 2199 var msg = $msg({ 2200 to: room_nick, 2201 type: "groupchat", 2202 id: msgid 2203 }).c("body",{ 2204 xmlns: Strophe.NS.CLIENT 2205 }).t(message); 2089 2206 2090 2207 msg.up();//.c("x", {xmlns: "jabber:x:event"}).c("composing"); 2091 2208 2092 2209 TrophyIM.connection.send(msg); 2093 2210 2094 2095 2096 }, 2097 2098 2211 return true; 2212 } 2213 }, 2214 2215 /** Function: sendContentMessage 2099 2216 * 2100 2217 * Send a content message from chat input to user 2101 2218 */ 2102 sendContentMessage : function() 2103 { 2104 if( arguments.length > 0 ) 2105 { 2106 var jidTo = arguments[0]; 2107 var state = arguments[1]; 2108 2109 var newMessage = $msg({to: jidTo, from: TrophyIM.connection.jid, type: 'chat'}); 2110 newMessage = newMessage.c(state).attrs({xmlns : 'http://jabber.org/protocol/chatstates'}); 2111 // Send content message 2112 TrophyIM.connection.send(newMessage.tree()); 2113 } 2219 sendContentMessage : function() 2220 { 2221 if( arguments.length > 0 ) 2222 { 2223 var jidTo = arguments[0]; 2224 var state = arguments[1]; 2225 2226 var newMessage = $msg({ 2227 to: jidTo, 2228 from: TrophyIM.connection.jid, 2229 type: 'chat' 2230 }); 2231 newMessage = newMessage.c(state).attrs({ 2232 xmlns : 'http://jabber.org/protocol/chatstates' 2233 }); 2234 // Send content message 2235 TrophyIM.connection.send(newMessage.tree()); 2236 } 2114 2237 } 2115 2238 }; … … 2131 2254 */ 2132 2255 if (TrophyIM.JSONStore.store_working) 2133 2256 { 2134 2257 var data = TrophyIM.JSONStore.getData(['roster', 'groups']); 2135 2258 this.roster = (data['roster'] != null) ? data['roster'] : {}; 2136 2259 this.groups = (data['groups'] != null) ? data['groups'] : {}; 2137 2260 } 2138 2139 2261 else 2262 { 2140 2263 this.roster = {}; 2141 2264 this.groups = {}; … … 2143 2266 this.changes = new Array(); 2144 2267 2145 2146 2268 if (TrophyIM.constants.stale_roster) 2269 { 2147 2270 for (var jid in this.roster) 2148 2149 2271 { 2272 this.changes[this.changes.length] = jid; 2150 2273 } 2151 2274 } 2152 2275 2153 2276 /** Function: addChange 2154 2277 * 2155 2278 * Adds given jid to this.changes, keeping this.changes sorted and … … 2160 2283 */ 2161 2284 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2285 this.addChange = function(jid) 2286 { 2287 for (var c = 0; c < this.changes.length; c++) 2288 { 2289 if (this.changes[c] == jid) 2290 { 2291 return; 2292 } 2293 } 2294 2295 this.changes[this.changes.length] = jid; 2296 2297 this.changes.sort(); 2298 } 2176 2299 2177 2300 /** Function: addContact … … 2186 2309 */ 2187 2310 2188 this.addContact = function(jid, subscription, name, groups ) 2189 { 2190 if( subscription === "remove" ) 2191 { 2192 this.removeContact(jid); 2193 } 2194 else 2195 { 2196 var contact = {jid:jid, subscription:subscription, name:name, groups:groups} 2197 var jid_lower = jid.toLowerCase(); 2198 2199 if ( this.roster[jid_lower] ) 2200 { 2201 this.roster[jid_lower]['contact'] = contact; 2202 } 2203 else 2204 { 2205 this.roster[jid_lower] = {contact:contact}; 2206 } 2207 2208 groups = groups ? groups : ['']; 2311 this.addContact = function(jid, subscription, name, groups ) 2312 { 2313 if( subscription === "remove" ) 2314 { 2315 this.removeContact(jid); 2316 } 2317 else 2318 { 2319 var contact = { 2320 jid:jid, 2321 subscription:subscription, 2322 name:name, 2323 groups:groups 2324 } 2325 var jid_lower = jid.toLowerCase(); 2326 2327 if ( this.roster[jid_lower] ) 2328 { 2329 this.roster[jid_lower]['contact'] = contact; 2330 } 2331 else 2332 { 2333 this.roster[jid_lower] = { 2334 contact:contact 2335 }; 2336 } 2337 2338 groups = groups ? groups : ['']; 2209 2339 2210 2211 2212 2213 2214 2215 2340 for ( var g = 0; g < groups.length; g++ ) 2341 { 2342 if ( !this.groups[groups[g]] ) 2343 { 2344 this.groups[groups[g]] = {}; 2345 } 2216 2346 2217 2218 2219 2347 this.groups[groups[g]][jid_lower] = jid_lower; 2348 } 2349 } 2220 2350 } 2221 2351 … … 2228 2358 2229 2359 this.getContact = function(jid) 2230 2360 { 2231 2361 if (this.roster[jid.toLowerCase()]) 2232 2362 { 2233 2363 return this.roster[jid.toLowerCase()]['contact']; 2234 2364 } 2235 2365 } 2236 2366 2237 /** Function: getPresence2367 /** Function: getPresence 2238 2368 * 2239 2369 * Returns best presence for given jid as Array(resource, priority, show, … … 2243 2373 */ 2244 2374 2245 2246 2247 2248 2375 this.getPresence = function(fulljid) 2376 { 2377 var jid = Strophe.getBareJidFromJid(fulljid); 2378 var current = null; 2249 2379 2250 2251 2252 2253 2254 2255 2380 if (this.roster[jid.toLowerCase()] && this.roster[jid.toLowerCase()]['presence']) 2381 { 2382 for (var resource in this.roster[jid.toLowerCase()]['presence']) 2383 { 2384 if ( this.roster[jid.toLowerCase()]['presence'][ resource ].constructor == Function ) 2385 continue; 2256 2386 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2387 var presence = this.roster[jid.toLowerCase()]['presence'][resource]; 2388 if (current == null) 2389 { 2390 current = presence 2391 } 2392 else 2393 { 2394 if(presence['priority'] > current['priority'] && ((presence['show'] == "chat" 2395 || presence['show'] == "available") || (current['show'] != "chat" || 2396 current['show'] != "available"))) 2397 { 2398 current = presence 2399 } 2400 } 2401 } 2402 } 2403 return current; 2404 } 2405 2406 /** Function: groupHasChanges 2277 2407 * 2278 2408 * Returns true if current group has members in this.changes … … 2282 2412 */ 2283 2413 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2414 this.groupHasChanges = function(group) 2415 { 2416 for (var c = 0; c < this.changes.length; c++) 2417 { 2418 if (this.groups[group][this.changes[c]]) 2419 { 2420 return true; 2421 } 2422 } 2423 return false; 2424 } 2425 2426 /** Function removeContact 2297 2427 * 2298 2428 * Parameters … … 2300 2430 */ 2301 2431 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2432 this.removeContact = function(jid) 2433 { 2434 if( this.roster[ jid ] ) 2435 { 2436 var groups = this.roster[ jid ].contact.groups; 2437 2438 if( groups ) 2439 { 2440 for ( var i = 0; i < groups.length; i++ ) 2441 { 2442 delete this.groups[ groups[ i ] ][ jid ]; 2443 } 2444 2445 for ( var i = 0; i < groups.length; i++ ) 2446 { 2447 var contacts = 0; 2448 for ( var contact in this.groups[ groups[ i ] ] ) 2449 { 2450 if ( this.groups[ groups[ i ] ][ contact ].constructor == Function ) 2451 continue; 2322 2452 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2453 contacts++; 2454 } 2455 2456 if ( ! contacts ) 2457 delete this.groups[ groups[ i ] ]; 2458 } 2459 } 2460 2461 // Delete Object roster 2462 if( this.roster[jid] ) 2463 delete this.roster[jid]; 2464 } 2465 } 2336 2466 2337 2467 /** Function: setPresence … … 2346 2476 */ 2347 2477 2348 2349 2350 2478 this.setPresence = function(fulljid, priority, show, status) 2479 { 2480 var barejid = Strophe.getBareJidFromJid(fulljid); 2351 2481 var resource = Strophe.getResourceFromJid(fulljid); 2352 2482 var jid_lower = barejid.toLowerCase(); 2353 2483 2354 2484 if( show !== 'unavailable' || show !== 'error' ) 2355 2356 2357 2485 { 2486 if (!this.roster[jid_lower]) 2487 { 2358 2488 this.addContact( barejid, 'not-in-roster' ); 2359 2489 } 2360 2490 2361 2491 var presence = 2362 2492 { 2363 2493 resource : resource, 2364 2494 priority : priority, … … 2367 2497 } 2368 2498 2369 2370 2499 if (!this.roster[jid_lower]['presence']) 2500 { 2371 2501 this.roster[jid_lower]['presence'] = {}; 2372 2502 } 2373 2503 2374 2504 this.roster[jid_lower]['presence'][resource] = presence; 2375 2505 } 2376 2506 } 2377 2507 2378 2508 /** Fuction: save 2379 2509 * 2380 2510 * Saves roster data to JSON store 2381 2511 */ 2382 2512 2383 this.save = function() 2384 { 2385 if (TrophyIM.JSONStore.store_working) 2386 { 2387 TrophyIM.JSONStore.setData({roster:this.roster, 2388 groups:this.groups, active_chat:TrophyIM.activeChats['current'], 2389 chat_history:TrophyIM.chatHistory}); 2390 } 2391 } 2513 this.save = function() 2514 { 2515 if (TrophyIM.JSONStore.store_working) 2516 { 2517 TrophyIM.JSONStore.setData({ 2518 roster:this.roster, 2519 groups:this.groups, 2520 active_chat:TrophyIM.activeChats['current'], 2521 chat_history:TrophyIM.chatHistory 2522 }); 2523 } 2524 } 2392 2525 2393 2526 } … … 2408 2541 * (function) handler = what to set onreadystatechange to 2409 2542 */ 2410 2543 this._newXHR = function (handler) { 2411 2544 var xhr = null; 2412 2545 if (window.XMLHttpRequest) { 2413 2546 xhr = new XMLHttpRequest(); 2414 2547 if (xhr.overrideMimeType) { 2415 xhr.overrideMimeType("text/xml");2548 xhr.overrideMimeType("text/xml"); 2416 2549 } 2417 2550 } else if (window.ActiveXObject) { … … 2441 2574 } 2442 2575 xhr.setRequestHeader('Content-type', 2443 'application/x-www-form-urlencoded');2576 'application/x-www-form-urlencoded'); 2444 2577 xhr.setRequestHeader('Content-length', getdata.length); 2445 2578 xhr.send(getdata); … … 2450 2583 } catch(e) { 2451 2584 Strophe.error("Could not parse JSONStore response" + 2452 xhr.responseText);2585 xhr.responseText); 2453 2586 return false; 2454 2587 } … … 2467 2600 if (typeof(obj) == "object") { 2468 2601 for (var i in obj) { 2469 2470 2602 if ( obj[i].constructor == Function ) 2603 continue; 2471 2604 2472 2605 if (i == '_empty_') { … … 2501 2634 } 2502 2635 xhr.setRequestHeader('Content-type', 2503 'application/x-www-form-urlencoded');2636 'application/x-www-form-urlencoded'); 2504 2637 xhr.setRequestHeader('Content-length', deldata.length); 2505 2638 xhr.send(deldata); … … 2530 2663 this.setData = function(vars) 2531 2664 { 2532 2665 if ( typeof(TROPHYIM_JSON_STORE) != undefined ) 2533 2666 { 2534 2667 var senddata = "set=" + JSON.stringify(vars); … … 2544 2677 } 2545 2678 xhr.setRequestHeader('Content-type', 2546 'application/x-www-form-urlencoded');2679 'application/x-www-form-urlencoded'); 2547 2680 xhr.setRequestHeader('Content-length', senddata.length); 2548 2681 xhr.send(senddata); 2549 2682 if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText == 2550 "OK") {2683 "OK") { 2551 2684 return true; 2552 2685 } else { … … 2559 2692 var testData = true; 2560 2693 2561 if (this.setData({testData:testData})) { 2694 if (this.setData({ 2695 testData:testData 2696 })) { 2562 2697 var testResult = this.getData(['testData']); 2563 2698 if (testResult && testResult['testData'] == true) { … … 2601 2736 for(var i = 0; i < node.attributes.length; i++) { 2602 2737 newNode.setAttribute(node.attributes[i].nodeName, 2603 node.getAttribute(node.attributes[i].nodeName));2738 node.getAttribute(node.attributes[i].nodeName)); 2604 2739 } 2605 2740 } 2606 2741 if (allChildren && node.childNodes && 2607 node.childNodes.length > 0) {2742 node.childNodes.length > 0) { 2608 2743 for (var i = 0; i < node.childNodes.length; i++) { 2609 2744 newNode.appendChild(document.importNode( 2610 node.childNodes[i], allChildren));2745 node.childNodes[i], allChildren)); 2611 2746 } 2612 2747 } … … 2631 2766 window.onunload = function() 2632 2767 { 2633 2634 2768 if( oldonunload ) 2769 { 2635 2770 oldonunload(); 2636 2771 } 2637 2772 2638 2773 TrophyIM.setPresence('unavailable'); 2639 2774 }
Note: See TracChangeset
for help on using the changeset viewer.