Changeset 311
- Timestamp:
- 06/10/08 16:41:40 (16 years ago)
- Location:
- trunk/instant_messenger
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/instant_messenger/inc/Jabberd2.abstract.php
r305 r311 171 171 } 172 172 173 final function get_last_access_user($pUser) 174 { 175 $id = "last_time_user"; 176 $jid = ( trim($pUser['jid']) == "this" ) ? $this->_user . '@' . $this->_server : $pUser['jid']; 177 $this->iq('get', $id, $jid, NULL, "jabber:iq:last"); 178 } 179 173 180 final function setStatus() 174 181 { -
trunk/instant_messenger/inc/class.Ujabber.inc.php
r305 r311 74 74 return "disconnected"; 75 75 76 $this->get_last_access_user(array("jid" => "this")); 77 76 78 if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ) 77 79 { … … 89 91 $buffer = ''; 90 92 91 while ( ( connection_aborted() === 0 ) && time() - $init < 50 )93 while ( ( connection_aborted() === 0 ) && time() - $init < 30 ) 92 94 { 93 95 # read from server and write in the client -
trunk/instant_messenger/js/client.js
r305 r311 29 29 var _window = new Windows(_xtools, _im_content); 30 30 var _ldap = new InstantMessengerLDAP(_conn, _xtools, _window); 31 var _jabber = new Jabber(_conn, _xtools, _window, _ldap); 31 var _showhidden = new ShowHidden(1500); 32 var _jabber = new Jabber(_conn, _xtools, _window, _ldap, _showhidden); 32 33 33 34 // XSL preload 34 var _xsl_preload = [' chat.xsl','layer.xsl','contacts'];35 var _xsl_preload = ['window.xsl','layer.xsl','contacts.xsl', 'chat.xsl']; 35 36 var _xsl_preload_legth = _xsl_preload.length; 36 37 for ( var i = 0; i < _xsl_preload_legth; i++ ) … … 40 41 if ( (local = top.document.getElementById('user_info')) ) 41 42 { 42 local.innerHTML = ' ' + local.innerHTML; 43 var _status = top.document.createElement('img'); 44 _status.setAttribute('id','im_status_src'); 45 _status.src = im_available.src; 43 local.firstChild.style.marginLeft = '30px'; 44 45 var _status = top.document.createElement('div'); 46 _status.setAttribute('id', 'im_status'); 47 _status.style.height = '15px'; 48 _status.style.margin = '0 0 0 10px'; 49 _status.style.padding = '0px'; 50 _status.style.width = '15px'; 51 _status.style.background = 'no-repeat'; 52 _status.style.backgroundImage = 'url(' + im_unavailable.src + ')'; 53 _status.style.float = 'left'; 54 _status.style.position = 'absolute'; 46 55 47 56 local.insertBefore(_status, local.firstChild); … … 50 59 51 60 var _menu; 52 _menu = top.document.createElement('span'); 53 _menu.setAttribute('id','fast_menu_im'); 61 _menu = top.document.createElement('span'); 62 _menu.setAttribute('id','fast_menu_im'); 63 _menu.style.backgroundColor = 'b4cfe5'; 64 _menu.style.display = 'none'; 65 _menu.style.margin = '15px 0 0 -15px'; 66 _menu.style.position = 'absolute'; 67 _menu.style.zIndex = '99999'; 54 68 local.insertBefore(_menu, local.firstChild); 55 69 56 _menu = top.document.createElement('img'); 57 _menu.src = im_fast_menu.src; 58 local.insertBefore(_menu, local.firstChild); 59 60 //var local_old = local.innerHTML ; 61 //local.innerHTML = '<img src="' + im_fast_menu.src + '" onclick="javascript:templates.fast_menu();">'; 62 //local.innerHTML += '<img id="im_status_src" src="' + im_available.src + '" onclick="javascript:load_im_contacts();"/>'; 63 //local.innerHTML += local_old; 64 //local.innerHTML += '<div id="instant_messenger_content"></div><span id="fast_menu_im"/>'; 70 var _menu_img = top.document.createElement('div'); 71 _menu_img.style.background = 'no-repeat'; 72 _menu_img.style.backgroundImage = 'url(' + im_fast_menu.src + ')'; 73 _menu_img.style.height = '10px'; 74 _menu_img.style.margin = '0px'; 75 _menu_img.style.padding = '0px'; 76 _menu_img.style.position = 'absolute'; 77 _menu_img.style.width = '10px'; 78 _menu_img.style.float = 'left'; 79 local.insertBefore(_menu_img, local.firstChild); 80 81 _config( 82 _menu_img, 83 'onclick', 84 function() 85 { 86 var _options = [ 87 'available', 88 'away', 89 'dnd', 90 'unavailable' 91 ]; 92 93 var _style_text = 'cursor: pointer; padding:2px 4px 2px 20px; background: no-repeat '; 94 95 var _xml = _xtools.xml('menu'); 96 var _option; 97 var _item; 98 var _action; 99 var _style; 100 101 for ( var i in _options ) 102 { 103 _option = _xml.createElement('option'); 104 105 _item = _xml.createElement('item'); 106 _item.appendChild(_xml.createTextNode(imGetLang(_options[i]))); 107 108 _style = _xml.createElement('style'); 109 _style.appendChild(_xml.createTextNode(_style_text + 'url(' + eval('im_' + _options[i] + '.src') + ')')); 110 111 _option.appendChild(_item); 112 _option.appendChild(_style); 113 114 _xml.documentElement.appendChild(_option); 115 } 116 117 _menu.innerHTML = _xtools.parse(_xml, 'options.xsl'); 118 _showhidden.action('onmouseover', 'onmouseout', _menu); 119 120 _item = _menu.firstChild; 121 122 for ( var i in _options ) 123 { 124 _item.childNodes[i].setAttribute('presence', _options[i]); 125 _config( 126 _item.childNodes[i], 127 'onclick', 128 function(e) 129 { 130 var el = ( e.target ) ? e.target : e.srcElement; 131 132 _status.style.backgroundImage = el.style.backgroundImage; 133 134 var _presence = el.getAttribute('presence'); 135 _jabber.setPresence(_presence); 136 137 var _win_contacts = _window.get('contact_list'); 138 if ( _win_contacts ) 139 _win_contacts.icon(eval('im_' + _presence + '.src')); 140 } 141 ); 142 } 143 } 144 ); 65 145 } 66 146 … … 114 194 } 115 195 196 var _count_reconnect = 0; 116 197 function _request() 117 198 { … … 122 203 'classCostructor=read' 123 204 ); 205 else 206 setTimeout(_reconnect, (++_count_reconnect * 2000)); 124 207 } 125 208 -
trunk/instant_messenger/js/connector.js
r305 r311 181 181 return {'error' : "#1\n\n" + usage()}; 182 182 183 if ( _THREADS[_ID] )184 return {'error' : '#2 - there is a equal request running'};183 //if ( _THREADS[_ID] ) 184 // return {'error' : '#2 - there is a equal request running'}; 185 185 186 186 _THREADS[_ID] = { -
trunk/instant_messenger/js/images.js
r305 r311 29 29 var im_group_open = new Image(); 30 30 im_group_open.src = path_im + 'templates/default/images/group_open.gif'; 31 32 var im_group_close = new Image(); 33 im_group_close.src = path_im + 'templates/default/images/group_close.gif'; 31 34 32 35 // Smiles -
trunk/instant_messenger/js/jabber.js
r305 r311 5 5 var _window; 6 6 var _ldap; 7 8 var _menu = new ShowHidden(1500); 7 var _menu; 9 8 10 9 var _vcards = []; … … 138 137 var _win = _window.get('chat' + id); 139 138 if ( !_win ) 140 _chat(id); 139 { 140 _win = _chat(id); 141 var _st = el.style.backgroundImage; 142 _win.icon(_st.substr(4, (_st.length - 5))); 143 } 141 144 else 142 145 { … … 155 158 _win_contact.bc.style.display = 'none'; 156 159 _win_contact.wm.style.display = 'none'; 160 _win_contact.icon(im_available.src); 157 161 158 162 var _params = { … … 172 176 if ( _contact_list ) 173 177 { 174 _conn.go('$this.Ujabber.setStatus'); 178 _setPresence('unavailable'); 179 _setPresence(); 175 180 _ldap.photo( 176 181 'im_avatar', … … 222 227 var _sub_menu = top.document.getElementById('sub_' + el.getAttribute('jid')); 223 228 _sub_menu.innerHTML = _xtools.parse(_xml, 'options.xsl'); 224 _menu.action('onmouseover', 'onmouseout', _sub_menu); 229 230 _menu.action('onmouseover', 'onmouseout', _sub_menu); 225 231 226 232 _sub_menu = _sub_menu.firstChild; … … 260 266 while ( _contact ) 261 267 { 268 _config(_contact, 'onmouseover', _hover); 269 _config(_contact, 'onmouseout', _hover); 262 270 if ( _contact.getAttribute('jid') ) 263 271 { 264 272 //_config(_contact, 'onmousedown', _click); 265 273 _config(_contact, 'onmouseup', _click); 266 _config(_contact, 'onmouseover', _hover); 267 _config(_contact, 'onmouseout', _hover); 274 } 275 else 276 { 277 _config(_contact, 'onclick', 278 function(e) 279 { 280 var el = ( e.target ) ? e.target : e.srcElement; 281 282 if ( el.style.backgroundImage.indexOf('group_open') < 0 ) 283 el.style.backgroundImage = 'url(' + im_group_open.src + ')'; 284 else 285 el.style.backgroundImage = 'url(' + im_group_close.src + ')'; 286 287 el = el.nextSibling; 288 while ( el.getAttribute('jid') ) 289 { 290 el.style.display = ( el.style.display != 'none' ) ? 291 'none' : 'block'; 292 el = el.nextSibling; 293 if ( el && el.nextSibling ) 294 el = el.nextSibling; 295 } 296 }); 268 297 } 269 298 _contact = _contact.nextSibling; … … 272 301 } 273 302 303 function _setPresence() 304 { 305 var _presence = false; 306 var _pPresence; 307 if ( arguments.length == 0 ) 308 _pPresence = 'available'; 309 else 310 _pPresence = arguments[0]; 311 switch ( _pPresence ) 312 { 313 case 'away': 314 case 'dnd': 315 case 'xa': 316 _presence = 'show=' + _pPresence; 317 break; 318 case 'available': 319 case 'unavailable': 320 _presence = 'type=' + _pPresence; 321 break; 322 } 323 324 if ( _presence ) 325 { 326 var _status = top.document.getElementById('im_status'); 327 if ( _status ) 328 _status.style.backgroundImage = 'url(' + eval('im_' + _pPresence + '.src') + ')'; 329 _conn.go('$this.Ujabber.setPresence', _presence); 330 } 331 } 332 274 333 function _vcard(_pJid) 275 334 { … … 285 344 286 345 _win_vcard = _window.load('vcard_' + _pJid); 287 _win_vcard.title('.:: Informa ções do Contato ::.');346 _win_vcard.title('.:: Informações do Contato ::.'); 288 347 _win_vcard.size(300); 289 348 _win_vcard.position(_win_pos, _win_pos); … … 347 406 _readVCard(pIq); 348 407 break; 408 case 'last_time_user' : 409 _readLastTimeUser(pIq); 410 break; 349 411 default : //alert('readIq : ' + pIq.getAttribute('id')); 350 412 } 413 } 414 415 function _readLastTimeUser(pIq) 416 { 417 if ( pIq.firstChild.getAttribute("seconds") != 0 ) 418 _setPresence(); 351 419 } 352 420 … … 366 434 { 367 435 if ( !_win ) 436 { 368 437 _win = _chat(_from); 438 var _st = top.document.getElementById('contact_' + _from); 439 if ( _st ) 440 { 441 _st = _st.style.backgroundImage; 442 _win.icon(_st.substr(4, (_st.length - 5))); 443 } 444 } 369 445 370 446 var _history = _win.wc.firstChild; … … 409 485 var _img_status_contact = top.document.getElementById('contact_' + _from); 410 486 var _mensagem_status_contact = top.document.getElementById('status_' + _from); 487 var _win_chat = _window.get('chat' + _from); 488 411 489 if ( _mensagem_status_contact ) 412 490 { … … 423 501 if ( _img_status_contact ) 424 502 _img_status_contact.style.backgroundImage = 'url(' + eval('im_' + _presence_type + '.src') + ')'; 503 if ( _win_chat ) 504 _win_chat.icon(eval('im_' + _presence_type + '.src')); 425 505 break; 426 506 case 'subscribe' : … … 538 618 if ( _img_status_contact ) 539 619 _img_status_contact.style.backgroundImage = 'url(' + eval('im_' + _node.firstChild.nodeValue + '.src') + ')'; 620 if ( _win_chat ) 621 _win_chat.icon(eval('im_' + _node.firstChild.nodeValue + '.src')); 540 622 break; 541 623 case "status" : … … 550 632 if ( _img_status_contact ) 551 633 _img_status_contact.style.backgroundImage = 'url(' + im_available.src + ')'; 634 if ( _win_chat ) 635 _win_chat.icon(im_available.src); 552 636 } 553 637 } … … 610 694 _window = arguments[2]; 611 695 _ldap = arguments[3]; 696 _menu = arguments[4]; 612 697 } 613 698 614 699 Jabber.prototype.action = _action; 700 Jabber.prototype.setPresence = _setPresence; 615 701 window.Jabber = Jabber; 616 702 } -
trunk/instant_messenger/js/ldap.js
r305 r311 51 51 if ( !_jid ) 52 52 { 53 _status.innerHTML = 'Selecione uma organiza ção no campo da esquerda e em<br/>'54 + ' seguida, no campo da direita, um membro da organiza ção<br/>'53 _status.innerHTML = 'Selecione uma organização no campo da esquerda e em<br/>' 54 + ' seguida, no campo da direita, um membro da organização<br/>' 55 55 + ' para adicionar como contato'; 56 56 } … … 62 62 if ( !(_name.value) || !(_group.value) ) 63 63 { 64 _status.innerHTML = '<br/>O campo destacado em vermelho é obrigatório!<br/>';64 _status.innerHTML = '<br/>O campo destacado em vermelho é obrigatório!<br/>'; 65 65 66 66 if ( !(_name.value) ) -
trunk/instant_messenger/js/windows.js
r305 r311 40 40 _window.childNodes[1].childNodes[1].setAttribute('dragdrop_child','true'); 41 41 42 _config(_window.childNodes[1].childNodes[ 1].childNodes[0], 'onclick', _button);43 _config(_window.childNodes[1].childNodes[ 1].childNodes[1], 'onclick', _button);44 _config(_window.childNodes[1].childNodes[ 1].childNodes[2], 'onclick', _button);42 _config(_window.childNodes[1].childNodes[2].childNodes[0], 'onclick', _button); 43 _config(_window.childNodes[1].childNodes[2].childNodes[1], 'onclick', _button); 44 _config(_window.childNodes[1].childNodes[2].childNodes[2], 'onclick', _button); 45 45 46 46 _all_windows[pId + '__window_master'] = { 47 47 'id' : pId, 48 48 'wm' : _window, // wm - window master 49 'wt' : _window.childNodes[1].firstChild, // wt - window title 50 'bc' : _window.childNodes[1].childNodes[1].childNodes[0], // bc - button close 51 'bx' : _window.childNodes[1].childNodes[1].childNodes[1], // bx - button maximize 52 'bz' : _window.childNodes[1].childNodes[1].childNodes[2], // bz - button minimize 49 'ic' : _window.childNodes[1].firstChild, // wt - window title 50 'wt' : _window.childNodes[1].childNodes[1], // wt - window title 51 'bc' : _window.childNodes[1].childNodes[2].childNodes[0], // bc - button close 52 'bx' : _window.childNodes[1].childNodes[2].childNodes[1], // bx - button maximize 53 'bz' : _window.childNodes[1].childNodes[2].childNodes[2], // bz - button minimize 53 54 'wc' : _window.childNodes[2].firstChild, // wc - window content 54 55 'wf' : _window.childNodes[3], // wf - window footer … … 56 57 'content' : _content, 57 58 'focus' : _focus, 59 'icon' : _icon, 58 60 'position' : _position, 59 61 'size' : _size, … … 240 242 } 241 243 244 function _icon(_pIcon) 245 { 246 if ( typeof _pIcon == 'string' ) 247 this.ic.style.backgroundImage = 'url(' + _pIcon + ')'; 248 } 249 242 250 function _position(pX, pY) 243 251 { -
trunk/instant_messenger/setup/phpgw_pt-br.lang
r305 r311 4 4 add new contact instant_messenger pt-br Adicionar Novo Contato 5 5 add user instant_messenger pt-br Adicionar Usuário 6 allow instant_messenger pt-br Adicionar 6 7 Added information! instant_messenger pt-br Informações Adicionadas! 7 8 Authorization instant_messenger pt-br Autorização 9 available instant_messenger pt-br Conectado 8 10 away instant_messenger pt-br Ausente 9 11 Birthday instant_messenger pt-br Aniversário … … 19 21 Delete instant_messenger pt-br Remover 20 22 Description instant_messenger pt-br Descrição 23 dnd instant_messenger pt-br Desconectado 24 deny instant_messenger pt-br Negar 21 25 Error in the message! instant_messenger pt-br Erro na mensagem! 22 26 E-mail instant_messenger pt-br E-mail … … 32 36 List of Contacts instant_messenger pt-br Lista de Contatos 33 37 Loading... instant_messenger pt-br Carregando... 38 member of organization instant_messenger pt-br Usuários da Organização 34 39 Maximize/Restore instant_messenger pt-br Maximizar/Restaurar Janela 35 40 Minimize instant_messenger pt-br Minimizar Janela … … 74 79 Update instant_messenger pt-br Atualizar 75 80 Username instant_messenger pt-br Username 81 unavailable instant_messenger pt-br Não Perturbe 76 82 Vcard instant_messenger pt-br Vcard 77 83 You desire to register in service IM? instant_messenger pt-br Você deseja registrar no serviço IM? -
trunk/instant_messenger/templates/default/css/window.css
r305 r311 21 21 } 22 22 23 #instant_messenger_content .icon 24 { 25 position:absolute !important; 26 height: 15px; 27 width: 15px; 28 } 29 23 30 #instant_messenger_content .titulo 24 31 { … … 27 34 font: 8pt Verdana, Arial, Helvetica, sans-serif; 28 35 height: 20px; 29 margin: 0px 0px;30 padding: 0px 0px 0px 5px;36 line-height: 1.5em; 37 margin: 0 0; 31 38 overflow: hidden; 39 padding: 0 0 0 5px; 40 } 41 42 #instant_messenger_content .titulo span 43 { 44 float:left; 45 margin-left: 17px; 32 46 } 33 47 -
trunk/instant_messenger/xsl/contacts.xsl
r305 r311 15 15 <xsl:choose> 16 16 <xsl:when test="not(group = preceding-sibling::item/group)"> 17 <img id="group_{group[current()]}" src="{$path}templates/default/images/group_open.gif" onclick="javascript:im.group_close('{group[current()]}');"/> 18 <b><xsl:value-of select="group[current()]" /><br/></b> 17 <div style="font-weight:bold;padding-left:16px;background:url({$path}templates/default/images/group_open.gif) no-repeat;"> 18 <xsl:value-of select="group[current()]" /> 19 </div> 19 20 <xsl:apply-templates select="." mode="contacts"/> 20 21 </xsl:when> -
trunk/instant_messenger/xsl/window.xsl
r305 r311 12 12 </b> 13 13 <div class="titulo"> 14 <span id="{name}__window_title" style="float:left;"></span> 14 <div class="icon"></div> 15 <span id="{name}__window_title" style=""></span> 15 16 <div id="{name}__window_title_buttons" class="buttons"> 16 17 <div title="close" class="button_close"></div>
Note: See TracChangeset
for help on using the changeset viewer.