1/* 2 Transform Plugin 3 Copyright (c) 2009 DAER Systems (daersystems.com) 4 Dual licensed under the GPL (http://www.gnu.org/licenses/gpl.html) 5 and MIT (http://www.opensource.org/licenses/mit-license.php) licenses. 6*/ 7(function($) { 8 $.transform = function(o) { 9 var createXmlObj = function(data) { 10 if (window.ActiveXObject || "ActiveXObject" in window){ 11 var x = new ActiveXObject("Microsoft.XMLDOM"); 12 x.loadXML(data); 13 return x; 14 } else { 15 var parser = new DOMParser(); 16 return parser.parseFromString(data,"text/xml"); 17 } 18 }; 19 20 var call = function(f,o,tel,other) { 21 if($.isFunction(f)) { 22 var arg1 = tel.html(); 23 if(o.c.dataType.toUpperCase() == "JSON") { 24 try { 25 arg1 = eval("(" + tel.text() + ")"); 26 } catch(ex) { 27 arg1 = {error : "An error occurred while converting HTML to JSON"}; 28 } 29 } 30 if(o.c.dataType.toUpperCase() == "XML") { 31 arg1 = createXmlObj(tel.html()); 32 } 33 34 try { f.apply(o.c,[arg1,o.c.xslstr,o.c.xmlstr,o.c,other]); } catch(ex) {} 35 } 36 }; 37 38 var t = this; 39 40 t.c = { 41 cache : false, 42 async : true, 43 xsl : false, 44 xml : false, 45 xslstr : false, 46 xmlstr : false, 47 xslobj : false, 48 xmlobj : false, 49 xslParams : false, 50 error : false, 51 success : false, 52 complete : false, 53 island : false, 54 pass : false, 55 msg : false, 56 dataType : "html" 57 }; 58 $.extend(t.c,o); 59 60 if(o.msg) { 61 $(o.el).html((typeof(o.msg) == "string")? o.msg : $(o.msg).html()); 62 } 63 64 var id = function(pre) { 65 var name = pre + "_" + (Math.round(Math.random() * 999)); 66 return $("#" + name).length === 0 ? name : id(pre); 67 }; 68 69 var replaceref = function(val, o) { 70 o.c.xsl = o.c.xsl?o.c.xsl:""; 71 var c = location.protocol == "file:" && (window.ActiveXObject || "ActiveXObject" in window) ? "\\" : "/"; 72 var path1 = location.protocol + c + c + location.host; 73 var path2 = location.pathname.substring(0,location.pathname.lastIndexOf(c) + 1) + o.c.xsl.substring(0,o.c.xsl.lastIndexOf("/") + 1); 74 75 if(val.substring(0,1) == c) { 76 return path1 + val; 77 } 78 else if(val.substring(0,2) == "..") { 79 var count = 0; 80 while(val.indexOf("..") != -1) { 81 val = val.substring(val.indexOf("..") + 3); 82 count += 1; 83 } 84 85 var p = path1 + path2.substring(0,path2.length - 1); 86 87 for(var x=0;x<count;x++) { 88 p = p.substring(0,p.lastIndexOf(c)); 89 } 90 return p + c + val; 91 } 92 else { 93 return path1 + path2 + val; 94 } 95 }; 96 97 var checkReady = function(o) { 98 if((o.c.xslstr || o.c.xslobj) && (o.c.xmlstr || o.c.xmlobj)) { 99 var fail = false; 100 var tel = $("<div>"); 101 if(o.c.throwerror) { 102 call(o.c.error,o,tel,{message:"Bad XML or XSL call"}); 103 return; 104 } 105 106 if(o.c.island) { 107 if(o.c.island === true) {o.c.island = "body";} 108 o.c.xslid = id("xsl"); 109 $(o.c.island).append("<div id='" + o.c.xslid + "' name='" + o.c.xslid + "' style='display:none;'>" + o.c.xslstr + "</div>"); 110 o.c.xmlid = id("xml"); 111 $(o.c.island).append("<div id='" + o.c.xmlid + "' name='" + o.c.xmlid + "' style='display:none;'>" + o.c.xmlstr + "</div>"); 112 } 113 114 o.c.xslobj = o.c.xslobj ? o.c.xslobj : createXmlObj(o.c.xslstr); 115 o.c.xmlobj = o.c.xmlobj ? o.c.xmlobj : createXmlObj(o.c.xmlstr); 116 117 var fixref,addparams; 118 if (window.ActiveXObject || "ActiveXObject" in window){ 119 try { 120 121 fixref = function(ref,xObj) { 122 var vals = xObj.selectNodes(ref); 123 for(var x = 0; x<vals.length; x++) { 124 vals[x].setAttribute("href",replaceref(vals[x].getAttribute("href"),o)); 125 } 126 }; 127 128 fixref("//xsl:include",o.c.xslobj); 129 fixref("//xsl:import",o.c.xslobj); 130 131 addparams = function(op, xObj) { 132 for(var p in op) { 133 var strParam = "//xsl:param[@name='" + p + "']"; 134 135 try { 136 var v = op[p]; 137 if(typeof v === "boolean") { 138 v = "'" + v + "'"; 139 } else { 140 if(isNaN(parseInt(v)) && v.indexOf("'") < 0) { 141 v = "'" + v + "'"; 142 } 143 } 144 var xslParam = xObj.selectSingleNode(strParam); 145 if(xslParam == null) { 146 var newparam = xObj.createElement("xsl:param"); 147 newparam.setAttribute("name",p); 148 xObj.documentElement.insertBefore(newparam,xObj.selectSingleNode("//xsl:template")); 149 xslParam = xObj.selectSingleNode(strParam); 150 } 151 xslParam.setAttribute("select",v); 152 } catch(ex) { 153 //param failed 154 } 155 } 156 }; 157 if(o.c.xslParams) { 158 addparams(o.c.xslParams,o.c.xslobj); 159 o.c.xslobj = createXmlObj(o.c.xslobj.xml); //reload xml 160 } 161 tel.empty().html(o.c.xmlobj.transformNode(o.c.xslobj)); 162 } catch(ex) { 163 fail = true; 164 call(o.c.error,o,tel,ex); 165 } 166 } else { 167 try { 168 var proc = new XSLTProcessor(); 169 170 var childNodes = function(obj,find) { 171 var cns = []; 172 var objs = obj.getElementsByTagName(find); 173 for(var x=0;x<objs.length;x++) { 174 if(objs[x].parentNode == obj) { 175 cns[cns.length] = objs[x]; 176 } 177 } 178 179 return cns; 180 }; 181 182 var safariimportincludefix = function(xObj,rootConfig) { 183 var vals = $.merge($.makeArray(xObj.getElementsByTagName("import")),$.makeArray(xObj.getElementsByTagName("include"))); 184 185 for(var x=0;x<vals.length;x++) { 186 var node = vals[x]; 187 $.ajax({
188 passData : { node : node, xObj : xObj, rootConfig : rootConfig}, 189 dataType : "xml", 190 async : false, 191 url : replaceref(node.getAttribute("href"),rootConfig), 192 success : function(xhr) { 193 try { 194 var _ = this.passData; 195 xhr = safariimportincludefix(xhr,_.rootConfig); 196 197 var imports = $.merge(childNodes(xhr.getElementsByTagName("stylesheet")[0],"param"),childNodes(xhr.getElementsByTagName("stylesheet")[0],"template")); 198 199 var existingNodes = $.merge(childNodes(_.xObj.getElementsByTagName("stylesheet")[0],"param"),childNodes(_.xObj.getElementsByTagName("stylesheet")[0],"template")); 200 var existingNames = []; 201 var existingMatches = []; 202 for(var a=0;a<existingNodes.length;a++) { 203 if(existingNodes[a].getAttribute("name")) { 204 existingNames[existingNodes[a].getAttribute("name")] = true; 205 } else { 206 existingMatches[existingNodes[a].getAttribute("match")] = true; 207 } 208 } 209 210 var pn = _.node.parentNode; 211 for(var y=0;y<imports.length;y++) { 212 if(!existingNames[imports[y].getAttribute("name")] && !existingMatches[imports[y].getAttribute("match")]) { 213 var clonednode = _.xObj.importNode(imports[y],true); 214 pn.insertBefore(clonednode,_.xObj.getElementsByTagName("template")[0]); 215 } 216 } 217 pn.removeChild(_.node); 218 } catch(ex) { 219 220 } 221 } 222 });
223 } 224 225 return xObj; 226 }; 227 228 fixref = function(ref,xObj) { 229 ref = $.browser.mozilla && $.browser.version.substring(0,3) == "1.9" ? "xsl:" + ref : ref; 230 231 var vals = xObj.getElementsByTagName(ref); 232 for(var x=0; x<vals.length;x++) { 233 vals[x].setAttribute("href",replaceref(vals[x].getAttribute("href"),o)); 234 } 235 }; 236 237 if($.browser.safari) { 238 o.c.xslobj = safariimportincludefix(o.c.xslobj,o); 239 } else { 240 fixref("import",o.c.xslobj); 241 fixref("include",o.c.xslobj); 242 } 243 244 addparams = function(op) { 245 for(var p in op) { 246 try { proc.setParameter(null, p, op[p]); } catch(ex) {} 247 } 248 }; 249 addparams(o.c.xslParams); 250 251 var doc = document.implementation.createDocument("","",null); 252 proc.importStylesheet(o.c.xslobj); 253 tel.empty().append(proc.transformToFragment(o.c.xmlobj,doc)); 254 } catch(ex) { 255 fail = true; 256 call(o.c.error,o,tel,ex); 257 } 258 } 259 260 if(o.c.el) { 261 if(tel.html()) { $(o.c.el).html(tel.html()); } 262 } 263 if(!fail) { 264 call(o.c.success,o,tel); 265 } 266 call(o.c.complete,o,tel); 267 268 return tel.html(); 269 } 270 }; 271 272 var makeCall = function(t,options,type) { 273 if(typeof(options) == "string") { 274 options = { 275 cache:false, 276 url:options, 277 dataType:"xml", 278 async:t.c.async, 279 pass:t.c.pass 280 }; 281 } 282 283 options.complete = function(r,s) { 284 if(s != "success") { 285 if(!t.c.threwError) { 286 t.c.threwError = true; 287 call(t.c.error,t,$("<div>" + r.responseText + "</div>"),{message:"Error requesting file " + this.url}); 288 call(t.c.complete,t,$("<div>" + r.responseText + "</div>")); 289 } 290 return; 291 } 292 293 if(type == "XSL") { if(r.status == 200) { t.c.xslstr = r.responseText; } else { t.c.xslstr = "error"; t.c.throwerror=true; } } 294 else { if(r.status == 200) { t.c.xmlstr = r.responseText;} else { t.c.xmlstr = "error"; t.c.throwerror=true; } } 295 if(t.c.async) { checkReady(t); } 296 }; 297 298 $.ajax(options); 299 }; 300 301 if(t.c.xsl) { 302 makeCall(t,o.xsl,"XSL"); 303 } 304 305 if(t.c.xml) { 306 makeCall(t,o.xml,"XML"); 307 } 308 309 if(!t.c.async || (t.c.xmlstr || t.c.xmlobj) || (t.c.xslstr || t.c.xslobj)) { 310 return checkReady(t); 311 } 312 }; 313 314 $.fn.transform = function(o) { 315 return this.each(function() { 316 o = o ? o : {}; 317 o.el = this; 318 var t = new $.transform(o); 319 }); 320 }; 321})(jQuery); 322 323/*jQuery().ready(function() { 324 jQuery("[transform]").each(function(num,el) { 325 $(el).transform(eval("(" + $(el).attr("transform") + ")")); 326 }); 327 328});*/ 329 330
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.