/
stapling-1.5-min.js
11 lines (11 loc) · 4.09 KB
/
stapling-1.5-min.js
1
2
3
4
5
6
7
8
9
10
11
/**
* Stapling 1.5
*
* JSON XSLT Parser, use XSLT to transform JSON
*
* @author Björn Wikström <bjorn@welcom.se>
* @license LGPL v3 <http://www.gnu.org/licenses/lgpl.html>
* @version 1.5
* @copyright Welcom Web i Göteborg AB 2012
*/
(function(e,t,n){if(!!e.Stapling){return}Array.prototype.indexOf=Array.prototype.indexOf||function(e,t){for(var n=t||0;n<this.length;n++){if(this[n]===e){return n}}return-1};Array.prototype.forEach=Array.prototype.forEach||function(e,t){for(var n=0;n<this.length;n++){e.call(t,this[n])}};var r=function(){var n=!(e.DOMParser&&e.XSLTProcessor),r=!e.XMLHttpRequest;var i={parse:[],request:[]};var s=function(e,t){if(!!i["request"]&&i["request"].length>0){var n=true;i["request"].forEach(function(t){if(!t.call(this,e))n=false},this);if(!n){return}}var s;if(r){s=new ActiveXObject("Msxml2.XMLHTTP")}else{s=new XMLHttpRequest}s.onreadystatechange=function(){if(s.readyState==4&&s.status==200){t(s.responseText)}else if(s.readyState==4){throw{type:"ServerException",message:"The resource could not be fetched from '"+e+"'"}}};var o=e.indexOf("?")>=0?"&":"?";var u=e+o+"cache="+(new Date).getMilliseconds()+(new Date).getSeconds();s.open("GET",u,true);s.send("")};var o=function(e){if(!n){return(new DOMParser).parseFromString(e,"text/xml")}var t=new ActiveXObject("Msxml2.DOMDocument");t.loadXML(e);return t};var u=function(e){if(!n){return(new DOMParser).parseFromString(e,"text/xml")}var t=new ActiveXObject("Msxml2.FreeThreadedDOMDocument");t.loadXML(e);return t};var a=function(e){return"<"+'?xml version="1.0" encoding="UTF-8" ?'+"><json>"+e+"</json>"};var f=function(e){return e.replace(/[^a-z0-9\-_]/ig,"")};var l=function(e,t){var n=[];for(var r=0;r<t.length;r++){if(Object.prototype.toString.call(t[r])==="[object Object]"){var i=c(t[r]);n.push("<item>");for(var s=0;s<i.length;s++){n.push(i[s])}n.push("</item>")}else if(Object.prototype.toString.call(t[r])==="[object Array]"){var i=l("item",t[r]);for(var s=0;s<i.length;s++){n.push(i[s])}}else{n.push("<"+f(e)+">"+t[r]+"</"+f(e)+">")}}return n};var c=function(e){var t=[];for(var n in e){if(Object.prototype.toString.call(e[n])==="[object Object]"){var r=c(e[n]);var i="<"+f(n)+">";for(var s=0;s<r.length;s++){i+=r[s]}i+="</"+f(n)+">";t.push(i)}else if(Object.prototype.toString.call(e[n])==="[object Array]"){var r=l(n,e[n]);var i="<"+f(n)+">";for(var s=0;s<r.length;s++){i+=r[s]}i+="</"+f(n)+">";t.push(i)}else{t.push("<"+f(n)+">"+e[n]+"</"+f(n)+">")}}return t};var h=function(e){e=Object.prototype.toString.call(e)==="[object Object]"?e:{"list-items":e};var t=c(e),n="";for(var r=0;r<t.length;r++){n+=t[r]}var i=a(n);return i};var p=function(e,r,i){var s=false;if(n){var o=new ActiveXObject("Msxml2.XSLTemplate");o.stylesheet=r;var u=o.createProcessor();u.input=e;u.transform();var a=t.createDocumentFragment();var f=t.createElement("div");a.appendChild(f);f.outerHTML=u.output;s=a}else{var u=new XSLTProcessor;u.importStylesheet(r);s=u.transformToFragment(e,t)}i.call(s,e)};var d=function(e,t){try{localStorage.setItem(e,t)}catch(n){}};var v=function(e){var t=false;try{if((t=localStorage.getItem(e))!==null&&typeof t==="string"){return t}}catch(n){}return t};return{cachable:true,isSupported:function(){return e.localStorage&&e.JSON},prefetch:function(e){if(typeof e==="string"){e=[e]}for(var t=0;t<e.length;t++){(function(e){s(e,function(t){d(e,t)})})(e[t])}},isCached:function(e){return v(e)!==false},parse:function(e,t,n){if(!!i["parse"]&&i["parse"].length>0){var r=true;i["parse"].forEach(function(n){if(!n.call(this,e,t))r=false},this);if(!r){return}}var a=h(e),f=false;if(this.cachable&&(f=v(t))!==false&&f!=null){var l=o(a),c=u(f);p(l,c,n)}else{var m=this;s(t,function(e){if(m.cachable){d(t,e)}var r=o(a),i=u(e);p(r,i,n)})}},load:function(e,t,n){var r=false,i=this;if(this.cachable&&(r=v(e))!==false&&r!=null){i.parse(JSON.parse(r),t,n)}else{var i=this;s(e,function(r){if(i.cachable){d(e,r)}i.parse(JSON.parse(r),t,n)})}},clear:function(e){try{if(Object.prototype.toString.call(e)==="[object Array]"){for(var t=0;t<e.length;t++){localStorage.removeItem(e[t])}}else{localStorage.removeItem(e)}}catch(n){}},on:function(e,t){if(!!i[e]){i[e].push(t)}}}}();e.Stapling=r})(window,document)