├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── client
├── error.php
├── fancytrack.js
├── fancytrack.min.js
└── fancytrack.min.js.map
├── index.js
└── package.json
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS generated files #
2 | ######################
3 | .DS_Store
4 | .DS_Store?
5 | ._*
6 | .Spotlight-V100
7 | .Trashes
8 | ehthumbs.db
9 | Thumbs.db
10 | node_modules
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2016-2017 FancyGrid
2 | All rights reserved.
3 |
4 | Redistribution and use in source and binary forms, with or without modification,
5 | are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | * Neither the name of the author nor the names of contributors may be used to
15 | endorse or promote products derived from this software without specific prior
16 | written permission.
17 |
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FancyTrack
2 |
3 | Build v1.0.5
4 |
5 | FancyTrack - JavaScript error tracking library from FancyGrid team.
6 | FancyTrack is light alternative to [TrackJS](https://trackjs.com/) service.
7 |
8 | ## Pros and Cons
9 | It is free and light.
10 | But at the moment it overrides window.onerror handler.
11 | window.onerror is not supported by IE Edge
12 |
13 | ## Quick Start
14 | Include a reference to the FancyTrack library
15 |
16 | ```html
17 |
18 | ```
19 | The `FancyTrack` object is now accessible. Happy error tracking!
20 |
21 | ### Sample: Base Init
22 | ```html
23 |
28 | ```
29 |
30 | ### Sample: Set method of request
31 | ```html
32 |
38 | ```
39 |
40 | ### Sample: Track/Send custom error
41 | ```html
42 |
49 | ```
50 |
51 | ## Parametres that FancyTrack sends
52 |
53 | * browser
54 | * columnNumber
55 | * errorText
56 | * errorName
57 | * errorStack
58 | * lineNumber
59 | * mobile
60 | * os
61 | * url
62 | * userAgent
63 |
64 | ## Package Directory
65 | The package includes the following:
66 | ```
67 | | README.md
68 | ├── client
69 | │ ├── fancytrack.min.js
70 | │ ├── fancytrack.js
71 | | ...
72 | ```
73 |
74 | ## Resources
75 | [Capture and report JavaScript errors with window.onerror](https://blog.sentry.io/2016/01/04/client-javascript-reporting-window-onerror.html)
76 | [Test case of error reporting on php](https://github.com/FancyGrid/FancyTrack/blob/master/client/error.php)
77 |
78 | ## Install
79 |
80 | #### *npm*
81 | ```
82 | npm install fancytrack
83 | ```
84 |
85 | ## Support
86 | If you need any assistance or would like to report any bugs found in FancyTrack, please contact us at support@fancygrid.com
87 |
--------------------------------------------------------------------------------
/client/error.php:
--------------------------------------------------------------------------------
1 |
47 |
--------------------------------------------------------------------------------
/client/fancytrack.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * FancyTrack - JavaScript Error Tracking library
3 | * version - 1.0.5
4 | * https://github.com/FancyGrid/FancyTrack
5 | *
6 | * Example: Base Init
7 | * FancyTrack.init();
8 | * Note: It will send report to /error
9 | *
10 | * Example: Set url for error report
11 | * FancyTrack.init({
12 | * url: '/errortrack'
13 | * });
14 | *
15 | * Example: Set method of request
16 | * FancyTrack.init({
17 | * url: '/errortrack',
18 | * method: 'POST'
19 | * });
20 | *
21 | * Example: Track/Send custom error
22 | * FancyTrack.init();
23 | * ...
24 | * FancyTrack.track("My Error");
25 | *
26 | * List of properties that are send in report
27 | * - url
28 | * - errorText
29 | * - errorName
30 | * - errorStack
31 | * - lineNumber
32 | * - columnNumber
33 | * - os
34 | * - mobile
35 | * - browser
36 | */
37 |
38 | (function(global, factory) {
39 | if(typeof define === 'function' && define.amd){
40 | define(function() {
41 | return factory(global);
42 | })
43 | }
44 | else{
45 | factory(global);
46 | }
47 | }(this, function(window){
48 |
49 | /**
50 | * @class FancyTrack - global class with error tracking functions
51 | * @singleton
52 | */
53 | var FancyTrack = function(){};
54 |
55 | FancyTrack.prototype = {
56 | /*
57 | * @private
58 | * @cfg {Boolean}
59 | * Used to determine that FancyTrack was inited
60 | */
61 | inited: false,
62 | /*
63 | * @cfg {Object}
64 | * Object with properties list that should be send to server in report
65 | */
66 | report: {
67 | url: true,
68 | errorText: true,
69 | errorName: true,
70 | errorStack: true,
71 | lineNumber: true,
72 | columnNumber: true,
73 | userAgent: true,
74 | browser: true,
75 | os: true,
76 | mobile: true
77 | },
78 | /*
79 | * @cfg {String}
80 | * String template that would be reported in Web Inspector Console
81 | */
82 | consoleText: '%cFancy%cTrack %ccatched %cError%c! Report was sent!',
83 | /*
84 | * @cfg {Array}
85 | * List of colors that are used for highlighting test reporting in Web Inspector Console
86 | */
87 | consoleArgs: [
88 | 'color:#A2CFE8;font-size: 14px;font-weight: bold;',
89 | 'color:#088EC7;font-size: 14px;font-weight: bold;',
90 | 'font-weight:bold;color: #515151;font-size: 12px;',
91 | 'color: red;font-weight: bold;font-size: 14px;',
92 | 'font-weight:bold;color: #515151;font-size: 12px;'
93 | ],
94 | /*
95 | * @cfg {String}
96 | * Request method
97 | */
98 | method: 'POST',
99 | /*
100 | * @cfg {String}
101 | * Url for reporting error
102 | */
103 | url: '/error/',
104 | /*
105 | * @private
106 | * Applying config to report
107 | */
108 | applyConfig: function(config){
109 | var me = this;
110 |
111 | if(config.report){
112 | for(var p in config){
113 | me.report[p] = config.report[p];
114 | }
115 | }
116 |
117 | for(var p in config){
118 | if(p === 'report'){
119 | continue;
120 | }
121 |
122 | me[p] = config[p];
123 | }
124 | },
125 | /*
126 | * Initialize FancyTrack
127 | */
128 | init: function(config){
129 | var me = this;
130 |
131 | if(me.inited){
132 | return;
133 | }
134 |
135 | me.applyConfig(config || {});
136 |
137 | me.initOnError();
138 |
139 | me.inited = true;
140 | },
141 | /*
142 | * @private
143 | * Initialize error handler and getting user browser info
144 | */
145 | initOnError: function(){
146 | var me = this,
147 | _onError = window.onerror;
148 |
149 | me.getUserInfo();
150 |
151 | window.onerror = function(e, url, lineNumber, columnNumber, eObject){
152 | if(_onError){
153 | _onError.apply(window, [e, url, lineNumber, columnNumber, eObject]);
154 | }
155 |
156 | eObject = eObject || {};
157 |
158 | if(window.console && console.log && me.consoleText){
159 | if(me.isIE){
160 | me.consoleText = me.consoleText.replace(/\%c/g, '');
161 | console.log(me.consoleText);
162 | }
163 | else{
164 | console.log.apply(window, [].concat(me.consoleText).concat(me.consoleArgs));
165 | }
166 | }
167 |
168 | var report = {},
169 | _report = me.report;
170 |
171 | report = me.getBaseReport();
172 |
173 | if(_report.url) report.url = location.href;
174 | if(_report.errorText) report.errorText = e;
175 | if(_report.errorName) report.errorName = eObject.name;
176 | if(_report.errorMessage) report.errorMessage = eObject.message;
177 | if(_report.errorStack) report.errorStack = eObject.stack;
178 | if(_report.lineNumber) report.lineNumber = lineNumber;
179 | if(_report.columnNumber) report.columnNumber = columnNumber;
180 |
181 | if(me.params){
182 | for(var p in me.params){
183 | report[p] = me.params[p];
184 | }
185 | }
186 |
187 | if(window.$ && $.ajax){
188 | $.ajax({
189 | type: me.method,
190 | url: me.url,
191 | data: report
192 | });
193 | }
194 | else{
195 | me.ajax({
196 | method: me.method,
197 | url: me.url,
198 | params: report
199 | });
200 | }
201 | };
202 | },
203 | /*
204 | * @private
205 | * Simple ajax function for sending reports
206 | */
207 | ajax: function(oParams){
208 | var sUrl = oParams.url,
209 | method = oParams.method,
210 | params = oParams.params || {},
211 | sData = '',
212 | bAsync = true,
213 | p,
214 | type = oParams.type || 'json',
215 | headers = oParams.headers || {};
216 |
217 | /* clean up the '&' garbage */
218 | if(sData.replace(/\&/g, '') == ''){
219 | sData = '';
220 | }
221 |
222 | for(p in params){
223 | sData += p+'='+params[p] + '&';
224 | }
225 |
226 | sData = sData.substring(0, sData.length - 1);
227 |
228 | var oBeforeSend = oParams.beforeSend || null,
229 | oErrorCallback = oParams.failure || null,
230 | oSuccessCallback = oParams.success || null,
231 | oXhr = null;
232 |
233 | try{
234 | if(window.ActiveXObject){
235 | oXhr = new ActiveXObject('Microsoft.XMLHTTP');
236 | }
237 | else if(window.XMLHttpRequest){
238 | oXhr = new XMLHttpRequest();
239 | }
240 |
241 | }
242 | catch(oError){}
243 |
244 | var bLocal = (window.location.protocol=='file:');
245 |
246 | if(oXhr){
247 | var rsc = function(){
248 | if(oXhr.readyState == 4){
249 | if(bLocal || (oXhr.status >= 200 && oXhr.status < 300)) {
250 | if(oSuccessCallback){
251 | switch(type){
252 | case 'json':
253 | oSuccessCallback(eval( '(' + oXhr.responseText + ')' ), oXhr.status, oXhr, sUrl);
254 | break;
255 |
256 | case 'html':
257 | case 'text':
258 | oSuccessCallback(oXhr.responseText , oXhr.status, oXhr, sUrl);
259 | break;
260 |
261 | default:
262 | throw new Error('this type is not set');
263 | }
264 | }
265 | }
266 | if(oXhr.status >= 400) {
267 | if (oErrorCallback){
268 | oErrorCallback(oXhr, oXhr.status, oXhr.statusText, sUrl);
269 | }
270 | }
271 |
272 | oXhr.onreadystatechange = new window.Function;
273 | oXhr = null;
274 | }
275 | };
276 |
277 | oXhr.onreadystatechange = rsc;
278 |
279 | if(!window.ActiveXObject){
280 | oXhr.onerror = function(){
281 | if(oErrorCallback){
282 | oErrorCallback(oXhr, 0, '', sUrl);
283 | }
284 | };
285 | }
286 |
287 | var method = method.toUpperCase();
288 |
289 | if(method === 'GET'){
290 | if(sData != ''){
291 | if(sUrl.indexOf('?') == -1){
292 | sUrl += '?';
293 | }
294 | sUrl += sData;
295 | }
296 | oXhr.open('GET', sUrl, true);
297 | }
298 | else{
299 | oXhr.open(method, sUrl, true);
300 | oXhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
301 |
302 | if( oParams.sendJSON ){
303 | oXhr.setRequestHeader('Content-type', 'application/json');
304 | }
305 | else{
306 | oXhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
307 | }
308 |
309 | for(var p in headers){
310 | oXhr.setRequestHeader(p, headers[p]);
311 | }
312 | }
313 |
314 | if(oBeforeSend){
315 | oBeforeSend(oXhr);
316 | }
317 | try{
318 | if( oParams.sendJSON ){
319 | oXhr.send( JSON.stringify(oParams.params) );
320 | }
321 | else{
322 | oXhr.send(sData);
323 | }
324 |
325 | if(!bAsync){
326 | if(oSuccessCallback){
327 | switch(type){
328 | case 'json':
329 | oSuccessCallback(eval( '(' + oXhr.responseText + ')' ), oXhr.status, oXhr, sUrl);
330 | break;
331 | case 'html':
332 | case 'text':
333 | oSuccessCallback(oXhr.responseText , oXhr.status, oXhr, sUrl);
334 | break;
335 | default:
336 | throw new Error('this type is not set');
337 | }
338 | }
339 | }
340 | }
341 | catch(e){
342 | if (bLocal){
343 | if (oErrorCallback){
344 | oErrorCallback(oXhr, oXhr.status, oXhr.statusText, sUrl);
345 | oXhr.onreadystatechange = new window.Function;
346 | oXhr = null;
347 | }
348 | }
349 | }
350 | }
351 | },
352 | /*
353 | * method to send customer error message
354 | */
355 | track: function(msg){
356 | var me = this,
357 | data = me.getBaseReport();
358 |
359 | data.errorText = msg;
360 |
361 | if(window.$ && $.ajax){
362 | $.ajax({
363 | type: me.method,
364 | url: me.url,
365 | data: data
366 | });
367 | }
368 | else{
369 | me.ajax({
370 | method: me.method,
371 | url: me.url,
372 | params: data
373 | });
374 | }
375 | },
376 | /*
377 | * @private
378 | * Getting user browser info
379 | */
380 | getUserInfo: function(){
381 | var me = this,
382 | unknown = 'Unknown';
383 |
384 | // browser
385 | var nVer = navigator.appVersion,
386 | nAgt = navigator.userAgent,
387 | browser = navigator.appName,
388 | version = '' + parseFloat(navigator.appVersion),
389 | majorVersion = parseInt(navigator.appVersion, 10),
390 | nameOffset, verOffset, ix;
391 |
392 | // Opera
393 | if((verOffset = nAgt.indexOf('Opera')) != -1){
394 | browser = 'Opera';
395 | version = nAgt.substring(verOffset + 6);
396 |
397 | if((verOffset = nAgt.indexOf('Version')) != -1){
398 | version = nAgt.substring(verOffset + 8);
399 | }
400 | }
401 |
402 | // Opera Next
403 | if ((verOffset = nAgt.indexOf('OPR')) != -1) {
404 | browser = 'Opera';
405 | version = nAgt.substring(verOffset + 4);
406 | }
407 | // Edge
408 | else if((verOffset = nAgt.indexOf('Edge')) != -1) {
409 | browser = 'Microsoft Edge';
410 | version = nAgt.substring(verOffset + 5);
411 | }
412 | // MSIE
413 | else if((verOffset = nAgt.indexOf('MSIE')) != -1) {
414 | browser = 'Microsoft Internet Explorer';
415 | version = nAgt.substring(verOffset + 5);
416 | }
417 | // Chrome
418 | else if((verOffset = nAgt.indexOf('Chrome')) != -1) {
419 | browser = 'Chrome';
420 | version = nAgt.substring(verOffset + 7);
421 | }
422 | // Safari
423 | else if((verOffset = nAgt.indexOf('Safari')) != -1) {
424 | browser = 'Safari';
425 | version = nAgt.substring(verOffset + 7);
426 | if((verOffset = nAgt.indexOf('Version')) != -1) {
427 | version = nAgt.substring(verOffset + 8);
428 | }
429 | }
430 | // Firefox
431 | else if((verOffset = nAgt.indexOf('Firefox')) != -1) {
432 | browser = 'Firefox';
433 | version = nAgt.substring(verOffset + 8);
434 | }
435 | // MSIE 11+
436 | else if(nAgt.indexOf('Trident/') != -1) {
437 | browser = 'Microsoft Internet Explorer';
438 | version = nAgt.substring(nAgt.indexOf('rv:') + 3);
439 | }
440 | // Other browsers
441 | else if((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {
442 | browser = nAgt.substring(nameOffset, verOffset);
443 | version = nAgt.substring(verOffset + 1);
444 | if(browser.toLowerCase() == browser.toUpperCase()) {
445 | browser = navigator.appName;
446 | }
447 | }
448 | // trim the version string
449 | if((ix = version.indexOf(';')) != -1) version = version.substring(0, ix);
450 | if((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix);
451 | if((ix = version.indexOf(')')) != -1) version = version.substring(0, ix);
452 |
453 | majorVersion = parseInt('' + version, 10);
454 | if(isNaN(majorVersion)){
455 | version = '' + parseFloat(navigator.appVersion);
456 | majorVersion = parseInt(navigator.appVersion, 10);
457 | }
458 |
459 | // mobile version
460 | var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer);
461 |
462 | // cookie
463 | var cookieEnabled = (navigator.cookieEnabled) ? true : false;
464 |
465 | if(typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled){
466 | document.cookie = 'testcookie';
467 | cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false;
468 | }
469 |
470 | // system
471 | var os = unknown;
472 | var clientStrings = [
473 | {s:'Windows 10', r:/(Windows 10.0|Windows NT 10.0)/},
474 | {s:'Windows 8.1', r:/(Windows 8.1|Windows NT 6.3)/},
475 | {s:'Windows 8', r:/(Windows 8|Windows NT 6.2)/},
476 | {s:'Windows 7', r:/(Windows 7|Windows NT 6.1)/},
477 | {s:'Windows Vista', r:/Windows NT 6.0/},
478 | {s:'Windows Server 2003', r:/Windows NT 5.2/},
479 | {s:'Windows XP', r:/(Windows NT 5.1|Windows XP)/},
480 | {s:'Windows 2000', r:/(Windows NT 5.0|Windows 2000)/},
481 | {s:'Windows ME', r:/(Win 9x 4.90|Windows ME)/},
482 | {s:'Windows 98', r:/(Windows 98|Win98)/},
483 | {s:'Windows 95', r:/(Windows 95|Win95|Windows_95)/},
484 | {s:'Windows NT 4.0', r:/(Windows NT 4.0|WinNT4.0|WinNT|Windows NT)/},
485 | {s:'Windows CE', r:/Windows CE/},
486 | {s:'Windows 3.11', r:/Win16/},
487 | {s:'Android', r:/Android/},
488 | {s:'Open BSD', r:/OpenBSD/},
489 | {s:'Sun OS', r:/SunOS/},
490 | {s:'Linux', r:/(Linux|X11)/},
491 | {s:'iOS', r:/(iPhone|iPad|iPod)/},
492 | {s:'Mac OS X', r:/Mac OS X/},
493 | {s:'Mac OS', r:/(MacPPC|MacIntel|Mac_PowerPC|Macintosh)/},
494 | {s:'QNX', r:/QNX/},
495 | {s:'UNIX', r:/UNIX/},
496 | {s:'BeOS', r:/BeOS/},
497 | {s:'OS/2', r:/OS\/2/},
498 | {s:'Search Bot', r:/(nuhk|Googlebot|Yammybot|Openbot|Slurp|MSNBot|Ask Jeeves\/Teoma|ia_archiver)/}
499 | ];
500 |
501 | for(var id in clientStrings){
502 | var cs = clientStrings[id];
503 | if(cs.r.test(nAgt)){
504 | os = cs.s;
505 | break;
506 | }
507 | }
508 |
509 | var osVersion = unknown;
510 |
511 | if (/Windows/.test(os)) {
512 | osVersion = /Windows (.*)/.exec(os)[1];
513 | os = 'Windows';
514 | }
515 |
516 | switch(os){
517 | case 'Mac OS X':
518 | osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
519 | break;
520 | case 'Android':
521 | osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1];
522 | break;
523 | case 'iOS':
524 | osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
525 | osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0);
526 | break;
527 | }
528 |
529 | me.isIE = /Microsoft/.test(browser) || /Internet/.test(browser) || /Explorer/.test(browser);
530 |
531 | me.userAgent = navigator.userAgent;
532 | me.os = os +' '+ osVersion;
533 | me.browser = browser + ' ' + majorVersion;
534 | me.mobile = mobile;
535 | },
536 | /*
537 | * @private
538 | * Getting base report params
539 | */
540 | getBaseReport: function(){
541 | var me = this,
542 | _report = me.report,
543 | report = {};
544 |
545 | if(_report.url) report.userAgent = me.userAgent;
546 | if(_report.url) report.url = location.href;
547 | if(_report.os) report.os = me.os;
548 | if(_report.browser) report.browser = me.browser;
549 | if(_report.mobile) report.mobile = me.mobile;
550 |
551 | return report;
552 | }
553 | };
554 |
555 | FancyTrack = new FancyTrack();
556 |
557 | window.FancyTrack = FancyTrack;
558 |
559 | return FancyTrack;
560 | }));
--------------------------------------------------------------------------------
/client/fancytrack.min.js:
--------------------------------------------------------------------------------
1 | !function(a,b){"function"==typeof define&&define.amd?define(function(){return b(a)}):b(a)}(this,function(window){var FancyTrack=function(){};return 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&&(a.isIE?(a.consoleText=a.consoleText.replace(/\%c/g,""),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.isIE=/Microsoft/.test(h)||/Internet/.test(h)||/Explorer/.test(h),d.userAgent=navigator.userAgent,d.os=m+" "+q,d.browser=h+" "+j,d.mobile=k},getBaseReport:function(){var a=this,b=a.report,c={};return b.url&&(c.userAgent=a.userAgent),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,window.FancyTrack=FancyTrack,FancyTrack});
--------------------------------------------------------------------------------
/client/fancytrack.min.js.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["fancytrack.js"],"names":["global","factory","define","amd","this","window","FancyTrack","prototype","inited","report","url","errorText","errorName","errorStack","lineNumber","columnNumber","userAgent","browser","os","mobile","consoleText","consoleArgs","method","applyConfig","config","me","p","init","initOnError","_onError","onerror","getUserInfo","e","eObject","apply","console","log","isIE","replace","concat","_report","getBaseReport","location","href","name","errorMessage","message","stack","params","$","ajax","type","data","oParams","sUrl","sData","bAsync","headers","substring","length","oBeforeSend","beforeSend","oErrorCallback","failure","oSuccessCallback","success","oXhr","ActiveXObject","XMLHttpRequest","oError","bLocal","protocol","rsc","readyState","status","eval","responseText","Error","statusText","onreadystatechange","Function","toUpperCase","indexOf","open","setRequestHeader","sendJSON","send","JSON","stringify","track","msg","unknown","nVer","navigator","appVersion","nAgt","appName","version","parseFloat","majorVersion","parseInt","nameOffset","verOffset","ix","lastIndexOf","toLowerCase","isNaN","test","cookieEnabled","document","cookie","clientStrings","s","r","id","cs","osVersion","exec"],"mappings":"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"}
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | require('./client/fancytrack.min.js');
2 | module.exports = FancyTrack;
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "fancytrack",
3 | "version": "1.0.5",
4 | "description": "JavaScript Error Tracking library from FancyGrid",
5 | "main" : "index.js",
6 | "scripts": {
7 |
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "https://github.com/FancyGrid/FancyTrack.git"
12 | },
13 | "keywords": [
14 | "fancytrack",
15 | "track",
16 | "error",
17 | "javascript",
18 | "trackjs",
19 | "html5"
20 | ],
21 | "author": "FancyGrid",
22 | "license": "MIT"
23 | }
--------------------------------------------------------------------------------