[ Index ] |
|
Code source de eGroupWare 1.2.106-2 |
1 /* 2 3 xmlrpc.js beta version 1 4 Tool for creating XML-RPC formatted requests in JavaScript 5 6 Copyright 2001 Scott Andrew LePera 7 scott@scottandrew.com 8 http://www.scottandrew.com/xml-rpc 9 10 License: 11 You are granted the right to use and/or redistribute this 12 code only if this license and the copyright notice are included 13 and you accept that no warranty of any kind is made or implied 14 by the author. 15 16 */ 17 18 function XMLRPCMessage(methodname){ 19 this.method = methodname||"system.listMethods"; 20 this.params = []; 21 return this; 22 } 23 24 XMLRPCMessage.prototype.setMethod = function(methodName){ 25 if (!methodName) return; 26 this.method = methodName; 27 } 28 29 XMLRPCMessage.prototype.addParameter = function(data){ 30 if (arguments.length==0) return; 31 this.params[this.params.length] = data; 32 } 33 34 XMLRPCMessage.prototype.xml = function(){ 35 36 var method = this.method; 37 38 // assemble the XML message header 39 var xml = ""; 40 41 xml += "<?xml version=\"1.0\"?>\n"; 42 xml += "<methodCall>\n"; 43 xml += "<methodName>" + method+ "</methodName>\n"; 44 xml += "<params>\n"; 45 46 // do individual parameters 47 for (var i = 0; i < this.params.length; i++){ 48 var data = this.params[i]; 49 xml += "<param>\n"; 50 51 xml += "<value>" + XMLRPCMessage.getParamXML(XMLRPCMessage.dataTypeOf(data),data) + "</value>\n"; 52 53 xml += "</param>\n"; 54 } 55 56 xml += "</params>\n"; 57 xml += "</methodCall>"; 58 59 return xml; // for now 60 } 61 62 XMLRPCMessage.dataTypeOf = function (o){ 63 // identifies the data type 64 65 if (o == null) 66 { 67 return 'null'; 68 } 69 70 var type = typeof(o); 71 type = type.toLowerCase(); 72 switch(type){ 73 case "number": 74 if (Math.round(o) == o) type = "i4"; 75 else type = "double"; 76 break; 77 case "object": 78 var con = o.constructor; 79 if (con == Date) type = "date"; 80 else if (con == Array) type = "array"; 81 else type = "struct"; 82 break; 83 } 84 return type; 85 } 86 87 XMLRPCMessage.doValueXML = function(type,data){ 88 switch (type) 89 { 90 case 'null': 91 type = 'boolean'; 92 data = 0; 93 break; 94 95 case 'string': 96 data = data.split('&').join('&'); 97 data = data.split('<').join('<'); 98 data = data.split('>').join('>'); 99 break; 100 } 101 102 var xml = "<" + type + ">" + data + "</" + type + ">"; 103 return xml; 104 } 105 106 XMLRPCMessage.doBooleanXML = function(data){ 107 var value = (data==true)?1:0; 108 var xml = "<boolean>" + value + "</boolean>"; 109 return xml; 110 } 111 112 XMLRPCMessage.doDateXML = function(data){ 113 var xml = "<dateTime.iso8601>"; 114 xml += dateToISO8601(data); 115 xml += "</dateTime.iso8601>"; 116 return xml; 117 } 118 119 XMLRPCMessage.doArrayXML = function(data){ 120 var xml = "<array><data>\n"; 121 for (var i = 0; i < data.length; i++){ 122 xml += "<value>" + XMLRPCMessage.getParamXML(XMLRPCMessage.dataTypeOf(data[i]),data[i]) + "</value>\n"; 123 } 124 xml += "</data></array>\n"; 125 return xml; 126 } 127 128 XMLRPCMessage.doStructXML = function(data){ 129 var xml = "<struct>\n"; 130 for (var i in data){ 131 xml += "<member>\n"; 132 xml += "<name>" + i + "</name>\n"; 133 xml += "<value>" + XMLRPCMessage.getParamXML(XMLRPCMessage.dataTypeOf(data[i]),data[i]) + "</value>\n"; 134 xml += "</member>\n"; 135 } 136 xml += "</struct>\n"; 137 return xml; 138 } 139 140 XMLRPCMessage.getParamXML = function(type,data){ 141 var xml; 142 switch (type){ 143 case "date": 144 xml = XMLRPCMessage.doDateXML(data); 145 break; 146 case "array": 147 xml = XMLRPCMessage.doArrayXML(data); 148 break; 149 case "struct": 150 xml = XMLRPCMessage.doStructXML(data); 151 break; 152 case "boolean": 153 xml = XMLRPCMessage.doBooleanXML(data); 154 break; 155 default: 156 xml = XMLRPCMessage.doValueXML(type,data); 157 break; 158 } 159 return xml; 160 } 161 162 function dateToISO8601(date){ 163 // wow I hate working with the Date object 164 var year = new String(date.getYear()); 165 var month = leadingZero(new String(date.getMonth())); 166 var day = leadingZero(new String(date.getDate())); 167 var time = leadingZero(new String(date.getHours())) + ":" + leadingZero(new String(date.getMinutes())) + ":" + leadingZero(new String(date.getSeconds())); 168 169 var converted = year+month+day+"T"+time; 170 return converted; 171 } 172 173 function leadingZero(n){ 174 // pads a single number with a leading zero. Heh. 175 if (n.length==1) n = "0" + n; 176 return n; 177 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Sun Feb 25 17:20:01 2007 | par Balluche grâce à PHPXref 0.7 |