Changeset 305 for trunk/instant_messenger/js
- Timestamp:
- 06/06/08 13:54:09 (16 years ago)
- Location:
- trunk/instant_messenger/js
- Files:
-
- 3 added
- 8 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
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 )();
Note: See TracChangeset
for help on using the changeset viewer.