Changeset 5041 for trunk/jabberit_messenger/jmessenger/js/trophyim.js
- Timestamp:
- 09/05/11 18:10:06 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/jabberit_messenger/jmessenger/js/trophyim.js
r3332 r5041 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 … … 675 711 onPresenceChatRoom : function(msg) 676 712 { 677 var xquery = msg.getElementsByTagName("x"); 678 679 if ( xquery.length > 0 ) 680 { 681 for ( var i = 0; i < xquery.length; i++ ) 682 { 683 var xmlns = xquery[i].getAttribute("xmlns"); 684 685 if( xmlns.indexOf("http://jabber.org/protocol/muc#user") == 0 ) 686 { 687 var _from = xquery[i].parentNode.getAttribute('from'); 688 var _to = xquery[i].parentNode.getAttribute('to'); 689 690 // Get NameChatRoom 691 var nameChatRoom = Strophe.getBareJidFromJid( _from ); 692 693 // Get nickName 694 var nickName = Strophe.getResourceFromJid( _from ); 695 696 // Get Type/Show 697 var type = ( xquery[i].parentNode.getAttribute('type') != null ) ? xquery[i].parentNode.getAttribute('type') : 'available' ; 698 var show = ( xquery[i].parentNode.firstChild.nodeName == "show" ) ? xquery[i].parentNode.firstChild.firstChild.nodeValue : type; 699 700 var _idElement = nameChatRoom + "_UserChatRoom__" + nickName; 701 702 var _UserChatRoom = document.createElement("div"); 703 _UserChatRoom.id = _idElement; 704 _UserChatRoom.style.paddingLeft = '18px'; 705 _UserChatRoom.style.margin = '3px 0px 0px 2px'; 706 _UserChatRoom.style.background = 'url("'+path_jabberit+'templates/default/images/' + show + '.gif") no-repeat center left'; 707 _UserChatRoom.appendChild( document.createTextNode( nickName ) ); 708 709 var nodeUser = document.getElementById( _idElement ); 710 711 if( nodeUser == null ) 712 { 713 if( document.getElementById( nameChatRoom + '__roomChat__participants' ) != null ) 714 { 715 nameChatRoom = document.getElementById( nameChatRoom + '__roomChat__participants' ); 716 nameChatRoom.appendChild( _UserChatRoom ); 717 } 718 else 719 { 720 if( type != 'unavailable' ) 721 { 722 TrophyIM.makeChatRoom( nameChatRoom, nameChatRoom.substring(0, nameChatRoom.indexOf('@'))); 723 nameChatRoom = document.getElementById( nameChatRoom + '__roomChat__participants' ); 724 nameChatRoom.appendChild( _UserChatRoom ); 725 } 726 } 727 } 728 else 729 { 730 if( type == 'unavailable' ) 731 { 732 nodeUser.parentNode.removeChild( nodeUser ); 733 } 734 else if( show ) 735 { 736 nodeUser.style.backgroundImage = 'url("'+path_jabberit+'templates/default/images/' + show + '.gif")'; 737 } 738 } 713 var xquery = msg.getElementsByTagName("x"); 714 var _error = msg.getElementsByTagName("error"); 715 716 717 if( _error.length > 0 ) 718 { 719 /* Room creation is denied by service policy; 720 * 721 * <error code='403' type='auth'> 722 * <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> 723 * <text xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Room creation is denied by service policy</text> 724 * </error> 725 */ 726 727 for ( var i = 0; i < _error.length; i++ ) 728 { 729 if ( _error[i].getElementsByTagName("text") ) 730 { 731 var _errorMsg = Strophe.getText( _error[i].getElementsByTagName("text")[0] ); 732 733 if( _errorMsg == "Room creation is denied by service policy" ) 734 { 735 alert( i18n.ROOM_CREATION_IS_DENIED_BY_SERVICE_POLICY ); 736 } 737 else 738 { 739 alert( " Informe ao seu Administrador ERRO : \n" + _errorMsg ); 740 } 741 742 } 743 } 744 } 745 else 746 { 747 if ( xquery.length > 0 ) 748 { 749 for ( var i = 0; i < xquery.length; i++ ) 750 { 751 var xmlns = xquery[i].getAttribute("xmlns"); 752 753 if( xmlns.indexOf("http://jabber.org/protocol/muc#user") == 0 ) 754 { 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 ) 782 { 783 nameChatRoom = document.getElementById( nameChatRoom + '__roomChat__participants' ); 784 nameChatRoom.appendChild( _UserChatRoom ); 785 } 786 else 787 { 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 } 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 } 807 } 739 808 } 740 809 } … … 749 818 onMessage : function(msg) 750 819 { 751 752 753 820 var checkTime = function(i) 821 { 822 if ( i < 10 ) i= "0" + i; 754 823 755 756 824 return i; 825 }; 757 826 758 759 760 761 762 763 764 765 766 767 768 769 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()); 770 839 771 840 var from = msg.getAttribute('from'); … … 775 844 var stamp = ( delay[0] != null ) ? "<font style='color:red;'>" + messageDate(delay[0].getAttribute('stamp')) + "</font>" : dtNow; 776 845 777 778 779 780 781 782 783 784 785 786 787 788 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('@')); 789 858 790 if( TrophyIM.rosterObj.roster[barejid] ) 791 { 792 if( TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name'] ) 793 { 794 contact = TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name']; 795 } 796 } 797 798 // Message with body are "content message", this means state active 799 if ( elems.length > 0 ) 800 { 801 state = ""; 802 803 // Set notify chat state capability on when sender notify it themself 804 chatStateOnOff = document.getElementById(jid_lower + "__chatStateOnOff"); 805 806 if (active.length > 0 & chatStateOnOff != null ) 807 { 808 chatStateOnOff.value = 'on'; 809 } 810 811 // Get Message 812 var _message = document.createElement("div"); 813 var _text = Strophe.getText( elems[0] ); 814 815 // Events Javascript 816 _text = _text.replace(/onblur/gi,"EVENT_DENY"); 817 818 _text = _text.replace(/onchange/gi,"EVENT_DENY"); 819 820 _text = _text.replace(/onclick/gi,"EVENT_DENY"); 821 822 _text = _text.replace(/ondblclick/gi,"EVENT_DENY"); 823 824 _text = _text.replace(/onerror/gi,"EVENT_DENY"); 825 826 _text = _text.replace(/onfocus/gi,"EVENT_DENY"); 827 828 _text = _text.replace(/onkeydown/gi,"EVENT_DENY"); 829 830 _text = _text.replace(/onkeypress/gi,"EVENT_DENY"); 831 832 _text = _text.replace(/onkeyup/gi,"EVENT_DENY"); 833 834 _text = _text.replace(/onmousedown/gi,"EVENT_DENY"); 835 836 _text = _text.replace(/onmousemove/gi,"EVENT_DENY"); 837 838 _text = _text.replace(/onmouseout/gi,"EVENT_DENY"); 839 840 _text = _text.replace(/onmouseover/gi,"EVENT_DENY"); 841 842 _text = _text.replace(/onmouseup/gi,"EVENT_DENY"); 843 844 _text = _text.replace(/onresize/gi,"EVENT_DENY"); 845 846 _text = _text.replace(/onselect/gi,"EVENT_DENY"); 847 848 _text = _text.replace(/onunload/gi,"EVENT_DENY"); 849 850 // Events CSS 851 _text = _text.replace(/style/gi,"EVENT_DENY"); 852 853 // Tags HTML 854 _text = _text.replace(/img /gi,"IMG_DENY "); 855 856 _text = _text.replace(/script /gi,"SCRIPT_DENY "); 857 858 _text = _text.replace(/div /gi,"DIV_DENY "); 859 860 _text = _text.replace(/span /gi,"SPAN_DENY "); 861 862 _text = _text.replace(/iframe /gi,"IFRAME_DENY "); 863 864 _message.innerHTML = _text; 865 866 ////////// BEGIN XSS ////////////////////////////////////////////////// 867 // Delete Tags <SCRIPT> 868 var scripts = _message.getElementsByTagName('script_deny'); 869 for (var i = 0; i < scripts.length; i++){ _message.removeChild(scripts[i--]); } 870 //////////////////////////////////////////////////// 871 872 // Delete Tags <IMG> 873 var _imgSrc = _message.getElementsByTagName('img_deny'); 874 for (var i = 0; i < _imgSrc.length; i++){ _imgSrc[i].parentNode.removeChild( _imgSrc[i--] ); } 875 //////////////////////////////////////////////////// 876 877 // Delete Tags <DIV> 878 var _Div = _message.getElementsByTagName('div_deny'); 879 for (var i = 0; i < _Div.length; i++){ _Div[i].parentNode.removeChild( _Div[i--] ); } 880 //////////////////////////////////////////////////// 881 882 // Delete Tags <SPAN> 883 var _Span = _message.getElementsByTagName('span_deny'); 884 for (var i = 0; i < _Span.length; i++){ _Span[i].parentNode.removeChild( _Span[i--] ); } 885 //////////////////////////////////////////////////// 886 887 // Delete Tags <IFRAME> 888 var _Iframe = _message.getElementsByTagName('iframe_deny'); 889 for (var i = 0; i < _Iframe.length; i++){ _Iframe[i].parentNode.removeChild( _Iframe[i--] ); } 890 891 // Delete Tags <A HREF> 892 var _aHref = _message.getElementsByTagName('a'); 893 for (var i = 0; i < _aHref.length; i++){ _aHref[i].parentNode.removeChild( _aHref[i--] ); } 894 895 _message.innerHTML = _message.innerHTML.replace(/^\s+|\s+$|^\n|\n$/g, ""); 896 ////////// END XSS ////////////////////////////////////////////////// 897 898 // Get Smiles 899 _message.innerHTML = loadscript.getSmiles( _message.innerHTML ); 900 901 if (type == 'chat' || type == 'normal') 902 { 903 if ( _message.hasChildNodes() ) 904 { 905 var message = 906 { 907 contact : "[" + stamp + "] <font style='font-weight:bold; color:black;'>" + contact + "</font>", 908 msg : "</br>" + _message.innerHTML 909 }; 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 }; 910 991 911 912 913 914 915 916 917 918 919 920 921 msg: "</br>" + _message.innerHTML922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 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 ) 950 1031 951 952 953 954 955 956 957 958 959 1032 clearChatStateTimer = setTimeout(clearChatState, 2000); 1033 else 1034 clearTimeout(clearChatStateTimer); 1035 } 1036 1037 return true; 1038 }, 1039 1040 /** Function: getChatState 960 1041 * 961 1042 * Parameters: … … 963 1044 * (string) jid - the jid of chat box to update the chat state to. 964 1045 */ 965 966 967 1046 getChatState : function(msg) 1047 { 1048 var state = msg.getElementsByTagName('inactive'); 968 1049 969 970 971 972 973 974 975 1050 if ( state.length > 0 ) 1051 { 1052 return i18n.INACTIVE; 1053 } 1054 else 1055 { 1056 state = msg.getElementsByTagName('gone'); 976 1057 if ( state.length > 0 ) 977 1058 { 978 979 1059 return i18n.GONE; 1060 } 980 1061 else 981 1062 { 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 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 1002 1083 * 1003 1084 * Make sure chat window to given fulljid exists, switching chat context to … … 1007 1088 makeChat : function(fulljid) 1008 1089 { 1009 1010 1011 1012 1013 1014 'enabledPopUp' : ( ( loadscript.getIsIE() ) ? "none" : "block" ),1015 1016 1017 1018 1019 1020 1021 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('@')); 1022 1103 1023 1104 if( TrophyIM.rosterObj.roster[barejid] ) … … 1025 1106 if( TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name'] ) 1026 1107 { 1027 1108 titleWindow = TrophyIM.rosterObj.roster[barejid.toLowerCase()]['contact']['name']; 1028 1109 } 1029 1110 } … … 1032 1113 TrophyIM.posWindow.top = TrophyIM.posWindow.top + 10; 1033 1114 if( TrophyIM.posWindow.top > 200 ) 1034 1115 TrophyIM.posWindow.top = 100; 1035 1116 1036 1117 // Position Left 1037 1118 TrophyIM.posWindow.left = TrophyIM.posWindow.left + 5; 1038 1119 if( TrophyIM.posWindow.left > 455 ) 1039 1120 TrophyIM.posWindow.left = 400; 1040 1121 1041 1122 var _content = document.createElement( 'div' ); … … 1046 1127 var _textarea = _content.getElementsByTagName( 'textarea' ).item( 0 ); 1047 1128 var _send = _content.getElementsByTagName( 'input' ).item( 0 ); 1048 1129 var _chatStateOnOff = _content.getElementsByTagName( 'input' ).item( 1 ); 1049 1130 1050 1131 var _send_message = function( ) 1051 1132 { 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1133 if ( ! TrophyIM.sendMessage( barejid, _textarea.value ) ) 1134 return false; 1135 1136 // Add Message in chatBox; 1137 TrophyIM.addMessage( _messages, barejid, { 1138 contact : "<font style='font-weight:bold; color:red;'>" + i18n.ME + "</font>", 1139 msg : "<br/>" + _textarea.value 1140 } ); 1141 1142 _textarea.value = ''; 1143 _textarea.focus( ); 1063 1144 }; 1064 1145 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1146 var composingTimer_ = 0; 1147 var isComposing_ = 0; 1148 var timeCounter; 1149 1150 var setComposing = function( ) 1151 { 1152 var checkComposing = function() 1153 { 1154 if (!isComposing_) { 1155 // User stopped composing 1156 composingTimer_ = 0; 1157 clearInterval(timeCounter); 1158 TrophyIM.sendContentMessage(barejid, 'paused'); 1159 } else { 1160 TrophyIM.sendContentMessage(barejid, 'composing'); 1161 } 1162 isComposing_ = 0; // Reset composing 1163 } 1164 1165 if (!composingTimer_) { 1166 /* User (re)starts composing */ 1167 composingTimer_ = 1; 1168 timeCounter = setInterval(checkComposing,4000); 1169 } 1170 isComposing_ = 1; 1171 }; 1091 1172 1092 1173 loadscript.configEvents( _send, 'onclick', _send_message ); 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 width: 387,1111 height: 375,1112 1113 left: TrophyIM.posWindow.left,1114 1115 1116 1117 zindex: loadscript.getZIndex(),1118 title: titleWindow,1119 closeAction: "hidden",1120 1121 1174 loadscript.configEvents( _textarea, 'onkeyup', function( e ) 1175 { 1176 if ( e.keyCode == 13 ){ 1177 _send_message( ); 1178 // User stopped composing 1179 composingTimer_ = 0; 1180 clearInterval(timeCounter); 1181 }else{ 1182 if (_chatStateOnOff.value == 'on') 1183 setComposing(); 1184 } 1185 } ); 1186 1187 var winChatBox = 1188 { 1189 id_window : "window_chat_area_" + barejid, 1190 barejid : barejid, 1191 width : 387, 1192 height : 375, 1193 top : TrophyIM.posWindow.top, 1194 left : TrophyIM.posWindow.left, 1195 draggable : true, 1196 visible : "display", 1197 resizable : true, 1198 zindex : loadscript.getZIndex(), 1199 title : titleWindow, 1200 closeAction : "hidden", 1201 content : _content 1202 } 1122 1203 1123 1124 1125 1126 1204 _win = _winBuild(winChatBox); 1205 1206 // Notification New Message 1207 loadscript.notification(barejid); 1127 1208 1128 1129 1209 // Photo User; 1210 loadscript.getPhotoUser(barejid); 1130 1211 1131 _textarea.focus( ); 1132 1133 return ( _messages = _win.content( ).firstChild ); 1134 }, 1135 1136 /** Function: makeChatRoom 1212 _textarea.focus( ); 1213 1214 _messages = _win.content( ).firstChild; 1215 1216 while ( _messages && _messages.nodeType !== 1 ) 1217 { 1218 _messages = _messages.nextSibling; 1219 } 1220 1221 return ( _messages ); 1222 }, 1223 1224 /** Function: makeChatRoom 1137 1225 * 1138 1226 * … … 1142 1230 makeChatRoom : function() 1143 1231 { 1144 1145 1232 var jidChatRoom = arguments[0]; 1233 var titleWindow = "ChatRoom - " + unescape(arguments[1]); 1146 1234 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1235 var paramsChatRoom = 1236 { 1237 'idChatRoom' : jidChatRoom + "__roomChat", 1238 'jidTo' : jidChatRoom, 1239 'lang_Send' : i18n.SEND, 1240 'lang_Leave_ChatRoom' : i18n.LEAVE_CHATROOM, 1241 'path_jabberit' : path_jabberit 1242 }; 1243 1244 // Position Top 1157 1245 TrophyIM.posWindow.top = TrophyIM.posWindow.top + 10; 1158 1246 if( TrophyIM.posWindow.top > 200 ) 1159 1247 TrophyIM.posWindow.top = 100; 1160 1248 1161 1249 // Position Left 1162 1250 TrophyIM.posWindow.left = TrophyIM.posWindow.left + 5; 1163 1251 if( TrophyIM.posWindow.left > 455 ) 1164 1252 TrophyIM.posWindow.left = 400; 1165 1253 1166 1254 var _content = document.createElement( 'div' ); … … 1175 1263 var _send_message = function( ) 1176 1264 { 1177 1178 1265 if ( ! TrophyIM.sendMessageChatRoom( jidChatRoom, _textarea.value ) ) 1266 return false; 1179 1267 1180 1268 _textarea.value = ''; 1181 1269 1182 1270 _textarea.focus( ); 1183 1271 }; 1184 1272 … … 1186 1274 loadscript.configEvents( _leaveChatRoom, 'onclick', function( ) 1187 1275 { 1188 1276 TrophyIM.leaveChatRoom( jidChatRoom ); 1189 1277 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1278 if( TrophyIM.activeChatRoom.name.length > 0 ) 1279 { 1280 for( var i = 0; i < TrophyIM.activeChatRoom.name.length ; i++ ) 1281 { 1282 if( TrophyIM.activeChatRoom.name[i].indexOf( jidChatRoom ) >= 0 ) 1283 { 1284 TrophyIM.activeChatRoom.name[i] = ""; 1285 } 1286 } 1287 } 1200 1288 1201 1202 1203 1289 setTimeout( function() 1290 { 1291 _winBuild("window_chat_room_" + jidChatRoom, "remove"); 1204 1292 1205 1293 }, 650 ); 1206 1294 1207 1295 }); 1208 1296 1209 1210 1211 1212 1213 1214 1215 1297 loadscript.configEvents( _textarea, 'onkeyup', function( e ) 1298 { 1299 if ( e.keyCode == 13 ) 1300 { 1301 _send_message( ); 1302 } 1303 }); 1216 1304 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1305 var winChatRoom = 1306 { 1307 id_window : "window_chat_room_" + arguments[0], 1308 barejid : jidChatRoom, 1309 width : 500, 1310 height : 450, 1311 top : TrophyIM.posWindow.top, 1312 left : TrophyIM.posWindow.left, 1313 draggable : true, 1314 visible : "display", 1315 resizable : true, 1316 zindex : loadscript.getZIndex(), 1317 title : titleWindow, 1318 closeAction : "hidden", 1319 content : _content 1320 } 1233 1321 1234 1322 _win = _winBuild(winChatRoom); 1235 1323 1236 return ( _messages = _win.content( ).firstChild ); 1324 _messages = _win.content( ).firstChild; 1325 1326 while ( _messages && _messages.nodeType !== 1 ) 1327 { 1328 _messages = _messages.nextSibling; 1329 } 1330 1331 return ( _messages ); 1332 1237 1333 1238 1334 }, 1239 1335 1240 1336 /** Function addContacts 1241 1337 * 1242 1338 * Parameters: … … 1247 1343 */ 1248 1344 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1345 addContact : function( jidTo, name, group ) 1346 { 1347 var _flag = true; 1348 1349 if( TrophyIM.removeResult.idResult.length > 0 ) 1350 { 1351 for( var i = 0 ; i < TrophyIM.removeResult.idResult.length; i++ ) 1352 { 1353 if( TrophyIM.removeResult.idResult[i] == jidTo ) 1354 { 1355 _flag = false; 1260 1356 1261 1357 TrophyIM.removeResult.idResult.splice(i,1); 1262 1358 1263 i--; 1264 } 1265 } 1266 } 1267 1268 if( _flag ) 1269 { 1270 // Add Contact 1271 var _id = TrophyIM.connection.getUniqueId('add'); 1272 var newContact = $iq({type: 'set', id: _id }); 1273 newContact = newContact.c('query').attrs({xmlns : 'jabber:iq:roster'}); 1274 newContact = newContact.c('item').attrs({jid: jidTo, name:name }); 1275 newContact = newContact.c('group').t(group).tree(); 1276 1277 TrophyIM.connection.send(newContact); 1278 } 1279 }, 1359 i--; 1360 } 1361 } 1362 } 1363 1364 if( _flag ) 1365 { 1366 // Add Contact 1367 var _id = TrophyIM.connection.getUniqueId('add'); 1368 var newContact = $iq({ 1369 type: 'set', 1370 id: _id 1371 }); 1372 newContact = newContact.c('query').attrs({ 1373 xmlns : 'jabber:iq:roster' 1374 }); 1375 newContact = newContact.c('item').attrs({ 1376 jid: jidTo, 1377 name:name 1378 }); 1379 newContact = newContact.c('group').t(group).tree(); 1380 1381 TrophyIM.connection.send(newContact); 1382 } 1383 }, 1280 1384 1281 1385 /** Function: add … … 1288 1392 addMessage : function( chatBox, jid, msg ) 1289 1393 { 1290 1291 1394 // Get Smiles 1395 msg.msg = loadscript.getSmiles( msg.msg ); 1292 1396 1293 1294 1295 1397 var messageDiv = document.createElement("div"); 1398 messageDiv.style.margin = "3px 0px 1em 3px"; 1399 messageDiv.innerHTML = msg.contact + " : " + msg.msg ; 1296 1400 1297 1298 1401 chatBox.appendChild(messageDiv); 1402 chatBox.scrollTop = chatBox.scrollHeight; 1299 1403 }, 1300 1404 … … 1306 1410 renameContact : function( jid ) 1307 1411 { 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1412 // Name 1413 var name = TrophyIM.rosterObj.roster[jid].contact.name; 1414 1415 if(( name = prompt(i18n.ASK_NEW_NAME_QUESTION + name + "!", name ))) 1416 if(( name = name.replace(/^\s+|\s+$|^\n|\n$/g,"")) == "" ) 1417 name = ""; 1418 1419 if( name == null || name == "") 1420 name = ""; 1421 1422 var jidTo = jid 1423 var name = ( name ) ? name : TrophyIM.rosterObj.roster[jid].contact.name; 1424 var group = TrophyIM.rosterObj.roster[jid].contact.groups[0]; 1321 1425 1322 1426 TrophyIM.addContact( jidTo, name, group ); 1323 1427 1324 1428 document.getElementById('itenContact_' + jid ).innerHTML = name; 1325 1429 }, 1326 1430 … … 1332 1436 renameGroup : function( jid ) 1333 1437 { 1334 1335 1438 var group = TrophyIM.rosterObj.roster[jid].contact.groups[0]; 1439 var presence = TrophyIM.rosterObj.roster[jid].presence; 1336 1440 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1441 // Group 1442 if(( group = prompt( i18n.ASK_NEW_GROUP_QUESTION, group ))) 1443 if(( group = group.replace(/^\s+|\s+$|^\n|\n$/g,"")) == "" ) 1444 group = ""; 1445 1446 if( group == null || group == "") 1447 group = ""; 1448 1449 var jidTo = TrophyIM.rosterObj.roster[jid].contact.jid; 1450 var name = TrophyIM.rosterObj.roster[jid].contact.name; 1451 var group = ( group ) ? group : TrophyIM.rosterObj.roster[jid].contact.groups[0]; 1452 1453 TrophyIM.rosterObj.removeContact( jid ); 1454 1455 TrophyIM.addContact( jidTo, name, group ); 1352 1456 1353 1354 1355 1457 document.getElementById("JabberIMRoster").innerHTML = ""; 1458 1459 TrophyIM.renderRoster(); 1356 1460 1357 1358 1359 1360 1361 1362 1461 setTimeout(function() 1462 { 1463 for( var i in presence ) 1464 { 1465 if ( presence[ i ].constructor == Function ) 1466 continue; 1363 1467 1364 1365 1366 1468 TrophyIM.rosterObj.setPresence( jid, presence[i].priority, presence[i].show, presence[i].status); 1469 } 1470 },500); 1367 1471 }, 1368 1472 … … 1374 1478 createChatRooms : function() 1375 1479 { 1376 1377 1480 var nickName = document.getElementById('nickName_chatRoom_jabberit').value; 1481 var nameChatRoom = document.getElementById('name_ChatRoom_jabberit').value; 1378 1482 1379 var _from = Base64.decode( loadscript.getUserCurrent().jid ) + TROPHYIM_RESOURCE; 1380 var _to = escape( nameChatRoom ) + "@" + TROPHYIM_CHATROOM + "/" + nickName ; 1381 var new_room = $pres( {from: _from, to: _to } ).c( "x", { xmlns: Strophe.NS.MUC } ); 1382 1383 TrophyIM.activeChatRoom.name[ TrophyIM.activeChatRoom.name.length ] = _to; 1384 1385 TrophyIM.connection.send( new_room.tree() ); 1483 var _from = Base64.decode( loadscript.getUserCurrent().jid ) + TROPHYIM_RESOURCE; 1484 var _to = escape( nameChatRoom ) + "@" + TROPHYIM_CHATROOM + "/" + nickName ; 1485 var new_room = $pres( { 1486 from: _from, 1487 to: _to 1488 } ).c( "x", { 1489 xmlns: Strophe.NS.MUC 1490 } ); 1491 1492 TrophyIM.activeChatRoom.name[ TrophyIM.activeChatRoom.name.length ] = _to; 1493 1494 TrophyIM.connection.send( new_room.tree() ); 1386 1495 }, 1387 1496 … … 1393 1502 joinChatRoom : function( roomName ) 1394 1503 { 1395 var presence = $pres( {from: TrophyIM.connection.jid, to: roomName} ).c("x",{xmlns: Strophe.NS.MUC}); 1504 var presence = $pres( { 1505 from: TrophyIM.connection.jid, 1506 to: roomName 1507 } ).c("x",{ 1508 xmlns: Strophe.NS.MUC 1509 }); 1396 1510 1397 1511 TrophyIM.connection.send( presence ); 1398 1512 }, 1399 1513 … … 1405 1519 leaveChatRoom : function( roomName ) 1406 1520 { 1407 1521 var room_nick = roomName; 1408 1522 1409 1523 var presenceid = TrophyIM.connection.getUniqueId(); 1410 1524 1411 var presence = $pres( {type: "unavailable", id: presenceid, from: TrophyIM.connection.jid, to: room_nick} ).c("x",{xmlns: Strophe.NS.MUC}); 1525 var presence = $pres( { 1526 type: "unavailable", 1527 id: presenceid, 1528 from: TrophyIM.connection.jid, 1529 to: room_nick 1530 } ).c("x",{ 1531 xmlns: Strophe.NS.MUC 1532 }); 1412 1533 1413 1534 TrophyIM.connection.send( presence ); … … 1421 1542 getListRooms : function() 1422 1543 { 1423 1424 1425 1426 1427 1428 1544 if( TrophyIM.statusConn.connected ) 1545 { 1546 var _error_return = function(element) 1547 { 1548 alert("ERRO : Tente novamente !"); 1549 }; 1429 1550 1430 var iq = $iq({ to: TROPHYIM_CHATROOM, type: "get" }).c("query",{xmlns: Strophe.NS.DISCO_ITEMS }); 1551 var iq = $iq({ 1552 to: TROPHYIM_CHATROOM, 1553 type: "get" 1554 }).c("query",{ 1555 xmlns: Strophe.NS.DISCO_ITEMS 1556 }); 1431 1557 1432 1433 1434 1435 1436 1437 1558 TrophyIM.connection.sendIQ( iq, loadscript.listRooms, _error_return, 500 ); 1559 } 1560 else 1561 { 1562 alert( "ERRO : Sem conexão com o servidor " + TROPHYIM_CHATROOM ); 1563 } 1438 1564 }, 1439 1565 … … 1446 1572 removeContact : function( jidTo ) 1447 1573 { 1448 1449 1450 1451 1452 1453 1574 var divItenContact = null; 1575 1576 if( ( divItenContact = document.getElementById('itenContact_' + jidTo ))) 1577 { 1578 // Remove Contact 1579 var _id = TrophyIM.connection.getUniqueId(); 1454 1580 1455 // Controller Result 1456 TrophyIM.removeResult.idResult[ TrophyIM.removeResult.idResult.length ] = jidTo; 1457 1458 var delContact = $iq({type: 'set', id: _id}) 1459 delContact = delContact.c('query').attrs({xmlns : 'jabber:iq:roster'}); 1460 delContact = delContact.c('item').attrs({jid: jidTo, subscription:'remove'}).tree(); 1461 1462 TrophyIM.connection.send( delContact ); 1581 // Controller Result 1582 TrophyIM.removeResult.idResult[ TrophyIM.removeResult.idResult.length ] = jidTo; 1583 1584 var delContact = $iq({ 1585 type: 'set', 1586 id: _id 1587 }) 1588 delContact = delContact.c('query').attrs({ 1589 xmlns : 'jabber:iq:roster' 1590 }); 1591 delContact = delContact.c('item').attrs({ 1592 jid: jidTo, 1593 subscription:'remove' 1594 }).tree(); 1595 1596 TrophyIM.connection.send( delContact ); 1463 1597 1464 1598 loadscript.removeElement( document.getElementById('itenContactNotification_' + jidTo ) ); 1465 1599 1466 1467 1600 var spanShow = document.getElementById('span_show_itenContact_' + jidTo ) 1601 spanShow.parentNode.removeChild(spanShow); 1468 1602 1469 1603 loadscript.removeGroup( divItenContact.parentNode ); 1470 1604 1471 1472 1605 divItenContact.parentNode.removeChild(divItenContact); 1606 } 1473 1607 }, 1474 1608 … … 1479 1613 */ 1480 1614 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1615 renderRoster : function() 1616 { 1617 var roster_div = document.getElementById('JabberIMRoster'); 1618 1619 if( roster_div ) 1620 { 1621 var users = new Array(); 1622 1623 var loading_gif = document.getElementById("JabberIMRosterLoadingGif"); 1624 1625 if( loading_gif.style.display == "block" ) 1626 loading_gif.style.display = "none"; 1493 1627 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1628 for( var user in TrophyIM.rosterObj.roster ) 1629 { 1630 if ( TrophyIM.rosterObj.roster[ user ].constructor == Function ) 1631 continue; 1632 1633 users[users.length] = TrophyIM.rosterObj.roster[user].contact.jid; 1634 } 1635 1636 users.sort(); 1637 1638 var groups = new Array(); 1639 var flagGeral = false; 1640 1641 for (var group in TrophyIM.rosterObj.groups) 1642 { 1643 if ( TrophyIM.rosterObj.groups[ group ].constructor == Function ) 1644 continue; 1511 1645 1512 1513 1646 if( group ) 1647 groups[groups.length] = group; 1514 1648 1515 1516 1649 if( group == "Geral" ) 1650 flagGeral = true; 1517 1651 } 1518 1652 1519 1520 1653 if( !flagGeral && users.length > 0 ) 1654 groups[groups.length] = "Geral"; 1521 1655 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1656 groups.sort(); 1657 1658 for ( var i = 0; i < groups.length; i++ ) 1659 { 1660 TrophyIM.renderGroups( groups[i] , roster_div ); 1661 } 1662 1663 TrophyIM.renderItensGroup( users, roster_div ); 1664 } 1665 1666 TrophyIM._timeOut.renderRoster = setTimeout("TrophyIM.renderRoster()", 1000 ); 1667 }, 1534 1668 1535 1669 /** Function: renderGroups … … 1538 1672 */ 1539 1673 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1674 renderGroups: function( nameGroup, element ) 1675 { 1676 var _addGroup = function() 1677 { 1678 var _nameGroup = nameGroup; 1679 var _element = element; 1680 1681 var paramsGroup = 1682 { 1683 'nameGroup' : _nameGroup, 1684 'path_jabberit' : path_jabberit 1685 } 1686 1687 _element.innerHTML += loadscript.parse("group","groups.xsl", paramsGroup); 1688 } 1689 1690 if( !element.hasChildNodes() ) 1691 { 1692 _addGroup(); 1693 } 1694 else 1695 { 1696 var _NodeChild = element.firstChild; 1697 var flagAdd = false; 1698 1699 while( _NodeChild ) 1700 { 1701 if( _NodeChild.childNodes[0].nodeName.toLowerCase() === "span" ) 1702 { 1703 if( _NodeChild.childNodes[0].childNodes[0].nodeValue === nameGroup ) 1704 { 1705 flagAdd = true; 1706 } 1707 } 1574 1708 1575 1576 1577 1578 1579 1580 1581 1582 1583 1709 _NodeChild = _NodeChild.nextSibling; 1710 } 1711 1712 if( !flagAdd ) 1713 { 1714 _addGroup(); 1715 } 1716 } 1717 }, 1584 1718 1585 1719 /** Function: renderItensGroup … … 1588 1722 */ 1589 1723 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1724 renderItensGroup : function( users, element ) 1725 { 1726 var addItem = function() 1727 { 1728 if( arguments.length > 0 ) 1729 { 1730 // Get Arguments 1731 var objContact = arguments[0]; 1732 var group = arguments[1]; 1733 var element = arguments[2]; 1734 var showOffline = loadscript.getShowContactsOffline(); 1601 1735 1602 1603 1604 1605 1606 1736 // Presence e Status 1737 var presence = "unavailable"; 1738 var status = ""; 1739 var statusColor = "black"; 1740 var statusDisplay = "none"; 1607 1741 1608 1742 var _resource = ""; 1609 1743 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1744 // Set Presence 1745 var _presence = function(objContact) 1746 { 1747 if (objContact.presence) 1748 { 1749 for (var resource in objContact.presence) 1750 { 1751 if ( objContact.presence[resource].constructor == Function ) 1752 continue; 1753 1754 if( objContact.presence[resource].show != 'invisible' ) 1755 presence = objContact.presence[resource].show; 1756 1757 if( objContact.contact.subscription != "both") 1758 presence = 'subscription'; 1625 1759 1626 1627 1628 1629 1630 1631 1632 1633 1760 if( objContact.presence[resource].status ) 1761 { 1762 status = " ( " + objContact.presence[resource].status + " ) "; 1763 statusDisplay = "block"; 1764 } 1765 } 1766 } 1767 }; 1634 1768 1635 1636 1637 1638 1639 1640 1641 1642 1769 // Set Subscription 1770 var _subscription = function( objContact ) 1771 { 1772 if( objContact.contact.subscription != "both" ) 1773 { 1774 switch( objContact.contact.subscription ) 1775 { 1776 case "none" : 1643 1777 1644 1645 1646 1647 1648 1778 status = " (( " + i18n.ASK_FOR_AUTH + " )) "; 1779 statusColor = "red"; 1780 break; 1781 1782 case "to" : 1649 1783 1650 1651 1652 1653 1654 1784 status = " (( " + i18n.CONTACT_ASK_FOR_AUTH + " )) "; 1785 statusColor = "orange"; 1786 break; 1787 1788 case "from" : 1655 1789 1656 1657 1658 1790 status = " (( " + i18n.AUTHORIZED + " )) "; 1791 statusColor = "green"; 1792 break; 1659 1793 1660 case "subscribe" : 1794 case "subscribe" : 1661 1795 1662 1663 1664 1665 1666 1796 status = " (( " + i18n.AUTH_SENT + " )) "; 1797 statusColor = "red"; 1798 break; 1799 1800 case "not-in-roster" : 1667 1801 1668 1669 1670 1802 status = " (( " + i18n.ASK_FOR_AUTH_QUESTION + " )) "; 1803 statusColor = "orange"; 1804 break; 1671 1805 1672 1806 default : 1673 1807 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1808 break; 1809 } 1810 1811 statusDisplay = "block"; 1812 } 1813 }; 1814 1815 if( objContact.contact.subscription != "remove") 1816 { 1817 var itensJid = document.getElementById( "itenContact_" + objContact.contact.jid ); 1684 1818 1685 1686 1687 1688 1819 if( itensJid == null ) 1820 { 1821 // Name 1822 var nameContact = ""; 1689 1823 1690 1691 1692 1693 1694 1695 1696 1824 if ( objContact.contact.name ) 1825 nameContact = objContact.contact.name; 1826 else 1827 { 1828 nameContact = objContact.contact.jid; 1829 nameContact = nameContact.substring(0, nameContact.indexOf('@')); 1830 } 1697 1831 1698 1699 1832 // Get Presence 1833 _presence(objContact); 1700 1834 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1835 var paramsContact = 1836 { 1837 divDisplay : "block", 1838 id : 'itenContact_' + objContact.contact.jid , 1839 jid : objContact.contact.jid, 1840 nameContact : nameContact, 1841 path_jabberit : path_jabberit, 1842 presence : presence, 1843 spanDisplay : statusDisplay, 1844 status : status, 1845 statusColor : "black", 1846 subscription : objContact.contact.subscription, 1847 resource : _resource 1848 } 1715 1849 1716 1717 1850 // Get Authorization 1851 _subscription( objContact ); 1718 1852 1719 1720 1721 1853 if( group != "") 1854 { 1855 var _NodeChild = element.firstChild; 1722 1856 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1857 while( _NodeChild ) 1858 { 1859 if( _NodeChild.childNodes[0].nodeName.toLowerCase() === "span" ) 1860 { 1861 if( _NodeChild.childNodes[0].childNodes[0].nodeValue === group ) 1862 { 1863 _NodeChild.innerHTML += loadscript.parse("itens_group", "itensGroup.xsl", paramsContact); 1864 } 1865 } 1866 1867 _NodeChild = _NodeChild.nextSibling; 1868 } 1869 } 1870 } 1871 else 1872 { 1873 // Get Presence 1874 _presence(objContact); 1875 1876 var is_open = itensJid.parentNode.childNodes[0].style.backgroundImage; 1877 is_open = is_open.indexOf("arrow_down.gif"); 1878 1879 // Get Authorization 1880 _subscription( objContact ); 1747 1881 1748 1749 1882 // Set subscription 1883 itensJid.setAttribute('subscription', objContact.contact.subscription ); 1750 1884 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1885 with ( document.getElementById('span_show_' + 'itenContact_' + objContact.contact.jid ) ) 1886 { 1887 if( presence == "unavailable" && !showOffline ) 1888 { 1889 style.display = "none"; 1890 } 1891 else 1892 { 1893 if( is_open > 0 ) 1894 { 1895 style.display = statusDisplay; 1896 style.color = statusColor; 1897 innerHTML = status; 1898 } 1899 } 1900 } 1767 1901 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1902 if( presence == "unavailable" && !showOffline ) 1903 { 1904 itensJid.style.display = "none"; 1905 } 1906 else 1907 { 1908 if( is_open > 0 ) 1909 { 1910 itensJid.style.display = "block"; 1911 } 1912 } 1779 1913 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1914 itensJid.style.background = "url('"+path_jabberit+"templates/default/images/" + presence + ".gif') no-repeat center left"; 1915 } 1916 1917 // Contact OffLine 1918 if( !objContact.presence && !showOffline ) 1919 { 1920 if( objContact.contact.subscription != "remove" ) 1921 { 1922 with ( document.getElementById('span_show_' + 'itenContact_' + objContact.contact.jid )) 1923 { 1924 style.display = "none"; 1925 } 1926 1927 with ( document.getElementById('itenContact_' + objContact.contact.jid ) ) 1928 { 1929 style.display = "none"; 1930 } 1931 } 1932 } 1933 } 1934 } 1935 }; 1936 1937 var flag = false; 1938 1939 for( var i = 0 ; i < users.length; i++ ) 1940 { 1941 if( TrophyIM.rosterObj.roster[users[i]].contact.jid != Base64.decode( loadscript.getUserCurrent().jid) ) 1942 { 1943 var _subscription = TrophyIM.rosterObj.roster[users[i]].contact.subscription; 1810 1944 1811 1812 1813 1814 1945 if( _subscription === "to" ) 1946 { 1947 flag = true; 1948 } 1815 1949 1816 1817 1818 1819 1950 if( _subscription === "not-in-roster") 1951 { 1952 flag = true; 1953 } 1820 1954 1821 1822 1823 1955 if( TrophyIM.rosterObj.roster[users[i]].contact.groups ) 1956 { 1957 var groups = TrophyIM.rosterObj.roster[users[i]].contact.groups; 1824 1958 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1959 if( groups.length > 0 ) 1960 { 1961 for( var j = 0; j < groups.length; j++ ) 1962 { 1963 addItem( TrophyIM.rosterObj.roster[users[i]], groups[j], element ); 1964 } 1965 } 1966 else 1967 { 1968 addItem( TrophyIM.rosterObj.roster[users[i]], "Geral", element ); 1969 } 1970 } 1971 else 1972 { 1973 addItem( TrophyIM.rosterObj.roster[users[i]], "Geral", element ); 1974 } 1975 } 1976 } 1977 1978 if( flag ) 1979 { 1980 if ( TrophyIM.controll.notificationNewUsers == 0 ) 1981 { 1982 loadscript.enabledNotificationNewUsers(); 1983 TrophyIM.controll.notificationNewUsers++; 1984 } 1985 } 1986 else 1987 { 1988 loadscript.disabledNotificationNewUsers(); 1989 TrophyIM.controll.notificationNewUsers = 0; 1990 } 1991 }, 1858 1992 1859 1993 /** Function: rosterClick … … 1862 1996 */ 1863 1997 1864 1865 1998 rosterClick : function(fulljid) 1999 { 1866 2000 TrophyIM.makeChat(fulljid); 1867 2001 }, 1868 2002 1869 2003 /** Function SetAutorization 1870 2004 * 1871 2005 */ 1872 2006 1873 1874 1875 2007 setAutorization : function( jidTo, jidFrom, _typeSubscription ) 2008 { 2009 var _id = TrophyIM.connection.getUniqueId(); 1876 2010 1877 TrophyIM.connection.send($pres( ).attrs({ from: jidFrom, to: jidTo, type: _typeSubscription, id: _id }).tree()); 1878 }, 1879 1880 /** Function: setPresence 1881 * 1882 */ 1883 1884 setPresence : function( _type ) 1885 { 1886 var presence_chatRoom = ""; 1887 1888 if( _type != 'status') 1889 { 1890 if( _type == "unavailable" && TrophyIM.statusConn.connected ) 1891 { 1892 var loading_gif = document.getElementById("JabberIMRosterLoadingGif"); 2011 TrophyIM.connection.send($pres( ).attrs({ 2012 from: jidFrom, 2013 to: jidTo, 2014 type: _typeSubscription, 2015 id: _id 2016 }).tree()); 2017 }, 2018 2019 /** Function: setPresence 2020 * 2021 */ 2022 2023 setPresence : function( _type ) 2024 { 2025 var presence_chatRoom = ""; 2026 2027 if( _type != 'status') 2028 { 2029 if( _type == "unavailable" && TrophyIM.statusConn.connected ) 2030 { 2031 var loading_gif = document.getElementById("JabberIMRosterLoadingGif"); 1893 2032 1894 1895 2033 if( TrophyIM._timeOut.renderRoster != null ) 2034 clearTimeout(TrophyIM._timeOut.renderRoster); 1896 2035 1897 if( TrophyIM.statusConn.connected ) 1898 TrophyIM.connection.send($pres({type : _type}).tree()); 2036 if( TrophyIM.statusConn.connected ) 2037 TrophyIM.connection.send($pres({ 2038 type : _type 2039 }).tree()); 1899 2040 1900 1901 1902 1903 1904 2041 for( var i = 0; i < TrophyIM.connection._requests.length; i++ ) 2042 { 2043 if( TrophyIM.connection._requests[i] ) 2044 TrophyIM.connection._removeRequest(TrophyIM.connection._requests[i]); 2045 } 1905 2046 1906 2047 TrophyIM.logout(); 1907 2048 1908 2049 loadscript.clrAllContacts(); 1909 2050 1910 1911 2051 delete TrophyIM.rosterObj.roster; 2052 delete TrophyIM.rosterObj.groups; 1912 2053 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 2054 setTimeout(function() 2055 { 2056 if( loading_gif.style.display == "block" ) 2057 loading_gif.style.display = "none"; 2058 }, 1000); 2059 } 2060 else 2061 { 2062 if( !TrophyIM.autoConnection.connect ) 2063 { 2064 TrophyIM.autoConnection.connect = true; 2065 TrophyIM.load(); 2066 } 2067 else 2068 { 2069 if( TrophyIM.statusConn.connected ) 2070 { 2071 if( loadscript.getStatusMessage() != "" ) 2072 { 2073 var _presence = $pres( ); 2074 _presence.node.appendChild( Strophe.xmlElement( 'show' ) ).appendChild( Strophe.xmlTextNode( _type ) ); 2075 _presence.node.appendChild( Strophe.xmlElement( 'status' ) ).appendChild( Strophe.xmlTextNode( loadscript.getStatusMessage() )); 1935 2076 1936 2077 TrophyIM.connection.send( _presence.tree() ); 1937 2078 1938 1939 1940 1941 1942 2079 presence_chatRoom = _type; 2080 } 2081 else 2082 { 2083 TrophyIM.connection.send($pres( ).c('show').t(_type).tree()); 1943 2084 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 2085 presence_chatRoom = _type; 2086 } 2087 } 2088 } 2089 } 2090 } 2091 else 2092 { 2093 var _show = "available"; 2094 var _status = ""; 2095 2096 if( arguments.length < 2 ) 2097 { 2098 if( loadscript.getStatusMessage() != "" ) 2099 _status = prompt(i18n.TYPE_YOUR_MSG, loadscript.getStatusMessage()); 2100 else 2101 _status = prompt(i18n.TYPE_YOUR_MSG); 1961 2102 1962 2103 var _divStatus = document.getElementById("JabberIMStatusMessage"); 1963 2104 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 2105 if( ( _status = _status.replace(/^\s+|\s+$|^\n|\n$/g,"") ) != "") 2106 _divStatus.firstChild.innerHTML = "( " + _status + " )"; 2107 } 2108 else 2109 { 2110 _status = arguments[1]; 2111 } 2112 2113 for( var resource in TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence ) 2114 { 2115 if ( TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence[ resource ].constructor == Function ) 2116 continue; 1976 2117 1977 1978 1979 1980 1981 1982 1983 1984 1985 2118 if ( TROPHYIM_RESOURCE === ("/" + resource) ) 2119 _show = TrophyIM.rosterObj.roster[Base64.decode(loadscript.getUserCurrent().jid)].presence[resource].show; 2120 } 2121 2122 if ( TrophyIM.statusConn.connected ) 2123 { 2124 var _presence = $pres( ); 2125 _presence.node.appendChild( Strophe.xmlElement( 'show' ) ).appendChild( Strophe.xmlTextNode( _show ) ); 2126 _presence.node.appendChild( Strophe.xmlElement( 'status' ) ).appendChild( Strophe.xmlTextNode( _status ) ); 1986 2127 1987 2128 TrophyIM.connection.send( _presence.tree() ); 1988 2129 1989 presence_chatRoom = _show; 1990 } 1991 } 1992 1993 // Send Presence Chat Room 1994 if( TrophyIM.activeChatRoom.name.length > 0 ) 1995 { 1996 for( i = 0; i < TrophyIM.activeChatRoom.name.length; i++ ) 1997 { 1998 if( TrophyIM.activeChatRoom.name[i] != "" ) 1999 TrophyIM.connection.send($pres( { to : TrophyIM.activeChatRoom.name[i] } ).c('show').t( presence_chatRoom ) ); 2000 } 2001 } 2002 2003 }, 2004 2005 /** Function: sendMessage 2130 presence_chatRoom = _show; 2131 } 2132 } 2133 2134 // Send Presence Chat Room 2135 if( TrophyIM.activeChatRoom.name.length > 0 ) 2136 { 2137 for( i = 0; i < TrophyIM.activeChatRoom.name.length; i++ ) 2138 { 2139 if( TrophyIM.activeChatRoom.name[i] != "" ) 2140 TrophyIM.connection.send($pres( { 2141 to : TrophyIM.activeChatRoom.name[i] 2142 } ).c('show').t( presence_chatRoom ) ); 2143 } 2144 } 2145 2146 }, 2147 2148 /** Function: sendMessage 2006 2149 * 2007 2150 * Send message from chat input to user … … 2010 2153 sendMessage : function() 2011 2154 { 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2155 if (arguments.length > 0) 2156 { 2157 var jidTo = arguments[0]; 2158 var message_input = arguments[1]; 2159 2160 2161 message_input = message_input.replace(/^\s+|\s+$|^\n|\n$/g, ""); 2162 2163 if (message_input != "") { 2164 2165 // Send Message 2166 var newMessage = $msg({ 2167 to: jidTo, 2168 from: TrophyIM.connection.jid, 2169 type: 'chat' 2170 }); 2171 newMessage = newMessage.c('body').t(message_input); 2172 newMessage.up(); 2173 newMessage = newMessage.c('active').attrs({ 2174 xmlns: 'http://jabber.org/protocol/chatstates' 2175 }); 2176 // Send Message 2177 TrophyIM.connection.send(newMessage.tree()); 2035 2178 2036 2037 2038 2039 2040 2041 }, 2042 2043 2179 return true; 2180 } 2181 } 2182 2183 return false; 2184 }, 2185 2186 /** Function: sendMessage 2044 2187 * 2045 2188 * Send message to ChatRoom … … 2048 2191 sendMessageChatRoom : function( ) 2049 2192 { 2050 if( arguments.length > 0 ) 2051 { 2052 var room_nick = arguments[0]; 2053 var message = arguments[1]; 2054 var msgid = TrophyIM.connection.getUniqueId(); 2055 var msg = $msg({to: room_nick, type: "groupchat", id: msgid}).c("body",{xmlns: Strophe.NS.CLIENT}).t(message); 2193 if( arguments.length > 0 ) 2194 { 2195 var room_nick = arguments[0]; 2196 var message = arguments[1]; 2197 var msgid = TrophyIM.connection.getUniqueId(); 2198 var msg = $msg({ 2199 to: room_nick, 2200 type: "groupchat", 2201 id: msgid 2202 }).c("body",{ 2203 xmlns: Strophe.NS.CLIENT 2204 }).t(message); 2056 2205 2057 2206 msg.up();//.c("x", {xmlns: "jabber:x:event"}).c("composing"); 2058 2207 2059 2208 TrophyIM.connection.send(msg); 2060 2209 2061 2062 2063 }, 2064 2065 2210 return true; 2211 } 2212 }, 2213 2214 /** Function: sendContentMessage 2066 2215 * 2067 2216 * Send a content message from chat input to user 2068 2217 */ 2069 sendContentMessage : function() 2070 { 2071 if( arguments.length > 0 ) 2072 { 2073 var jidTo = arguments[0]; 2074 var state = arguments[1]; 2075 2076 var newMessage = $msg({to: jidTo, from: TrophyIM.connection.jid, type: 'chat'}); 2077 newMessage = newMessage.c(state).attrs({xmlns : 'http://jabber.org/protocol/chatstates'}); 2078 // Send content message 2079 TrophyIM.connection.send(newMessage.tree()); 2080 } 2218 sendContentMessage : function() 2219 { 2220 if( arguments.length > 0 ) 2221 { 2222 var jidTo = arguments[0]; 2223 var state = arguments[1]; 2224 2225 var newMessage = $msg({ 2226 to: jidTo, 2227 from: TrophyIM.connection.jid, 2228 type: 'chat' 2229 }); 2230 newMessage = newMessage.c(state).attrs({ 2231 xmlns : 'http://jabber.org/protocol/chatstates' 2232 }); 2233 // Send content message 2234 TrophyIM.connection.send(newMessage.tree()); 2235 } 2081 2236 } 2082 2237 }; … … 2098 2253 */ 2099 2254 if (TrophyIM.JSONStore.store_working) 2100 2255 { 2101 2256 var data = TrophyIM.JSONStore.getData(['roster', 'groups']); 2102 2257 this.roster = (data['roster'] != null) ? data['roster'] : {}; 2103 2258 this.groups = (data['groups'] != null) ? data['groups'] : {}; 2104 2259 } 2105 2106 2260 else 2261 { 2107 2262 this.roster = {}; 2108 2263 this.groups = {}; … … 2110 2265 this.changes = new Array(); 2111 2266 2112 2113 2267 if (TrophyIM.constants.stale_roster) 2268 { 2114 2269 for (var jid in this.roster) 2115 2116 2270 { 2271 this.changes[this.changes.length] = jid; 2117 2272 } 2118 2273 } 2119 2274 2120 2275 /** Function: addChange 2121 2276 * 2122 2277 * Adds given jid to this.changes, keeping this.changes sorted and … … 2127 2282 */ 2128 2283 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2284 this.addChange = function(jid) 2285 { 2286 for (var c = 0; c < this.changes.length; c++) 2287 { 2288 if (this.changes[c] == jid) 2289 { 2290 return; 2291 } 2292 } 2293 2294 this.changes[this.changes.length] = jid; 2295 2296 this.changes.sort(); 2297 } 2143 2298 2144 2299 /** Function: addContact … … 2153 2308 */ 2154 2309 2155 this.addContact = function(jid, subscription, name, groups ) 2156 { 2157 if( subscription === "remove" ) 2158 { 2159 this.removeContact(jid); 2160 } 2161 else 2162 { 2163 var contact = { jid:jid, subscription:subscription, name:name, groups:groups } 2164 var jid_lower = jid.toLowerCase(); 2165 2166 if ( this.roster[jid_lower] ) 2167 { 2168 this.roster[jid_lower]['contact'] = contact; 2169 } 2170 else 2171 { 2172 this.roster[jid_lower] = {contact:contact}; 2173 } 2174 2175 groups = groups ? groups : ['']; 2310 this.addContact = function(jid, subscription, name, groups ) 2311 { 2312 if( subscription === "remove" ) 2313 { 2314 this.removeContact(jid); 2315 } 2316 else 2317 { 2318 var contact = { 2319 jid:jid, 2320 subscription:subscription, 2321 name:name, 2322 groups:groups 2323 } 2324 var jid_lower = jid.toLowerCase(); 2325 2326 if ( this.roster[jid_lower] ) 2327 { 2328 this.roster[jid_lower]['contact'] = contact; 2329 } 2330 else 2331 { 2332 this.roster[jid_lower] = { 2333 contact:contact 2334 }; 2335 } 2336 2337 groups = groups ? groups : ['']; 2176 2338 2177 2178 2179 2180 2181 2182 2339 for ( var g = 0; g < groups.length; g++ ) 2340 { 2341 if ( !this.groups[groups[g]] ) 2342 { 2343 this.groups[groups[g]] = {}; 2344 } 2183 2345 2184 2185 2186 2346 this.groups[groups[g]][jid_lower] = jid_lower; 2347 } 2348 } 2187 2349 } 2188 2350 … … 2195 2357 2196 2358 this.getContact = function(jid) 2197 2359 { 2198 2360 if (this.roster[jid.toLowerCase()]) 2199 2361 { 2200 2362 return this.roster[jid.toLowerCase()]['contact']; 2201 2363 } 2202 2364 } 2203 2365 2204 /** Function: getPresence2366 /** Function: getPresence 2205 2367 * 2206 2368 * Returns best presence for given jid as Array(resource, priority, show, … … 2210 2372 */ 2211 2373 2212 2213 2214 2215 2374 this.getPresence = function(fulljid) 2375 { 2376 var jid = Strophe.getBareJidFromJid(fulljid); 2377 var current = null; 2216 2378 2217 2218 2219 2220 2221 2222 2379 if (this.roster[jid.toLowerCase()] && this.roster[jid.toLowerCase()]['presence']) 2380 { 2381 for (var resource in this.roster[jid.toLowerCase()]['presence']) 2382 { 2383 if ( this.roster[jid.toLowerCase()]['presence'][ resource ].constructor == Function ) 2384 continue; 2223 2385 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2386 var presence = this.roster[jid.toLowerCase()]['presence'][resource]; 2387 if (current == null) 2388 { 2389 current = presence 2390 } 2391 else 2392 { 2393 if(presence['priority'] > current['priority'] && ((presence['show'] == "chat" 2394 || presence['show'] == "available") || (current['show'] != "chat" || 2395 current['show'] != "available"))) 2396 { 2397 current = presence 2398 } 2399 } 2400 } 2401 } 2402 return current; 2403 } 2404 2405 /** Function: groupHasChanges 2244 2406 * 2245 2407 * Returns true if current group has members in this.changes … … 2249 2411 */ 2250 2412 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2413 this.groupHasChanges = function(group) 2414 { 2415 for (var c = 0; c < this.changes.length; c++) 2416 { 2417 if (this.groups[group][this.changes[c]]) 2418 { 2419 return true; 2420 } 2421 } 2422 return false; 2423 } 2424 2425 /** Function removeContact 2264 2426 * 2265 2427 * Parameters … … 2267 2429 */ 2268 2430 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2431 this.removeContact = function(jid) 2432 { 2433 if( this.roster[ jid ] ) 2434 { 2435 var groups = this.roster[ jid ].contact.groups; 2436 2437 if( groups ) 2438 { 2439 for ( var i = 0; i < groups.length; i++ ) 2440 { 2441 delete this.groups[ groups[ i ] ][ jid ]; 2442 } 2443 2444 for ( var i = 0; i < groups.length; i++ ) 2445 { 2446 var contacts = 0; 2447 for ( var contact in this.groups[ groups[ i ] ] ) 2448 { 2449 if ( this.groups[ groups[ i ] ][ contact ].constructor == Function ) 2450 continue; 2289 2451 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2452 contacts++; 2453 } 2454 2455 if ( ! contacts ) 2456 delete this.groups[ groups[ i ] ]; 2457 } 2458 } 2459 2460 // Delete Object roster 2461 if( this.roster[jid] ) 2462 delete this.roster[jid]; 2463 } 2464 } 2303 2465 2304 2466 /** Function: setPresence … … 2313 2475 */ 2314 2476 2315 2316 2317 2477 this.setPresence = function(fulljid, priority, show, status) 2478 { 2479 var barejid = Strophe.getBareJidFromJid(fulljid); 2318 2480 var resource = Strophe.getResourceFromJid(fulljid); 2319 2481 var jid_lower = barejid.toLowerCase(); 2320 2482 2321 2483 if( show !== 'unavailable' || show !== 'error' ) 2322 2323 2324 2484 { 2485 if (!this.roster[jid_lower]) 2486 { 2325 2487 this.addContact( barejid, 'not-in-roster' ); 2326 2488 } 2327 2489 2328 2490 var presence = 2329 2491 { 2330 2492 resource : resource, 2331 2493 priority : priority, … … 2334 2496 } 2335 2497 2336 2337 2498 if (!this.roster[jid_lower]['presence']) 2499 { 2338 2500 this.roster[jid_lower]['presence'] = {}; 2339 2501 } 2340 2502 2341 2503 this.roster[jid_lower]['presence'][resource] = presence; 2342 2504 } 2343 2505 } 2344 2506 2345 2507 /** Fuction: save 2346 2508 * 2347 2509 * Saves roster data to JSON store 2348 2510 */ 2349 2511 2350 this.save = function() 2351 { 2352 if (TrophyIM.JSONStore.store_working) 2353 { 2354 TrophyIM.JSONStore.setData({roster:this.roster, 2355 groups:this.groups, active_chat:TrophyIM.activeChats['current'], 2356 chat_history:TrophyIM.chatHistory}); 2357 } 2358 } 2512 this.save = function() 2513 { 2514 if (TrophyIM.JSONStore.store_working) 2515 { 2516 TrophyIM.JSONStore.setData({ 2517 roster:this.roster, 2518 groups:this.groups, 2519 active_chat:TrophyIM.activeChats['current'], 2520 chat_history:TrophyIM.chatHistory 2521 }); 2522 } 2523 } 2359 2524 2360 2525 } … … 2375 2540 * (function) handler = what to set onreadystatechange to 2376 2541 */ 2377 2542 this._newXHR = function (handler) { 2378 2543 var xhr = null; 2379 2544 if (window.XMLHttpRequest) { 2380 2545 xhr = new XMLHttpRequest(); 2381 2546 if (xhr.overrideMimeType) { 2382 xhr.overrideMimeType("text/xml");2547 xhr.overrideMimeType("text/xml"); 2383 2548 } 2384 2549 } else if (window.ActiveXObject) { … … 2408 2573 } 2409 2574 xhr.setRequestHeader('Content-type', 2410 'application/x-www-form-urlencoded');2575 'application/x-www-form-urlencoded'); 2411 2576 xhr.setRequestHeader('Content-length', getdata.length); 2412 2577 xhr.send(getdata); … … 2417 2582 } catch(e) { 2418 2583 Strophe.error("Could not parse JSONStore response" + 2419 xhr.responseText);2584 xhr.responseText); 2420 2585 return false; 2421 2586 } … … 2434 2599 if (typeof(obj) == "object") { 2435 2600 for (var i in obj) { 2436 2437 2601 if ( obj[i].constructor == Function ) 2602 continue; 2438 2603 2439 2604 if (i == '_empty_') { … … 2468 2633 } 2469 2634 xhr.setRequestHeader('Content-type', 2470 'application/x-www-form-urlencoded');2635 'application/x-www-form-urlencoded'); 2471 2636 xhr.setRequestHeader('Content-length', deldata.length); 2472 2637 xhr.send(deldata); … … 2497 2662 this.setData = function(vars) 2498 2663 { 2499 2664 if ( typeof(TROPHYIM_JSON_STORE) != undefined ) 2500 2665 { 2501 2666 var senddata = "set=" + JSON.stringify(vars); … … 2511 2676 } 2512 2677 xhr.setRequestHeader('Content-type', 2513 'application/x-www-form-urlencoded');2678 'application/x-www-form-urlencoded'); 2514 2679 xhr.setRequestHeader('Content-length', senddata.length); 2515 2680 xhr.send(senddata); 2516 2681 if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText == 2517 "OK") {2682 "OK") { 2518 2683 return true; 2519 2684 } else { … … 2526 2691 var testData = true; 2527 2692 2528 if (this.setData({testData:testData})) { 2693 if (this.setData({ 2694 testData:testData 2695 })) { 2529 2696 var testResult = this.getData(['testData']); 2530 2697 if (testResult && testResult['testData'] == true) { … … 2568 2735 for(var i = 0; i < node.attributes.length; i++) { 2569 2736 newNode.setAttribute(node.attributes[i].nodeName, 2570 node.getAttribute(node.attributes[i].nodeName));2737 node.getAttribute(node.attributes[i].nodeName)); 2571 2738 } 2572 2739 } 2573 2740 if (allChildren && node.childNodes && 2574 node.childNodes.length > 0) {2741 node.childNodes.length > 0) { 2575 2742 for (var i = 0; i < node.childNodes.length; i++) { 2576 2743 newNode.appendChild(document.importNode( 2577 node.childNodes[i], allChildren));2744 node.childNodes[i], allChildren)); 2578 2745 } 2579 2746 } … … 2598 2765 window.onunload = function() 2599 2766 { 2600 2601 2767 if( oldonunload ) 2768 { 2602 2769 oldonunload(); 2603 2770 } 2604 2771 2605 2772 TrophyIM.setPresence('unavailable'); 2606 2773 }
Note: See TracChangeset
for help on using the changeset viewer.