- Timestamp:
- 06/06/08 13:54:09 (16 years ago)
- Location:
- trunk/instant_messenger
- Files:
-
- 17 added
- 528 deleted
- 34 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/instant_messenger/inc/Controller.class.php
r287 r305 155 155 $obj = new ReflectionClass($class); 156 156 157 if ( $pRequest['classCo nstructor'] )157 if ( $pRequest['classCostructor'] ) 158 158 { 159 $obj = $obj->newInstance($pRequest['classCo nstructor']);160 unset($pRequest['classCo nstructor']);159 $obj = $obj->newInstance($pRequest['classCostructor']); 160 unset($pRequest['classCostructor']); 161 161 } 162 162 else -
trunk/instant_messenger/inc/Jabber.abstract.php
r287 r305 33 33 34 34 private final function _connect( $pUser = false, $pPassword = false, $pConnectionType = false, $pWebjabber = false ) 35 { 35 { 36 36 try 37 37 { … … 48 48 49 49 $this->_socket = $socket; 50 50 51 51 //stream_socket_enable_crypto($this->_socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); 52 52 53 53 fwrite($socket, "{$USER}@{$SERVER}##{$pPassword}##{$pConnectionType}"); 54 54 … … 80 80 81 81 protected function connect($pUser = false, $pPassword = false, $pConnectionType = false, $pWebjabber = false ) 82 { 83 try 84 { 85 $_connect = $this->_connect($pUser, $pPassword, $pConnectionType, $pWebjabber 82 { 83 try 84 { 85 $_connect = $this->_connect($pUser, $pPassword, $pConnectionType, $pWebjabber); 86 86 87 87 if ( !$_connect ) … … 162 162 163 163 usleep(50000); 164 164 165 165 fread($this->_socket, 4096); 166 166 167 167 if ( !$this->_plain() ) 168 168 throw new Exception('[starttls] #3 it isn\'t possible carry out the verification. File: ' . __FILE__ . ' :: ' . __LINE__); … … 186 186 throw new Exception('[_plain] #1 it isn\'t possible read the socket. File: ' . __FILE__ . ' :: ' . __LINE__); 187 187 188 $xml = "<username> " . $this->_username . "</username>";189 $xml .= "<password> " . $this->_password . "</password>";190 $xml .= "<resource> " . $this->_resource . "</resource>";188 $xml = "<username><![CDATA[" . $this->_username . "]]></username>"; 189 $xml .= "<password><![CDATA[" . $this->_password . "]]></password>"; 190 $xml .= "<resource><![CDATA[" . $this->_resource . "]]></resource>"; 191 191 192 192 unset($this->_password); -
trunk/instant_messenger/inc/Jabberd2.abstract.php
r287 r305 7 7 class Jabberd2 extends Jabber 8 8 { 9 final function connect($pUser = false, $pPassword = false, $pConnectionType = false )9 final function connect($pUser = false, $pPassword = false, $pConnectionType = false, $pWebjabber = false ) 10 10 { 11 11 try 12 12 { 13 13 if ( $pUser && $pPassword && $pConnectionType ) 14 if ( $_connect = parent::connect($pUser, $pPassword, $pConnectionType ) )14 if ( $_connect = parent::connect($pUser, $pPassword, $pConnectionType, $pWebjabber) ) 15 15 return $_connect; 16 16 … … 48 48 */ 49 49 50 final function addContacts($pContact) 51 { 52 $jid = explode("@",$pContact['email']); 53 $jid = $jid[0]."@".$this->_server; 54 $name = $pContact['name']; 55 $group = $pContact['group']; 56 57 if(trim($jid[0]) != trim($this->_user)) 58 { 59 if ( $jid ) 50 final function addRoster($pRoster) 51 { 52 if ( !$this->connected ) 53 return "disconnected"; 54 55 if ( trim($pRoster['uid']) ) 56 { 57 $jid = $pRoster['uid'] . "@" . $this->_server; 58 59 $newroster = "<item jid='" . $jid . "'"; 60 $newroster .= " name='" . $pRoster['name'] . "'"; 61 $newroster .= "><group>" . $pRoster['group'] . "</group></item>"; 62 63 if ( $this->iq('set', "addroster_" . time(), NULL, NULL, "jabber:iq:roster", $newroster) ) 60 64 { 61 $newcontact = "<item jid='".$jid."'"; 62 $newcontact .= " name='" . $name . "'"; 63 $newcontact .= "><group>" . $group . "</group></item>"; 65 $this->getContacts(); 66 return true; 64 67 } 65 68 } 66 $addid = "adduser_" . time(); 67 if ( !$this->connected ) 68 echo "disconnected"; 69 else 70 { 71 if ( $this->iq('set', $addid, NULL, NULL, "jabber:iq:roster", $newcontact) ) 72 $this->getContacts(); 73 echo "OK"; 74 } 69 return false; 70 } 71 72 final function addContact($pContact) 73 { 74 $this->addRoster($pContact); 75 $this->subscription($pContact['uid'] . "@" . $this->_server, 'subscribe'); 75 76 } 76 77 … … 89 90 $jid = ( trim($pJid['jid']) == "this" ) ? $this->_user . '@' . $this->_server : $pJid['jid']; 90 91 $vcard = (trim($pJid['jid']) == "this") ? 'vCard_user' : 'vCard'; 91 92 92 93 if ( !$this->connected ) 93 94 { … … 120 121 final function removeContact($pContact) 121 122 { 122 $delid = 'deluser_' . time();123 123 if ( !$this->isConnected() ) 124 124 return "disconnected"; 125 126 if ( $this->iq('set',$delid,NULL,NULL,"jabber:iq:roster","<item jid='".$pContact['jid']."' subscription='remove'/>") ) 127 if ( $this->subscription($pContact['jid'],"unsubscribed") ) 128 echo "OK"; 125 126 if ( $this->iq('set', 'delroster_' . time(), NULL, NULL, 'jabber:iq:roster',"<item jid='".$pContact['jid']."' subscription='remove'/>") ) 127 { 128 $this->getContacts(); 129 return true; 130 } 131 return false; 132 } 133 134 function allowContact($pRoster) 135 { 136 $this->addRoster($pRoster); 137 $jid = $pRoster['uid'] . "@" . $this->_server; 138 $this->subscription($jid, 'subscribed'); 139 $this->subscription($jid, 'subscribe'); 129 140 } 130 141 … … 141 152 return true; 142 153 } 143 }144 145 final function compression()146 {147 $compress = "<compress xmlns='http://jabber.org/protocol/compress'><method>zlib</method></compress>";148 $this->writeSocket($compress);149 154 } 150 155 … … 166 171 } 167 172 168 final function get_last_access_user($pUser)169 {170 $id = "last_time_user";171 $jid = ( trim($pUser['jid']) == "this" ) ? $this->_user . '@' . $this->_server : $pUser['jid'];172 $this->iq('get', $id, $jid, NULL, "jabber:iq:last");173 }174 175 173 final function setStatus() 176 174 { 177 175 $this->setPresence(array("type" => "unavailable")); 178 $this->setPresence(array("type" => "available")); 176 $this->setPresence(array("type" => "available")); 179 177 } 180 178 -
trunk/instant_messenger/inc/Socket.abstract.php
r287 r305 52 52 set_magic_quotes_runtime(0); 53 53 $return = @fread($pSocket, $pLength); 54 set_magic_quotes_runtime(get_magic_quotes_gpc()); 54 55 55 set_magic_quotes_runtime(get_magic_quotes_gpc());56 56 57 57 if ( $php_errormsg ) -
trunk/instant_messenger/inc/class.Ujabber.inc.php
r287 r305 1 1 <?php 2 2 #error_reporting(E_ALL); 3 3 require_once 'Jabberd2.abstract.php'; 4 4 5 5 class Ujabber extends Jabberd2 6 6 { 7 private $set_presence;8 9 7 public final function __construct($pConnectionType = 'write') 10 { 11 session_start(); 8 { 9 /*session_start(); 10 12 11 $this->_user = $_SESSION['phpgw_info']['instant_messenger']['user']; 12 //$this->_user = 'niltonneto';//$_SESSION['phpgw_info']['instant_messenger']['user']; 13 //$this->_pass = 'nine59ever';//$_SESSION['phpgw_info']['instant_messenger']['passwd']; 14 //$this->_pass = 'senha';//$_SESSION['phpgw_info']['instant_messenger']['passwd']; 13 15 $this->_pass = $_SESSION['phpgw_info']['instant_messenger']['passwd']; 14 16 $this->_server = $_SESSION['phpgw_info']['instant_messenger']['name_jabber']; 15 $this->_port = $_SESSION['phpgw_info']['instant_messenger']['port_jabber'];17 $this->_port = '8883';//$_SESSION['phpgw_info']['instant_messenger']['port_jabber']; 16 18 $this->_resource = $_SESSION['phpgw_info']['instant_messenger']['resource_jabber']; 17 $webjabber =$_SESSION['phpgw_info']['instant_messenger']['webjabber'];18 session_write_close();19 //$webjabber = 'im.pr.gov.br';//$_SESSION['phpgw_info']['instant_messenger']['webjabber']; 20 $webjabber = '10.15.22.236';//$_SESSION['phpgw_info']['instant_messenger']['webjabber']; 19 21 20 if ( $this->connect($this->_user . '@' . $this->_server . '/' . $this->_resource . ':' . $this->_port, $this->_pass, $pConnectionType, $webjabber) ) 21 $this->connected = true; 22 else 22 session_write_close();*/ 23 24 try 25 { 26 if ( !file_exists(dirname(__FILE__) . '/../instant_messenger.define.php') ) 27 throw new Exception(__CLASS__ . '[ ERROR #1 ] : Not found configuration file'); 28 29 require_once dirname(__FILE__) . '/../instant_messenger.define.php'; 30 31 if ( !(defined('JABBER_URL') && defined('JABBER_RESOURCE')) ) 32 throw new Exception(__CLASS__ . '[ ERROR #2 ] : Jabber server is not cofigured'); 33 34 if ( !(defined('WEBJABBER_URL') && defined('WEBJABBER_PORT')) ) 35 throw new Exception(__CLASS__ . '[ ERROR #3 ] : Webabber server is not cofigured'); 36 37 $this->_server = constant('JABBER_URL'); 38 $this->_resource = constant('JABBER_RESOURCE'); 39 40 $this->_port = constant('WEBJABBER_PORT'); 41 42 session_start(); 43 $this->_user = $_SESSION['phpgw_info']['instant_messenger']['user']; 44 $this->_pass = $_SESSION['phpgw_info']['instant_messenger']['passwd']; 45 session_write_close(); 46 47 $access_string = $this->_user . '@' . $this->_server . '/' . $this->_resource . ':' . $this->_port; 48 23 49 $this->connected = false; 50 if ( $this->connect($access_string, $this->_pass, $pConnectionType, constant('WEBJABBER_URL')) ) 51 $this->connected = true; 52 } 53 catch(Exception $e) 54 { 55 echo $e->getMessage(); 56 } 24 57 } 25 58 … … 30 63 flush(); 31 64 } 32 65 33 66 public final function isConnected() 34 67 { … … 40 73 if ( !$this->isConnected() ) 41 74 return "disconnected"; 42 43 $this->get_last_access_user(array("jid" => "this"));44 75 45 76 if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ) … … 56 87 57 88 $init = time(); 89 $buffer = ''; 58 90 59 91 while ( ( connection_aborted() === 0 ) && time() - $init < 50 ) 60 92 { 61 if( isset($xml) )62 unset($xml);63 64 93 # read from server and write in the client 65 94 $xml = $this->readSocket(); 95 //var_dump($xml); 96 if ( strlen($xml) && $xml != ' ' ) 97 { 98 if ( $xml[strlen($xml) - 1 ] != '>' ) 99 { 100 $buffer .= $xml; 101 $xml = ''; 102 } 103 else 104 { 105 $xml = $buffer . $xml; 106 $buffer = ''; 107 //var_dump($xml); 108 //strlen($xml); 109 //exit; 110 } 111 } 66 112 $xml = ( strlen($xml) ) ? $xml : ' '; 67 //$xml = ( strlen($xml) ) ? $xml : '_##_';68 113 printf("%s", $xml); 69 114 ob_flush(); … … 85 130 $pSendMessage['body'] = preg_replace($patterns, $replace, $pSendMessage['body']); 86 131 87 $_emotions = '/<img[^>]*emotion="(\S+)?"[^>]*>/'; 132 $_emotions = '/<img emotion="(\S+)?"[^>]+>/'; 88 133 $_emotions = preg_match_all($_emotions, $pSendMessage['body'], $emotions); 89 134 … … 134 179 135 180 //retirar a linha abaixo para voltar ao padrão conforme acima 136 $xml .= "<body><![CDATA[" . htmlentities($content['body']). "]]></body>";181 $xml .= "<body><![CDATA[" . $content['body'] . "]]></body>"; 137 182 $xml .= $payload; 138 183 $xml .= "</message>"; -
trunk/instant_messenger/inc/class.db_im.inc.php
r287 r305 19 19 function db_im() 20 20 { 21 21 22 session_start(); 22 23 $this->db_name = $_SESSION['phpgw_info']['instant_messenger']['server']['db_name']; -
trunk/instant_messenger/inc/class.ldap_im.inc.php
r287 r305 2 2 class ldap_im 3 3 { 4 var$ldap_host;5 var$ldap_context;6 var$conn;7 var$user;8 var$jid;9 var$password;4 private $ldap_host; 5 private $ldap_context; 6 private $conn; 7 private $user; 8 private $jid; 9 private $password; 10 10 11 11 function __construct() … … 13 13 session_start(); 14 14 $this->ldap_host = $_SESSION['phpgw_info']['instant_messenger']['server_ldap_jabber']; 15 $this->ldap_context 15 $this->ldap_context = $_SESSION['phpgw_info']['instant_messenger']['context_ldap_jabber']; 16 16 $this->user = $_SESSION['phpgw_info']['instant_messenger']['user_ldap_jabber']; 17 17 $this->password = $_SESSION['phpgw_info']['instant_messenger']['password_ldap_jabber']; 18 $this->jid = $_SESSION['phpgw_info']['instant_messenger']['user'];19 $this->connect_ldap( true);18 $this->jid = $_SESSION['phpgw_info']['instant_messenger']['user']; 19 $this->connect_ldap(false); 20 20 session_write_close(); 21 21 } 22 23 function valor() 24 { 25 26 if ($this->conn) 27 { 28 $filter="ou=*"; 29 $justthese = array("ou"); 30 $search = ldap_list($this->conn,$this->ldap_context, $filter, $justthese); 31 return ldap_get_entries($this->conn, $search); 32 33 $entry = ldap_get_entries($this->conn, $search); 34 } 35 36 } 37 22 38 23 function __destruct() 39 24 { … … 54 39 function get_photo_ldap($pUser,$getPhoto) 55 40 { 56 $user = ( $pUser == "im_ _avatar" ) ? $this->jid : $pUser ;41 $user = ( $pUser == "im_avatar" ) ? $this->jid : $pUser ; 57 42 58 43 if ($this->conn) … … 94 79 function photo_ldap($user) 95 80 { 96 $uid = ( $user['uid'] == "im_ _avatar" ) ? $this->jid : $user['uid'] ;81 $uid = ( $user['uid'] == "im_avatar" ) ? $this->jid : $user['uid'] ; 97 82 return $this->get_photo_ldap($uid,false); 98 83 } … … 176 161 177 162 foreach($entry as $tmp) 178 if( trim($tmp['ou'][0])!= "")163 if($tmp['ou'][0] != "") 179 164 $result_org .= "<ou>" . $tmp['ou'][0] . "</ou>"; 180 165 181 166 $result_org .= "</organizations>"; 182 167 183 168 return $result_org; 184 169 } -
trunk/instant_messenger/inc/controller.xml
r287 r305 20 20 <item ref="connector" js="connector" /> 21 21 <item ref="xtools" js="xtools" /> 22 <item ref="ldap" js="ldap" /> 22 23 <item ref="jabber" js="jabber" /> 23 24 <item ref="client" js="client" /> … … 25 26 <item ref="dragdrop" js="dragdrop" /> 26 27 <item ref="build_win" js="build_win" /> 28 <item ref="windows" js="windows" /> 27 29 <item ref="templates" js="templates" /> 28 30 <item ref="fcommon" js="fcommon" /> 29 <item ref=" menu_action" js="menu_action" />31 <item ref="show_hidden" js="show_hidden" /> 30 32 <item ref="functions" js="functions" /> 31 33 <item ref="images" js="images" /> … … 37 39 <item ref="db_im" alias="get_preferences" class="db_im" method="get_preferences" prefix="class." suffix=".inc.php"/> 38 40 <item ref="db_im" alias="set_preferences" class="db_im" method="set_preferences" prefix="class." suffix=".inc.php"/> 39 <item ref="ldap_im" alias="list_organizations_ldap" class="ldap_im" method="list_organizations_ldap" prefix="class." suffix=".inc.php"/> 40 <item ref="ldap_im" alias="photo_ldap" class="ldap_im" method="photo_ldap" prefix="class." suffix=".inc.php"/> 41 <item ref="Ujabber" alias="addContact s" class="Ujabber" method="addContacts" prefix="class." suffix=".inc.php" />41 <item ref="ldap_im" alias="list_organizations_ldap" class="ldap_im" method="list_organizations_ldap" prefix="class." suffix=".inc.php"/> 42 <item ref="ldap_im" alias="photo_ldap" class="ldap_im" method="photo_ldap" prefix="class." suffix=".inc.php"/> 43 <item ref="Ujabber" alias="addContact" class="Ujabber" method="addContact" prefix="class." suffix=".inc.php" /> 42 44 <item ref="Ujabber" alias="listen" class="Ujabber" method="listen" prefix="class." suffix=".inc.php" /> 43 45 <item ref="Ujabber" alias="getContacts" class="Ujabber" method="getContacts" prefix="class." suffix=".inc.php" /> 44 <item ref="Ujabber" alias="get_last_access_user" class="Ujabber" method="get_last_access_user" prefix="class." suffix=".inc.php" />45 46 <item ref="Ujabber" alias="getVcard" class="Ujabber" method="getVcard" prefix="class." suffix=".inc.php" /> 46 47 <item ref="Ujabber" alias="newVcard" class="Ujabber" method="newVcard" prefix="class." suffix=".inc.php" /> … … 48 49 <item ref="Ujabber" alias="setPresence" class="Ujabber" method="setPresence" prefix="class." suffix=".inc.php" /> 49 50 <item ref="Ujabber" alias="sendMessage" class="Ujabber" method="sendMessage" prefix="class." suffix=".inc.php" /> 50 <item ref="Ujabber" alias="subscription" class="Ujabber" method="subscription" prefix="class." suffix=".inc.php" /> 51 <item ref="Ujabber" alias="subscription" class="Ujabber" method="subscription" prefix="class." suffix=".inc.php" /> 52 <item ref="Ujabber" alias="allowContact" class="Ujabber" method="allowContact" prefix="class." suffix=".inc.php" /> 51 53 <item ref="Ujabber" alias="updateContact" class="Ujabber" method="updateContact" prefix="class." suffix=".inc.php" /> 52 54 <item ref="Ujabber" alias="setStatus" class="Ujabber" method="setStatus" prefix="class." suffix=".inc.php" /> -
trunk/instant_messenger/inc/im_acl.inc.php
r287 r305 3 3 $size_of_acl = sizeof($GLOBALS['phpgw_info']['user']['acl']); 4 4 5 # percorre a ACL at é o fim ou até encontrar a entrada para o módulo de mensagem instantânea5 # percorre a ACL até o fim ou até encontrar a entrada para o módulo de mensagem instantânea 6 6 for ( $i = 0; $i < $size_of_acl && $GLOBALS['phpgw_info']['user']['acl'][$i]['appname'] != 'instant_messenger'; $i++ ); 7 7 8 # verifica se foi encontrada a permiss ão para o módulo de mensagem instantânea8 # verifica se foi encontrada a permissão para o módulo de mensagem instantânea 9 9 if ( $GLOBALS['phpgw_info']['user']['acl'][$i]['appname'] == 'instant_messenger' ) 10 10 { 11 $webserver_url _im= $GLOBALS['phpgw_info']['server']['webserver_url'];12 $webserver_url _im = ( !empty($webserver_url_im) ) ? $webserver_url_im: '/';11 $webserver_url = $GLOBALS['phpgw_info']['server']['webserver_url']; 12 $webserver_url = ( !empty($webserver_url) ) ? $webserver_url : '/'; 13 13 14 if ( strrpos($webserver_url _im, '/') === false || strrpos($webserver_url_im, '/') != (strlen($webserver_url_im) - 1) )15 $webserver_url _im.= '/';14 if ( strrpos($webserver_url, '/') === false || strrpos($webserver_url, '/') != (strlen($webserver_url) - 1) ) 15 $webserver_url .= '/'; 16 16 17 $webserver_url _im = $webserver_url_im. 'instant_messenger/';17 $webserver_url = $webserver_url . 'instant_messenger/'; 18 18 19 19 require_once PHPGW_SERVER_ROOT . '/instant_messenger/inc/im_sessions.inc.php'; 20 require_once PHPGW_SERVER_ROOT . '/instant_messenger/inc/load_lang.php';20 //require_once PHPGW_SERVER_ROOT . '/instant_messenger/inc/load_lang.php'; 21 21 22 22 $js = array( 23 23 'connector', 24 'xtools', 25 'windows', 24 26 'jabber', 25 'xtools',26 27 'client', 27 'images',28 /*'images', 28 29 'dragdrop', 29 'build_win', 30 'templates', 31 'fcommon', 32 'menu_action', 30 'templates',*/ 31 #'fcommon', 32 /*'menu_action', 33 33 'functions', 34 34 'images', 35 35 'cookies_im', 36 'load', 36 'load',*/ 37 37 ); 38 38 39 print '<script type="text/javascript">var path_im = "'.$webserver_url _im.'";</script>';39 print '<script type="text/javascript">var path_im = "'.$webserver_url.'";</script>'; 40 40 41 #require_once dirname(__FILE__) . '/Controller.class.php'; 41 42 42 require_once dirname(__FILE__) . '/Controller.class.php'; 43 #$controller = new Controller; 44 #$script = ''; 45 #foreach ( $js as $key => $val ) 46 #{ 47 # $val = array('act' => 'j.' . $val); 48 # $script .= $controller->exec($val); 49 #} 43 50 44 $controller = new Controller; 45 $script = ''; 46 foreach ( $js as $key => $val ) 47 { 48 $val = array('act' => 'j.' . $val); 49 $script .= $controller->exec($val); 50 } 51 //printf("<script type=\"text/javascript\">%s</script>", $script); 51 52 52 printf("<script type=\"text/javascript\">%s</script>", $script); 53 print '<link rel="stylesheet" type="text/css" href="' . $webserver_url . 'templates/default/css/window.css">'; 54 print '<link rel="stylesheet" type="text/css" href="' . $webserver_url . 'templates/default/css/chat.css">'; 55 print '<link rel="stylesheet" type="text/css" href="' . $webserver_url . 'templates/default/css/common.css">'; 53 56 54 print '<link rel="stylesheet" type="text/css" href="' . $webserver_url_im . 'templates/default/css/window.css">'; 55 print '<link rel="stylesheet" type="text/css" href="' . $webserver_url_im . 'templates/default/css/chat.css">'; 56 print '<link rel="stylesheet" type="text/css" href="' . $webserver_url_im . 'templates/default/css/common.css">'; 57 58 # trecho de código javascript utilizado para 59 # controle de possível erro no load do script 60 # feito acima e está sendo inserido via PHP 61 # pois é um complemento do procedimento acima 62 $init_client = '<script type="text/javascript">'; 63 $init_client .= ' function im_init(pTimes)'; 64 $init_client .= ' {'; 65 $init_client .= ' if ( !pTimes )'; 66 $init_client .= ' pTimes = 0;'; 67 $init_client .= ' if ( pTimes == 5 )'; 68 $init_client .= ' return false;'; 69 $init_client .= ' if ( window.client )'; 70 $init_client .= ' client();'; 71 $init_client .= ' else'; 72 $init_client .= ' setTimeout("im_init("+(++pTimes)+")", (pTimes + 1) * 2000);'; 73 $init_client .= ' }'; 74 $init_client .= ' im_init();'; 75 $init_client .= '</script>'; 76 printf("%s", $init_client); 57 # trecho de código javascript utilizado para 58 # controle de possÃvel erro no load do script 59 # feito acima e está sendo inserido via PHP 60 # pois é um complemento do procedimento acima 61 #$init_client = '<script type="text/javascript">'; 62 #$init_client .= ' function im_init(pTimes)'; 63 #$init_client .= ' {'; 64 #$init_client .= ' if ( !pTimes )'; 65 #$init_client .= ' pTimes = 0;'; 66 #$init_client .= ' if ( pTimes == 5 )'; 67 #$init_client .= ' return false;'; 68 #$init_client .= ' if ( window.InstantMessengerClient )'; 69 #$init_client .= ' InstantMessengerClient();'; 70 #$init_client .= ' else'; 71 #$init_client .= ' setTimeout("im_init("+(++pTimes)+")", (pTimes + 1) * 2000);'; 72 #$init_client .= ' }'; 73 #$init_client .= ' var bkp_onload = window.onload;'; 74 #$init_client .= ' window.onload = function(){if (typeof bkp_onload == "function") bkp_onload();setTimeout("im_init()",10000);};'; 75 #$init_client .= '</script>'; 76 //printf("%s", $init_client); 77 echo '<iframe style="display:none" height="100%" !width="100%" src="'.$webserver_url.'client.php"></iframe>'; 77 78 } 78 79 ?> -
trunk/instant_messenger/inc/im_sessions.inc.php
r287 r305 1 1 <?php 2 2 3 3 $_SESSION['phpgw_info']['instant_messenger']['user'] = $GLOBALS['phpgw_info']['user']['account_lid']; 4 $_SESSION['phpgw_info']['instant_messenger']['user_id'] = $GLOBALS['phpgw_info']['user']['account_id'];4 $_SESSION['phpgw_info']['instant_messenger']['user_id'] = $GLOBALS['phpgw_info']['user']['account_id']; 5 5 $_SESSION['phpgw_info']['instant_messenger']['passwd'] = $GLOBALS['phpgw_info']['user']['passwd']; 6 $_SESSION['phpgw_info']['instant_messenger']['name_jabber'] = $GLOBALS['phpgw_info']['server']['name_jabber']; 7 $_SESSION['phpgw_info']['instant_messenger']['port_jabber'] = $GLOBALS['phpgw_info']['server']['port_jabber']; 8 $_SESSION['phpgw_info']['instant_messenger']['resource_jabber'] = $GLOBALS['phpgw_info']['server']['resource_jabber']; 6 #$_SESSION['phpgw_info']['instant_messenger']['name_jabber'] = $GLOBALS['phpgw_info']['server']['name_jabber']; 7 #$_SESSION['phpgw_info']['instant_messenger']['port_jabber'] = $GLOBALS['phpgw_info']['server']['port_jabber']; 8 #$_SESSION['phpgw_info']['instant_messenger']['resource_jabber'] = $GLOBALS['phpgw_info']['server']['resource_jabber']; 9 #$_SESSION['phpgw_info']['instant_messenger']['tls_jabber'] = $GLOBALS['phpgw_info']['server']['tls_jabber']; 9 10 10 $_SESSION['phpgw_info']['instant_messenger']['server_ldap_jabber'] 11 $_SESSION['phpgw_info']['instant_messenger']['context_ldap_jabber'] 12 $_SESSION['phpgw_info']['instant_messenger']['user_ldap_jabber'] 13 $_SESSION['phpgw_info']['instant_messenger']['password_ldap_jabber'] 14 $_SESSION['phpgw_info']['instant_messenger']['webjabber'] = $GLOBALS['phpgw_info']['server']['webjabber'];11 $_SESSION['phpgw_info']['instant_messenger']['server_ldap_jabber'] = $GLOBALS['phpgw_info']['server']['server_ldap_jabber']; 12 $_SESSION['phpgw_info']['instant_messenger']['context_ldap_jabber'] = $GLOBALS['phpgw_info']['server']['context_ldap_jabber']; 13 $_SESSION['phpgw_info']['instant_messenger']['user_ldap_jabber'] = $GLOBALS['phpgw_info']['server']['user_ldap_jabber']; 14 $_SESSION['phpgw_info']['instant_messenger']['password_ldap_jabber'] = $GLOBALS['phpgw_info']['server']['password_ldap_jabber']; 15 $_SESSION['phpgw_info']['instant_messenger']['webjabber'] = $GLOBALS['phpgw_info']['server']['wejabber']; 15 16 16 17 $_SESSION['phpgw_info']['instant_messenger']['server']['db_name'] = $GLOBALS['phpgw_info']['server']['db_name']; … … 20 21 $_SESSION['phpgw_info']['instant_messenger']['server']['db_pass'] = $GLOBALS['phpgw_info']['server']['db_pass']; 21 22 $_SESSION['phpgw_info']['instant_messenger']['server']['db_type'] = $GLOBALS['phpgw_info']['server']['db_type']; 22 23 23 24 ?> -
trunk/instant_messenger/inc/load_lang.php
r287 r305 12 12 } 13 13 14 $script = '<script> ';15 $script .= 'var lang _im= [];';14 $script = '<script>function imGetLang(pKey){'; 15 $script .= 'var lang = [];'; 16 16 17 17 foreach ( $LANG_IM as $key => $value ) 18 $script .= "lang _im['" . strtolower(addslashes($key)) . "'] = '" . addslashes($value) . "';";18 $script .= "lang['" . strtolower(addslashes($key)) . "'] = '" . addslashes($value) . "';"; 19 19 20 $script .= '</script>';20 $script .= "return lang[pKey.toLowerCase()] || '* ' + pKey;}</script>"; 21 21 22 22 echo $script; -
trunk/instant_messenger/inc/teste.php
r287 r305 1 1 <?php 2 2 3 require_once "class.Jabber.inc.php";3 require_once 'class.Ujabber.inc.php'; 4 4 5 $a = new Jabber();5 $a = new Ujabber; 6 6 7 exit; 8 $fp = stream_socket_client("tcp://im.pr.gov.br:8800", $errno, $errstr, 30); 9 if (!$fp) { 10 die("Unable to connect: $errstr ($errno)"); 11 } 12 13 $xml = "<?xml version='1.0' ?>"; 14 $xml .= "<stream:stream to='im.pr.gov.br' xmlns='jabber:client' "; 15 $xml .= "xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>"; 16 fwrite($fp, $xml); 17 usleep(50000); 18 echo fread($fp, 4096); 19 echo "\n\n"; 20 21 $xml = "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>"; 22 fwrite($fp, $xml); 23 usleep(50000); 24 echo fread($fp, 4096); 25 echo "\n\n"; 26 27 stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); 28 29 $xml = "<?xml version='1.0' encoding='UTF-8'?>"; 30 $xml .= "<stream:stream to='im.pr.gov.br' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>"; 31 fwrite($fp, $xml); 32 usleep(50000); 33 echo fread($fp, 4096); 34 echo "\n\n"; 35 36 usleep(50000); 37 echo fread($fp, 4096); 38 echo "\n\n"; 39 40 $xml = "<iq type='set' id='conn'><query xmlns='jabber:iq:auth'>"; 41 $xml .= "<username>teste9</username>"; 42 $xml .= "<password>teste99</password>"; 43 $xml .= "<resource>IM</resource>"; 44 $xml .= "</query></iq>"; 45 fwrite($fp, $xml); 46 usleep(50000); 47 echo fread($fp, 4096); 48 echo "\n\n"; 49 50 stream_set_blocking ($fp, false); 51 $xml = "<presence xmlns='jabber:client' from='alexandrecorreia@im.pr.gov.br' />"; 52 fwrite($fp, $xml); 53 usleep(50000); 54 //echo fread($fp, 4096); 55 //echo "\n\n"; 56 57 //while(1) 58 //{ 59 // echo fread($fp, 4096); 60 // echo "\n\n"; 61 // sleep(1); 62 //} 63 64 echo "=================================================\n\n"; 65 66 $time = time(); 67 do 68 { 69 $line = NULL; 70 $line = fread($fp, 4096); 71 72 if ( !empty($line) ) 73 var_dump($line); 74 } 75 while ( time() - $time < 20 ); 76 fclose($fp); 77 78 79 exit(0); 7 80 session_start(); 8 9 $a->username = $_SESSION['phpgw_info']['instant_messenger']['user'];10 $a->password = $_SESSION['phpgw_info']['instant_messenger']['passwd'];11 $a->server = $_SESSION['phpgw_info']['instant_messenger']['name_jabber'];12 $a->port = "5222";13 $a->resource = "webb";14 15 session_write_close();16 17 echo "Conectando no Jabber";18 19 $a->Connect();20 $a->SendAuth();21 22 $a->RosterUpdateXML();23 81 24 82 echo "<pre>"; 25 print_r($ a->roster);83 print_r($_SESSION['debug']); 26 84 echo "</pre>"; 27 85 28 $a->Disconnect(); 86 session_write_close(); 87 29 88 30 89 ?> -
trunk/instant_messenger/js/client.js
r287 r305 1 var conn_im = new IMConnector; 2 var disconnected = false; 3 var validate_data = false; 4 var buffer_im = ''; 5 var xtools_im = null; 6 var count_im = 0; 7 var activate_timeOut = ''; 1 (function() 2 { 3 function _config(pObj, pEvent, pHandler) 4 { 5 if ( typeof pObj == 'object' ) 6 { 7 if ( pEvent.substring(0, 2) == 'on' ) 8 pEvent = pEvent.substring(2, pEvent.length); 8 9 9 function clientConnectionIm() 10 { 11 if( count_im < 2 ) 10 if ( pObj.addEventListener ) 11 pObj.addEventListener(pEvent, pHandler, false); 12 else if ( pObj.attachEvent ) 13 pObj.attachEvent('on' + pEvent, pHandler); 14 } 15 } 16 17 if ( !(top.document.getElementById('instant_messenger_content')) ) 12 18 { 13 if( buffer_im.length > 0 ) 14 activate_timeOut = setTimeout('clientConnectionIm()', 5000); 15 16 count_im++; 19 var _im_content = top.document.createElement('div'); 20 _im_content.setAttribute('id', 'instant_messenger_content'); 21 _im_content = top.document.body.appendChild(_im_content); 17 22 } 18 else 23 24 var buffer = ''; 25 var _disconnected = false; 26 27 var _conn = new IMConnector(path_im); 28 var _xtools = new XTools(path_im); 29 var _window = new Windows(_xtools, _im_content); 30 var _ldap = new InstantMessengerLDAP(_conn, _xtools, _window); 31 var _jabber = new Jabber(_conn, _xtools, _window, _ldap); 32 33 // XSL preload 34 var _xsl_preload = ['chat.xsl','layer.xsl','contacts']; 35 var _xsl_preload_legth = _xsl_preload.length; 36 for ( var i = 0; i < _xsl_preload_legth; i++ ) 37 _xtools.load(_xsl_preload[i]); 38 39 var local; 40 if ( (local = top.document.getElementById('user_info')) ) 19 41 { 20 count_im = 0; 21 buffer_im = 0; 22 clientDisconnectIm(); 23 clearTimeout(activate_timeOut); 24 killConnIm(); 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; 46 47 local.insertBefore(_status, local.firstChild); 48 49 _config(_status, 'onclick', _contacts); 50 51 var _menu; 52 _menu = top.document.createElement('span'); 53 _menu.setAttribute('id','fast_menu_im'); 54 local.insertBefore(_menu, local.firstChild); 55 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"/>'; 25 65 } 26 }27 66 28 function clientDisconnectIm() 29 { 30 if( xtools_im == null ) 31 xtools_im = new XTools; 67 function _stream(data) 68 { 69 data = data.replace(/^ | $/, ''); 32 70 33 disconnected = true; 34 var XmlDoc = "<disconnected>" + 35 "<path>" + path_im + "</path>" + 36 "</disconnected>"; 37 38 im_window.load('__contacts_im_','instant_messenger_content','<title>.::Expresso Messenger::.</title>','window.xsl','190',true,true,false); 39 im_window.elementC('__contacts_im_').innerHTML = xtools_im.parse(XmlDoc,'disconnected.xsl'); 40 func.byId('im_status_src').src = im_unavailable.src; 41 im.status = 'type=unavailable'; 42 im.statusFlag = 'unavailable'; 43 44 function handler_presence_disconnected() 45 { 46 } 47 conn_im.go('$this.Ujabber.setPresence', {'request' : handler_presence_disconnected }, im.status); 48 } 71 if ( !(data.length) ) 72 return false; 49 73 50 function killConnIm() 51 { 52 var i; 53 disconnected = true; 54 55 for ( i in conn_im.__HTTP__ ) 56 conn_im.__HTTP__[i].abort(); 57 } 58 59 function client() 60 { 61 if( jabber == null ) 62 var jabber = new Jabber; 63 64 if( xtools_im == null ) 65 xtools_im = new XTools; 66 67 function request(data) 68 { 69 if ( !disconnected ) 74 if ( data.indexOf('disconnected') != -1 || data.indexOf('</stream:stream>') != -1 ) 70 75 { 71 conn_im.go('$this.Ujabber.listen', {'stream':stream, 'request':request}, 'classConstructor=read'); 76 _disconnected = true; 77 //alert('disconnected'); 72 78 } 73 79 else 74 80 { 75 clientDisconnectIm(); 76 return false; 81 if ( data.lastIndexOf('>') != data.length - 1) 82 buffer += data + ' '; 83 else 84 { 85 if ( buffer.length ) 86 { 87 data = buffer + data; 88 buffer = ''; 89 } 90 91 // com xmlns ocorre problemas durante o parse entre 92 // xml e xsl e por esse motivo está sendo retirado 93 data = data.replace(/ xmlns='.*?'/g, ''); 94 data = '<handler>' + data + '</handler>'; 95 96 var _xml = _xtools.convert(data); 97 98 if ( _xml ) 99 { 100 var _node = _xml.documentElement.firstChild; 101 102 while ( _node ) 103 { 104 if ( _node.nodeType == 1 ) 105 _jabber.action(_node); 106 //else 107 // alert('name : ' + _node.nodeName + "\n\nhas children:" + _node.hasChildNodes() + "\nvalue\n\n" + _node.nodeValue); 108 109 _node = _node.nextSibling; 110 } 111 } 112 } 77 113 } 78 114 } 79 115 80 function stream(data)116 function _request() 81 117 { 82 function trim(pData) 83 { 84 return pData.replace(/^ +| +$/g, ''); 85 } 86 87 function retrim(pData) 88 { 89 return pData.replace(/(_##_)+\b/g, ''); 90 } 91 92 data = trim(data); 93 94 if ( data == 'disconnected' || data == '</stream:stream>' ) 95 { 96 clientDisconnectIm(); 97 return false; 98 } 99 else if ( data.lastIndexOf('>') == data.length - 1 && data.length > 0 ) 100 { 101 if ( buffer_im.length ) 102 { 103 data = buffer_im + data; 104 buffer_im = ""; 105 } 106 107 // com xmlns ocorre problemas durante o parse entre 108 // xml e xsl e por esse motivo está sendo retirado 109 data = '<handler>' + data.replace(/ xmlns='.*?'/g, '') + '</handler>'; 110 111 if ( window.ActiveXObject ) 112 { 113 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 114 xmlDoc.async = "false"; 115 xmlDoc.loadXML(data); 116 } 117 else 118 { 119 var parser = new DOMParser(); 120 var xmlDoc = parser.parseFromString(data, "text/xml"); 121 } 122 123 var node = xmlDoc.documentElement.firstChild; 124 125 while ( node ) 126 { 127 try 128 { 129 jabber.doIt(node.nodeName, node); 130 node = node.nextSibling; 131 } 132 catch(e) 133 { 134 alert('erro : ' + e + "\n\n" + e.description); 135 node = node.nextSibling; 136 } 137 } 138 } 139 else 140 { 141 data = data.replace(/^ +| +$/g, ''); 142 buffer_im += data + " "; 143 } 118 if ( !_disconnected ) 119 return _conn.go( 120 '$this.Ujabber.listen', 121 {'stream':_stream, 'request':_wait}, 122 'classCostructor=read' 123 ); 144 124 } 145 125 146 function contacts(data)126 function _wait() 147 127 { 148 setTimeout( 'clientConnectionIm()', 3000);128 setTimeout(_request, 3000); 149 129 } 150 request(); 151 setTimeout("conn_im.go('$this.Ujabber.getContacts', {'request':"+contacts+"})", 3000); 130 131 function _reconnect() 132 { 133 _disconnected = false; 134 _request(); 135 } 136 137 function _disconnect() 138 { 139 _disconnected = true; 140 } 141 142 function _contacts() 143 { 144 var _win = _window.get('contact_list'); 145 if ( _win ) 146 if ( _win.wm.style.display != 'none' ) 147 _win.wm.style.display = 'none'; 148 else 149 _win.wm.style.display = 'block'; 150 else 151 if ( !_disconnected ) 152 _conn.go('$this.Ujabber.getContacts'); 153 } 154 155 function Client() 156 { 157 _request(); 158 setTimeout('InstantMessengerContacts()', 3000); 159 } 160 161 window.InstantMessengerClient = Client; 162 window.InstantMessengerReconnect = _reconnect; 163 window.InstantMessengerDisconnect = _disconnect; 164 window.InstantMessengerContacts = _contacts; 152 165 } 153 154 var _bkp_onbeforeunload = window.onbeforeunload; 155 156 window.onbeforeunload = function() 157 { 158 if ( typeof _bkp_onbeforeunload == 'function' ) 159 _bkp_onbeforeunload(); 160 161 killConnIm(); 162 }; 166 )(); -
trunk/instant_messenger/js/connector.js
r280 r305 1 function IMConnector()1 (function() 2 2 { 3 this.__HTTP__ = []; 4 this.__THREADS__ = []; 5 } 6 7 IMConnector.prototype = { 8 'go' : function() 9 { 10 // connection 11 var index = 0; 12 var rtlen = 0; 13 var ie = false; // ie doesn't has stream 14 var __this__ = this; 15 function makeConnection(pThread) 16 { 17 __this__.__HTTP__[pThread] = xhr(); 18 } 19 function setPost(pThread) 20 { 21 __this__.__THREADS__[pThread].__METHOD__ = 'POST'; 22 return true; 23 } 24 // this function set __this__.__THREADS__[?].__TYPE__ to 4 for request or 3 for stream 25 function setStream(pThread) 26 { 27 __this__.__THREADS__[pThread].__TYPE__ = ( !ie ) ? 3 : 4; 28 return true; 29 } 30 function trim(pData) 31 { 32 return pData.replace(/^ +| +$/g, ''); 33 } 34 function verifyUserHandler(pThread, pHandler) 35 { 36 var type_of_handler = typeof pHandler; 37 var i; 38 switch ( type_of_handler ) 3 var _THREADS = []; 4 var _ie; 5 6 // xhr = XMLHttpRequest 7 function _xhr() 8 { 9 try 10 { 11 return new XMLHttpRequest(); 12 } 13 catch (_e) 14 { 15 _ie = true; 16 try 17 { 18 return new ActiveXObject('Msxml2.XMLHTTP'); 19 } 20 catch (_e1) 21 { 22 try 23 { 24 return new ActiveXObject('Microsoft.XMLHTTP'); 25 } 26 catch (_e2) 27 { 28 return false; 29 } 30 } 31 } 32 } 33 34 function _HANDLER() 35 { 36 var _ID = arguments[0]; 37 38 if ( _ie && _THREADS[_ID]._XHR.readyState != 4 ) 39 return false; 40 41 switch ( _THREADS[_ID]._XHR.readyState ) 42 { 43 case 3 : 44 if ( _THREADS[_ID]._HANDLER.stream ) 45 { 46 var _data = _THREADS[_ID]._XHR.responseText.substr(_THREADS[_ID]._index).replace(/^ +| +$/g, ''); 47 //alert(_data); 48 _THREADS[_ID]._rtlen = _THREADS[_ID]._XHR.responseText.length; 49 50 if ( _THREADS[_ID]._index < _THREADS[_ID]._rtlen && _data.length ) 51 try 52 { 53 _THREADS[_ID]._HANDLER.stream(_data); 54 } 55 catch(_e) 56 { 57 alert("#stream\n\n" + _e + "\n\n" + _e.description); 58 } 59 60 _THREADS[_ID]._index = _THREADS[_ID]._rtlen; 61 } 62 break; 63 case 4 : 64 switch ( _THREADS[_ID]._XHR.status ) 65 { 66 case 200: 67 var _data = ( _THREADS[_ID]._MODE == 'XML' ) ? 68 _THREADS[_ID]._XHR.responseXML : 69 _THREADS[_ID]._XHR.responseText; 70 71 if ( _ie && _THREADS[_ID]._HANDLER.stream ) 72 _THREADS[_ID]._HANDLER.stream(_data); 73 74 var _request = ( _THREADS[_ID]._HANDLER.request ) ? 75 _THREADS[_ID]._HANDLER.request : false; 76 77 delete _THREADS[_ID]; 78 79 if ( _request ) 80 try 81 { 82 _request(_data); 83 } 84 catch(_e) 85 { 86 alert("#request\n\n" + _e + "\n\n" + _e.description); 87 } 88 89 break; // [case : status 200] 90 case 404: 91 delete _THREADS[_ID]; 92 alert('Page Not Found!'); 93 break; // [case : status 404] 94 default: 95 delete _THREADS[_ID]; 96 } 97 break; 98 default : 99 } 100 } 101 102 function _execute() 103 { 104 var _ID = arguments[0]; 105 var _ACTION = 'act=' + _ID; 106 var _TARGET = this._PATH; 107 var _SEND = null; 108 109 if ( _TARGET != '' && _TARGET.lastIndexOf('/') != (_TARGET.length - 1) ) 110 _TARGET += '/'; 111 112 _TARGET += ( this._CONTROLLER ) ? 113 this._CONTROLLER : 'controller.php'; 114 115 if ( _THREADS[_ID]._METHOD == 'GET' ) 116 _TARGET += '?' + _ACTION; 117 118 _THREADS[_ID]._XHR.open(_THREADS[_ID]._METHOD, _TARGET, true); 119 120 if ( _THREADS[_ID]._METHOD == 'POST' ) 121 { 122 _THREADS[_ID]._XHR.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 123 _THREADS[_ID]._XHR.setRequestHeader('Cache-Control', 'no-store, no-cache, must-revalidate'); 124 _THREADS[_ID]._XHR.setRequestHeader('Cache-Control', 'post-check=0, pre-check=0'); 125 _THREADS[_ID]._XHR.setRequestHeader('Pragma', 'no-cache'); 126 _SEND = _ACTION + '&' + arguments[1]; 127 } 128 129 _THREADS[_ID]._XHR.onreadystatechange = function(){_HANDLER(_ID);}; 130 _THREADS[_ID]._XHR.send(_SEND); 131 } 132 133 function usage() 134 { 135 return ""+ 136 "Description:\n"+ 137 "\t<obj>.go(string access, [mixed handler[, mixed post]])\n\n"+ 138 "Parameters:\n"+ 139 "\taccess : assinatura de acesso à camada de controle.\n"+ 140 "\thandler : uma função a ser executada no fim da requisição\n"+ 141 "\t\tou um objeto que poderá conter dois Ãndices sendo\n"+ 142 "\t\tque ambos deverão ser uma função que será executada\n"+ 143 "\t\tconforme o status do objeto xhr, sendo que na posição\n"+ 144 "\t\t'stream' será a função a ser executada a cada iteração\n"+ 145 "\t\tdo objeto xhr e na posição 'request' será a função\n"+ 146 "\t\ta ser executada no fim da requisição.\n"+ 147 "\tpost : se especificado deverá ser uma query string ou um\n"+ 148 "\tXML bem formatado.\n\n"; 149 } 150 151 // @PARAM arguments[0] string : 152 // assinatura de acesso à camada de controle 153 // 154 // @PARAM arguments[1] object : 155 // OBS : neste caso a conexão assumirá que se trata de uma stream 156 // objeto contendo dois duas funções, sendo, 157 // no Ãndice stream deverá conter uma função que será execultada 158 // a cada mudança de status do objeto xhr 159 // or 160 // @PARAM arguments[1] function : funcão a ser executada no retorno da 161 // requisição 162 // OBS : neste caso a conexão assumirá que se trata de uma 163 // requisição função que será execultada no final da requisição 164 // 165 // @PARAM arguments[2] string : 166 // este parâmetro define se a conexão é via GET ou POST 167 // caso o parâmetro não esteja presente a conexão será execultada 168 // via GET, por outro lado, caso ele exista deverá ser uma query 169 // string válida ou um xml bem formatado 170 // 171 function go() 172 { 173 var _argv = arguments; 174 var _argc = _argv.length; 175 var _ID = _argv[0]; 176 var _POST; 177 if ( _argc < 1 || _argc > 3 ) 178 return {'error' : "#0\n\n" + usage()}; 179 180 if ( typeof _ID != 'string' ) 181 return {'error' : "#1\n\n" + usage()}; 182 183 if ( _THREADS[_ID] ) 184 return {'error' : '#2 - there is a equal request running'}; 185 186 _THREADS[_ID] = { 187 '_HANDLER' : {}, 188 '_METHOD' : ( _argv[2] ) ? 'POST' : 'GET', // [GET | POST] 189 '_MODE' : null, // [XML | TEXT] 190 '_TYPE' : null, // [4 for request | 3 for stream] 191 '_XHR' : null // [4 for request | 3 for stream] 192 }; 193 194 if ( _argv[2] ) 195 _POST = _argv[2]; 196 197 if ( _argv[1] ) 198 switch ( typeof _argv[1] ) 39 199 { 40 200 case 'function' : 41 return true;201 _THREADS[_ID]._HANDLER = {'request' : _argv[1]}; 42 202 break; 43 203 case 'object' : 44 for ( i in pHandler)204 for ( var i in _argv[1] ) 45 205 if ( i != 'stream' && i != 'request' ) 46 return false; 206 { 207 delete _THREADS[_ID]; 208 return {'error' : "#3\n\n" + usage()}; 209 } 47 210 else if ( i == 'stream' ) 48 setStream(pThread); 49 return true; 211 { 212 _THREADS[_ID]._index = 0; 213 _THREADS[_ID]._rtlen = 0; 214 } 215 _THREADS[_ID]._HANDLER = _argv[1]; 216 break; 217 case 'string' : 218 if ( _argc == 2 ) 219 { 220 _THREADS[_ID]._METHOD = 'POST'; 221 _POST = _argv[1]; 222 } 50 223 break; 51 224 default : 52 return false; 53 } 54 } 55 // xhr = XMLHttpRequest 56 function xhr() 57 { 225 //delete _THREADS[_ID]; 226 //return {'error' : "#4\n\n" + usage()}; 227 } 228 229 if ( !(_THREADS[_ID]._XHR = _xhr()) ) 230 return {'error' : "#4 it cannot make a xhr object"}; 231 232 ( _THREADS[_ID]._METHOD == 'GET' ) ? 233 _execute.call(this, _ID) : _execute.call(this, _ID, _POST); 234 return {'success' : "your thread is running and the response "+ 235 "will be manipulated by the handler"}; 236 } 237 238 function Connector() 239 { 240 var _argv = arguments; 241 this._PATH = ( _argv.length > 0 ) ? 242 _argv[0] : ''; 243 this._CONTROLLER = ( _argv.length == 2 ) ? 244 _argv[1] : false; 245 } 246 247 Connector.prototype.go = go; 248 window.IMConnector = Connector; 249 250 var _unload_event = window.onbeforeunload; 251 window.onbeforeunload = function() 252 { 253 for ( var _ID in _THREADS ) 254 { 255 //if ( _THREADS[_ID]._XHR.abort ) 58 256 try 59 257 { 60 return new XMLHttpRequest(); 61 } 62 catch (e) 63 { 64 ie = true; 65 try 66 { 67 return new ActiveXObject('Msxml2.XMLHTTP'); 68 } 69 catch (e1) 70 { 71 try 72 { 73 return new ActiveXObject('Microsoft.XMLHTTP'); 74 } 75 catch (e2) 76 { 77 return null; 78 } 79 } 80 } 81 } 82 83 function __HANDLER__() 84 { 85 try 86 { 87 if ( ie && __this__.__HTTP__[arguments[0]].readyState != 4 ) 88 return false; 89 90 var threadId = arguments[0]; 91 92 if ( !threadId ) 93 return false; 94 95 if ( __this__.__HTTP__[threadId].readyState == 3 || __this__.__HTTP__[threadId].readyState == 4 ) 96 { 97 if ( !ie && __this__.__HTTP__[threadId].readyState == 3 && __this__.__THREADS__[threadId].__HANDLER__.stream ) 98 { 99 var data = trim(__this__.__HTTP__[threadId].responseText.substr(index)); 100 rtlen = __this__.__HTTP__[threadId].responseText.length; 101 if ( index < rtlen && data.length ) 102 { 103 __this__.__THREADS__[threadId].__HANDLER__.stream(data); 104 index = rtlen; 105 } 106 } 107 if ( __this__.__THREADS__[threadId].__HANDLER__.request && __this__.__HTTP__[threadId].readyState == 4 ) 108 { 109 switch ( __this__.__HTTP__[threadId].status ) 110 { 111 case 200: 112 var stream = false; 113 var request = false; 114 var data = ( __this__.__THREADS__[threadId].__MODE__ == 'XML' ) ? 115 __this__.__HTTP__[threadId].responseXML : 116 __this__.__HTTP__[threadId].responseText; 117 118 if ( ie && __this__.__THREADS__[threadId].__HANDLER__.stream ) 119 stream = __this__.__THREADS__[threadId].__HANDLER__.stream; 120 121 if ( __this__.__THREADS__[threadId].__HANDLER__.request ) 122 request = __this__.__THREADS__[threadId].__HANDLER__.request; 123 124 delete __this__.__THREADS__[threadId]; 125 126 if ( stream ) 127 stream(data); 128 129 if ( request ) 130 request(data); 131 132 break; // [case : status 200] 133 case 404: 134 alert('Page Not Found!'); 135 break; // [case : status 404] 136 default: 137 } 138 } 139 } 258 if ( _THREADS[_ID]._XHR && _THREADS[_ID]._XHR.abort ) 259 _THREADS[_ID]._XHR.abort(); 260 delete _THREADS[_ID]; 140 261 } 141 262 catch(e) 142 263 { 143 //alert("__HANDLER__\n" + threadId + "\n " + e + "\n ErroR: " + e.description); 144 //delete __this__.__THREADS__[threadId]; 145 } 146 }; 147 148 var argc = arguments.length; 149 if ( argc < 2 || argc > 4 ) 150 return {'error':'#0 - invalid params'}; 151 152 if ( __this__.__THREADS__[arguments[0]] ) 153 return {'error':'#2 - request is running'}; 154 155 __this__.__THREADS__[arguments[0]] = { 156 '__HANDLER__' : arguments[1], 157 '__METHOD__' : 'GET', // __METHOD__ = [GET | POST] 158 '__MODE__' : 'TEXT', // __MODE__ = [XML | TEXT] 159 '__TYPE__' : 4 // __TYPE__ = [4 for request | 3 for stream] 160 }; 161 162 makeConnection(arguments[0]); 163 164 if ( !verifyUserHandler(arguments[0], arguments[1]) ) 165 { 166 //delete __this__.__THREADS__[arguments[0]]; 167 return {'error':'#1 - invalid handler'}; 168 } 169 170 if ( argc == 3 ) 171 setPost(arguments[0]); 172 173 if ( __this__.__HTTP__[arguments[0]] != null ) 174 { 175 try 176 { 177 var __TARGET__ = path_im + 'controller.php?act=' + arguments[0]; 178 179 var __SEND__ = null; 180 __this__.__HTTP__[arguments[0]].open(__this__.__THREADS__[arguments[0]].__METHOD__, __TARGET__, true); 181 if ( __this__.__THREADS__[arguments[0]].__METHOD__ == 'POST' ) 182 { 183 __this__.__HTTP__[arguments[0]].setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 184 __this__.__HTTP__[arguments[0]].setRequestHeader('Cache-Control', 'no-store, no-cache, must-revalidate'); 185 __this__.__HTTP__[arguments[0]].setRequestHeader('Cache-Control', 'post-check=0, pre-check=0'); 186 __this__.__HTTP__[arguments[0]].setRequestHeader('Pragma', 'no-cache'); 187 __SEND__ = 'act=' + arguments[0] + '&' + arguments[2]; 188 } 189 var tst = arguments[0]; 190 __this__.__HTTP__[arguments[0]].onreadystatechange = function(){__HANDLER__(tst);}; 191 __this__.__HTTP__[arguments[0]].send(__SEND__); 192 } 193 catch(e) 194 { 195 alert("go\n" + e.description); 196 return {'error':'#3 - ' + e.description}; 197 } 198 } 199 } 200 }; 264 } 265 } 266 267 if ( typeof _unload_event == 'function' ) 268 return _unload_event(); 269 }; 270 } 271 )(); -
trunk/instant_messenger/js/dragdrop.js
r260 r305 1 /** 2 * @AUTHOR: Alexandre Correia - alexandrecorreia [.at.] celepar [.dot.] pr [.dot.] gov [.dot.] br 3 * @AUTHOR: Rodrigo Souza - rodrigosouzadossantos [.at.] gmail [.dot.] com 4 * @COPYLEFT: GPL - http://www.gnu.org/copyleft/gpl.html 5 * @DATE: 10/10/2007 6 * @LAST CHANGE: 11/10/2007 7 * @BRIEF: 8 **/ 1 (function() 2 { 3 var _element = null; 9 4 10 function DragDrop()11 {12 this.dragObject = null;13 this.mouseOffset = null;14 this.documentMouseMove = null;15 this.documentMouseUp = null;5 function _config(pObj, pEvent, pHandler) 6 { 7 if ( typeof pObj == 'object' ) 8 { 9 if ( pEvent.substring(0, 2) == 'on' ) 10 pEvent = pEvent.substring(2, pEvent.length); 16 11 17 } 18 19 DragDrop.prototype = { 20 "drag" : function(ev, pObject) 21 { 22 function mouseMove(pEv, pObject, pTarget) 23 { 24 function getMouseOffset(pThis, target, pEv) 12 if ( arguments.length == 3 ) 25 13 { 26 function getPosition(pObject) 27 { 28 try 29 { 30 var left = 0; 31 var top = 0; 32 33 while (pObject.offsetParent) 34 { 35 left += pObject.offsetLeft; 36 top += pObject.offsetTop; 37 pObject = pObject.offsetParent; 38 } 39 40 left += pObject.offsetLeft; 41 top += pObject.offsetTop; 42 43 return {x:left, y:top}; 44 }catch(e){} 45 } 46 try 47 { 48 var ev = pEv || window.event; 49 50 var docPos = getPosition(target); 51 var mousePos = mouseCoords(ev); 52 return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y}; 53 } 54 catch(e){} 14 if ( pObj.addEventListener ) 15 pObj.addEventListener(pEvent, pHandler, false); 16 else if ( pObj.attachEvent ) 17 pObj.attachEvent('on' + pEvent, pHandler); 55 18 } 56 function mouseCoords(pEv)19 else if ( arguments.length == 4 ) 57 20 { 58 try 59 { 60 var ev = pEv; 61 var CoordX = ""; 62 var CoordY = ""; 63 64 if(ev.pageX || ev.pageY) 65 return {x:ev.pageX, y:ev.pageY}; 66 67 CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft; 68 CoordY = ev.clientY + document.body.scrollTop - document.body.clientTop; 69 return { x:CoordX, y:CoordY }; 70 } 71 catch(e){} 72 } 73 try 74 { 75 if ( pObject.mouseOffset == null ) 76 pObject.mouseOffset = getMouseOffset(pObject, pTarget, pEv); 77 78 var ev = pEv || window.event; 79 var mousePos = mouseCoords(ev); 80 81 if( pObject.dragObject ) 82 { 83 var x = mousePos.x - pObject.mouseOffset.x; 84 var y = mousePos.y - pObject.mouseOffset.y; 85 pObject.dragObject.style.left = ( x < 0 ) ? 0 : x; 86 pObject.dragObject.style.top = ( y < 0 ) ? 0 : y; 87 } 88 if ( typeof pObject.documentMouseMove == 'function' ) 89 pObject.documentMouseMove(); 90 } 91 catch(e){} 92 } 93 function mouseUp(pObject) 94 { 95 try 96 { 97 if ( typeof pObject.documentMouseUp == 'function' ) 98 pObject.documentMouseUp(); 99 pObject.dragObject = null; 100 document.onmousemove = pObject.documentMouseMove; 101 document.onmouseup = pObject.documentMouseUp; 102 pObject.documentMouseMove = pObject.documentMouseUp = null; 103 pObject.mouseOffset = null; 104 } 105 catch(e){} 106 } 107 try 108 { 109 if( !pObject ) 110 return; 111 112 if (typeof ev.preventDefault != 'undefined') 113 ev.preventDefault(); 114 else 115 pObject.onselectstart = new Function("return false;"); 116 117 this.mouseOffset = null; 118 119 if ( pObject.getAttribute('dragdrop') === "true" ) 120 { 121 var _this = this; 122 pObject.style.cursor = "pointer"; 123 pObject.style.position = 'absolute'; 124 125 pObject.onmousemove = function(ev) 126 { 127 mouseMove(ev, _this, pObject); 128 }; 129 130 if ( typeof document.onmousemove == 'function' && document.onmousemove != pObject.onmousemove ) 131 this.documentMouseMove = document.onmousemove; 132 133 document.onmousemove = function(ev) 134 { 135 mouseMove(ev, _this, pObject); 136 }; 137 138 pObject.onmouseup = function() 139 { 140 mouseUp(_this); 141 }; 142 143 if ( typeof document.onmouseup == 'function' && document.onmouseup != pObject.onmouseup ) 144 this.documentMouseUp = document.onmouseup; 145 146 document.onmouseup = pObject.onmouseup; 147 148 var el = ( window.event ) ? window.event.srcElement : ev.target; 149 150 if ( el.getAttribute('dragdrop') === "true" ) 151 { 152 _this.dragObject = pObject; 153 return false; 154 } 21 if ( pObj.removeEventListener ) 22 pObj.removeEventListener(pEvent, pHandler, false); 23 else if ( pObj.detachEvent ) 24 pObj.detachEvent('on' + pEvent, pHandler); 155 25 } 156 26 } 157 catch(e){alert(e.description);}158 27 } 159 };160 28 161 var drag_drop = new DragDrop(); 29 function _getMouseOffset(e, el) 30 { 31 var docPos = _getPosition(el); 32 var mousePos = _mouseCoords(e); 33 return { 34 'x' : mousePos.x - docPos.x, 35 'y' : mousePos.y - docPos.y 36 }; 37 } 38 39 function _getPosition(_pObject) 40 { 41 var left = 0; 42 var top = 0; 43 44 while ( _pObject.offsetParent ) 45 { 46 left += _pObject.offsetLeft; 47 top += _pObject.offsetTop; 48 _pObject = _pObject.offsetParent; 49 } 50 51 left += _pObject.offsetLeft; 52 top += _pObject.offsetTop; 53 54 return { 55 'x' : left, 56 'y' : top 57 }; 58 } 59 60 function _mouseCoords(ev) 61 { 62 var CoordX = ""; 63 var CoordY = ""; 64 65 if ( ev.pageX || ev.pageY ) 66 return { 67 'x' : ev.pageX, 68 'y' : ev.pageY 69 }; 70 71 CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft; 72 CoordY = ev.clientY + document.body.scrollTop - document.body.clientTop; 73 return { 74 'x' : CoordX, 75 'y' : CoordY 76 }; 77 } 78 79 function _mouseMove(e) 80 { 81 if ( _element ) 82 { 83 if ( _element.mouseOffset == null ) 84 _element.mouseOffset = _getMouseOffset(e, _element); 85 86 var mousePos = _mouseCoords(e); 87 88 var x = mousePos.x - _element.mouseOffset.x; 89 var y = mousePos.y - _element.mouseOffset.y; 90 _element.style.left = ( x < 0 ) ? 0 : x; 91 _element.style.top = ( y < 0 ) ? 0 : y; 92 } 93 } 94 95 function _mouseUp() 96 { 97 if ( _element ) 98 { 99 _config(_element, 'onmousemove', _mouseMove, 'remove'); 100 _config(top.document, 'onmousemove', _mouseMove, 'remove'); 101 102 _config(_element, 'onmouseup', _mouseUp, 'remove'); 103 _config(top.document, 'onmouseup', _mouseUp, 'remove'); 104 105 _element.mouseOffset = null; 106 _element = null; 107 } 108 } 109 110 function _toDrag(el) 111 { 112 if ( el.getAttribute('dragdrop_parent') == null ) 113 { 114 if ( el.getAttribute('dragdrop_child') != null ) 115 { 116 var children = 0; 117 while ( (++children < 5) && (el.getAttribute('dragdrop_parent') == null) ) 118 el = el.parentNode; 119 } 120 if ( el.getAttribute('dragdrop_parent') == null ) 121 el = false; 122 } 123 return el; 124 } 125 126 function _drag(e) 127 { 128 if (typeof e.preventDefault != 'undefined') 129 e.preventDefault(); 130 else 131 el.onselectstart = new Function("return false;"); 132 133 var el = ( e.target ) ? e.target : e.srcElement; 134 135 el = _toDrag(el); 136 137 if ( el ) 138 { 139 _element = el; 140 141 _config(el, 'onmousemove', _mouseMove); 142 _config(top.document, 'onmousemove', _mouseMove); 143 144 _config(el, 'onmouseup', _mouseUp); 145 _config(top.document, 'onmouseup', _mouseUp); 146 } 147 } 148 149 function _set(_pObject) 150 { 151 if ( typeof _pObject != 'object' ) 152 return false; 153 154 _pObject.style.position = 'absolute'; 155 _pObject.setAttribute('dragdrop_parent', 'true'); 156 157 _config(_pObject, 'onmousedown', _drag); 158 } 159 160 function DragDrop() 161 { 162 } 163 164 DragDrop.prototype.drag = _set; 165 window.DragDrop = DragDrop; 166 } 167 )(); -
trunk/instant_messenger/js/images.js
r287 r305 2 2 var im_available = new Image(); 3 3 im_available.src = path_im + 'templates/default/images/available.gif'; 4 4 5 5 var im_away = new Image(); 6 6 im_away.src = path_im + 'templates/default/images/away.gif'; 7 7 8 8 var im_chat = new Image(); 9 9 im_chat.src = path_im + 'templates/default/images/chat.gif'; 10 10 11 11 var im_dnd = new Image(); 12 12 im_dnd.src = path_im + 'templates/default/images/dnd.gif'; 13 13 14 14 var im_xa = new Image(); 15 15 im_xa.src = path_im + 'templates/default/images/xa.gif'; 16 16 17 17 var im_unavailable = new Image(); 18 18 im_unavailable.src = path_im + 'templates/default/images/unavailable.gif'; 19 19 20 20 var im_fast_menu = new Image(); 21 21 im_fast_menu.src = path_im + 'templates/default/images/menuarwopen.gif'; 22 22 23 23 var im_photo = new Image(); 24 24 im_photo.src = path_im + 'templates/default/images/photo.png'; 25 25 26 26 var im_photo_1 = new Image(); 27 27 im_photo_1.src = path_im + 'templates/default/images/photo_1.png'; … … 34 34 var smile_1 = new Image(); 35 35 smile_1.src = path_im + "templates/default/images/smiles/1.gif"; 36 36 37 37 var smile_2 = new Image(); 38 38 smile_2.src = path_im + "templates/default/images/smiles/2.gif"; 39 39 40 40 var smile_3 = new Image(); 41 41 smile_3.src = path_im + "templates/default/images/smiles/3.gif"; 42 42 43 43 var smile_4 = new Image(); 44 44 smile_4.src = path_im + "templates/default/images/smiles/4.gif"; 45 45 46 46 var smile_5 = new Image(); 47 47 smile_5.src = path_im + "templates/default/images/smiles/5.gif"; 48 48 49 49 var smile_6 = new Image(); 50 50 smile_6.src = path_im + "templates/default/images/smiles/6.gif"; 51 51 52 52 var smile_7 = new Image(); 53 53 smile_7.src = path_im + "templates/default/images/smiles/7.gif"; 54 54 55 55 var smile_8 = new Image(); 56 56 smile_8.src = path_im + "templates/default/images/smiles/8.gif"; 57 57 58 58 var smile_9 = new Image(); 59 59 smile_9.src = path_im + "templates/default/images/smiles/9.gif"; 60 60 61 61 var smile_10 = new Image(); 62 62 smile_10.src = path_im + "templates/default/images/smiles/10.gif"; 63 63 64 64 var smile_11 = new Image(); 65 65 smile_11.src = path_im + "templates/default/images/smiles/11.gif"; 66 66 67 67 var smile_12 = new Image(); 68 smile_12.src = path_im + "templates/default/images/smiles/12.gif"; 68 smile_12.src = path_im + "templates/default/images/smiles/12.gif"; -
trunk/instant_messenger/js/jabber.js
r287 r305 1 function Jabber()1 (function() 2 2 { 3 this.con = null; 4 this.xtools = null; 5 this.send_presence = false; 6 } 7 8 Jabber.prototype = { 9 'doIt' : function(pAction, pParam) 10 { 11 var __this = this; 12 function __connector() 13 { 14 if ( __this.con == null ) 15 __this.con = new IMConnector; 16 } 17 function __xtools() 18 { 19 __this.xtools = new XTools; 20 } 21 22 __connector(); 23 __xtools(); 24 25 if ( typeof pAction != 'string' || typeof pParam != 'object' ) 26 return false; 27 28 switch ( pAction ) 29 { 30 case 'iq' : 31 readIq(pParam); 32 break; 33 case 'message' : 34 readMessage(pParam); 35 break; 36 case 'presence' : 37 readPresence(pParam); 38 break; 39 case 'sendMessage': 40 sendMessage(pParam.message,pParam.from); 41 break; 42 } 43 44 function readContacts(pContacts) 45 { 46 var XmlDoc = "<layer>" + 47 "<lang1>" + im.get_lang("Nickname") + "</lang1>" + 48 "<lang2>" + im.get_lang("Add Contact") + "</lang2>" + 49 "<lang3>" + im.get_lang("Preferences") + "</lang3>" + 50 "<nickname>" + im.get_lang("Username") + "</nickname>" + 51 "<path>" + path_im + "</path>" + 52 "</layer>"; 53 54 im_window.load('__contacts_im_','instant_messenger_content','<title>.::Expresso Messenger::.</title>','window.xsl','',true,true,false ); 55 im_window.elementC('__contacts_im_').innerHTML = __this.xtools.parse(XmlDoc,'layer.xsl'); 56 im_window.elementC('__contacts_im_').innerHTML += __this.xtools.parse(pContacts, 'contacts.xsl'); 57 58 var element = func.byId('im_contact_list').firstChild; 59 60 while(element) 61 { 62 if( element.nodeType == 1 ) 63 if(element.nodeName.toLowerCase() == "img") 64 element.src = im_group_open.src; 65 else if(element.nodeName.toLowerCase() == "div" && element.hasChildNodes()) 66 element.firstChild.src = im_unavailable.src; 67 68 element = element.nextSibling; 69 } 70 71 if(func.byId('im__avatar').src === im_photo.src) 72 { 73 im.request_vcard('this',false); 74 im.ldap_photo('im__avatar'); 75 } 76 77 function handler(Xmldata) 78 { 79 } 80 __this.con.go('$this.Ujabber.setStatus', {'request':handler}); 81 82 var status = ""; 83 if( status = cookies_im.checkCookie('status')) 84 { 85 status = status.substr(status.indexOf("=") + 1,status.length); 86 im.status = status; 87 } 88 else 89 { 90 im.status = 'type=available'; 91 im.statusFlag = 'available'; 92 func.byId('im_status_src').src = im_available.src; 93 } 94 95 im.presence(im.status); 96 } 97 98 function readIq(pIq) 99 { 100 switch ( pIq.getAttribute('id') ) 101 { 102 case 'contacts' : readContacts(pIq); break; 103 case 'vCard' : 104 case 'vCard_user' : 105 readVcard(pIq); 106 break; 107 case 'last_time_user': 108 readLastTimeUser(pIq); 109 break; 110 } 111 } 112 113 function readMessage(pMessage) 114 { 115 if ( pMessage.getElementsByTagName('body').length > 0 ) 116 { 117 var msg = __this.xtools.parse(pMessage, 'message_new.xsl'); 118 var from = pMessage.getAttribute('from'); 119 from = from.substr(0,from.indexOf('/')); 120 121 var iframe = func.byId('iframe_' + from); 122 123 var win; 124 125 if ( !(win = im_window.elementC(from)) ) 126 { 127 im_window.load(from, 'instant_messenger_content', '<title>.:: Expresso Messenger ::.</title>', 'chat.xsl', '310', true, true, true); 128 func.byId(from + '__avatar').src = path_im + "/templates/default/images/photo.png"; 129 } 3 var _conn; 4 var _xtools; 5 var _window; 6 var _ldap; 7 8 var _menu = new ShowHidden(1500); 9 10 var _vcards = []; 11 var _info = []; 12 13 var _win_position = 30; 14 15 function _next_position() 16 { 17 return (_win_position += 30); 18 } 19 20 function _chat(_pJid) 21 { 22 var _win_pos = _next_position(); 23 var _win_chat = _window.load('chat' + _pJid); 24 _win_chat.title('.::Expresso Messenger::.'); 25 _win_chat.size(310); 26 _win_chat.content(_xtools.parse('chat.xsl')); 27 _win_chat.position(_win_pos, _win_pos); 28 _win_chat.wc.style.padding = "3px"; 29 30 _ldap.photo( 31 _pJid.substr(0,_pJid.indexOf('@')), 32 _win_chat.wc.childNodes[2] 33 ); 34 35 var _iframe = top.document.createElement('iframe'); 36 _iframe.id = 'iframe_' + _pJid; 37 38 _win_chat.wc.childNodes[2].appendChild(_iframe); 39 40 _iframe.style.width = '250px'; 41 _iframe.style.height = '100%'; 42 _iframe.style.border = '0'; 43 _iframe.style.margin = '0'; 44 45 var _contentWindow = _iframe.contentWindow; 46 47 _iframe = _contentWindow.document; 48 _iframe.write('<html><body style="padding:0;margin:0;"></body></html>'); 49 _iframe.close(); 50 _iframe.designMode = "On"; 51 52 _contentWindow.focus(); 53 54 _config( 55 _win_chat.wc.childNodes[1].childNodes[5], 56 'onclick', 57 function() 58 { 59 _info[_pJid] = true; 60 _vcard(_pJid); 61 } 62 ); 63 64 _config( 65 _win_chat.wc.childNodes[1].lastChild.previousSibling, 66 'onclick', 67 function() 68 { 69 _sendMessage( 70 _pJid, 71 _iframe, 72 _win_chat.wc.firstChild 73 ); 74 _iframe.body.innerHTML = ''; 75 _contentWindow.focus(); 76 } 77 ); 78 79 function _execKeyAction(e) 80 { 81 switch ( e.keyCode ) 82 { 83 case 13 : 84 if ( !(e.shiftKey) ) 85 { 86 if ( e.type.indexOf('keydown') != -1 ) 87 _sendMessage( 88 _pJid, 89 _iframe, 90 _win_chat.wc.firstChild 91 ); 92 else 93 _iframe.body.innerHTML = ''; 94 95 return false; 96 } 97 break; 98 case 27 : 99 if ( e.type.indexOf('keyup') != -1 ) 100 _win_chat.button(_win_chat.bc); 101 break; 102 } 103 } 104 _config(_contentWindow.document, 'onkeydown', _execKeyAction); 105 _config(_contentWindow.document, 'onkeyup', _execKeyAction); 106 107 if ( !(_vcards[_pJid]) ) 108 _conn.go('$this.Ujabber.getVcard','jid='+_pJid); 109 else 110 _readVCard(_vcards[_pJid]); 111 112 return _win_chat; 113 } 114 115 function _config(pObj, pEvent, pHandler) 116 { 117 if ( typeof pObj == 'object' ) 118 { 119 if ( pEvent.substring(0, 2) == 'on' ) 120 pEvent = pEvent.substring(2, pEvent.length); 121 122 if ( pObj.addEventListener ) 123 pObj.addEventListener(pEvent, pHandler, false); 124 else if ( pObj.attachEvent ) 125 pObj.attachEvent('on' + pEvent, pHandler); 126 } 127 } 128 129 function _openChat(el) 130 { 131 var id = el.id; 132 133 id = id.substr(id.indexOf('_') + 1); 134 135 if ( id.indexOf('/') > -1 ) 136 id = id.substr(0, id.indexOf('/')); 137 138 var _win = _window.get('chat' + id); 139 if ( !_win ) 140 _chat(id); 141 else 142 { 143 _win.wm.style.display = 'block'; 144 _win.focus(); 145 _win.wc.childNodes[2].firstChild.contentWindow.focus(); 146 } 147 } 148 149 function _readContacts(_pContacts) 150 { 151 var _win_contact = _window.load('contact_list'); 152 _win_contact.title('.::Expresso Messenger::.'); 153 _win_contact.size(170, 350); 154 _win_contact.position(30, 30, true); 155 _win_contact.bc.style.display = 'none'; 156 _win_contact.wm.style.display = 'none'; 157 158 var _params = { 159 'lang1':imGetLang('nickname'), 160 'lang2':imGetLang('add contact'), 161 'lang3':imGetLang('preferences'), 162 'nickname':imGetLang('username') 163 }; 164 _win_contact.content( 165 _xtools.parse(_xtools.xml('layer'),'layer.xsl', _params) 166 + _xtools.parse(_pContacts, 'contacts.xsl', {'path':path_im}) 167 ); 168 169 _config(_win_contact.wc.firstChild.childNodes[5], 'onclick', _ldap.add); 170 171 var _contact_list = top.document.getElementById('im_contact_list'); 172 if ( _contact_list ) 173 { 174 _conn.go('$this.Ujabber.setStatus'); 175 _ldap.photo( 176 'im_avatar', 177 _win_contact.wc.firstChild 178 ); 179 _conn.go('$this.Ujabber.getVcard','jid=this'); 180 function _click(e) 181 { 182 var el = ( e.target ) ? e.target : e.srcElement; 183 //alert(e.button); 184 if ( (e.button == 0 && !document.all) || (e.button == 1 && document.all) ) 185 _openChat(el); 130 186 else 131 187 { 132 im_window.load(from, '', '', '', '', true, true, true); 188 var _options = [ 189 imGetLang("Nickname"), 190 imGetLang("Group"), 191 imGetLang("Remove"), 192 imGetLang("It requisition permission"), 193 imGetLang("See Info") 194 ]; 195 196 var _style_text = 'background: no-repeat url(' + path_im 197 + 'templates/default/images/group_close.gif);' 198 + 'padding:2px 4px 2px 16px;'; 199 200 var _xml = _xtools.xml('menu'); 201 var _option; 202 var _item; 203 var _action; 204 var _style; 205 206 for ( var i in _options ) 207 { 208 _option = _xml.createElement('option'); 209 210 _item = _xml.createElement('item'); 211 _item.appendChild(_xml.createTextNode(_options[i])); 212 213 _style = _xml.createElement('style'); 214 _style.appendChild(_xml.createTextNode(_style_text)); 215 216 _option.appendChild(_item); 217 _option.appendChild(_style); 218 219 _xml.documentElement.appendChild(_option); 220 } 221 222 var _sub_menu = top.document.getElementById('sub_' + el.getAttribute('jid')); 223 _sub_menu.innerHTML = _xtools.parse(_xml, 'options.xsl'); 224 _menu.action('onmouseover', 'onmouseout', _sub_menu); 225 226 _sub_menu = _sub_menu.firstChild; 227 _sub_menu.childNodes[0].style.display = 'none'; 228 _sub_menu.childNodes[1].style.display = 'none'; 229 _sub_menu.childNodes[3].style.display = 'none'; 230 _config( 231 _sub_menu.childNodes[2], 232 'onclick', 233 function(e) 234 { 235 var el = ( e.target ) ? e.target : e.srcElement; 236 var jid = el.parentNode.parentNode.id.substr(4); 237 _conn.go('$this.Ujabber.removeContact','jid='+jid); 238 } 239 ); 240 _config( 241 _sub_menu.childNodes[4], 242 'onclick', 243 function() 244 { 245 _info[el.getAttribute('jid')] = true; 246 _vcard(el.getAttribute('jid')); 247 } 248 ); 133 249 } 134 135 if( iframe == null ) 250 } 251 function _hover(e) 252 { 253 var el = ( e.target ) ? e.target : e.srcElement; 254 var color = "#fff"; 255 if ( e.type.indexOf('mouseover') != -1 ) 256 color = "#b4cfe5"; 257 el.style.backgroundColor = color; 258 } 259 var _contact = _contact_list.firstChild; 260 while ( _contact ) 261 { 262 if ( _contact.getAttribute('jid') ) 136 263 { 137 win = im_window.elementC(from); 138 139 var iframe = document.createElement('iframe'); 140 iframe.id = 'iframe_' + from; 141 iframe.style.width = '240px'; 142 iframe.style.height = '65px'; 143 iframe.style.border = '0'; 144 iframe.style.margin = '0'; 145 iframe.style.padding = '0'; 146 147 var _messages_ = win.firstChild.firstChild.nextSibling.nextSibling; 148 _messages_.appendChild(iframe); 149 150 iframe.contentWindow.document.write('<html><body id="' + from + '" style="margin:0px;padding:0px"></body></html>'); 151 iframe.contentWindow.document.close(); 152 iframe.contentWindow.document.designMode = "On"; 153 154 function getEnter(e) 264 //_config(_contact, 'onmousedown', _click); 265 _config(_contact, 'onmouseup', _click); 266 _config(_contact, 'onmouseover', _hover); 267 _config(_contact, 'onmouseout', _hover); 268 } 269 _contact = _contact.nextSibling; 270 } 271 } 272 } 273 274 function _vcard(_pJid) 275 { 276 if ( _vcards[_pJid] ) 277 { 278 if ( _info[_pJid] ) 279 delete _info[_pJid]; 280 281 var _win_vcard; 282 if ( !(_win_vcard = _window.get('vcard_' + _pJid)) ) 283 { 284 var _win_pos = _next_position(); 285 286 _win_vcard = _window.load('vcard_' + _pJid); 287 _win_vcard.title('.:: Informações do Contato ::.'); 288 _win_vcard.size(300); 289 _win_vcard.position(_win_pos, _win_pos); 290 291 _win_vcard.wc.style.padding = "3px"; 292 _win_vcard.bx.style.display = "none"; 293 294 var _params = { 295 'fullname' : imGetLang('Full Name'), 296 'nickname' : imGetLang('Nickname'), 297 'organization' : imGetLang('Organization'), 298 'sector' : imGetLang('Sector'), 299 'role' : imGetLang('Role'), 300 'birthday' : imGetLang('Birthday') 301 }; 302 303 _win_vcard.content( 304 _xtools.parse( 305 _vcards[_pJid], 306 'vcard_contacts.xsl', 307 _params 308 ) 309 ); 310 } 311 else 312 _win_vcard.focus(); 313 } 314 else 315 _conn.go('$this.Ujabber.getVcard', 'jid='+_pJid); 316 } 317 318 function _readVCard(_pVCard) 319 { 320 _vcards[_pVCard.getAttribute('from')] = _pVCard; 321 322 switch ( _pVCard.getAttribute('id') ) 323 { 324 case "vCard_user" : 325 var _layer_nickname = top.document.getElementById('im_layer_nickname'); 326 var _nickname = _pVCard.getElementsByTagName('NICKNAME'); 327 328 if ( _nickname.length && _layer_nickname ) 329 _layer_nickname.innerHTML = _nickname[0].firstChild.nodeValue; 330 break; 331 case "vCard" : 332 if ( _info[_pVCard.getAttribute('from')] ) 333 _vcard(_pVCard.getAttribute('from')); 334 break; 335 } 336 } 337 338 function _readIq(pIq) 339 { 340 switch ( pIq.getAttribute('id') ) 341 { 342 case 'contacts' : 343 _readContacts(pIq); 344 break; 345 case 'vCard' : 346 case 'vCard_user' : 347 _readVCard(pIq); 348 break; 349 default : //alert('readIq : ' + pIq.getAttribute('id')); 350 } 351 } 352 353 function _readMessage(_pMessage) 354 { 355 var _from = _pMessage.getAttribute('from'); 356 357 if ( _from.indexOf('/') > -1 ) 358 _from = _from.substr(0, _from.indexOf('/')); 359 360 var _win = _window.get('chat' + _from); 361 362 if ( _win && _pMessage.getElementsByTagName('composing').length > 0 ) 363 _win.wc.childNodes[1].lastChild.style.display = 'block'; 364 365 if ( _pMessage.getElementsByTagName('body').length > 0 ) 366 { 367 if ( !_win ) 368 _win = _chat(_from); 369 370 var _history = _win.wc.firstChild; 371 372 var _nickname; 373 if ( _vcards[_from] ) 374 { 375 _nickname = _vcards[_from].getElementsByTagName('NICKNAME'); 376 if ( _nickname.length ) 377 _nickname = _nickname[0].firstChild.nodeValue; 378 else 379 _nickname = _from; 380 } 381 else 382 _nickname = _from; 383 384 var _msg = _xtools.parse(_pMessage, 'message_new.xsl', {'nickname':_nickname}); 385 386 if ( _history.scrollHeight == (_history.scrollTop + _history.clientHeight) ) 387 { 388 _history.innerHTML += _msg; 389 _history.scrollTop = _history.scrollHeight; 390 } 391 else 392 // this "else" is to prevent the creation of a flag and the need to use another conditional 393 _history.innerHTML += _msg; 394 395 _win.wc.childNodes[1].lastChild.style.display = 'none'; 396 } 397 398 if ( _win && _pMessage.getElementsByTagName('paused').length > 0 ) 399 _win.wc.childNodes[1].lastChild.style.display = 'none'; 400 } 401 402 function _readPresence(_pPresence) 403 { 404 var _from = _pPresence.getAttribute('from'); 405 if ( _from.indexOf('/') > -1 ) 406 _from = _from.substr(0, _from.indexOf('/')); 407 408 var _presence_type = _pPresence.getAttribute('type'); 409 var _img_status_contact = top.document.getElementById('contact_' + _from); 410 var _mensagem_status_contact = top.document.getElementById('status_' + _from); 411 if ( _mensagem_status_contact ) 412 { 413 _mensagem_status_contact.innerHTML = ''; 414 _mensagem_status_contact.style.display = 'none'; 415 } 416 417 if ( _presence_type ) 418 { 419 switch( _presence_type ) 420 { 421 case 'available' : 422 case 'unavailable' : 423 if ( _img_status_contact ) 424 _img_status_contact.style.backgroundImage = 'url(' + eval('im_' + _presence_type + '.src') + ')'; 425 break; 426 case 'subscribe' : 427 if ( top.document.getElementById('contact_' + _from) ) 155 428 { 156 if ( !(e.shiftKey) && (e.keyCode == 13) ) 157 { 158 if ( e.type.indexOf('keydown') != -1 ) 159 im.SendMessage(from); 160 else 161 iframe.contentWindow.document.body.innerHTML = ''; 162 return false; 163 } 164 } 165 166 func.attachEvent(iframe.contentWindow, 'onkeydown', getEnter); 167 func.attachEvent(iframe.contentWindow, 'onkeyup', getEnter); 168 169 } 170 171 iframe.contentWindow.focus(); 172 173 if ( win ) 174 { 175 if(!(im.nickname_contacts[from])) 176 im.request_vcard(from, false); 177 178 win = win.firstChild.firstChild; 179 var nick = (im.nickname_contacts[from]) ? im.nickname_contacts[from] : from; 180 win.innerHTML += "<b>" + nick + "</b>" + im.insertEmoticons(msg); 181 win.scrollTop = win.scrollHeight; 182 183 if(!(im.nickname_contacts[from])) 184 im.ldap_photo(from + "__avatar"); 185 } 186 im.newMessageNotification(); 187 } 188 } 189 190 function readPresence(pPresence) 191 { 192 //@TODO: presenca antes da lista ocasiona erros 193 //verificar e retirar o controle de erros abaixo 194 try 195 { 196 var jidFrom = pPresence.getAttribute('from'); 197 198 var resource = jidFrom.indexOf('/'); 199 if ( resource > -1 ) 200 jidFrom = jidFrom.substr(0, resource); 201 202 if(pPresence.getAttribute('type')) 203 { 204 switch(pPresence.getAttribute('type')) 205 { 206 case 'subscribe' : 207 if(func.byId(pPresence.getAttribute('from'))) 208 { 209 if(confirm('Autorizar o usuário ' + pPresence.getAttribute('from') + '?')) 210 im.subscription(pPresence.getAttribute('from'),'subscribed'); 211 else 212 im.subscription(pPresence.getAttribute('from'),'unsubscribe'); 213 } 214 else 215 { 216 if(!func.byId(pPresence.getAttribute('from'))) 217 { 218 if(confirm('O usuário ' + pPresence.getAttribute('from') + ' quer adicioná-lo ?')) 219 { 220 im.addrequest(pPresence.getAttribute('from')); 221 im.subscription(pPresence.getAttribute('from'),'subscribed'); 222 } 223 else 224 im.subscription(pPresence.getAttribute('from'),'unsubscribe'); 225 }else 226 im.subscription(pPresence.getAttribute('from'),pPresence.getAttribute('type')); 227 } 228 break; 229 case 'subscribed' : 230 im.subscription(pPresence.getAttribute('from'),pPresence.getAttribute('type')); 231 break; 232 case 'unsubscribed' : 233 //alert('O usuário ' + pPresence.getAttribute('from') + ' não quer mais papo !'); 234 break; 235 case 'unsubscribe' : 236 alert('O usuário ' + pPresence.getAttribute('from') + ' negou seu pedido !'); 237 break; 238 case 'unavailable' : 239 var img = func.byId('img_' + jidFrom); 240 if( img ) 241 { 242 img.src = eval('im_' + pPresence.getAttribute('type') + '.src'); 243 func.confEl(func.byId(jidFrom),"style","margin-left:15px;cursor:pointer;display:none;"); 244 } 245 break; 246 case 'available' : 247 var img = func.byId('img_' + jidFrom); 248 if( img ) 249 { 250 img.src = eval('im_' + pPresence.getAttribute('type') + '.src'); 251 func.confEl(func.byId(jidFrom),"style","margin-left:15px;cursor:pointer;display:block;"); 252 } 253 break; 254 } 255 } 256 else 257 { 258 var node = pPresence.firstChild; 259 while( node ) 260 { 261 if(node.hasChildNodes()) 262 { 263 switch(node.nodeName) 264 { 265 case "show" : 266 var img = func.byId('img_' + jidFrom); 267 if( img ) 268 { 269 img.src = eval('im_' + node.firstChild.nodeValue + '.src'); 270 func.confEl(func.byId(jidFrom),"style","margin-left:15px;cursor:pointer;display:block;"); 271 func.byId('status_' + jidFrom).innerHTML = " "; 272 func.confEl(func.byId('status_' + jidFrom), "style", "font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:none;"); 273 } 274 break; 275 case "status" : 276 var img = func.byId('status_' + jidFrom); 277 if( img ) 278 { 279 func.byId('status_' + jidFrom).innerHTML = ( node.firstChild.nodeValue ) ? node.firstChild.nodeValue : "" ; 280 func.confEl(func.byId('status_' + jidFrom), "style", "font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:block;"); 281 } 282 break; 283 default : 284 var img = func.byId('img_' + jidFrom); 285 if( img ) 286 { 287 img.src = im_available.src; 288 func.byId('status_' + jidFrom).innerHTML = " "; 289 func.confEl(func.byId('status_' + jidFrom), "style", "font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:none;"); 290 } 291 break; 292 } 293 } 294 node = node.nextSibling; 295 } 296 297 if(!im.contacts_off_line) 298 setTimeout("im.off_line()",3000); 299 } 300 } 301 catch(e) 302 { 303 alert('read presence : ' + e + "\n\n" + e.description); 304 } 305 } 306 307 function readLastTimeUser(pLastTime) 308 { 309 var last_time = __this.xtools.parse(pLastTime, 'last_time.xsl'); 310 311 if( __this.send_presence ) 312 { 313 if( last_time != "0") 314 { 315 function handler(Xmldata) 316 { 317 } 318 __this.con.go('$this.Ujabber.setStatus', {'request':handler}); 319 320 var status = ""; 321 if( status = cookies_im.checkCookie('status')) 322 { 323 status = status.substr(status.indexOf("=") + 1,status.length); 324 im.status = status; 429 _conn.go('$this.Ujabber.subscription', 'jid=' + _from + '&type=subscribed' ); 325 430 } 326 431 else 327 432 { 328 im.status = 'type=available'; 329 im.statusFlag = 'available'; 330 func.byId('im_status_src').src = im_available.src; 433 if ( !_window.get('subscription' + _from) ) 434 { 435 var _win_pos = _next_position(); 436 var _win_subscription = _window.load('subscription' + _from); 437 _win_subscription.title('.::Expresso Messenger::.'); 438 _win_subscription.position(_win_pos, _win_pos); 439 _win_subscription.size(200); 440 _win_subscription.wc.style.padding = "3px"; 441 _win_subscription.bc.style.display = 'none'; 442 _win_subscription.bx.style.display = 'none'; 443 _win_subscription.bz.style.display = 'none'; 444 445 var _params = { 446 'jid' : _from, 447 'lang1' : 'deseja adiciona-lo como contato.', 448 'lang2' : imGetLang('nickname'), 449 'lang3' : imGetLang('group'), 450 'lang4' : imGetLang('allow'), 451 'lang5' : imGetLang('deny') 452 }; 453 454 _win_subscription.content( 455 _xtools.parse(_xtools.xml('subscribe'), 'subscribe.xsl', _params) 456 ); 457 458 _win_subscription.wc.childNodes[2].style.margin = '5px'; 459 _win_subscription.wc.childNodes[3].style.margin = '5px'; 460 461 _config( 462 _win_subscription.wc.childNodes[2], 463 'onclick', 464 function() 465 { 466 _win_subscription.wc.childNodes[1].style.display = 'block'; 467 _win_subscription.size(450); 468 _config( 469 _win_subscription.wc.childNodes[2], 470 'onclick', 471 function() 472 { 473 474 var _status = top.document.getElementById('im_status_add_' + _from); 475 var _name = top.document.getElementById('im_name_' + _from); 476 var _group = top.document.getElementById('im_group_' + _from); 477 478 _name.value = _name.value.replace(/^( )*|( )*$/g, ''); 479 _group.value = _group.value.replace(/^( )*|( )*$/g, ''); 480 481 if ( !(_name.value) || !(_group.value) ) 482 { 483 _status.innerHTML = '<br/>O campo destacado em vermelho é obrigatório!<br/>'; 484 485 if ( !(_name.value) ) 486 { 487 _name.previousSibling.style.color = "#f00"; 488 _status.innerHTML += '<br/>** Informe um "NOME" para o contato.'; 489 } 490 491 if ( !(_group.value) ) 492 { 493 _group.previousSibling.style.color = "#f00"; 494 _status.innerHTML += '<br/>** Informe um "GRUPO" para o contato.'; 495 } 496 } 497 else 498 { 499 _status.innerHTML = '<br/>Adicionado contanto, aguarde.<br/>'; 500 501 _conn.go( 502 '$this.Ujabber.allowContact', 503 function() 504 { 505 _status.innerHTML = '<br/>Contato autorizado com "SUCESSO"!<br/>'; 506 _win_subscription.button(_win_subscription.bc); 507 }, 508 'uid='+_from.substr(0,_from.indexOf('@'))+'&name='+_name.value+'&group='+_group.value 509 ); 510 511 _name.value = ''; 512 _group.value = ''; 513 } 514 } 515 ); 516 } 517 ); 518 } 331 519 } 332 333 im.presence(im.status); 520 break; 521 case 'unsubscribe' : 522 case 'unsubscribed' : 523 _conn.go('$this.Ujabber.removeContact','jid=' + _from); 524 break; 525 default : //alert('readPresence : ' + _presence_type); 526 } 527 } 528 else 529 { 530 var _node = _pPresence.firstChild; 531 while( _node ) 532 { 533 if ( _node.hasChildNodes() ) 534 { 535 switch ( _node.nodeName ) 536 { 537 case "show" : 538 if ( _img_status_contact ) 539 _img_status_contact.style.backgroundImage = 'url(' + eval('im_' + _node.firstChild.nodeValue + '.src') + ')'; 540 break; 541 case "status" : 542 if ( _mensagem_status_contact ) 543 { 544 if ( _node.firstChild.nodeValue ) 545 _mensagem_status_contact.innerHTML = _node.firstChild.nodeValue; 546 _mensagem_status_contact.style.display = 'block'; 547 } 548 break; 549 default : 550 if ( _img_status_contact ) 551 _img_status_contact.style.backgroundImage = 'url(' + im_available.src + ')'; 552 } 334 553 } 335 } 336 __this.send_presence = true; 337 } 338 339 function readVcard(pVcard) 340 { 341 342 switch(pVcard.getAttribute('id')) 343 { 344 case "vCard_user" : 345 346 var vcard = pVcard.firstChild; 347 var cc = vcard.firstChild; 348 while( cc ) 349 { 350 if(cc.nodeName == "NICKNAME" || cc.nodeName == "nickname") 351 { 352 if(cc.firstChild.nodeValue) 353 func.byId('im_layer_nickname').innerHTML = cc.firstChild.nodeValue; 354 } 355 cc = cc.nextSibling; 356 } 357 if( im.vcard ) 358 templates.vcard_user(pVcard); 359 break; 360 361 case "vCard" : 362 363 var vcard = __this.xtools.parse(pVcard,'nickname.xsl'); 364 im.nickname_contacts[vcard.substr(0,vcard.indexOf(','))] = ( vcard.substr(vcard.indexOf(',')+1) ) ? vcard.substr(vcard.indexOf(',')+1) : vcard.substr(0,vcard.indexOf(',')) ; 365 if( im.vcard ) 366 templates.vcard_contact(pVcard); 367 break; 368 } 369 } 370 371 function sendMessage(pMessage, pFrom) 372 { 373 function handler_sendMessage (data) 374 { 375 } 376 377 var sendMessage = pMessage.innerHTML; 378 pMessage.innerHTML = pMessage.innerHTML.replace(/^( )*|( )*$/g, ''); 379 380 var send = false; 381 var node = pMessage.firstChild; 382 383 while ( node && !send ) 384 { 385 if ( node.nodeName.toLowerCase() != 'br' ) 386 send = true; 387 node = node.nextSibling; 388 } 389 390 if ( send ) 391 __this.con.go('$this.Ujabber.sendMessage', {'request':handler_sendMessage},"to="+pMessage.getAttribute('id')+"&body="+escape(pMessage.innerHTML)); 392 pMessage.innerHTML = ''; 393 394 var win = im_window.elementC(pFrom); 395 if ( win ) 396 { 397 win = win.firstChild.firstChild; 398 win.innerHTML += "<b>" + im.get_lang("says") +":</br></b>" + sendMessage + "</br></br>"; 399 win.scrollTop = win.scrollHeight; 400 } 401 } 402 } 403 }; 554 _node = _node.nextSibling; 555 } 556 } 557 } 558 559 function _sendMessage(_pJid, _pMessage, _pHistory) 560 { 561 var m1 = _pMessage = _pMessage.body.innerHTML; 562 var m2 = _pMessage = _pMessage.replace(/( )+|( )+/ig, ' '); 563 var m3 = _pMessage = _pMessage.replace(/(<br[^>]*>)+/ig, '<br/>'); 564 var m4 = _pMessage = _pMessage.replace(/^( )+|( )+$|^(<br\/>)|(<br\/>)$/g, ''); 565 566 //_pMessage = _pMessage.replace(/( )+(<br[^>]*>)+/g, '<br/>'); 567 //_pMessage = _pMessage.replace(/(<br[^>]*>)*( )+(<br[^>]*>)+/g, ''); 568 //_pMessage = _pMessage.replace(/^(<br[^>]*>)*|(<br[^>]*>)*$/g, ''); 569 570 if ( _pMessage != '' ) 571 { 572 _conn.go('$this.Ujabber.sendMessage', "to=" + _pJid + "&body=" + escape(_pMessage)); 573 574 if ( _pHistory.scrollHeight == (_pHistory.scrollTop + _pHistory.clientHeight) ) 575 { 576 _pHistory.innerHTML += '<b>' + imGetLang('says') + ':</b><br/>' + _pMessage + '<br/><br/>'; 577 _pHistory.scrollTop = _pHistory.scrollHeight; 578 } 579 else 580 // this "else" is to prevent the creation of a flag and the need to use another conditional 581 _pHistory.innerHTML += '<b>' + imGetLang('says') + ':</b><br/>' + _pMessage + '<br/><br/>'; 582 } 583 } 584 585 function _action(_pAction) 586 { 587 //alert ( typeof pAction + "\n\n" + pAction.nodeName ) 588 if ( typeof _pAction == 'object' && _pAction.nodeName ) 589 { 590 switch ( _pAction.nodeName ) 591 { 592 case 'iq' : 593 _readIq(_pAction); 594 break; 595 case 'message' : 596 _readMessage(_pAction); 597 break; 598 case 'presence' : 599 _readPresence(_pAction); 600 break; 601 //default : alert('action : ' + _pAction.nodeName); 602 } 603 } 604 } 605 606 function Jabber() 607 { 608 _conn = arguments[0]; 609 _xtools = arguments[1]; 610 _window = arguments[2]; 611 _ldap = arguments[3]; 612 } 613 614 Jabber.prototype.action = _action; 615 window.Jabber = Jabber; 616 } 617 )(); -
trunk/instant_messenger/js/xtools.js
r260 r305 1 function XTools()1 (function() 2 2 { 3 } 3 var _FILES = []; 4 4 5 XTools.prototype = { 6 'convert' : function(pString) 5 function _convert(pString) 7 6 { 8 7 if ( typeof pString != 'string' ) 9 8 return false; 10 9 11 if ( window.ActiveXObject)10 if ( window.ActiveXObject ) 12 11 { 13 var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");14 xmlDoc.async = "false";15 xmlDoc.loadXML(pString);12 var _xmlDoc = new ActiveXObject("Microsoft.XMLDOM"); 13 _xmlDoc.async = "false"; 14 _xmlDoc.loadXML(pString); 16 15 } 17 16 else 18 17 { 19 18 var parser = new DOMParser(); 20 var xmlDoc = parser.parseFromString(pString, "text/xml");19 var _xmlDoc = parser.parseFromString(pString, "text/xml"); 21 20 } 22 21 23 return xmlDoc; 24 }, 25 'load' : function(pFile) 22 return _xmlDoc; 23 } 24 25 function _load(pFile) 26 26 { 27 var data = null; 28 if ( document.implementation.createDocument ) 29 data = document.implementation.createDocument("", "", null); 27 pFile = this._PATH + 'xsl/' + pFile; 28 if ( !(_FILES[pFile]) ) 29 { 30 var _data = null; 31 if ( document.implementation.createDocument ) 32 _data = document.implementation.createDocument("", "", null); 33 else 34 _data = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 35 36 _data.async = false; 37 _data.load(pFile + '?' + Date.parse(new Date)); 38 _FILES[pFile] = _data; 39 } 40 return _FILES[pFile]; 41 } 42 43 function _parse() 44 { 45 if ( arguments.length == 1 ) 46 { 47 pXML = _xml('root'); 48 pXSL = arguments[0]; 49 } 30 50 else 31 data = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); 51 { 52 pXML = arguments[0]; 53 pXSL = arguments[1]; 54 } 55 switch ( typeof pXML ) 56 { 57 case 'object' : 58 break; 59 case 'string' : 60 if ( pXML.indexOf('<') == 0 ) 61 pXML = _convert(pXML); 62 else 63 pXML = _load.call(this, pXML); 64 break; 65 default : 66 return {'error':'invalid xml'} 67 } 68 switch ( typeof pXSL ) 69 { 70 case 'object' : 71 break; 72 case 'string' : 73 pXSL = _load.call(this, pXSL); 74 break; 75 default : 76 return {'error':'invalid xsl'} 77 } 32 78 33 data.async = false; 34 data.load( path_im + 'xsl/' + pFile + '?' + Date.parse(new Date)); 35 return data; 36 }, 37 'parse' : function(pXML, pXSL) 38 { 39 try 79 var fragment = null; 80 if ( window.XSLTProcessor ) 40 81 { 41 switch ( typeof pXML ) 82 var xslProc = new XSLTProcessor(); 83 xslProc.importStylesheet(pXSL); 84 85 if ( (arguments.length == 3) && (typeof arguments[2] == 'object') ) 42 86 { 43 case 'object' : 44 break; 45 case 'string' : 46 if ( pXML.indexOf('<') == 0 ) 47 pXML = this.convert(pXML); 48 else 49 pXML = this.load(pXML); 50 break; 51 default : 52 return {'error':'invalid xml'} 53 } 54 switch ( typeof pXSL ) 55 { 56 case 'object' : 57 break; 58 case 'string' : 59 pXSL = this.load(pXSL); 60 break; 61 default : 62 return {'error':'invalid xsl'} 87 var params = arguments[2]; 88 for (var i in params ) 89 xslProc.setParameter(null, i, params[i]); 63 90 } 64 91 65 var fragment = null; 66 if ( window.XSLTProcessor ) 92 fragment = xslProc.transformToFragment(pXML, document); 93 94 // para retornar valor igual ao ie. 95 var aux = document.createElement("div"); 96 aux.appendChild(fragment); 97 fragment = aux.innerHTML; 98 } 99 else 100 { 101 var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate"); 102 xslTemplate.stylesheet = pXSL; 103 104 var xslProc = xslTemplate.createProcessor(); 105 xslProc.input = pXML; 106 107 if ( (arguments.length == 3) && (typeof arguments[2] == 'object') ) 67 108 { 68 var xslProc = new XSLTProcessor(); 69 xslProc.importStylesheet(pXSL); 70 fragment = xslProc.transformToFragment(pXML, document); 109 var params = arguments[2]; 110 for (var i in params ) 111 xslProc.addParameter(i, params[i], ''); 112 } 71 113 72 // para retornar valor igual ao ie. 73 var aux = document.createElement("div"); 74 aux.appendChild(fragment); 75 fragment = aux.innerHTML; 76 } 77 else 78 { 79 var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate"); 80 xslTemplate.stylesheet = pXSL; 114 xslProc.transform(); 115 fragment = xslProc.output; 116 } 117 return fragment; 118 } 81 119 82 var myXslProc = xslTemplate.createProcessor(); 83 myXslProc.input = pXML; 120 function _xml() 121 { 122 var a = false; 123 if ( document.implementation.createDocument ) 124 a = document.implementation.createDocument("", "", null); 125 else if ( ActiveXObject ) 126 a = new ActiveXObject("Msxml2.DOMDocument"); 84 127 85 myXslProc.transform(); 86 fragment = myXslProc.output; 87 } 88 return fragment; 89 } 90 catch(e) 91 { 92 alert("transform\n\n" + e + "\n\n" + e.description); 93 } 94 }, 95 'xml' : function() 128 if ( arguments.length == 1 && typeof arguments[0] == 'string' ) 129 a.appendChild(a.createElement(arguments[0])); 130 //with ( a ) 131 // appendChild(createProcessingInstruction("xml", "version='1.0'")); 132 133 return a; 134 } 135 136 function XTools() 96 137 { 97 try 98 { 99 var a = false; 100 if ( document.implementation.createDocument ) 101 a = document.implementation.createDocument("", "", null); 102 else if ( ActiveXObject ) 103 a = new ActiveXObject("Msxml2.DOMDocument"); 138 var _argv = arguments; 139 this._PATH = ( _argv.length > 0 ) ? 140 _argv[0] : ''; 141 if ( this._PATH != '' && this._PATH.lastIndexOf('/') != (this._PATH.length - 1) ) 142 this._PATH += '/'; 143 } 104 144 105 //with ( a ) 106 // appendChild(createProcessingInstruction("xml", "version='1.0'")); 107 108 return a; 109 } 110 catch(e) 111 { 112 alert("create\n\n" + e + "\n\n" + e.description); 113 } 114 } 115 }; 145 XTools.prototype.convert = _convert; 146 XTools.prototype.load = _load; 147 XTools.prototype.parse = _parse; 148 XTools.prototype.xml = _xml; 149 window.XTools = XTools; 150 } 151 )(); -
trunk/instant_messenger/templates/default/css/chat.css
r287 r305 1 1 /***** Chat *****/ 2 2 3 . avatar3 .chat_buttons 4 4 { 5 width: 49px; 6 height: 65px; 7 margin: 2px; 8 border: 1px solid; 9 border-color: #cecece; 5 cursor: pointer; 6 float: left; 7 height: 20px; 8 margin: 2px 2px 0 0; 9 position: relative; 10 width: 25px; 10 11 } 11 12 … … 13 14 { 14 15 background: url(../images/bold.gif) no-repeat top center; 15 height: 20px; 16 width: 25px; 17 float: left; 18 position: relative; 19 margin-top: 2px; 20 margin-right: 2px; 21 cursor: pointer; 16 display: none; 22 17 } 23 18 … … 25 20 { 26 21 background: url(../images/italicize.gif) no-repeat top center; 27 height: 20px; 28 width: 25px; 29 float: left; 30 position: relative; 31 margin-top: 2px; 32 margin-right: 2px; 33 cursor: pointer; 22 display: none; 34 23 } 35 24 … … 37 26 { 38 27 background: url(../images/underline.gif) no-repeat top center; 39 height: 20px; 40 width: 25px; 41 float: left; 42 margin-top: 2px; 43 margin-right: 2px; 44 position: relative; 45 cursor: pointer; 28 display: none; 46 29 } 47 30 … … 49 32 { 50 33 background: url(../images/color.gif) no-repeat top center; 51 height: 20px; 52 width: 25px; 53 float: left; 54 position: relative; 55 margin-top: 2px; 56 margin-right: 2px; 57 cursor: pointer; 34 display: none; 58 35 } 59 36 … … 61 38 { 62 39 background: url(../images/emoticonlabel.gif) no-repeat top center; 63 height: 19px; 64 width: 21px; 65 float: left; 66 position: relative; 67 margin-top: 2px; 68 cursor: pointer; 40 display: none; 69 41 } 70 42 … … 72 44 { 73 45 background: url(../images/profileBuddy.gif) no-repeat top center; 74 height: 20px;75 width: 25px;76 float: left;77 position: relative;78 margin-top: 2px;79 margin-left: 2px;80 cursor: pointer;81 46 } 82 47 83 .button_sendMessage 48 .composing 49 { 50 background: url(../images/typing.gif) no-repeat top center; 51 display: none; 52 float:right; 53 position: relative; 54 } 55 56 .sendMessage 84 57 { 85 58 background: url(../images/barn.gif) repeat top center; 59 border: 1px solid #cecece; 60 color: #fff !important; 61 cursor: pointer; 62 float:right; 63 font: 12px Verdana, arial, helvetica, serif; 64 font-weight: bold; 86 65 height: 20px; 66 margin-top: 3px; 67 position: relative; 68 overflow: hidden; 69 text-align: center; 87 70 width: 50px; 88 color: #fff !important;89 font: 9pt Verdana, arial, helvetica, serif;90 font-weight: bold;91 cursor: pointer;92 }93 94 .div_sendMessage95 {96 float:right;97 position: relative;98 margin-top: 3px;99 margin-left: 60px;100 71 } 101 72 … … 105 76 border: 1px solid; 106 77 border-color: #b3b3b3 #cecece #cecece #b3b3b3; 107 width: 289px;108 78 height: 180px; 109 79 cursor: text; … … 120 90 border-color: #b3b3b3 #cecece #cecece #b3b3b3; 121 91 cursor: text; 122 height: 65px; 123 padding-right:50px; 124 width: auto; 92 height: 65px; 93 padding-right:50px !important; 125 94 } 126 95 127 96 .toolbar_buttons 128 97 { 129 width:289px; 130 height:29px; 98 height:29px; 131 99 } 132 100 -
trunk/instant_messenger/templates/default/css/common.css
r275 r305 1 1 /* IM:WINDOW - ADD USER */ 2 2 3 select.add_user 3 div.add_organization_members 4 4 { 5 font: 8pt Verdana, Arial, Helvetica, sans-serif; 6 font-weight: normal; 7 border-color: #809aa9; 8 border-width: 1px 1px; 9 border-style: solid; 10 margin: 2px 2px 2px 2px; 11 width: 400px; 12 13 5 margin-bottom: 10px; 14 6 } 15 7 16 table.add_user 8 div.add_organization_members span 17 9 { 18 margin-left: 5px; 19 margin-top: 5px; 10 border-bottom: 1px solid #809aa9; 11 float:left; 12 font-size: 8pt !important; 13 font-family: Arial, Verdana, helvetica, sans-serif !important; 14 font-weight: bold; 15 position:aboslute; 16 width: 200px; 20 17 } 21 18 22 td.add_user 19 div.add_organization_members div 23 20 { 21 font-weight: normal; 22 margin: 2px; 23 padding: 3px; 24 height: 150px; 25 overflow: auto; 26 } 27 28 div.add_organization_members div span 29 { 30 border-bottom: 1px dashed #809aa9; 31 clear:both; 32 float:left; 33 font-weight: normal; 34 letter-spacing: 0.2em; 35 padding: 4px 0; 36 width: 98% 37 } 38 39 div.add_organization_members div#im_ldap_ou 40 { 41 float: left; 42 width: 200px; 43 } 44 45 div.add_member_info 46 { 47 margin: 10px 0; 48 display: none; 49 } 50 51 div.add_member_info span 52 { 53 float: left; 24 54 font: 8pt Verdana, Arial, Helvetica, sans-serif; 55 font-weight: bold; 56 margin-right: 3px; 57 text-align: right; 58 width: 80px; 59 } 60 61 div.add_action 62 { 63 padding-bottom: 30px; 64 margin-left: 83px; 65 display: none; 66 } 67 68 div.add_action span 69 { 70 background: #b4cfe5; 71 border: 1px solid; 72 float: left; 73 font: 8pt Verdana, Arial, Helvetica, sans-serif; 74 font-weight: bold; 75 letter-spacing: 1px; 76 margin-right: 5px; 77 padding: 0 15px; 78 text-align: center; 79 line-height: 1.5em; 80 } 81 82 span.im_button 83 { 84 background: #b4cfe5; 85 border: 1px solid; 86 font: 8pt Verdana, Arial, Helvetica, sans-serif; 87 font-weight: bold; 88 letter-spacing: 1px; 89 padding: 0 15px; 90 text-align: center; 91 line-height: 1.5em; 25 92 } 26 93 … … 32 99 .layer 33 100 { 101 background: url(../images/photo.png) no-repeat 2px 2px; 34 102 border: 1px solid #b4cfe5; 103 height: 65px; 35 104 margin: 2px; 105 padding: 2px 0px 2px 54px; 36 106 } 37 107 -
trunk/instant_messenger/templates/default/css/window.css
r260 r305 23 23 #instant_messenger_content .titulo 24 24 { 25 background: #b4cfe5; 26 cursor: pointer; 25 27 font: 8pt Verdana, Arial, Helvetica, sans-serif; 26 background: #b4cfe5;28 height: 20px; 27 29 margin: 0px 0px; 28 30 padding: 0px 0px 0px 5px; 29 cursor: pointer; 30 height: 20px; 31 overflow: hidden; 31 32 } 32 33 … … 34 35 { 35 36 cursor: pointer; 36 float: left;37 float: right; 37 38 margin-right: 2px; 38 39 position: relative; 39 40 width: 13px; 40 41 height:13px; 42 } 43 44 #instant_messenger_content .buttons 45 { 46 position:absolute !important; 47 right:3px !important; 48 width:50px !important; 41 49 } 42 50 … … 70 78 margin: 0px 5px; 71 79 cursor: default; 80 overflow: auto; 72 81 } 73 82 -
trunk/instant_messenger/webjabber/webjabber.c
r287 r305 621 621 strcpy(type, type_pos); 622 622 623 //printf(" str[%2d]: %s\n", strlen(str), str);624 //printf("user[%2d]: %s\n", strlen(user), user);625 //printf("pass[%2d]: %s\n", strlen(pass), pass);626 //printf("type[%2d]: %s\n", strlen(type), type);627 //printf(" fd[%2d]: client\n", *(accept->fd));623 printf(" str[%2d]: %s\n", strlen(str), str); 624 printf("user[%2d]: %s\n", strlen(user), user); 625 printf("pass[%2d]: %s\n", strlen(pass), pass); 626 printf("type[%2d]: %s\n", strlen(type), type); 627 printf(" fd[%2d]: client\n", *(accept->fd)); 628 628 629 629 //if ( (client = LookFor (user, pass)) != (struct client *)NULL ) … … 840 840 if ( strlen(buf_2_jabber) > 0 ) 841 841 { 842 //printf("(client/jabber[#%d])[%d]:\n{\n%s.......\n}\n", jabber_fd, strlen(buf_2_jabber), buf_2_jabber);842 printf("(client/jabber[#%d])[%d]:\n{\n%s.......\n}\n", jabber_fd, strlen(buf_2_jabber), buf_2_jabber); 843 843 if ( strstr(buf_2_jabber, "<?xml") != NULL ) 844 844 do_auth = 1; … … 862 862 if ( strlen(buf_2_client) > 0 ) 863 863 { 864 //printf("(jabber/client[#%d])[%d]:\n{\n%s.......\n}\n", client_fd, strlen(buf_2_client), buf_2_client);865 864 if ( do_auth && strstr(buf_2_jabber, "<iq xmlns='jabber:client'") != NULL ) 866 865 do_auth = 0; 866 printf("(jabber/client[#%d])[%d]:\n{\n%s.......\n}\n", client_fd, strlen(buf_2_client), buf_2_client); 867 867 } 868 868 … … 871 871 while ( (bytes_rcvd_client != 0) && (bytes_rcvd_jabber != 0) ); 872 872 873 //puts("\n\n\nFIM.......................\n\n\n");873 puts("\n\n\nFIM.......................\n\n\n"); 874 874 875 875 free(buf_2_jabber); -
trunk/instant_messenger/xsl/add_user.xsl
r275 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="adduser"> 5 <xsl:param name="lang1" /> 6 <xsl:param name="lang2" /> 7 <xsl:param name="lang3" /> 8 <xsl:param name="lang4" /> 9 <xsl:param name="lang5" /> 10 <xsl:param name="lang6" /> 6 11 7 <div style="margin-left:5px;margin-top:5px"> 8 <span style="font-size:8pt !important; font-family: Arial, Verdana, helvetica, sans-serif !important; position:aboslute; float:left;"> 9 <b><xsl:value-of select="top/lang1"/> .: </b> 10 </span> 11 <br/> 12 <select id="im_ldap_ou" onclick="javascript:im.ldap_search_ou(this);" size="10"></select> 13 <span id="__span_load_im" style="background-color:#cc4444;color:white;display:none;position:absolute;right:5px;top:26px">Carregando .....</span> 14 <select id="im_ldap_user" size="10" class="add_user" onclick="im.ldap_adduser(this);"></select> 15 </div> 12 <xsl:template match="adduser"> 16 13 17 <table border="0" cellpadding="1" cellspacing="2" class="add_user"> 18 <tr> 19 <td class="add_user"><b><xsl:value-of select="table/lang1"/>.:</b></td> 20 <td><input id="im_jid" type="text" size="40" maxlength="40" readonly="true" class="add_user" /></td> 21 </tr> 22 <tr> 23 <td class="add_user"><b><xsl:value-of select="table/lang2"/>.:</b></td> 24 <td><input id="im_name" type="text" size="20" maxlength="20" class="add_user" onclick="javascript:im.focus_select(this,event);" onmousedown="javascript:im.focus_select(this,event);"/></td> 25 </tr> 26 <tr> 27 <td class="add_user"><b><xsl:value-of select="table/lang3"/>.:</b></td> 28 <td><input id="im_group" type="text" size="20" maxlength="20" class="add_user" onclick="javascript:im.focus_select(this,event);" onmousedown="javascript:im.focus_select(this,event);"/></td> 29 </tr> 30 <tr> 31 <td><input id="im_uid" type="hidden" size="30" maxlength="30" /></td> 32 </tr> 33 <tr> 34 <td colspan="2"> 35 <input type="button" value="{table/lang4}" onclick="javascript:im.adduser();"/> 36 <input type="button" value="{table/lang5}" onclick="javascript:im_window.window_close('add_user_im');" /> 37 <span id="im_status_add" style="color:#f00;font-weight:bold;margin-left:10px;"></span> 38 </td> 39 </tr> 40 </table> 14 <div class="add_organization_members"> 15 <span style="margin: 5px;"><xsl:value-of select="$lang1"/> .: </span> 16 <span style="margin: 5px; width:auto;"><xsl:value-of select="$lang2"/> .: </span> 17 <br style="clear:both"/> 18 <div id="im_ldap_ou"></div> 19 <div id="im_ldap_user"></div> 20 </div> 41 21 42 </xsl:template> 22 <div class="add_member_info"> 23 <span><xsl:value-of select="$lang3"/> :</span> 24 <input style="" id="im_name" type="text" size="50" maxlength="50" class="add_user" onclick="this.select();"/> 25 <br/><br style="line-height:4px"/> 26 <span><xsl:value-of select="$lang4"/> :</span> 27 <input id="im_group" type="text" size="50" maxlength="50" class="add_user" onclick="this.select();"/> 28 </div> 29 30 <div class="add_action"> 31 <span><xsl:value-of select="$lang5"/></span> 32 <span><xsl:value-of select="$lang6"/></span> 33 </div> 34 35 <span id="im_status_add" style="color:#f00;font-weight:bold;"></span> 36 <span id="__span_load_im" style="background-color:#cc4444;color:white;display:none;position:absolute;right:5px;top:26px">Carregando .....</span> 37 <input id="im_jid" type="hidden" /> 38 <input id="im_uid" type="hidden" /> 39 40 </xsl:template> 43 41 44 42 </xsl:stylesheet> -
trunk/instant_messenger/xsl/chat.xsl
r287 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="/window"> 6 <div id="{name}__window_master" style="width:{width};" class="window" onmousedown="javascript:drag_drop.drag(event,this); javascript:im_window.window_focus(this);" dragdrop="true"> 7 <b class="corner blackcorner"> 8 <b class="corner1 blackcorner1"><b></b></b> 9 <b class="corner2 blackcorner2"><b></b></b> 10 <b class="corner3 blackcorner3"></b> 11 <b class="corner4 blackcorner4"></b> 12 <b class="corner5 blackcorner5"></b> 13 </b> 14 <div id="{name}__window_title" class="titulo" dragdrop="true"> 15 <span id="{name}__window_title" style="float:left;" dragdrop="true"> 16 <xsl:value-of select="title" /> 17 </span> 18 <div id="{name}__window_title_buttons" style="float:right;"> 19 <div id="{name}__button_minimize" style="display: {pButMin};" class="button_minimize" onclick="javascript:im_window.window_minimize('{name}');"></div> 20 <div id="{name}__button_maximize" style="display: {pButMax};" class="button_maximize1" onclick="javascript:im_window.window_maximize('{name}');"></div> 21 <div id="{name}__button_close" style="display: {pButClose};" class="button_close" onclick="javascript:im_window.window_close('{name}');"></div> 22 </div> 5 <xsl:template match="/"> 6 <div class="history"></div> 7 <div class="toolbar_buttons"> 8 <div class="chat_buttons button_bold"></div> 9 <div class="chat_buttons button_italic"></div> 10 <div class="chat_buttons button_underline"></div> 11 <div class="chat_buttons button_color"></div> 12 <div class="chat_buttons button_emoticons"></div> 13 <div class="chat_buttons button_profile"></div> 14 <div class="chat_buttons button_popup"></div> 15 <div class="sendMessage">SEND</div> 16 <div class="chat_buttons composing"></div> 23 17 </div> 24 <div id="{name}__window_body" class="body"> 25 <div id="{name}__window_body_content" class="content"> 26 <div style="margin:3px 3px;"> 27 <div class="history"></div> 28 <div class="toolbar_buttons"> 29 <div id="{name}__button_bold" class="button_bold" onclick="javascript:im.conf_font('{name}','button_bold');"></div> 30 <div id="{name}__button_italic" class="button_italic" onclick="javascript:im.conf_font('{name}','button_italic');"></div> 31 <div id="{name}__button_underline" class="button_underline" onclick="javascript:im.conf_font('{name}','button_underline');"></div> 32 <div id="{name}__button_color" class="button_color" onclick="javascript:im.conf_font('{name}','button_color');"></div> 33 <div id="{name}__button_emoticons" class="button_emoticons" onclick="javascript:im.conf_font('{name}','button_emoticons');"></div> 34 <div id="{name}__button_profile" class="button_profile" onclick="im.request_vcard('{name}','contact');"></div> 35 <div id="{name}__button_sendMessage" class="div_sendMessage"><input type="button" class="button_sendMessage" value="Send" onclick="im.SendMessage('{name}');"/></div> 36 <div id="{name}__button_dest"></div> 37 </div> 38 <div id="{name}__avatar" class="messages"></div> 39 </div> 40 </div> 41 </div> 42 <div id="{name}__window_bottom" class="rodape" dragdrop="false"></div> 43 </div> 44 </xsl:template> 18 <div class="messages"></div> 19 </xsl:template> 45 20 46 21 </xsl:stylesheet> -
trunk/instant_messenger/xsl/contacts.xsl
r260 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="iq/query"> 6 <xsl:apply-templates select="." mode="list" /> 7 </xsl:template> 5 <xsl:param name="path" /> 8 6 9 <xsl:template match="*" mode="list"> 10 <div id="im_contact_list" style="margin:2px;width:auto;height:200px;overflow-y:auto;"> 11 <xsl:for-each select="item"> 12 <xsl:sort select="group" case-order="upper-first" /> 7 <xsl:template match="iq/query"> 8 <xsl:apply-templates select="." mode="list" /> 9 </xsl:template> 10 11 <xsl:template match="*" mode="list"> 12 <div id="im_contact_list" style="margin:2px;"> 13 <xsl:for-each select="item"> 14 <xsl:sort select="group" case-order="upper-first" /> 15 <xsl:choose> 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> 19 <xsl:apply-templates select="." mode="contacts"/> 20 </xsl:when> 21 <xsl:otherwise> 22 <xsl:apply-templates select="." mode="contacts"/> 23 </xsl:otherwise> 24 </xsl:choose> 25 </xsl:for-each> 26 </div> 27 </xsl:template> 28 29 <xsl:template match="*" mode="contacts"> 30 <div style="background:url({$path}templates/default/images/unavailable.gif) no-repeat 15px;padding-left:30px;cursor:pointer;display:block;" id="contact_{@jid}" idgroup="{group}" idname="{@name}" jid="{@jid}"> 13 31 <xsl:choose> 14 <xsl:when test="not(group = preceding-sibling::item/group)"> 15 <img id="group_{group[current()]}" src="instant_messenger/templates/default/images/group_open.gif" onclick="javascript:im.group_close('{group[current()]}');"/> 16 <b><xsl:value-of select="group[current()]" /><br/></b> 17 <xsl:apply-templates select="." mode="contacts"/> 32 <xsl:when test="@name"> 33 <xsl:value-of select="@name"/> 18 34 </xsl:when> 19 35 <xsl:otherwise> 20 <xsl: apply-templates select="." mode="contacts"/>36 <xsl:value-of select="@jid"/> 21 37 </xsl:otherwise> 22 38 </xsl:choose> 23 </xsl:for-each> 24 </div> 25 </xsl:template> 26 27 <xsl:template match="*" mode="contacts"> 28 29 <xsl:choose> 30 <xsl:when test="@name"> 31 <div style="margin-left:15px;cursor:pointer;display:block;" id="{@jid}" idgroup="{group}" idname="{@name}" onmousedown="templates.options(event, '{@jid}');"> 32 <img id="img_{@jid}" src="instant_messenger/templates/default/images/unavailable.gif" style="margin:0px 2px" /> 33 <xsl:value-of select="@name"/> 34 <br/> 35 <span id="status_{@jid}" style="font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:none" /> 36 </div> 37 <span id="sub_{@jid}"></span> 38 </xsl:when> 39 <xsl:otherwise> 40 <div style="margin-left:15px;cursor:pointer;display:block;" id="{@jid}" idgroup="{group}" idname="" onmousedown="templates.options(event, '{@jid}');"> 41 <img id="img_{@jid}" src="instant_messenger/templates/default/images/unavailable.gif" style="margin:0px 2px" /> 42 <xsl:value-of select="@jid"/> 43 <br/> 44 <span id="status_{@jid}" style="font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:none;" /> 45 </div> 46 <span id="sub_{@jid}"></span> 47 </xsl:otherwise> 48 </xsl:choose> 49 50 </xsl:template> 39 <br/> 40 <span id="status_{@jid}" style="font-size:8pt; font-family:Verdana, Arial, Helvetica, sans-serif; font-style:italic; display:none" /> 41 </div> 42 <span id="sub_{@jid}" style="background:#b4cfe5; font:8pt; position: absolute; display:none"></span> 43 </xsl:template> 51 44 52 45 </xsl:stylesheet> -
trunk/instant_messenger/xsl/disconnected.xsl
r287 r305 5 5 <xsl:template match="/disconnected"> 6 6 <div class="disconnected"> 7 <div style="background:url('{path}templates/default/images/logo.png');width:32px;height:32px;margin:2px"></div> 8 <font style="font-weight:bold;margin:5px"><center>Aviso</center> </font> 9 <div style="margin:5px; font-size: 8pt; font-family: Arial, Verdana, helvetica, sans;"> 10 Sua conexão com o Servidor parou. 7 <img src="{path}templates/default/images/logo.png" align="bottom" style="margin:2px"/> 8 <font style="font-weight:bold;margin:5px">Expresso Messenger</font> 9 <br/> 10 <br/> 11 <font style="font-weight:bold;margin:5px"> Aviso : </font> 12 <br/> 13 <br/> 14 <div style="margin:5px"> 15 Sua conexão com o 11 16 <br/> 12 Tente novamente ou entre em17 Servidor parou. 13 18 <br/> 14 contato com o Administrador. 19 Tente novamente 20 <br/> 21 ou entre em contato 22 <br/> 23 com o Administrador. 15 24 </div> 16 25 <br/> 17 < div onclick="disconnected = false; client();" style="background:url('{path}templates/default/images/server_connect.png') no-repeat;padding-left:16px;height:16px;margin:3px;cursor:pointer">18 <font style="font-size:7pt;margin:2px">Reconectar ...</font>19 < /div>26 <br/> 27 <img src="{path}templates/default/images/available.gif" /> 28 <a href="javascript:InstantMessengerReconnect();"><font style="font-size:7pt;margin:2px">Reconectar ...</font></a> 20 29 </div> 21 30 </xsl:template> -
trunk/instant_messenger/xsl/layer.xsl
r287 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="/layer"> 6 <div class="layer"> 7 <table border="0" cellpadding="0" cellspacing="0" class="font_menu"> 8 <tr> 9 <td> 10 <img id="im__avatar" src="{path}templates/default/images/photo.png" style="margin:2px;"/> 11 </td> 12 <td style="valign:top"> 13 <span style="font-weight:bold;"><xsl:value-of select="lang1" /> : </span> 14 <br></br> 15 <span id="im_layer_nickname"><xsl:value-of select="nickname" /></span> 16 <br></br> 17 <br></br> 18 <img src="{path}templates/default/images/addBuddy1.gif" style="cursor:pointer;" onclick="javascript:templates.add_user();" title="{lang2}" alt="{lang2}"/> 19 <img src="{path}templates/default/images/console_prefs1.png" style="cursor:pointer;" onclick="javascript:templates.preferences('span_preferences');" title="{lang3}" alt="{lang3}"/> 20 <span id="span_preferences"></span> 21 <br></br> 22 </td> 23 </tr> 24 </table> 25 </div> 26 </xsl:template> 5 <xsl:param name="lang1" /> 6 <xsl:param name="lang2" /> 7 <xsl:param name="lang3" /> 8 <xsl:param name="nickname" /> 9 10 <xsl:template match="/layer"> 11 <div class="layer"> 12 <span style="font-weight:bold;"><xsl:value-of select="$lang1" /> : </span><br/> 13 <span id="im_layer_nickname"><xsl:value-of select="$nickname" /></span><br/><br/> 14 <img src="../instant_messenger/templates/default/images/addBuddy1.gif" style="cursor:pointer;" title="{$lang2}" alt="{$lang2}"/> 15 <!-- 16 <img src="../instant_messenger/templates/default/images/console_prefs1.png" style="cursor:pointer;" onclick="javascript:templates.preferences('span_preferences');" title="{$lang3}" alt="{$lang3}"/> 17 --> 18 <span id="span_preferences"></span><br/> 19 </div> 20 </xsl:template> 27 21 28 22 </xsl:stylesheet> -
trunk/instant_messenger/xsl/list_ldap_contacts.xsl
r260 r305 6 6 <xsl:for-each select="data"> 7 7 <xsl:sort select="cn" case-order="upper-first" /> 8 < option value="{mail};{uid}"><xsl:value-of select="cn" /> ( <xsl:value-of select="mail" /> ) </option>8 <span value="{mail};{uid}"><xsl:value-of select="cn" /><br/><xsl:value-of select="mail" /></span><br/> 9 9 </xsl:for-each> 10 10 </xsl:template> -
trunk/instant_messenger/xsl/list_ldap_org.xsl
r275 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="organizations"> 6 <xsl:for-each select="ou"> 7 <xsl:sort select="." case-order="upper-first" /> 8 <option value="{.}" onmousedown="javascript:im.ldap_search_ou(this);"> 9 <xsl:value-of select="." /> 10 </option> 11 </xsl:for-each> 12 </xsl:template> 5 <xsl:template match="organizations"> 6 <xsl:for-each select="ou"> 7 <xsl:sort select="." case-order="upper-first" /> 8 <span><xsl:value-of select="." /></span><br/> 9 </xsl:for-each> 10 </xsl:template> 13 11 14 12 </xsl:stylesheet> -
trunk/instant_messenger/xsl/message_new.xsl
r260 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="message"> 6 <b> :</b><br/> 7 <xsl:value-of select="body"/> 8 <br/> 9 <br/> 10 </xsl:template> 5 <xsl:param name="nickname" /> 6 7 <xsl:template match="message"> 8 <b><xsl:value-of select="$nickname"/>:</b><br/> 9 <xsl:value-of select="body"/> 10 <br/> 11 <br/> 12 </xsl:template> 11 13 12 14 </xsl:stylesheet> -
trunk/instant_messenger/xsl/options.xsl
r260 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="options">5 <xsl:param name="style" /> 6 6 7 <dl style="background:#b4cfe5;margin:5px;font:8pt;"> 8 <dt><a href="javascript:void(0);" onclick="im.update_nickname('{jid}');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang1"/></a></dt> 9 <dt><a href="javascript:void(0);" onclick="im.update_group('{jid}');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang2"/></a></dt> 10 <dt><a href="javascript:void(0);" onclick="im.remove('{jid}');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang3"/></a></dt> 11 <dt><a href="javascript:void(0);" onclick="im.subscription('{jid}','subscribe');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang4"/></a></dt> 12 <dt><a href="javascript:void(0);" onclick="im.request_vcard('{jid}','contact');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang5"/></a></dt> 13 </dl> 7 <xsl:template match="/"> 14 8 15 </xsl:template> 9 <dl style="margin:0;"> 10 <xsl:apply-templates select="." mode="option" /> 11 </dl> 12 13 <!-- 14 <dl style="background:#b4cfe5;margin:5px;font:8pt;"> 15 <dt><a href="javascript:void(0);" onclick="im.update_nickname('{jid}');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang1"/></a></dt> 16 <dt><a href="javascript:void(0);" onclick="im.update_group('{jid}');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang2"/></a></dt> 17 <dt><a href="javascript:void(0);" onclick="im.remove('{jid}');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang3"/></a></dt> 18 <dt><a href="javascript:void(0);" onclick="im.subscription('{jid}','subscribe');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang4"/></a></dt> 19 <dt><a href="javascript:void(0);" onclick="im.request_vcard('{jid}','contact');"><img src="{path}templates/default/images/group_close.gif"/><xsl:value-of select="lang5"/></a></dt> 20 </dl> 21 --> 22 </xsl:template> 23 24 <xsl:template match="option" mode="option"> 25 <dt style="{style}"><xsl:value-of select="item"/></dt> 26 </xsl:template> 16 27 17 28 </xsl:stylesheet> -
trunk/instant_messenger/xsl/vcard_contacts.xsl
r260 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="/vcard_contact"> 6 <div class="vcard_contact"> 7 <div style="margin:3px"> 8 <label style="font-weight:bold;"><xsl:value-of select="lang1" /> .: </label> 9 <xsl:choose> 10 <xsl:when test="div/@fn"> 11 <xsl:value-of select="div/@fn" /> 12 </xsl:when> 13 <xsl:otherwise> 14 <xsl:value-of select="div/@FN" /> 15 </xsl:otherwise> 16 </xsl:choose> 17 </div> 18 <div style="margin:3px"> 19 <label style="font-weight:bold;"><xsl:value-of select="lang2" /> .: </label> 20 <xsl:choose> 21 <xsl:when test="div/@nickname"> 22 <xsl:value-of select="div/@nickname" /> 23 </xsl:when> 24 <xsl:otherwise> 25 <xsl:value-of select="div/@NICKNAME" /> 26 </xsl:otherwise> 27 </xsl:choose> 28 </div> 29 <div style="margin:3px"> 30 <label style="font-weight:bold;"><xsl:value-of select="lang3" /> .: </label> 31 <xsl:choose> 32 <xsl:when test="div/@orgname"> 33 <xsl:value-of select="div/@orgname" /> 34 </xsl:when> 35 <xsl:otherwise> 36 <xsl:value-of select="div/@ORGNAME" /> 37 </xsl:otherwise> 38 </xsl:choose> 39 </div> 40 <div style="margin:3px"> 41 <label style="font-weight:bold;"><xsl:value-of select="lang4" /> .: </label> 42 <xsl:choose> 43 <xsl:when test="div/@org"> 44 <xsl:value-of select="div/@org" /> 45 </xsl:when> 46 <xsl:otherwise> 47 <xsl:value-of select="div/@ORG" /> 48 </xsl:otherwise> 49 </xsl:choose> 50 </div> 51 <div style="margin:3px"> 52 <label style="font-weight:bold;"><xsl:value-of select="lang5" /> .: </label> 53 <xsl:choose> 54 <xsl:when test="div/@role"> 55 <xsl:value-of select="div/@role" /> 56 </xsl:when> 57 <xsl:otherwise> 58 <xsl:value-of select="div/@ROLE" /> 59 </xsl:otherwise> 60 </xsl:choose> 61 </div> 62 <div style="margin:3px"> 63 <label style="font-weight:bold;"><xsl:value-of select="lang6" /> .: </label> 64 <xsl:choose> 65 <xsl:when test="div/@bday"> 66 <xsl:value-of select="div/@bday" /> 67 </xsl:when> 68 <xsl:otherwise> 69 <xsl:value-of select="div/@BDAY" /> 70 </xsl:otherwise> 71 </xsl:choose> 72 </div> 73 <div style="margin:5px 0px"> 74 <input type="button" value="{lang7}" onclick="javascript:im_window.window_close('{id}');" /> 75 </div> 76 </div> 77 78 </xsl:template> 5 <xsl:param name="fullname" /> 6 <xsl:param name="nickname" /> 7 <xsl:param name="role" /> 8 <xsl:param name="birthday" /> 9 <xsl:param name="organization" /> 10 <xsl:param name="sector" /> 11 12 <xsl:template match="iq/vCard"> 13 <b><xsl:value-of select="$fullname" /> : </b><xsl:value-of select="FN" /><br/> 14 <b><xsl:value-of select="$nickname" /> : </b><xsl:value-of select="NICKNAME" /><br/> 15 <b><xsl:value-of select="$birthday" /> : </b><xsl:value-of select="BDAY" /><br/> 16 <b><xsl:value-of select="$organization" /> : </b><xsl:value-of select="ORG/ORGNAME" /><br/> 17 <b><xsl:value-of select="$sector" /> : </b><xsl:value-of select="ORG/ORGUNIT" /><br/> 18 <b><xsl:value-of select="$role" /> : </b><xsl:value-of select="ROLE" /><br/> 19 </xsl:template> 79 20 80 21 </xsl:stylesheet> -
trunk/instant_messenger/xsl/window.xsl
r262 r305 1 1 <?xml version="1.0" encoding="ISO-8859-1"?> 2 2 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 3 <xsl:output method="html" omit-xml-declaration="yes"/>3 <xsl:output method="html" omit-xml-declaration="yes"/> 4 4 5 <xsl:template match="/window"> 6 <div id="{name}__window_master" style="width:{width};" class="window" onmousedown="javascript:drag_drop.drag(event,this); javascript:im_window.window_focus(this);" dragdrop="true"> 5 <xsl:template match="/window"> 7 6 <b class="corner blackcorner"> 8 7 <b class="corner1 blackcorner1"><b></b></b> … … 12 11 <b class="corner5 blackcorner5"></b> 13 12 </b> 14 <div class="titulo" dragdrop="true"> 15 <span id="{name}__window_title" style="float:left;" dragdrop="true"> 16 <xsl:value-of select="title" /> 17 </span> 18 <div id="{name}__window_title_buttons" style="float:right;"> 19 <div id="{name}__button_minimize" style="display: {pButMin};" class="button_minimize" onclick="javascript:im_window.window_minimize('{name}');"></div> 20 <div id="{name}__button_maximize" style="display: {pButMax};" class="button_maximize1" onclick="javascript:im_window.window_maximize('{name}');"></div> 21 <div id="{name}__button_close" style="display: {pButClose};" class="button_close" onclick="javascript:im_window.window_close('{name}');"></div> 13 <div class="titulo"> 14 <span id="{name}__window_title" style="float:left;"></span> 15 <div id="{name}__window_title_buttons" class="buttons"> 16 <div title="close" class="button_close"></div> 17 <div title="maximize" class="button_maximize"></div> 18 <div title="minimize" class="button_minimize"></div> 22 19 </div> 23 20 </div> 24 21 <div id="{name}__window_body" class="body"> 25 <div id="{name}__window_body_content" class="content" style="overflow:auto;"> 26 <xsl:copy-of select="content" /> 27 </div> 22 <div id="{name}__window_body_content" class="content"></div> 28 23 </div> 29 <div id="{name}__window_bottom" class="rodape" dragdrop="false"></div> 30 <div id="im_sub_menu"></div> 31 </div> 32 </xsl:template> 24 <div id="{name}__window_bottom" class="rodape"></div> 25 </xsl:template> 33 26 34 27 </xsl:stylesheet>
Note: See TracChangeset
for help on using the changeset viewer.