forked from bugsense/bugsense.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbugsense.min.js
1 lines (1 loc) · 25.7 KB
/
bugsense.min.js
1
!function(name,definition){"function"==typeof define?define(definition):"undefined"!=typeof module&&module.exports?module.exports.browser=definition():this[name]=definition()}("bowser",function(){function detect(){return ie?{name:"Internet Explorer",msie:t,version:ua.match(/(msie |rv:)(\d+(\.\d+)?)/i)[2]}:opera?{name:"Opera",opera:t,version:ua.match(webkitVersion)?ua.match(webkitVersion)[1]:ua.match(/opr\/(\d+(\.\d+)?)/i)[1]}:chrome?{name:"Chrome",webkit:t,chrome:t,version:ua.match(/(?:chrome|crios)\/(\d+(\.\d+)?)/i)[1]}:phantom?{name:"PhantomJS",webkit:t,phantom:t,version:ua.match(/phantomjs\/(\d+(\.\d+)+)/i)[1]}:touchpad?{name:"TouchPad",webkit:t,touchpad:t,version:ua.match(/touchpad\/(\d+(\.\d+)?)/i)[1]}:iphone||ipad?(o={name:iphone?"iPhone":"iPad",webkit:t,mobile:t,ios:t,iphone:iphone,ipad:ipad},webkitVersion.test(ua)&&(o.version=ua.match(webkitVersion)[1]),o):android?{name:"Android",webkit:t,android:t,mobile:t,version:(ua.match(webkitVersion)||ua.match(firefoxVersion))[1]}:safari?{name:"Safari",webkit:t,safari:t,version:ua.match(webkitVersion)[1]}:gecko?(o={name:"Gecko",gecko:t,mozilla:t,version:ua.match(firefoxVersion)[1]},firefox&&(o.name="Firefox",o.firefox=t),o):seamonkey?{name:"SeaMonkey",seamonkey:t,version:ua.match(/seamonkey\/(\d+(\.\d+)?)/i)[1]}:{}}var o,ua=navigator.userAgent,t=!0,ie=/(msie|trident)/i.test(ua),chrome=/chrome|crios/i.test(ua),phantom=/phantom/i.test(ua),safari=/safari/i.test(ua)&&!chrome&&!phantom,iphone=/iphone/i.test(ua),ipad=/ipad/i.test(ua),touchpad=/touchpad/i.test(ua),android=/android/i.test(ua),opera=/opera/i.test(ua)||/opr/i.test(ua),firefox=/firefox/i.test(ua),gecko=/gecko\//i.test(ua),seamonkey=/seamonkey\//i.test(ua),webkitVersion=/version\/(\d+(\.\d+)?)/i,firefoxVersion=/firefox\/(\d+(\.\d+)?)/i,bowser=detect();return bowser.msie&&bowser.version>=8||bowser.chrome&&bowser.version>=10||bowser.firefox&&bowser.version>=4||bowser.safari&&bowser.version>=5||bowser.opera&&bowser.version>=10?bowser.a=t:bowser.msie&&bowser.version<8||bowser.chrome&&bowser.version<10||bowser.firefox&&bowser.version<4||bowser.safari&&bowser.version<5||bowser.opera&&bowser.version<10?bowser.c=t:bowser.x=t,bowser});var extend=function(obj){return each(slice.call(arguments,1),function(source){if(source)for(var prop in source)obj[prop]=source[prop]}),obj},_has=function(object,key){return Object.prototype.hasOwnProperty.call(object,key)},escape=encodeURIComponent;Object.keys=Object.keys||function(o){var result=[];for(var name in o)o.hasOwnProperty(name)&&result.push(name);return result};var isObject=function(instance){return instance instanceof Object},array=[],slice=array.slice,isArray=function(instance){return instance instanceof Array},isValidKeyValue=function(instance){return"string"==typeof instance||"number"==typeof instance||"boolean"==typeof instance},forEach=function(obj,iterator){Array.prototype.forEach.call(Object.keys(obj),function(key){iterator(key,obj[key])})},each=function(obj,iterator,context){if(null!=obj){var nativeForEach=Array.prototype.forEach;if(nativeForEach&&obj.forEach===nativeForEach)obj.forEach(iterator,context);else if(obj.length===+obj.length){for(var i=0,length=obj.length;length>i;i++)if(iterator.call(context,obj[i],i,obj)===breaker)return}else for(var keys=_.keys(obj),i=0,length=keys.length;length>i;i++)if(iterator.call(context,obj[keys[i]],keys[i],obj)===breaker)return}},serialize=function serialize(params,obj,traditional,scope){var array=isArray(obj);forEach(obj,function(key,value){scope&&(key=traditional?scope:scope+"["+(array?"":key)+"]"),!scope&&array?params.add(value.name,value.value):(traditional?isArray(value):isObject(value))?serialize(params,value,traditional,key):params.add(key,value)})},param=function(obj,traditional){var params=[];return params.add=function(k,v){this.push(escape(k)+"="+escape(v))},serialize(params,obj,traditional),params.join("&")},guid_generator=function(){var S4=function(){return Math.floor(65536*Math.random()).toString(16)};return S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()},eventSplitter=/\s+/,eventsApi=function(obj,action,name,rest){if(!name)return!0;if("object"==typeof name){for(var key in name)obj[action].apply(obj,[key,name[key]].concat(rest));return!1}if(eventSplitter.test(name)){for(var names=name.split(eventSplitter),i=0,l=names.length;l>i;i++)obj[action].apply(obj,[names[i]].concat(rest));return!1}return!0},triggerEvents=function(events,args){var ev,i=-1,l=events.length,a1=args[0],a2=args[1],a3=args[2];switch(args.length){case 0:for(;++i<l;)(ev=events[i]).callback.call(ev.ctx);return;case 1:for(;++i<l;)(ev=events[i]).callback.call(ev.ctx,a1);return;case 2:for(;++i<l;)(ev=events[i]).callback.call(ev.ctx,a1,a2);return;case 3:for(;++i<l;)(ev=events[i]).callback.call(ev.ctx,a1,a2,a3);return;default:for(;++i<l;)(ev=events[i]).callback.apply(ev.ctx,args)}},_once=function(func){var memo,ran=!1;return function(){return ran?memo:(ran=!0,memo=func.apply(this,arguments),func=null,memo)}},TraceKit={linesOfContext:11},UNKNOWN_FUNCTION="";TraceKit.computeStackTrace=function(){function loadSource(url){try{var getXHR=function(){try{return new window.XMLHttpRequest}catch(e){return new window.ActiveXObject("Microsoft.XMLHTTP")}},request=getXHR();return request.open("GET",url,!1),request.send(""),request.responseText}catch(e){return""}}function getSource(url){if(!_has(sourceCache,url)){var source="";-1!==url.indexOf(document.domain)&&(source=loadSource(url)),sourceCache[url]=source?source.split("\n"):[]}return sourceCache[url]}function guessFunctionName(url,lineNo){var m,reFunctionArgNames=/function ([^(]*)\(([^)]*)\)/,reGuessFunction=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,line="",maxLines=10,source=getSource(url);if(!source.length)return UNKNOWN_FUNCTION;for(var i=0;maxLines>i;++i)if(line=source[lineNo-i]+line){if(m=reGuessFunction.exec(line))return m[1];if(m=reFunctionArgNames.exec(line))return m[1]}return UNKNOWN_FUNCTION}function gatherContext(url,line){var source=getSource(url);if(!source.length)return null;var context=[],linesBefore=Math.floor(TraceKit.linesOfContext/2),linesAfter=linesBefore+TraceKit.linesOfContext%2,start=Math.max(0,line-linesBefore-1),end=Math.min(source.length,line+linesAfter-1);line-=1;for(var i=start;end>i;++i)source[i]&&context.push(source[i]);return context.length>0?context:null}function escapeRegExp(text){return text.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function escapeCodeAsRegExpForMatchingInsideHTML(body){return escapeRegExp(body).replace("<","(?:<|<)").replace(">","(?:>|>)").replace("&","(?:&|&)").replace('"','(?:"|")').replace(/\s+/g,"\\s+")}function findSourceInUrls(re,urls){for(var source,m,i=0,j=urls.length;j>i;++i)if((source=getSource(urls[i])).length&&(source=source.join("\n"),m=re.exec(source)))return{url:urls[i],line:source.substring(0,m.index).split("\n").length,column:m.index-source.lastIndexOf("\n",m.index)-1};return null}function findSourceInLine(fragment,url,line){var m,source=getSource(url),re=new RegExp("\\b"+escapeRegExp(fragment)+"\\b");return line-=1,source&&source.length>line&&(m=re.exec(source[line]))?m.index:null}function findSourceByFunctionBody(func){for(var body,re,parts,result,urls=[window.location.href],scripts=document.getElementsByTagName("script"),code=""+func,codeRE=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,eventRE=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,i=0;i<scripts.length;++i){var script=scripts[i];script.src&&urls.push(script.src)}if(parts=codeRE.exec(code)){var name=parts[1]?"\\s+"+parts[1]:"",args=parts[2].split(",").join("\\s*,\\s*");body=escapeRegExp(parts[3]).replace(/;$/,";?"),re=new RegExp("function"+name+"\\s*\\(\\s*"+args+"\\s*\\)\\s*{\\s*"+body+"\\s*}")}else re=new RegExp(escapeRegExp(code).replace(/\s+/g,"\\s+"));if(result=findSourceInUrls(re,urls))return result;if(parts=eventRE.exec(code)){var event=parts[1];if(body=escapeCodeAsRegExpForMatchingInsideHTML(parts[2]),re=new RegExp("on"+event+"=[\\'\"]\\s*"+body+"\\s*[\\'\"]","i"),result=findSourceInUrls(re,urls[0]))return result;if(re=new RegExp(body),result=findSourceInUrls(re,urls))return result}return null}function computeStackTraceFromStackProp(ex){if(!ex.stack)return null;for(var parts,element,chrome=/^\s*at (?:((?:\[object object\])?\S+(?: \[as \S+\])?) )?\(?((?:file|http|https):.*?):(\d+)(?::(\d+))?\)?\s*$/i,gecko=/^\s*(\S*)(?:\((.*?)\))?@((?:file|http|https).*?):(\d+)(?::(\d+))?\s*$/i,lines=ex.stack.split("\n"),stack=[],reference=/^(.*) is undefined$/.exec(ex.message),i=0,j=lines.length;j>i;++i){if(parts=gecko.exec(lines[i]))element={url:parts[3],func:parts[1]||UNKNOWN_FUNCTION,args:parts[2]?parts[2].split(","):"",line:+parts[4],column:parts[5]?+parts[5]:null};else{if(!(parts=chrome.exec(lines[i])))continue;element={url:parts[2],func:parts[1]||UNKNOWN_FUNCTION,line:+parts[3],column:parts[4]?+parts[4]:null}}!element.func&&element.line&&(element.func=guessFunctionName(element.url,element.line)),element.line&&(element.context=gatherContext(element.url,element.line)),stack.push(element)}return stack[0]&&stack[0].line&&!stack[0].column&&reference&&(stack[0].column=findSourceInLine(reference[1],stack[0].url,stack[0].line)),stack.length?{mode:"stack",name:ex.name,message:ex.message,url:document.location.href,stack:stack,useragent:navigator.userAgent}:null}function computeStackTraceFromStacktraceProp(ex){for(var parts,stacktrace=ex.stacktrace,testRE=/ line (\d+), column (\d+) in (?:<anonymous function: ([^>]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,lines=stacktrace.split("\n"),stack=[],i=0,j=lines.length;j>i;i+=2)if(parts=testRE.exec(lines[i])){var element={line:+parts[1],column:+parts[2],func:parts[3]||parts[4],args:parts[5]?parts[5].split(","):[],url:parts[6]};if(!element.func&&element.line&&(element.func=guessFunctionName(element.url,element.line)),element.line)try{element.context=gatherContext(element.url,element.line)}catch(exc){}element.context||(element.context=[lines[i+1]]),stack.push(element)}return stack.length?{mode:"stacktrace",name:ex.name,message:ex.message,url:document.location.href,stack:stack,useragent:navigator.userAgent}:null}function computeStackTraceFromOperaMultiLineMessage(ex){var lines=ex.message.split("\n");if(lines.length<4)return null;var parts,i,len,source,lineRE1=/^\s*Line (\d+) of linked script ((?:file|http|https)\S+)(?:: in function (\S+))?\s*$/i,lineRE2=/^\s*Line (\d+) of inline#(\d+) script in ((?:file|http|https)\S+)(?:: in function (\S+))?\s*$/i,lineRE3=/^\s*Line (\d+) of function script\s*$/i,stack=[],scripts=document.getElementsByTagName("script"),inlineScriptBlocks=[];for(i in scripts)_has(scripts,i)&&!scripts[i].src&&inlineScriptBlocks.push(scripts[i]);for(i=2,len=lines.length;len>i;i+=2){var item=null;if(parts=lineRE1.exec(lines[i]))item={url:parts[2],func:parts[3],line:+parts[1]};else if(parts=lineRE2.exec(lines[i])){item={url:parts[3],func:parts[4]};var relativeLine=+parts[1],script=inlineScriptBlocks[parts[2]-1];if(script&&(source=getSource(item.url))){source=source.join("\n");var pos=source.indexOf(script.innerText);pos>=0&&(item.line=relativeLine+source.substring(0,pos).split("\n").length)}}else if(parts=lineRE3.exec(lines[i])){var url=window.location.href.replace(/#.*$/,""),line=parts[1],re=new RegExp(escapeCodeAsRegExpForMatchingInsideHTML(lines[i+1]));source=findSourceInUrls(re,[url]),item={url:url,line:source?source.line:line,func:""}}if(item){item.func||(item.func=guessFunctionName(item.url,item.line));var context=gatherContext(item.url,item.line),midline=context?context[Math.floor(context.length/2)]:null;item.context=context&&midline.replace(/^\s*/,"")===lines[i+1].replace(/^\s*/,"")?context:[lines[i+1]],stack.push(item)}}return stack.length?{mode:"multiline",name:ex.name,message:lines[0],url:document.location.href,stack:stack,useragent:navigator.userAgent}:null}function augmentStackTraceWithInitialElement(stackInfo,url,lineNo,message){var initial={url:url,line:lineNo};if(initial.url&&initial.line){stackInfo.incomplete=!1,initial.func||(initial.func=guessFunctionName(initial.url,initial.line)),initial.context||(initial.context=gatherContext(initial.url,initial.line));var reference=/ '([^']+)' /.exec(message);if(reference&&(initial.column=findSourceInLine(reference[1],initial.url,initial.line)),stackInfo.stack.length>0&&stackInfo.stack[0].url===initial.url){if(stackInfo.stack[0].line===initial.line)return!1;if(!stackInfo.stack[0].line&&stackInfo.stack[0].func===initial.func)return stackInfo.stack[0].line=initial.line,stackInfo.stack[0].context=initial.context,!1}return stackInfo.stack.unshift(initial),stackInfo.partial=!0,!0}return stackInfo.incomplete=!0,!1}function computeStackTraceByWalkingCallerChain(ex,depth){for(var parts,item,source,functionName=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,stack=[],funcs={},recursion=!1,curr=computeStackTraceByWalkingCallerChain.caller;curr&&!recursion;curr=curr.caller)if(curr!==computeStackTrace&&curr!==TraceKit.report){if(item={url:null,func:UNKNOWN_FUNCTION,line:null,column:null},curr.name?item.func=curr.name:(parts=functionName.exec(curr.toString()))&&(item.func=parts[1]),source=findSourceByFunctionBody(curr)){item.url=source.url,item.line=source.line,item.func===UNKNOWN_FUNCTION&&(item.func=guessFunctionName(item.url,item.line));var reference=/ '([^']+)' /.exec(ex.message||ex.description);reference&&(item.column=findSourceInLine(reference[1],source.url,source.line))}funcs[""+curr]?recursion=!0:funcs[""+curr]=!0,stack.push(item)}depth&&stack.splice(0,depth);var result={mode:"callers",name:ex.name,message:ex.message,url:document.location.href,stack:stack,useragent:navigator.userAgent};return augmentStackTraceWithInitialElement(result,ex.sourceURL||ex.fileName,ex.line||ex.lineNumber,ex.message||ex.description),result}function computeStackTrace(ex,depth){var stack=null;depth=null==depth?0:+depth;try{if(stack=computeStackTraceFromStacktraceProp(ex))return stack}catch(e){if(debug)throw e}try{if(stack=computeStackTraceFromStackProp(ex))return stack}catch(e){if(debug)throw e}try{if(stack=computeStackTraceFromOperaMultiLineMessage(ex))return stack}catch(e){if(debug)throw e}try{if(stack=computeStackTraceByWalkingCallerChain(ex,depth+1))return stack}catch(e){if(debug)throw e}return{mode:"failed"}}function computeStackTraceOfCaller(depth){depth=(null==depth?0:+depth)+1;try{throw new Error}catch(ex){return computeStackTrace(ex,depth+1)}}var debug=!1,sourceCache={};return computeStackTrace.augmentStackTraceWithInitialElement=augmentStackTraceWithInitialElement,computeStackTrace.guessFunctionName=guessFunctionName,computeStackTrace.gatherContext=gatherContext,computeStackTrace.ofCaller=computeStackTraceOfCaller,computeStackTrace}(),function(root,factory){"function"==typeof define&&define.amd?define(["exports"],function(exports){root.Lockr=factory(root,exports)}):root.Lockr=factory(root,{})}(this,function(root,Lockr){return root.Lockr=Lockr,Lockr.set=function(key,value){localStorage.setItem(key,value)},Lockr.hset=function(key,hashObj){localStorage.setItem(key,JSON.stringify(hashObj))},Lockr.get=function(key){var value=localStorage.getItem(key);return value?value.match(/[\{\}\:\[\]]/)?JSON.parse(value):value:void 0},Lockr.getAll=function(){var keys=Object.keys(localStorage);return keys.map(function(key){return Lockr.get(key)})},Lockr.flush=function(){localStorage.clear()},Lockr});var md5cycle=function(x,k){var a=x[0],b=x[1],c=x[2],d=x[3];a=ff(a,b,c,d,k[0],7,-680876936),d=ff(d,a,b,c,k[1],12,-389564586),c=ff(c,d,a,b,k[2],17,606105819),b=ff(b,c,d,a,k[3],22,-1044525330),a=ff(a,b,c,d,k[4],7,-176418897),d=ff(d,a,b,c,k[5],12,1200080426),c=ff(c,d,a,b,k[6],17,-1473231341),b=ff(b,c,d,a,k[7],22,-45705983),a=ff(a,b,c,d,k[8],7,1770035416),d=ff(d,a,b,c,k[9],12,-1958414417),c=ff(c,d,a,b,k[10],17,-42063),b=ff(b,c,d,a,k[11],22,-1990404162),a=ff(a,b,c,d,k[12],7,1804603682),d=ff(d,a,b,c,k[13],12,-40341101),c=ff(c,d,a,b,k[14],17,-1502002290),b=ff(b,c,d,a,k[15],22,1236535329),a=gg(a,b,c,d,k[1],5,-165796510),d=gg(d,a,b,c,k[6],9,-1069501632),c=gg(c,d,a,b,k[11],14,643717713),b=gg(b,c,d,a,k[0],20,-373897302),a=gg(a,b,c,d,k[5],5,-701558691),d=gg(d,a,b,c,k[10],9,38016083),c=gg(c,d,a,b,k[15],14,-660478335),b=gg(b,c,d,a,k[4],20,-405537848),a=gg(a,b,c,d,k[9],5,568446438),d=gg(d,a,b,c,k[14],9,-1019803690),c=gg(c,d,a,b,k[3],14,-187363961),b=gg(b,c,d,a,k[8],20,1163531501),a=gg(a,b,c,d,k[13],5,-1444681467),d=gg(d,a,b,c,k[2],9,-51403784),c=gg(c,d,a,b,k[7],14,1735328473),b=gg(b,c,d,a,k[12],20,-1926607734),a=hh(a,b,c,d,k[5],4,-378558),d=hh(d,a,b,c,k[8],11,-2022574463),c=hh(c,d,a,b,k[11],16,1839030562),b=hh(b,c,d,a,k[14],23,-35309556),a=hh(a,b,c,d,k[1],4,-1530992060),d=hh(d,a,b,c,k[4],11,1272893353),c=hh(c,d,a,b,k[7],16,-155497632),b=hh(b,c,d,a,k[10],23,-1094730640),a=hh(a,b,c,d,k[13],4,681279174),d=hh(d,a,b,c,k[0],11,-358537222),c=hh(c,d,a,b,k[3],16,-722521979),b=hh(b,c,d,a,k[6],23,76029189),a=hh(a,b,c,d,k[9],4,-640364487),d=hh(d,a,b,c,k[12],11,-421815835),c=hh(c,d,a,b,k[15],16,530742520),b=hh(b,c,d,a,k[2],23,-995338651),a=ii(a,b,c,d,k[0],6,-198630844),d=ii(d,a,b,c,k[7],10,1126891415),c=ii(c,d,a,b,k[14],15,-1416354905),b=ii(b,c,d,a,k[5],21,-57434055),a=ii(a,b,c,d,k[12],6,1700485571),d=ii(d,a,b,c,k[3],10,-1894986606),c=ii(c,d,a,b,k[10],15,-1051523),b=ii(b,c,d,a,k[1],21,-2054922799),a=ii(a,b,c,d,k[8],6,1873313359),d=ii(d,a,b,c,k[15],10,-30611744),c=ii(c,d,a,b,k[6],15,-1560198380),b=ii(b,c,d,a,k[13],21,1309151649),a=ii(a,b,c,d,k[4],6,-145523070),d=ii(d,a,b,c,k[11],10,-1120210379),c=ii(c,d,a,b,k[2],15,718787259),b=ii(b,c,d,a,k[9],21,-343485551),x[0]=add32(a,x[0]),x[1]=add32(b,x[1]),x[2]=add32(c,x[2]),x[3]=add32(d,x[3])},cmn=function(q,a,b,x,s,t){return a=add32(add32(a,q),add32(x,t)),add32(a<<s|a>>>32-s,b)},ff=function(a,b,c,d,x,s,t){return cmn(b&c|~b&d,a,b,x,s,t)},gg=function(a,b,c,d,x,s,t){return cmn(b&d|c&~d,a,b,x,s,t)},hh=function(a,b,c,d,x,s,t){return cmn(b^c^d,a,b,x,s,t)},ii=function(a,b,c,d,x,s,t){return cmn(c^(b|~d),a,b,x,s,t)},md51=function(s){var i,n=s.length,state=[1732584193,-271733879,-1732584194,271733878];for(i=64;i<=s.length;i+=64)md5cycle(state,md5blk(s.substring(i-64,i)));s=s.substring(i-64);var tail=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(i=0;i<s.length;i++)tail[i>>2]|=s.charCodeAt(i)<<(i%4<<3);if(tail[i>>2]|=128<<(i%4<<3),i>55)for(md5cycle(state,tail),i=0;16>i;i++)tail[i]=0;return tail[14]=8*n,md5cycle(state,tail),state},md5blk=function(s){var i,md5blks=[];for(i=0;64>i;i+=4)md5blks[i>>2]=s.charCodeAt(i)+(s.charCodeAt(i+1)<<8)+(s.charCodeAt(i+2)<<16)+(s.charCodeAt(i+3)<<24);return md5blks},hex_chr="0123456789abcdef".split(""),rhex=function(n){for(var s="",j=0;4>j;j++)s+=hex_chr[n>>8*j+4&15]+hex_chr[n>>8*j&15];return s},hex=function(x){for(var i=0;i<x.length;i++)x[i]=rhex(x[i]);return x.join("")},md5=function(s){return hex(md51(s))},add32=function(a,b){return a+b&4294967295};if("5d41402abc4b2a76b9719d911017c592"!=md5("hello"))var add32=function(x,y){var lsw=(65535&x)+(65535&y),msw=(x>>16)+(y>>16)+(lsw>>16);return msw<<16|65535&lsw};var bugsense;!function(root,factory){"function"==typeof define&&define.amd?define(function(){return root.Bugsense=factory()}):root.Bugsense=factory()}(this,function(){var Bugsense=function(config){return extend(this.config,config),this.config.uid=this.generateUid(),this.dataFixture=this.generateDataFixture(),this.extraData={},this.breadcrumbs=[],this.queue=[],this.retrieveCache(),"undefined"==typeof this.config.context.onerror||this.config.disableOnError||(this.config.context.onerror=this.onerror),this};return Bugsense.prototype={config:{apiKey:"FOOBAR",message:null,userIdentifier:null,appver:null,appname:null,osver:null,url:"https://www.bugsense.com/api/errors",context:window},on:function(name,callback,context){if(!eventsApi(this,"on",name,[callback,context])||!callback)return this;this._events||(this._events={});var events=this._events[name]||(this._events[name]=[]);return events.push({callback:callback,context:context,ctx:context||this}),this},once:function(name,callback,context){if(!eventsApi(this,"once",name,[callback,context])||!callback)return this;var self=this,once=_once(function(){self.off(name,once),callback.apply(this,arguments)});return once._callback=callback,this.on(name,once,context)},off:function(name,callback,context){var retain,ev,events,names,i,l,j,k;if(!this._events||!eventsApi(this,"off",name,[callback,context]))return this;if(!name&&!callback&&!context)return this._events=void 0,this;for(names=name?[name]:_.keys(this._events),i=0,l=names.length;l>i;i++)if(name=names[i],events=this._events[name]){if(this._events[name]=retain=[],callback||context)for(j=0,k=events.length;k>j;j++)ev=events[j],(callback&&callback!==ev.callback&&callback!==ev.callback._callback||context&&context!==ev.context)&&retain.push(ev);retain.length||delete this._events[name]}return this},trigger:function(name){if(!this._events)return this;var args=slice.call(arguments,1);if(!eventsApi(this,"trigger",name,args))return this;var events=this._events[name],allEvents=this._events.all;return events&&triggerEvents(events,args),allEvents&&triggerEvents(allEvents,arguments),this},generateUid:function(){var uid,uid=Lockr.get("bugsense_uid")||guid_generator();return Lockr.set("bugsense_uid",uid),uid},addExtraData:function(key,value){isValidKeyValue(key)&&isValidKeyValue(value)&&(this.extraData[key]=value)},removeExtraData:function(key){delete this.extraData[key]},clearExtraData:function(){this.extraData={}},leaveBreadcrumb:function(breadcrumb){isValidKeyValue(breadcrumb)&&(this.breadcrumbs.length+1==16&&(this.breadcrumbs=this.breadcrumbs.slice(1)),this.breadcrumbs.push(breadcrumb))},clearBreadcrumbs:function(){this.breadcrumbs=[]},_die:function(){throw"BugSense exited"},successHandler:function(request){return request.target&&4!=request.target.readyState?void 0:request.target&&200!=request.target.status?!1:void("console"in window&&console.log("logged 1 error to Bugsense, status: "+request.target.responseText))},getPostURL:function(){return Bugsense.prototype.config.url+"?cacheBuster="+(new Date).getTime()},parseError:function(error){var parsedError={};if(navigator.userAgent.toLowerCase().indexOf("firefox")>-1)parsedError={message:error.message,url:window.location.href,line:error.lineNumber,stack:error.stack,type:error.name};else{try{var where_parts=error.stack.split("\n").slice(1)[0].match(/\s+at\s.*(\/.*\..*|<anonymous>:\d*:\d*)/)}catch(error){error.stack=error.message}parsedError={message:[error.name,error.message].join(": "),url:where_parts?where_parts[1].split(":")[0].replace("/",""):"",line:where_parts?where_parts[1].split(":")[1]:"",stack:error.stack,type:error.name}}return(null==parsedError.stack||"string"==typeof parsedError.stack&&0==parsedError.stack.length)&&(parsedError.stack=parsedError.message),parsedError},getOffendingLine:function(stacktrace,line){return line<TraceKit.linesOfContext/2?stacktrace[line-1]:stacktrace[5]},computeErrorHash:function(offendingLine,message,line,klass,appVersion){var string=offendingLine+message+line+klass+appVersion;return md5(string)},generateExceptionData:function(message,url,line){"string"!=typeof message&&(message=message.toString());var crash={},msg=message.split(": "),klass=TraceKit.computeStackTrace.guessFunctionName(url,line),stacktrace=TraceKit.computeStackTrace.gatherContext(url,line);return extend(crash,this.dataFixture,{exception:{message:msg[1],where:[url,line].join(":"),klass:klass,backtrace:stacktrace,breadcrumbs:this.breadcrumbs}}),crash},testException:function(exception){return"[object Error]"===Object.prototype.toString.call(exception)},isBugsenseException:function(exception){return this.testException(exception)&&"BugSense exited"===exception.detail.errorMessage},notify:function(exception,url,line,column,custom_data){"object"==typeof column&&(custom_data=column),"object"==typeof url&&this.testException(exception)&&(custom_data=url,url=void 0);var message,stack;if(this.testException(exception)){var parsedError=this.parseError(exception);message=[parsedError.type,parsedError.message].join(":"),url=parsedError.url,line=parsedError.line,stack=parsedError.stack,"undefined"!=typeof parsedError.handled&&("object"!=typeof custom_data&&(custom_data={}),custom_data.handled=0)}else message=exception;return this.send(this.generateExceptionData(message,url,line,stack,custom_data),"POST"),!0},send:function(data,method){var request=new XMLHttpRequest;request.open(method,this.getPostURL(),!0),request.setRequestHeader("X-BugSense-Api-Key",this.config.apiKey),request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");var that=this;request.onerror=function(){that.cacheReport(data)},request.onreadystatechange=this.successHandler,request.send(param({data:JSON.stringify(data)}))},cacheReport:function(data){this.queue.push(data),this.updateCache()},retrieveCache:function(){var data=Lockr.get("bugsense_cache");this.queue=data||[],this.queue.length&&this.sendCachedReport()},updateCache:function(){Lockr.hset("bugsense_cache",this.queue)},sendCachedReport:function(){if(!this.queue.length)return!1;var that=this;each(this.queue,function(data,index){that.send(data,"POST"),that.queue.shift(index)}),this.updateCache()},onerror:function(exception,url,line,column,custom_data){return window.bugsense.isBugsenseException(exception)?!1:(bugsense.trigger("crash"),window.bugsense.notify(exception,url,line,column,custom_data))},onpromiseerror:function(event){return window.bugsense.isBugsenseException(exception)?!1:window.bugsense.notify(event.detail.exception,event.detail.promise)}},Bugsense}),extend(Bugsense.prototype,{generateDataFixture:function(){var ua=window.navigator.userAgent;return{client:{name:"bugsense-js",version:"2.0"},request:{user_id:this.config.userIdentifier||"unknown",custom_data:[]},exception:{message:null,where:null,klass:null,backtrace:null,breadcrumbs:null},application_environment:{phone:window.navigator.platform,appver:this.config.appver||"unknown",appname:this.config.appname||"unknown",osver:"undefined"!=typeof window.device?window.device.version:ua.substr(ua.indexOf("; ")+2,ua.length).replace(")",";").split(";")[0]||"unknown",user_agent:bowser.name+" "+bowser.version,cordova:"undefined"!=typeof window.device?window.device.cordova:"unknown",device_name:"undefined"!=typeof window.device?window.device.name:"unknown",log_data:{}}}}});