From 9dc81e58c4e14484e95cbb702a42e2bdc8f59bbe Mon Sep 17 00:00:00 2001 From: Mikhail Tatsky Date: Tue, 24 Jan 2017 14:19:46 +0300 Subject: [PATCH] v1.0.1 --- .gitignore | 3 +-- README.md | 24 ++++++++++++++++++++---- client/fancytrack.min.js | 35 +++++++++++++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index c711ceb..d025a74 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,4 @@ .Trashes ehthumbs.db Thumbs.db - - +node_modules \ No newline at end of file diff --git a/README.md b/README.md index a77e179..1754303 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # FancyTrack -Build v1.0.0 +Build v1.0.1 Free Tiny FancyTrack JavaScript error tracking library from FancyGrid team. FancyTrack is light alternative to [TrackJS](https://trackjs.com/) service. @@ -17,6 +17,8 @@ Include a reference to the FancyTrack library ``` The `FancyTrack` object is now accessible. Happy error tracking! + +### Sample: Base Init ```html ``` -## Method +### Sample: Set method of request ```html ``` +### Sample: Track/Send custom error +```html + +``` + ## Parametres that FancyTrack sends -* url +* browser +* columnNumber * errorText * errorName * errorStack * lineNumber -* columnNumber +* mobile +* os +* url ## Package Directory The package includes the following: diff --git a/client/fancytrack.min.js b/client/fancytrack.min.js index 789777a..527e3bd 100644 --- a/client/fancytrack.min.js +++ b/client/fancytrack.min.js @@ -1,7 +1,38 @@ /*! * FancyTrack - JavaScript Error Tracking library - * version - 1.0.0 + * version - 1.0.1 * https://github.com/FancyGrid/FancyTrack + * + * Example: Base Init + * FancyTrack.init(); + * Note: It will send report to /error + * + * Example: Set url for error report + * FancyTrack.init({ + * url: '/errortrack' + * }); + * + * Example: Set method of request + * FancyTrack.init({ + * url: '/errortrack', + * method: 'POST' + * }); + * + * Example: Track/Send custom error + * FancyTrack.init(); + * ... + * FancyTrack.track("My Error"); + * + * List of properties that are send in report + * - url + * - errorText + * - errorName + * - errorStack + * - lineNumber + * - columnNumber + * - os + * - mobile + * - browser */ -!function(){FancyTrack=function(a){},FancyTrack.prototype={inited:!1,report:{url:!0,errorText:!0,errorName:!0,errorStack:!0,lineNumber:!0,columnNumber:!0,userAgent:!0,browser:!0,os:!0,mobile:!0},consoleText:"%cFancy%cTrack %ccatched %cError%c! Report was sent!",consoleArgs:["color:#A2CFE8;font-size: 14px;font-weight: bold;","color:#088EC7;font-size: 14px;font-weight: bold;","font-weight:bold;color: #515151;font-size: 12px;","color: red;font-weight: bold;font-size: 14px;","font-weight:bold;color: #515151;font-size: 12px;"],method:"POST",url:"/error/",applyConfig:function(a){var b=this;if(a.report)for(var c in a)b.report[c]=a.report[c];for(var c in a)"report"!==c&&(b[c]=a[c])},init:function(a){var b=this;b.inited||(b.applyConfig(a||{}),b.initOnError(),b.inited=!0)},initOnError:function(){var a=this,b=window.onerror;a.getUserInfo(),window.onerror=function(c,d,e,f,g){b&&b.apply(window,[c,d,e,f,g]),g=g||{},window.console&&console.log&&a.consoleText&&console.log.apply(window,[].concat(a.consoleText).concat(a.consoleArgs));var h={},i=a.report;if(i.url&&(h.url=location.href),i.errorText&&(h.errorText=c),i.errorName&&(h.errorName=g.name),i.errorMessage&&(h.errorMessage=g.message),i.errorStack&&(h.errorStack=g.stack),i.lineNumber&&(h.lineNumber=e),i.columnNumber&&(h.columnNumber=f),i.os&&(h.os=a.os),i.browser&&(h.browser=a.browser),i.mobile&&(h.mobile=a.mobile),a.params)for(var j in a.params)h[j]=a.params[j];window.$&&$.ajax?$.ajax({type:a.method,url:a.url,data:h}):a.ajax({method:a.method,url:a.url,params:h})}},ajax:function(oParams){var sUrl=oParams.url,method=oParams.method,params=oParams.params||{},sData="",bAsync=!0,p,type=oParams.type||"json",headers=oParams.headers||{};""==sData.replace(/\&/g,"")&&(sData="");for(p in params)sData+=p+"="+params[p]+"&";sData=sData.substring(0,sData.length-1);var oBeforeSend=oParams.beforeSend||null,oErrorCallback=oParams.failure||null,oSuccessCallback=oParams.success||null,oXhr=null;try{window.ActiveXObject?oXhr=new ActiveXObject("Microsoft.XMLHTTP"):window.XMLHttpRequest&&(oXhr=new XMLHttpRequest)}catch(a){}var bLocal="file:"==window.location.protocol;if(oXhr){var rsc=function(){if(4==oXhr.readyState){if((bLocal||oXhr.status>=200&&oXhr.status<300)&&oSuccessCallback)switch(type){case"json":oSuccessCallback(eval("("+oXhr.responseText+")"),oXhr.status,oXhr,sUrl);break;case"html":case"text":oSuccessCallback(oXhr.responseText,oXhr.status,oXhr,sUrl);break;default:throw new Error("this type is not set")}oXhr.status>=400&&oErrorCallback&&oErrorCallback(oXhr,oXhr.status,oXhr.statusText,sUrl),oXhr.onreadystatechange=new window.Function,oXhr=null}};oXhr.onreadystatechange=rsc,window.ActiveXObject||(oXhr.onerror=function(){oErrorCallback&&oErrorCallback(oXhr,0,"",sUrl)});var method=method.toUpperCase();if("GET"===method)""!=sData&&(sUrl.indexOf("?")==-1&&(sUrl+="?"),sUrl+=sData),oXhr.open("GET",sUrl,!0);else{oXhr.open(method,sUrl,!0),oXhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),oParams.sendJSON?oXhr.setRequestHeader("Content-type","application/json"):oXhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");for(var p in headers)oXhr.setRequestHeader(p,headers[p])}oBeforeSend&&oBeforeSend(oXhr);try{if(oParams.sendJSON?oXhr.send(JSON.stringify(oParams.params)):oXhr.send(sData),!bAsync&&oSuccessCallback)switch(type){case"json":oSuccessCallback(eval("("+oXhr.responseText+")"),oXhr.status,oXhr,sUrl);break;case"html":case"text":oSuccessCallback(oXhr.responseText,oXhr.status,oXhr,sUrl);break;default:throw new Error("this type is not set")}}catch(a){bLocal&&oErrorCallback&&(oErrorCallback(oXhr,oXhr.status,oXhr.statusText,sUrl),oXhr.onreadystatechange=new window.Function,oXhr=null)}}},track:function(a){var b=this;window.$&&$.ajax?$.ajax({type:b.method,url:b.url,data:{errorText:a}}):b.ajax({method:b.method,url:b.url,params:{errorText:a}})},getUserInfo:function(){var a,b,c,d=this,e="Unknown",f=navigator.appVersion,g=navigator.userAgent,h=navigator.appName,i=""+parseFloat(navigator.appVersion),j=parseInt(navigator.appVersion,10);(b=g.indexOf("Opera"))!=-1&&(h="Opera",i=g.substring(b+6),(b=g.indexOf("Version"))!=-1&&(i=g.substring(b+8))),(b=g.indexOf("OPR"))!=-1?(h="Opera",i=g.substring(b+4)):(b=g.indexOf("Edge"))!=-1?(h="Microsoft Edge",i=g.substring(b+5)):(b=g.indexOf("MSIE"))!=-1?(h="Microsoft Internet Explorer",i=g.substring(b+5)):(b=g.indexOf("Chrome"))!=-1?(h="Chrome",i=g.substring(b+7)):(b=g.indexOf("Safari"))!=-1?(h="Safari",i=g.substring(b+7),(b=g.indexOf("Version"))!=-1&&(i=g.substring(b+8))):(b=g.indexOf("Firefox"))!=-1?(h="Firefox",i=g.substring(b+8)):g.indexOf("Trident/")!=-1?(h="Microsoft Internet Explorer",i=g.substring(g.indexOf("rv:")+3)):(a=g.lastIndexOf(" ")+1)<(b=g.lastIndexOf("/"))&&(h=g.substring(a,b),i=g.substring(b+1),h.toLowerCase()==h.toUpperCase()&&(h=navigator.appName)),(c=i.indexOf(";"))!=-1&&(i=i.substring(0,c)),(c=i.indexOf(" "))!=-1&&(i=i.substring(0,c)),(c=i.indexOf(")"))!=-1&&(i=i.substring(0,c)),j=parseInt(""+i,10),isNaN(j)&&(i=""+parseFloat(navigator.appVersion),j=parseInt(navigator.appVersion,10));var k=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(f),l=!!navigator.cookieEnabled;"undefined"!=typeof navigator.cookieEnabled||l||(document.cookie="testcookie",l=document.cookie.indexOf("testcookie")!=-1);var m=e,n=[{s:"Windows 10",r:/(Windows 10.0|Windows NT 10.0)/},{s:"Windows 8.1",r:/(Windows 8.1|Windows NT 6.3)/},{s:"Windows 8",r:/(Windows 8|Windows NT 6.2)/},{s:"Windows 7",r:/(Windows 7|Windows NT 6.1)/},{s:"Windows Vista",r:/Windows NT 6.0/},{s:"Windows Server 2003",r:/Windows NT 5.2/},{s:"Windows XP",r:/(Windows NT 5.1|Windows XP)/},{s:"Windows 2000",r:/(Windows NT 5.0|Windows 2000)/},{s:"Windows ME",r:/(Win 9x 4.90|Windows ME)/},{s:"Windows 98",r:/(Windows 98|Win98)/},{s:"Windows 95",r:/(Windows 95|Win95|Windows_95)/},{s:"Windows NT 4.0",r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},{s:"Windows CE",r:/Windows CE/},{s:"Windows 3.11",r:/Win16/},{s:"Android",r:/Android/},{s:"Open BSD",r:/OpenBSD/},{s:"Sun OS",r:/SunOS/},{s:"Linux",r:/(Linux|X11)/},{s:"iOS",r:/(iPhone|iPad|iPod)/},{s:"Mac OS X",r:/Mac OS X/},{s:"Mac OS",r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},{s:"QNX",r:/QNX/},{s:"UNIX",r:/UNIX/},{s:"BeOS",r:/BeOS/},{s:"OS/2",r:/OS\/2/},{s:"Search Bot",r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}];for(var o in n){var p=n[o];if(p.r.test(g)){m=p.s;break}}var q=e;switch(/Windows/.test(m)&&(q=/Windows (.*)/.exec(m)[1],m="Windows"),m){case"Mac OS X":q=/Mac OS X (10[\.\_\d]+)/.exec(g)[1];break;case"Android":q=/Android ([\.\_\d]+)/.exec(g)[1];break;case"iOS":q=/OS (\d+)_(\d+)_?(\d+)?/.exec(f),q=q[1]+"."+q[2]+"."+(0|q[3])}d.os=m+" "+q,d.browser=j+" "+i,d.mobile=k}},FancyTrack=new FancyTrack}(); \ No newline at end of file +!function(){FancyTrack=function(a){},FancyTrack.prototype={inited:!1,report:{url:!0,errorText:!0,errorName:!0,errorStack:!0,lineNumber:!0,columnNumber:!0,userAgent:!0,browser:!0,os:!0,mobile:!0},consoleText:"%cFancy%cTrack %ccatched %cError%c! Report was sent!",consoleArgs:["color:#A2CFE8;font-size: 14px;font-weight: bold;","color:#088EC7;font-size: 14px;font-weight: bold;","font-weight:bold;color: #515151;font-size: 12px;","color: red;font-weight: bold;font-size: 14px;","font-weight:bold;color: #515151;font-size: 12px;"],method:"POST",url:"/error/",applyConfig:function(a){var b=this;if(a.report)for(var c in a)b.report[c]=a.report[c];for(var c in a)"report"!==c&&(b[c]=a[c])},init:function(a){var b=this;b.inited||(b.applyConfig(a||{}),b.initOnError(),b.inited=!0)},initOnError:function(){var a=this,b=window.onerror;a.getUserInfo(),window.onerror=function(c,d,e,f,g){b&&b.apply(window,[c,d,e,f,g]),g=g||{},window.console&&console.log&&a.consoleText&&console.log.apply(window,[].concat(a.consoleText).concat(a.consoleArgs));var h={},i=a.report;if(h=a.getBaseReport(),i.url&&(h.url=location.href),i.errorText&&(h.errorText=c),i.errorName&&(h.errorName=g.name),i.errorMessage&&(h.errorMessage=g.message),i.errorStack&&(h.errorStack=g.stack),i.lineNumber&&(h.lineNumber=e),i.columnNumber&&(h.columnNumber=f),a.params)for(var j in a.params)h[j]=a.params[j];window.$&&$.ajax?$.ajax({type:a.method,url:a.url,data:h}):a.ajax({method:a.method,url:a.url,params:h})}},ajax:function(oParams){var sUrl=oParams.url,method=oParams.method,params=oParams.params||{},sData="",bAsync=!0,p,type=oParams.type||"json",headers=oParams.headers||{};""==sData.replace(/\&/g,"")&&(sData="");for(p in params)sData+=p+"="+params[p]+"&";sData=sData.substring(0,sData.length-1);var oBeforeSend=oParams.beforeSend||null,oErrorCallback=oParams.failure||null,oSuccessCallback=oParams.success||null,oXhr=null;try{window.ActiveXObject?oXhr=new ActiveXObject("Microsoft.XMLHTTP"):window.XMLHttpRequest&&(oXhr=new XMLHttpRequest)}catch(a){}var bLocal="file:"==window.location.protocol;if(oXhr){var rsc=function(){if(4==oXhr.readyState){if((bLocal||oXhr.status>=200&&oXhr.status<300)&&oSuccessCallback)switch(type){case"json":oSuccessCallback(eval("("+oXhr.responseText+")"),oXhr.status,oXhr,sUrl);break;case"html":case"text":oSuccessCallback(oXhr.responseText,oXhr.status,oXhr,sUrl);break;default:throw new Error("this type is not set")}oXhr.status>=400&&oErrorCallback&&oErrorCallback(oXhr,oXhr.status,oXhr.statusText,sUrl),oXhr.onreadystatechange=new window.Function,oXhr=null}};oXhr.onreadystatechange=rsc,window.ActiveXObject||(oXhr.onerror=function(){oErrorCallback&&oErrorCallback(oXhr,0,"",sUrl)});var method=method.toUpperCase();if("GET"===method)""!=sData&&(sUrl.indexOf("?")==-1&&(sUrl+="?"),sUrl+=sData),oXhr.open("GET",sUrl,!0);else{oXhr.open(method,sUrl,!0),oXhr.setRequestHeader("X-Requested-With","XMLHttpRequest"),oParams.sendJSON?oXhr.setRequestHeader("Content-type","application/json"):oXhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");for(var p in headers)oXhr.setRequestHeader(p,headers[p])}oBeforeSend&&oBeforeSend(oXhr);try{if(oParams.sendJSON?oXhr.send(JSON.stringify(oParams.params)):oXhr.send(sData),!bAsync&&oSuccessCallback)switch(type){case"json":oSuccessCallback(eval("("+oXhr.responseText+")"),oXhr.status,oXhr,sUrl);break;case"html":case"text":oSuccessCallback(oXhr.responseText,oXhr.status,oXhr,sUrl);break;default:throw new Error("this type is not set")}}catch(a){bLocal&&oErrorCallback&&(oErrorCallback(oXhr,oXhr.status,oXhr.statusText,sUrl),oXhr.onreadystatechange=new window.Function,oXhr=null)}}},track:function(a){var b=this,c=b.getBaseReport();c.errorText=a,window.$&&$.ajax?$.ajax({type:b.method,url:b.url,data:c}):b.ajax({method:b.method,url:b.url,params:c})},getUserInfo:function(){var a,b,c,d=this,e="Unknown",f=navigator.appVersion,g=navigator.userAgent,h=navigator.appName,i=""+parseFloat(navigator.appVersion),j=parseInt(navigator.appVersion,10);(b=g.indexOf("Opera"))!=-1&&(h="Opera",i=g.substring(b+6),(b=g.indexOf("Version"))!=-1&&(i=g.substring(b+8))),(b=g.indexOf("OPR"))!=-1?(h="Opera",i=g.substring(b+4)):(b=g.indexOf("Edge"))!=-1?(h="Microsoft Edge",i=g.substring(b+5)):(b=g.indexOf("MSIE"))!=-1?(h="Microsoft Internet Explorer",i=g.substring(b+5)):(b=g.indexOf("Chrome"))!=-1?(h="Chrome",i=g.substring(b+7)):(b=g.indexOf("Safari"))!=-1?(h="Safari",i=g.substring(b+7),(b=g.indexOf("Version"))!=-1&&(i=g.substring(b+8))):(b=g.indexOf("Firefox"))!=-1?(h="Firefox",i=g.substring(b+8)):g.indexOf("Trident/")!=-1?(h="Microsoft Internet Explorer",i=g.substring(g.indexOf("rv:")+3)):(a=g.lastIndexOf(" ")+1)<(b=g.lastIndexOf("/"))&&(h=g.substring(a,b),i=g.substring(b+1),h.toLowerCase()==h.toUpperCase()&&(h=navigator.appName)),(c=i.indexOf(";"))!=-1&&(i=i.substring(0,c)),(c=i.indexOf(" "))!=-1&&(i=i.substring(0,c)),(c=i.indexOf(")"))!=-1&&(i=i.substring(0,c)),j=parseInt(""+i,10),isNaN(j)&&(i=""+parseFloat(navigator.appVersion),j=parseInt(navigator.appVersion,10));var k=/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(f),l=!!navigator.cookieEnabled;"undefined"!=typeof navigator.cookieEnabled||l||(document.cookie="testcookie",l=document.cookie.indexOf("testcookie")!=-1);var m=e,n=[{s:"Windows 10",r:/(Windows 10.0|Windows NT 10.0)/},{s:"Windows 8.1",r:/(Windows 8.1|Windows NT 6.3)/},{s:"Windows 8",r:/(Windows 8|Windows NT 6.2)/},{s:"Windows 7",r:/(Windows 7|Windows NT 6.1)/},{s:"Windows Vista",r:/Windows NT 6.0/},{s:"Windows Server 2003",r:/Windows NT 5.2/},{s:"Windows XP",r:/(Windows NT 5.1|Windows XP)/},{s:"Windows 2000",r:/(Windows NT 5.0|Windows 2000)/},{s:"Windows ME",r:/(Win 9x 4.90|Windows ME)/},{s:"Windows 98",r:/(Windows 98|Win98)/},{s:"Windows 95",r:/(Windows 95|Win95|Windows_95)/},{s:"Windows NT 4.0",r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},{s:"Windows CE",r:/Windows CE/},{s:"Windows 3.11",r:/Win16/},{s:"Android",r:/Android/},{s:"Open BSD",r:/OpenBSD/},{s:"Sun OS",r:/SunOS/},{s:"Linux",r:/(Linux|X11)/},{s:"iOS",r:/(iPhone|iPad|iPod)/},{s:"Mac OS X",r:/Mac OS X/},{s:"Mac OS",r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},{s:"QNX",r:/QNX/},{s:"UNIX",r:/UNIX/},{s:"BeOS",r:/BeOS/},{s:"OS/2",r:/OS\/2/},{s:"Search Bot",r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}];for(var o in n){var p=n[o];if(p.r.test(g)){m=p.s;break}}var q=e;switch(/Windows/.test(m)&&(q=/Windows (.*)/.exec(m)[1],m="Windows"),m){case"Mac OS X":q=/Mac OS X (10[\.\_\d]+)/.exec(g)[1];break;case"Android":q=/Android ([\.\_\d]+)/.exec(g)[1];break;case"iOS":q=/OS (\d+)_(\d+)_?(\d+)?/.exec(f),q=q[1]+"."+q[2]+"."+(0|q[3])}d.os=m+" "+q,d.browser=h+" "+j,d.mobile=k},getBaseReport:function(){var a=this,b=a.report,c={};return b.url&&(c.url=location.href),b.os&&(c.os=a.os),b.browser&&(c.browser=a.browser),b.mobile&&(c.mobile=a.mobile),c}},FancyTrack=new FancyTrack}(); \ No newline at end of file