1function DesktopAjax() {} 2 3/**** Request functions below ****/ 4function makeActionRequest(actionUrl, finalUrl, finalData, finalHandler) { 5 function makeCookieRequest(url, handler) { 6 var now = new Date(); 7 var cookieName = DynamicContent.pCOOKIE_PARAM + now.getTime(); 8 // 10 minutes 9 now.setTime(now.getTime() + (10*60*1000)); 10 setCookie(cookieName, data, now, null); 11 try { 12 makeGetRequest(setParam(url, DynamicContent.pCOOKIE_PARAM, cookieName), handler); 13 } finally { 14 } 15 } 16 var data = finalData; 17 function actionHandler(newDoc) { 18 makeCookieRequest(finalUrl, finalHandler); 19 } 20 if (actionUrl) { 21 makeCookieRequest(actionUrl, actionHandler); 22 } else { 23 actionHandler(null); 24 } 25 26} 27 28function removeParam(url, paramName) { 29 var s = url.indexOf(paramName + '='); 30 if (s < 0) return url; 31 var e = url.indexOf('&', s); 32 e++; 33 if (e == 0) { 34 e = url.length; 35 } 36 url = url.substring(0, s) + url.substring(e, url.length); 37 if (url.length > 1) { 38 var lastChar = url.charAt(url.length-1); 39 if (lastChar == '?' || lastChar == '&') { 40 url = url.substring(0, url.length-1); 41 } 42 } 43 return url; 44} 45 46function setParam(url, paramName, paramValue) { 47 48 url = removeParam(url, paramName); 49 if (url.indexOf('?') > -1){ 50 url = url + "&" + paramName + "=" + paramValue; 51 } else { 52 url = url + "?" + paramName + "=" + paramValue; 53 } 54 return url; 55} 56 57function makeGetRequest(url, handler) { 58 makeRequest(url, handler, null, null); 59} 60 61function makeRequest(url, handler, payloadNames, payloadValues) { 62 function getRequestObject() { 63 var req = null; 64 // branch for native XMLHttpRequest object 65 if(window.XMLHttpRequest) { 66 try { 67 req = new XMLHttpRequest(); 68 } catch(e) { 69 req = false; 70 } 71 // branch for IE/Windows ActiveX version 72 } else if(window.ActiveXObject) { 73 try { 74 req = new ActiveXObject("Msxml2.XMLHTTP"); 75 } catch(e) { 76 try { 77 req = new ActiveXObject("Microsoft.XMLHTTP"); 78 } catch(e) { 79 req = false; 80 } 81 } 82 } 83 return req; 84 } 85 86 function parseHtml(responseHtml) { 87 var uniqueId = 'parserFrame' + new Date().getTime(); 88 var divUniqueId = "div"+uniqueId; 89 var b = document.getElementsByTagName('body')[0]; 90 var divElem = document.createElement('div'); 91 if(!Sfdc.userAgent.isSafari){ 92 divElem.style.display = 'none'; 93 } 94 divElem.id = divUniqueId; 95 b.appendChild(divElem); 96 // Safari ignores iframes with display:none also there is delay 97 // in Safari initializing document object of Iframe if createElement method is used 98 // thus we use innerHTML for iframe writing 99 if(isSafari){ 100 divElem.innerHTML = '<iframe src="javascript:false" style="height:1px;width:1px" id="' + uniqueId + '" name="' + uniqueId + '"></iframe>'; 101 }else{ 102 divElem.innerHTML = '<iframe src="javascript:false" style="display:none;" id="' + uniqueId + '" name="' + uniqueId + '"></iframe>'; 103 } 104 var newF = document.getElementById(uniqueId); 105 var newDocument = null; 106 try { 107 var responseLowered = responseHtml.toLowerCase(); 108 var start = responseLowered.indexOf('<table'); 109 var end = responseLowered.length; 110 var newXml = responseHtml.substring(start, end); 111 // handle diffrent ways that browsers acces iframe 112 newDocument = (newF.contentWindow || newF.contentDocument); 113 if (newDocument.document) { 114 newDocument = newDocument.document; 115 } 116 117 // in IE the body DOM element doesn't exist till we create it... 118 newDocument.open(); 119 newDocument.write("<html><body></body></html>"); 120 newDocument.close(); 121 // inserting the content into the iFrame this way (vs document.write) gets around a Mozilla bug 122 newDocument.body.innerHTML = newXml; 123 124 125 } catch (ex) { 126 // do nothing. Just bail 127 } finally { 128 var clean = 'cleanUp("' + divUniqueId + '")'; 129 setTimeout(clean, 5000); 130 } 131 return newDocument; 132 } 133 134 function handleError(doc) { 135 // this can be overriden to allow showing errors in alert pop up 136 if (window.sfdcPage && window.sfdcPage.desktopAjaxDisplayErrorInline && window.sfdcPage.desktopAjaxDisplayErrorInline()){ 137 var t = doc.getElementById(DynamicContent.pERROR_TITLE); 138 var d = doc.getElementById(DynamicContent.pERROR_DESC); 139 if (t) { 140 var msg = t.innerHTML; 141 if (d) { 142 msg = msg + '\n\n' + d.innerHTML; 143 } 144 alert(msg); 145 } 146 } else { 147 // remove empty page header param 148 url = removeParam(url, DynamicContent.pCOOKIE_PARAM); 149 // reload the page in the main window 150 window.location = url; 151 } 152 } 153 154 function processRequest() { 155 if (!req || req.readyState != 4) return; 156 157 if (req.status != 200 && req.status != 500) return; 158 var newDoc = parseHtml(req.responseText); 159 if (req.status == 200) { 160 handler(newDoc); 161 } else { 162 handleError(newDoc); 163 } 164 } 165 166 var req = getRequestObject(); 167 if(req) { 168 var now = new Date(); 169 var modifiedUrl = setParam(url, DynamicContent.pTYME, now.getTime()); 170 req.onreadystatechange = processRequest; 171 if (payloadNames == null || payloadNames.length == 0) { 172 req.open("GET", modifiedUrl, true); 173 req.send(""); 174 } else { 175 req.open("POST", modifiedUrl, true); 176 req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 177 var payload = ''; 178 for (var i = 0; i < payloadNames.length; i++) { 179 if (payloadNames[i] == DynamicContent.pTYME) continue; 180 if (i != 0) { payload += '&'; } 181 payload += payloadNames[i] + '=' + payloadValues[i]; 182 } 183 req.send(payload); 184 } 185 } else { 186 // do nothing for now... 187 } 188} 189 190function cleanUp(objectId) { 191 var b = document.getElementsByTagName('body')[0]; 192 var f = document.getElementById(objectId); 193 if (f) { 194 b.removeChild(f); 195 } 196} 197 198// synchronous implementation of GET 199DesktopAjax.prototype.doGet = function(url){ 200 201 var xmlhttp = false;
202 203 if (!xmlhttp){ 204 try { 205 xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); 206 } catch(e) { 207 try { 208 xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); 209 } catch(e) { 210 xmlhttp = new XMLHttpRequest(); 211 } 212 } 213 } 214 215 if (xmlhttp){ 216 217 xmlhttp.open("GET", url, false); 218 xmlhttp.send(null); 219 var text = xmlhttp.responseText; 220 return text; 221 222 } 223 224}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.