1window.ptlHeadElements=new Array(); 2window.ptlHead=document.getElementsByTagName("head")[0]; 3for(var child=window.ptlHead.firstChild; child!=null;child=child.nextSibling) { 4 if("LINK"==child.tagName) { 5 window.ptlHeadElements.push(child.href); 6 } else if("SCRIPT"==child.tagName) { 7 window.ptlHeadElements.push(child.href) 8 } 9}; 10 11/** 12 * A cross-browser method that replaces the markup of an element. The behavior 13 * is similiar to calling element.outerHtml=text in internet explorer. However 14 * this method also takes care of executing javascripts within the markup on 15 * browsers that don't do that automatically. 16 * Also this method takes care of replacing table elements (tbody, tr, td, thead) 17 * on browser where it's not supported when using outerHTML (IE, Opera). 18 * 19 * mode is null for replace, "before" or "after" 20 */ 21function ptlReplaceOuterHtml(element, text, mode) { 22 if (element.outerHTML) { // internet explorer or opera support outerHtml 23 // find out the element's index and next element (if any). 24 // outerHtml can replace element with multiple elements and we need 25 // to track the new elements in order to execute the script elements 26 // they contain 27 var next = element.nextSibling; 28 29 var tn = element.tagName; 30 31 // elements inside tables have to be treated special 32 if (tn != 'TBODY' && tn != 'TR' && tn != "TD" && tn != "THEAD") { 33 // not inside table - regular replace 34 element.outerHTML = mode=='before'?text+element.outerHTML : mode=='after'?element.outerHTML+text:text; 35 } else { 36 // this is a hack to get around the fact that internet explorer doesn't allow the 37 // outerHtml attribute on table elements 38 var tempDiv = document.createElement("div"); 39 tempDiv.innerHTML = '<table style="display: none">
39' + text + '</table>'; 40 41 // we may have inserted multiple elements, so we need to take care of all of them 42 var tempParent = tempDiv.getElementsByTagName(tn).item(0).parentNode; 43 44 var elemNext = element.nextSibling; 45 while(tempParent.childNodes.length > 0) { 46 var tempElement = tempParent.childNodes[0]; 47 if('after'==mode) { 48 element.parentNode.insertBefore(tempElement, elemNext); 49 } else { 50 element.parentNode.insertBefore(tempElement, element); 51 } 52 } 53 54 //element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), element); 55 if('before'!=mode && 'after'!=mode) element.parentNode.removeChild(element); 56 } 57 58 } else { 59 // create range and fragment 60 var range = element.ownerDocument.createRange(); 61 range.selectNode(element); 62 var fragment = range.createContextualFragment(text); 63 64 if('before'==mode) { 65 element.parentNode.insertBefore(fragment, element); 66 } else if('after'==mode) { 67 element.parentNode.insertBefore(fragment, element.nextSibling); 68 } else { 69 element.parentNode.replaceChild(fragment, element); 70 } 71 } 72}; 73 74function ptlReplaceInterval(from,to, text) { 75 while(from.nextSibling!=to) from.parentNode.removeChild(from.nextSibling); 76 ptlReplaceOuterHtml(from,text,'after'); 77}; 78 79function ptlFormEncode(text) { 80 if (encodeURIComponent) { 81 return encodeURIComponent(text); 82 } else { 83 return escape(text); 84 } 85}; 86 87function ptlFormSerializeSelect(select){ 88 // if it is a non-multiple select, iterating on each element is not required 89 if (select.multiple == false){ 90 return ptlFormEncode(select.name) + "=" + ptlFormEncode(select.value) + "&"; 91 } 92 93 //else 94 var result = ""; 95 for (var i = 0; i < select.options.length; ++i) { 96 var option = select.options[i]; 97 if (option.selected) { 98 result += ptlFormEncode(select.name) + "=" + ptlFormEncode(option.value) + "&"; 99 } 100 } 101 return result; 102}; 103 104// this function intentionally ignores image and submit inputs 105function ptlFormSerializeInput(input) { 106 var type = input.type.toLowerCase(); 107 if ((type == "checkbox" || type == "radio") && input.checked) { 108 return ptlFormEncode(input.name) + "=" + ptlFormEncode(input.value) + "&"; 109 } else if (type == "text" || type == "password" || type == "hidden" || type == "textarea") { 110 return ptlFormEncode(input.name) + "=" + ptlFormEncode(input.value) + "&"; 111 } else { 112 return ""; 113 } 114}; 115 116// Returns url/post-body fragment representing element (e) 117function ptlFormSerializeElement(e) { 118 var tag = e.tagName.toLowerCase(); 119 if (tag == "select") { 120 return ptlFormSerializeSelect(e); 121 } else if (tag == "input" || tag == "textarea") { 122 return ptlFormSerializeInput(e); 123 } else { 124 return ""; 125 } 126}; 127 128 129function ptlFormSerialize(element) { 130 while(element.tagName.toLowerCase() != "form" && element.tagName.toLowerCase() != "body") { 131 element=element.parentNode; 132 } 133 134 if (element.tagName.toLowerCase() == "form"){ 135 var result = ""; 136 for (var i = 0; i < element.elements.length; ++i) { 137 var e = element.elements[i]; 138 if (e.name && e.name != "" && !e.disabled) { 139 result += ptlFormSerializeElement(e); 140 } 141 } 142 return result; 143 } else { 144 return "" 145 } 146}; 147 148function ajax(element,action) { 149 var parameters=ptlFormSerialize(element); 150 for(var i=2; i<arguments.length; i++) { 151 parameters = parameters + '&' + arguments[i]; 152 } 153 ajaxWithoutForm(action,parameters) 154 return false; 155}; 156 157if (Function.prototype.bind == null) { 158 Function.prototype.bind = function(object) { 159 var __method = this; 160 return function() { 161 return __method.apply(object, arguments); 162 } 163 } 164}; 165 166// do not collect form fields - call ajax only with supplied parameters 167function ajaxWithoutForm(action,parameters) { 168 if(arguments.length ==1) parameters=""; 169 var url=window.location.href; 170 171 // set a special flag to allow server distinguish between ajax and non-ajax requests 172 var body="ptl-ajax=true&ptl-action=" + action + "&ptl-pagestate=" + ptlFormEncode(ptlGetState()) 173 if(parameters.substring(0,1)!='&') parameters='&'+parameters; 174 175 var request = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); 176 var i = url.indexOf('#'); 177 if (i > 0) 178 url = url.substring(0, i); 179 request.open("POST", url, true); 180 request.onreadystatechange = ptlCallback.bind(request); 181 request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 182 request.send(body+parameters); 183 184 if (window.ptlAjaxCallInitiated) { 185 window.ptlAjaxCallInitiated(); 186 } 187 188 return false;
189}; 190 191function ptlCallback() { 192 if(this.readyState == 4) { 193 if (this.status == 200 || this.status == "") { // as stupid as it seems, IE7 sets satus to "" on ok 194 // parse the response if the callback needs a DOM tree 195 var xmldoc; 196// alert("Request="+window.ptlCall.responseText) 197 if (typeof(window.XMLHttpRequest) != "undefined" && typeof(DOMParser) != "undefined") { 198 var parser = new DOMParser(); 199 xmldoc = parser.parseFromString(this.responseText, "text/xml"); 200 } else if (window.ActiveXObject) { 201 xmldoc = this.responseXML; 202 } 203 // invoke the loaded callback with an xml document 204 window.ptlProcessCallback(xmldoc); 205 } 206 if ( window.ptlAjaxCallCompleted ) { 207 window.ptlAjaxCallCompleted(); 208 } 209 //this.onreadystatechange = function() {}; 210 this.abort(); 211 } 212}; 213 214function ptlProcessCallback(envelope) { 215 var root = envelope.getElementsByTagName("ajax-response")[0]; 216 if (!root || !root.childNodes) return; 217 for (var i = 0; i < root.childNodes.length; ++i) { 218 var node = root.childNodes[i]; 219 if (node.tagName == "component") { 220 ptlProcessComponent(node); 221 } else if (node.tagName == "repeatable") { 222 var id = node.getAttribute("id"); 223 var index = parseInt(node.getAttribute("index")); 224 var mode=node.getAttribute("mode"); 225 if(mode=='insert' && index==0) { 226 var after=document.getElementById("ptl$"+id+"$B"); 227 228 // change the ids of others 229 for(var renamed=document.getElementById("ptl$"+id+"$"+ index); renamed; index++) { 230 var nextRenamed=document.getElementById("ptl$"+id+"$"+ (index+1)); 231 renamed.id = "ptl$"+id+"$"+(index+1); 232 renamed=nextRenamed; 233 } 234 ptlReplaceOuterHtml(after,node.firstChild.nodeValue,'after') 235 } else if(mode=='insert') { 236 var before = document.getElementById("ptl$"+id+"$" + index); 237 if (!before){ 238 before = document.getElementById("ptl$"+id+"$E"); 239 ptlReplaceOuterHtml(before,node.firstChild.nodeValue,'before'); 240 } 241 else { 242 /*index++; 243 for(var renamed=document.getElementById("ptl$"+id+"$"+ index); renamed; index++) { 244 var nextRenamed=document.getElementById("ptl$"+id+"$"+ (index+1)); 245 renamed.id = "ptl$"+id+"$"+(index+1); 246 renamed=nextRenamed; 247 }*/ 248 ptlReplaceOuterHtml(before,node.firstChild.nodeValue,'after'); 249 } 250 } else if(mode=='update'){ 251 var before=document.getElementById("ptl$"+id+"$"+(index==0?"B":index-1)); 252 var after=document.getElementById("ptl$"+id+"$"+index); 253 if (!before){ 254 before = document.getElementById("ptl$"+id+"$B"); 255 } 256 if (!after){ 257 after = document.getElementById("ptl$"+id+"$E"); 258 } 259// alert("replacing="+before.id+" "+after.id) 260 ptlReplaceInterval(before,after,node.firstChild.nodeValue) 261 if (!after) { 262 after.parentNode.removeChild(after); 263 } 264 } else if(mode=='delete'){ 265 var before=document.getElementById("ptl$"+id+"$"+(index==0?"B":index-1)); 266 var after=document.getElementById("ptl$"+id+"$"+index); 267 ptlReplaceInterval(before,after,"") 268 269 // delete one marker tag and change the ids of others 270 after.parentNode.removeChild(after) 271 var renamed=document.getElementById("ptl$"+id+"$"+ (++index)); 272 while(renamed) { 273 renamed.id = "ptl$"+id+"$"+(index-1) 274 renamed=document.getElementById("ptl$"+id+"$"+ (++index)); 275 } 276 } 277 } else if (node.tagName == "evaluate") { 278 ptlProcessEvaluation(node); 279 } else if (node.tagName == "header-contribution") { 280 ptlProcessHeaderContribution(node); 281 } 282 } 283}; 284 285 286function ptlProcessComponent(node) { 287 // get the component id 288 var compId = node.getAttribute("id"); 289 var text=""; 290 291 // get the new component body 292 if (node.hasChildNodes()) { 293 text = node.firstChild.nodeValue; 294 } 295 296 // get existing component 297 var element = document.getElementById(compId); 298 299 if (element == null || typeof(element) == "undefined") { 300 window.status=("Component with id '"+compId+"' not found while trying to perform markup update. "); 301 } else { 302 // replace the component 303 ptlReplaceOuterHtml(element, text); 304 } 305}; 306 307function ptlProcessEvaluation(node) { 308 var text = node.firstChild.nodeValue; 309 310// try { 311 eval(text); 312// } catch (exception) { 313// window.status="Exception evaluating javascript: " + exception; 314// } 315}; 316 317function ptlProcessHeaderContribution(node) {
318 var file = node.getAttribute("src"); 319 for(var i=0;i<window.ptlHeadElements.length;i++) 320 if(window.ptlHeadElements[i]==file) return; 321 window.ptlHeadElements.push(file); 322 323 if (file.endsWith(".css")) { 324 var css = document.createElement("link"); 325 css.rel = "stylesheet"; 326 css.href = file; 327 css.type = "text/css"; 328 window.ptlHead.appendChild(css); 329 } else if (file.endsWith(".js")) { 330 var js = document.createElement("script"); 331 js.type = "text/javascript"; 332 js.href = file; 333 window.ptlHead.appendChild(js); 334 } 335}; 336 337function ptlSetState(str) { 338 var fld=document.getElementById("ptl-pagestate"); 339 if(fld) fld.value=str; 340}; 341 342function ptlGetState() { 343 var fld=document.getElementById("ptl-pagestate"); 344 return fld ? fld.value : ""; 345}; 346 347function ptlStdUpload(){ 348 var form = document.getElementById('ptlRootForm'); 349 form.method = 'POST'; 350 form.enctype = 'multipart/form-data'; 351 form.encoding = 'multipart/form-data'; 352 form.submit(); 353}; 354 355function ptlUpload(form,token){ 356 window.parent.document.getElementById('ptlUploadProgress').style.display='block'; 357 window.parent.document.getElementById('uploadIframe').style.display='none'; 358 form.submit(); 359 window.parent.setTimeout('ptlUploadRefresh()', 1000); 360}; 361 362function ptlUploadRefresh() { 363 var container=document.getElementById('ptlUploadProgress'); 364 var div=document.getElementById('ptlUploadProgressBar'); 365 if(container.style.display=='block' && div.style.width!='100%') { 366 var body="ptl-ajax=true&ptl-action=queryUploadProgress&ptl-pagestate=" + ptlFormEncode(ptlGetState())+'&'+ptlFormSerialize(div) 367 var request = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); 368 request.onreadystatechange = ptlCallback; 369 request.open("POST", window.location.href, true); 370 request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 371 request.setRequestHeader('Content-length', body.length); 372 request.setRequestHeader('Connection', 'close'); 373 //alert(body); 374 //alert('sent'); 375 request.send(body); 376 window.setTimeout('ptlUploadRefresh()', 300); 377 } 378}; 379 380 381function splitMouseDown(event,div,isVertical,action, mouseUpHandler) { 382 div.style.position="relative" 383 div.style.top="0px" 384 div.style.left="0px" 385 window.draggedCursorY=event.clientY; 386 window.draggedCursorX=event.clientX; 387 window.dragged=div; 388 window.draggedVertical=isVertical; 389 window.draggedAction=action; 390 window.mouseUpHandler = mouseUpHandler; 391 addEvent(document,"mousemove",splitMouseMove) 392 addEvent(document,"mouseup",splitMouseUp) 393 stopEvent(event) 394}; 395function splitMouseUp(event) { 396 var d=window.dragged; 397 d.style.position="static"; 398 var h=(d.previousSibling.offsetHeight+event.clientY-window.draggedCursorY); 399 var v=(d.previousSibling.offsetWidth+event.clientX-window.draggedCursorX); 400 if(window.draggedVertical) d.previousSibling.style.height=h+"px" 401 if(!window.draggedVertical) d.previousSibling.style.width=v+"px" 402 d.previousSibling.childNodes[0].style.position="relative" 403 d.previousSibling.childNodes[0].style.position="static" 404 removeEvent(document,"mousemove",splitMouseMove) 405 removeEvent(document,"mouseup",splitMouseUp) 406 if (window.mouseUpHandler != null && (typeof window.mouseUpHandler) != 'undefined') 407 window.mouseUpHandler(d.previousSibling, d, d.nextSibling); 408 if(window.draggedAction.length>0) ajaxWithoutForm(window.draggedAction,"splitterPos="+(window.draggedVertical?h:v)) 409}; 410function splitMouseMove(e) { 411 if(draggedVertical) 412 // vertical splitters have no maximum boundary, since bottom block is just shifted down, not resized 413 window.dragged.style.top = Math.max(-window.dragged.previousSibling.offsetHeight,e.clientY-window.draggedCursorY)+"px"; 414 else 415 window.dragged.style.left = Math.min(window.dragged.nextSibling.offsetWidth-5,Math.max(-window.dragged.previousSibling.offsetWidth,e.clientX-window.draggedCursorX))+"px"; 416 stopEvent(e) 417}; 418 419 420function addEvent(object,event,handler) { 421 if(document.attachEvent) 422 object.attachEvent('on'+event,handler); 423 else 424 object.addEventListener(event,handler,false); 425}; 426 427function removeEvent(object,event,handler) { 428 if(document.detachEvent) 429 object.detachEvent('on'+event,handler); 430 else 431 object.removeEventListener(event,handler,false); 432}; 433 434function stopEvent(e) { 435 if(!e) e = event; 436 if(typeof(e.stopPropagation) == 'function') e.stopPropagation(); 437 if(e.preventDefault) e.preventDefault(); 438 if(typeof(e.cancelBubble) == 'boolean') e.cancelBubble = true; 439 e.returnValue = false;
440 return false; 441}; 442 443 444
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.