/
jquery.virtualbrowser-1.1-min.js
2 lines (2 loc) · 5.69 KB
/
jquery.virtualbrowser-1.1-min.js
1
2
// jQuery.fn.virtualBrowser 1.1 - MIT/GPL Licensed - More info: http://github.com/maranomynet/virtualbrowser/
!function(e,t){e.injectBaseHrefToHtml=function(e,t){var a=t.split("#")[0],i=a[u](/([^?]*\/)?(.*)/,"$2"),r=a.split("?")[0][u](/(.*\/)?.*/,"$1");e=e[u](/(<[^>]+ (href|src|action)=["'])(["'#])/gi,"$1"+i+"$3")[u](/(<[^>]+ (href|src|action)=["'])\?/gi,"$1"+i.split("?")[0]+"?")[u](/(["'])([a-z-]{3,12}:)/gi,"$1`<<`>>$2")[u](/(<[^>]+ (href|src|action)=["'])([^\/`])/gi,"$1"+r+"$3")[u](/\`<<`>>/g,"");return e};e.getResultBody=e.getResultBody||function(t,a){var i=e.getResultBody;a=a||{};return e("<div/>").append(e(t||[]).not(a.stripFlat||i.stripFlat||"script,title,meta,link,style").find(a.stripDeep||i.stripDeep||"script,style").remove().end())};e.imgSuppress=e.imgSuppress||function(e,t){return e.replace(/(<img[^>]*? )src=/g,"$1"+(t||h)+"=")};e.imgUnsuppress=e.imgUnsuppress||function(t,a){a=a||h;t.find("img").add(t.filter("img")).attr("src",function(){var t=e(this),i=t.attr(a);t.removeAttr(a);return i})};var a=document.location,i="isDefaultPrevented",r="preventDefault",s="stopPropagation",n="passThrough",o="virtualBrowser",l="VBbeforeload",d="VBload",f="VBerror",m="VBloaded",p="VBdisengaged",u="replace",c="resultDOM",g="result",h="data-srcAttr",v=/^(https?:)?\/\//,b=function(t,a,i,r){var n=e.Event(t);a.one(t,function(e){e[s]()}).trigger(n,[i,r]);return n},y={load:function(s,p){var h={},y,k,C=e(this),T=C.data(o),_=T.cfg,x;if(e.isPlainObject(s)){e.extend(h,s);k=h.url;delete h.elm}else if(typeof s==="string"){k=s}else{y=e(s);h.elm=y;k=y.attr("href");k=k===t?y.attr("action"):k}k=h.url=k===""?a.href:k;if(!T.lastRequest){h.isFirst=true}if(k){if(T._clicked){h.btn=T._clicked}var E=b(l,C,h,T);if(!E[n]&&(E[n]===t&&y&&y[0].target&&y[0].target!==window.name||/^([a-z]{3,12}:|\/\/)/i.test(k)&&k.toLowerCase()[u](v,"").indexOf(a.href.toLowerCase()[u](v,"").split("/")[0])!==0)){E[n]=true}E[n]&&E[r]();if(!E[i]()){var V=h.noCache=h.noCache!==t?h.noCache:_.noCache,S=_.params?[_.params]:[],$;if(y&&y.is("form")){$=y.attr("method");S.push(y.serialize());var D=T._clicked;if(D){var j=D.elm;if(j.is(":image")){var w=j[0].name;S.push(w+".x="+Math.round(D.X));S.push(w+".y="+Math.round(D.Y))}else{S.push(e.param(j))}delete T._clicked}var H="multipart/form-data";E._doIframeSubmit=y.attr("enctype")===H||y.attr("encoding")===H||!!y.find("input:file")[0]}if(h.params){S.push(typeof h.params==="string"?h.params:e.param(h.params||{}))}S=h.params=S.join("&");$=h.method=h.method||$||"GET";C.addClass(_.loadingClass);if(_.loadmsgElm){x=setTimeout(function(){_.loadmsgMode==="replace"&&C.empty();C.append(_.loadmsgElm)},0)}var R={url:h.url.split("#")[0],data:S,type:$,cache:!V,complete:function(t,a){if(t){clearTimeout(x);C.removeClass(_.loadingClass||"");h.xhr=t;h.status=a||"error";var r=!a||a==="error";if(r){b(f,C,h,T)}else{h[g]=e.injectBaseHrefToHtml(t.responseText||"",h.url);if(_.imgSuppress){h[g]=e.imgSuppress(h[g])}}if(h[g]&&_.selector){h[c]=e.getResultBody(h[g],_.stripCfg).find(_.selector)}if(!r||h[g]||h[c]){if(!b(d,C,h,T)[i]()){_.loadmsgElm&&_.loadmsgElm.detach();h[c]=h[c]||e.getResultBody(h[g],_.stripCfg).contents();if(_.imgSuppress&&_.imgUnsuppress!==false){e.imgUnsuppress(h[c])}C.empty().append(h[c]);T.lastRequest=h;b(m,C,h,T);C.find("form").bind("submit.vb"+C.data("VBid"),e.proxy(B,C[0]));delete h[c];delete h[g]}}delete h.xhr;if(_.disengage){C[o]("disengage")}}}};if(E._doIframeSubmit){var L="if"+(new Date).getTime(),M=e('<iframe name="'+L+'" src=\'javascript:"";\' style="position:absolute;top:-999em;left:-999em;visibility:hidden;" />').appendTo("body"),P=y.attr("action")||"",U=y.attr("target")||"";y.attr("target",L);if(_.params){y.attr("action",P+(/\?/.test(P)?"&":"?")+_.params)}M.bind("load",function(){var e="success";R.complete({fakeXHR:"iframe",responseText:"<html>"+M.contents().find("html").html()+"</html>"},e);y.attr({target:U,action:P});setTimeout(function(){M.remove()},0)});if(!p||!p._nativeEvent){y.trigger("submit",["VBiframeHack"])}}else{e.ajax(R)}}return E}},data:function(){return e(this).data(o)},disengage:function(){var t=e(this);t.removeData(o).unbind("click submit",B).find("form").unbind("submit.vb"+t.data("VBid"),B).end().unbind([l,f,d,m].join(" "));b(p,t);t.unbind(p)}},B=function(t){if(!t[i]()&&!t[o+"Handled"]){var a=e(t.target).closest(t.type==="submit"?"[action]":"input:submit, button:submit, input:image, [href]",this);if(a[0]){var l=e(this);if(a.is("input, button")){if(!a[0].disabled){var d=l.data(o);if(a.is(":image")){var f=a.offset();d._clicked={elm:a,X:t.pageX-f.left,Y:t.pageY-f.top}}else if(a.is("[name]")){d._clicked={elm:a}}d._clicked&&setTimeout(function(){delete d._clicked},0)}}else{var m=y.load.call(l[0],a,{_nativeEvent:true});if(!m[n]){!m._doIframeSubmit&&t[r]();m.isPropagationStopped()&&t[s]();t[o+"Handled"]=true}}}}},k=e.fn[o]=function(a,i){var r=this,s=typeof a==="string";if(s){var n=y[a],l;if(n){r.each(function(e){var t=n.apply(this,[].concat(i));if(!e){l=t}})}if(l!==t){return l}}else{r.each(function(){var t=e(this),s=e.extend({},k.defaults,a);e.each(["Beforeload","Error","Load","Loaded","Disengaged"],function(e,t){e="on"+t;s[e]&&r.bind("VB"+t.toLowerCase(),s[e]);delete s[e]});s.params=typeof s.params==="string"?s.params:e.param(s.params||{});i&&(s.url=i);if(s.loadmsgMode!=="none"){var n=s.loadmsgElm||'<div class="loading" />',l=(k.i18n[t.closest("*[lang]").attr("lang")]||{}).loading||k.i18n.en.loading;if(n.charAt){n=n.replace(/%\{msg\}/g,l)}n=s.loadmsgElm=e(n);if(!n.text()){n.append(l)}}else{delete s.loadmsgElm}t.data(o,{cfg:s});t.bind("click",B);t.data("VBid",(new Date).getTime());if(s.url){t[o]("load",s.url)}else{t.find("form").add(t.filter("form")).bind("submit.vb"+t.data("VBid"),e.proxy(B,t[0]))}})}return this};k.defaults={loadmsgMode:"none"};k.i18n={en:{loading:"Loading..."},is:{loading:"Sæki gögn..."}}}(jQuery);