slimerjs-firefox
Version:
This repo includes slimerjs as well as downloads a local copy of Firefox.
9 lines (8 loc) • 5.06 kB
JavaScript
function(){return function(){var c=this;var h=window;function k(a,d){this.code=a;this.state=l[a]||m;this.message=d||"";var b=this.state.replace(/((?:^|\s+)[a-z])/g,function(a){return a.toUpperCase().replace(/^[\s\xa0]+/g,"")}),e=b.length-5;if(0>e||b.indexOf("Error",e)!=e)b+="Error";this.name=b;b=Error(this.message);b.name=this.name;this.stack=b.stack||""}(function(){var a=Error;function d(){}d.prototype=a.prototype;k.b=a.prototype;k.prototype=new d})();
var m="unknown error",l={15:"element not selectable",11:"element not visible",31:"ime engine activation failed",30:"ime not available",24:"invalid cookie domain",29:"invalid element coordinates",12:"invalid element state",32:"invalid selector",51:"invalid selector",52:"invalid selector",17:"javascript error",405:"unsupported operation",34:"move target out of bounds",27:"no such alert",7:"no such element",8:"no such frame",23:"no such window",28:"script timeout",33:"session not created",10:"stale element reference",
0:"success",21:"timeout",25:"unable to set cookie",26:"unexpected alert open"};l[13]=m;l[9]="unknown command";k.prototype.toString=function(){return this.name+": "+this.message};function n(a,d){for(var b=0,e=String(a).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),y=String(d).replace(/^[\s\xa0]+|[\s\xa0]+$/g,"").split("."),H=Math.max(e.length,y.length),z=0;0==b&&z<H;z++){var ha=e[z]||"",ia=y[z]||"",ja=RegExp("(\\d*)(\\D*)","g"),ka=RegExp("(\\d*)(\\D*)","g");do{var f=ja.exec(ha)||["","",""],g=ka.exec(ia)||["","",""];if(0==f[0].length&&0==g[0].length)break;b=((0==f[1].length?0:parseInt(f[1],10))<(0==g[1].length?0:parseInt(g[1],10))?-1:(0==f[1].length?0:parseInt(f[1],10))>
(0==g[1].length?0:parseInt(g[1],10))?1:0)||((0==f[2].length)<(0==g[2].length)?-1:(0==f[2].length)>(0==g[2].length)?1:0)||(f[2]<g[2]?-1:f[2]>g[2]?1:0)}while(0==b)}return b};var p,q,r,s;function t(){return c.navigator?c.navigator.userAgent:null}s=r=q=p=!1;var u;if(u=t()){var aa=c.navigator;p=0==u.indexOf("Opera");q=!p&&-1!=u.indexOf("MSIE");r=!p&&-1!=u.indexOf("WebKit");s=!p&&!r&&"Gecko"==aa.product}var v=p,w=q,x=s,ba=r,A=c.navigator,ca=-1!=(A&&A.platform||"").indexOf("Win");function B(){var a=c.document;return a?a.documentMode:void 0}var C;
a:{var D="",E;if(v&&c.opera)var F=c.opera.version,D="function"==typeof F?F():F;else if(x?E=/rv\:([^\);]+)(\)|;)/:w?E=/MSIE\s+([^\);]+)(\)|;)/:ba&&(E=/WebKit\/(\S+)/),E)var da=E.exec(t()),D=da?da[1]:"";if(w){var ea=B();if(ea>parseFloat(D)){C=String(ea);break a}}C=D}var G={},fa=c.document,ga=fa&&w?B()||("CSS1Compat"==fa.compatMode?parseInt(C,10):5):void 0;var I,J,K,L,M,N,O;O=N=M=L=K=J=I=!1;var P=t();P&&(-1!=P.indexOf("Firefox")?I=!0:-1!=P.indexOf("Camino")?J=!0:-1!=P.indexOf("iPhone")||-1!=P.indexOf("iPod")?K=!0:-1!=P.indexOf("iPad")?L=!0:-1!=P.indexOf("Android")?M=!0:-1!=P.indexOf("Chrome")?N=!0:-1!=P.indexOf("Safari")&&(O=!0));var la=I,ma=J,na=K,oa=L,Q=M,pa=N,R=O;function S(a){return(a=a.exec(t()))?a[1]:""}var qa=function(){if(la)return S(/Firefox\/([0-9.]+)/);if(w||v)return C;if(pa)return S(/Chrome\/([0-9.]+)/);if(R)return S(/Version\/([0-9.]+)/);if(na||oa){var a=/Version\/(\S+).*Mobile\/(\S+)/.exec(t());if(a)return a[1]+"."+a[2]}else{if(Q)return(a=S(/Android\s+([0-9.]+)/))?a:S(/Version\/([0-9.]+)/);if(ma)return S(/Camino\/([0-9.]+)/)}return""}();var T,ra;function U(a){return V?ra(a):Q?0<=n(sa,a):0<=n(qa,a)}var V=function(){if(!x)return!1;var a=c.Components;if(!a)return!1;try{if(!a.classes)return!1}catch(d){return!1}var b=a.classes,a=a.interfaces,e=b["@mozilla.org/xpcom/version-comparator;1"].getService(a.nsIVersionComparator),b=b["@mozilla.org/xre/app-info;1"].getService(a.nsIXULAppInfo),y=b.platformVersion,H=b.version;T=function(a){return 0<=e.a(y,""+a)};ra=function(a){return 0<=e.a(H,""+a)};return!0}(),W;
if(Q){var ta=/Android\s+([0-9\.]+)/.exec(t());W=ta?ta[1]:"0"}else W="0";var sa=W;Q&&U(2.3);Q&&U(4);R&&U(6);var X=w&&(V?T(8):w?0<=n(ga,8):G[8]||(G[8]=0<=n(C,8)))&&!(V?T(9):w?0<=n(ga,9):G[9]||(G[9]=0<=n(C,9))),ua=R&&U(4)&&!U(5),va=Q&&U(2.2)&&!U(2.3),wa=ca&&R&&U(4)&&!U(6);
function xa(){var a=h||h;switch("location"){case "appcache":return X?!1:null!=a.applicationCache;case "browser_connection":return null!=a.navigator&&null!=a.navigator.onLine;case "database":return ua||va?!1:null!=a.openDatabase;case "location":return wa?!1:null!=a.navigator&&null!=a.navigator.geolocation;case "local_storage":return X?!1:null!=a.localStorage;case "session_storage":return X?!1:null!=a.sessionStorage&&null!=a.sessionStorage.clear;default:throw new k(13,"Unsupported API identifier provided as parameter");
}};var ya={enableHighAccuracy:!0,maximumAge:Infinity,timeout:5E3};function za(a,d,b){b=b||ya;if(xa())h.navigator.geolocation.getCurrentPosition(a,d,b);else throw new k(13,"Geolocation undefined");}var Y=["_"],Z=c;Y[0]in Z||!Z.execScript||Z.execScript("var "+Y[0]);for(var $;Y.length&&($=Y.shift());)Y.length||void 0===za?Z=Z[$]?Z[$]:Z[$]={}:Z[$]=za;; return this._.apply(null,arguments);}.apply({navigator:typeof window!=undefined?window.navigator:null,document:typeof window!=undefined?window.document:null}, arguments);}