var bwc_token = "demo"; var bwc_bug_report_text; var bwc_latest_javascript_error = "None"; var bwc_html2canvas_version = "0.4.1"; //Options: ["0.4.1", "1.0.0"] function bwc_submit_bug_button_click() { bwc_bug_report_text = prompt("Description of Bug/Feedback:", ""); if(!bwc_bug_report_text) { return; } $('#bwc_submit_bug').val('Saving...'); btc_triggerhtml2canvas(); } function bwc_add_button() { var r = $('').attr({ type: "button", id: "bwc_submit_bug", value: "Submit Bug", "data-html2canvas-ignore": "1", onclick: "bwc_submit_bug_button_click()" }).css({ "position": "fixed", "right": "15px", "bottom": "15px", "z-index": "99999", "background": "#f0f0f0", "border-radius": ".25rem", "border": "1px solid #aaa", }); $("body").append(r); } function btc_processcanvas(canvas) { canvas.toBlob( function(blob){ var jform = new FormData(); var bwc_specs = bwc_get_specs(); var card_description = ` **User Note:** ${bwc_bug_report_text}\n ----------------- **URL:** ${window.location.href}\n **OS:** ${bwc_specs.os} ${bwc_specs.osVersion}\n **Browser:** ${bwc_specs.browser} ${bwc_specs.browserMajorVersion} (${bwc_specs.browserVersion})\n **Screen Size:** ${bwc_specs.screen}\n **IP:** {IP}\n ----------------- **Last Javascript Error:** \n ${bwc_latest_javascript_error} `; var card_title = (new Date()).toString()+"\n"+bwc_bug_report_text.substring(0,20)+"..."; jform.append('card_description', card_description); jform.append('card_title', card_title); jform.append("screencap", blob, "screencap.png"); jform.append('bwc_token', bwc_token); $.ajax({ url: 'https://bugswithcontext.com/index.php?act=new', type: 'POST', data: jform, dataType: 'json', mimeType: 'multipart/form-data', // this too contentType: false, cache: false, processData: false, success: function(data, status, jqXHR){ $('#bwc_submit_bug').val('Saved!'); setTimeout(function(){ $('#bwc_submit_bug').val('Submit Bug'); }, 3000); }, error: function(jqXHR,status,error){ //Errors out due to cross origin, but we don't really care $('#bwc_submit_bug').val('Saved!'); setTimeout(function(){ $('#bwc_submit_bug').val('Submit Bug'); }, 3000); } }); }, 'image/png' ); } function btc_triggerhtml2canvas() { if(bwc_html2canvas_version == "0.4.1") { html2canvas($(document.body), { //proxy: "html2canvasproxy.php", onrendered: function(canvas) { btc_processcanvas(canvas); } }); } else { //version = 1.0.0 html2canvas(document.body, { //"proxy": "html2canvasproxy.php" }).then(function(canvas) { btc_processcanvas(canvas); }); } } function bwc_inject_jquery() { if(!window.jQuery) { var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); script.src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"; script.onload = function() { bwc_inject_html2canvas(); bwc_jquery_loaded(); }; head.appendChild(script); } else { bwc_inject_html2canvas(); bwc_jquery_loaded(); } } function bwc_jquery_loaded() { bwc_add_button(); } function bwc_inject_html2canvas() { var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); if(bwc_html2canvas_version == "0.4.1") { script.src = "//cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"; } else { //1.0.0 //script.src = "//bugswithcontext.com/js/html2canvas_v_1_0_0_rc5.min.js"; script.src = "//html2canvas.hertzen.com/dist/html2canvas.js"; } head.appendChild(script); } /** * JavaScript Client Detection * (C) viazenetti GmbH (Christian Ludwig) */ function bwc_get_specs() { var unknown = '-'; // screen var screenSize = ''; if (screen.width) { width = (screen.width) ? screen.width : ''; height = (screen.height) ? screen.height : ''; screenSize += '' + width + " x " + height; } // browser var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var browser = navigator.appName; var version = '' + parseFloat(navigator.appVersion); var majorVersion = parseInt(navigator.appVersion, 10); var nameOffset, verOffset, ix; // Opera if ((verOffset = nAgt.indexOf('Opera')) != -1) { browser = 'Opera'; version = nAgt.substring(verOffset + 6); if ((verOffset = nAgt.indexOf('Version')) != -1) { version = nAgt.substring(verOffset + 8); } } // Opera Next if ((verOffset = nAgt.indexOf('OPR')) != -1) { browser = 'Opera'; version = nAgt.substring(verOffset + 4); } // Edge else if ((verOffset = nAgt.indexOf('Edge')) != -1) { browser = 'Microsoft Edge'; version = nAgt.substring(verOffset + 5); } // MSIE else if ((verOffset = nAgt.indexOf('MSIE')) != -1) { browser = 'Microsoft Internet Explorer'; version = nAgt.substring(verOffset + 5); } // Chrome else if ((verOffset = nAgt.indexOf('Chrome')) != -1) { browser = 'Chrome'; version = nAgt.substring(verOffset + 7); } // Safari else if ((verOffset = nAgt.indexOf('Safari')) != -1) { browser = 'Safari'; version = nAgt.substring(verOffset + 7); if ((verOffset = nAgt.indexOf('Version')) != -1) { version = nAgt.substring(verOffset + 8); } } // Firefox else if ((verOffset = nAgt.indexOf('Firefox')) != -1) { browser = 'Firefox'; version = nAgt.substring(verOffset + 8); } // MSIE 11+ else if (nAgt.indexOf('Trident/') != -1) { browser = 'Microsoft Internet Explorer'; version = nAgt.substring(nAgt.indexOf('rv:') + 3); } // Other browsers else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) { browser = nAgt.substring(nameOffset, verOffset); version = nAgt.substring(verOffset + 1); if (browser.toLowerCase() == browser.toUpperCase()) { browser = navigator.appName; } } // trim the version string if ((ix = version.indexOf(';')) != -1) version = version.substring(0, ix); if ((ix = version.indexOf(' ')) != -1) version = version.substring(0, ix); if ((ix = version.indexOf(')')) != -1) version = version.substring(0, ix); majorVersion = parseInt('' + version, 10); if (isNaN(majorVersion)) { version = '' + parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion, 10); } // mobile version var mobile = /Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(nVer); // cookie var cookieEnabled = (navigator.cookieEnabled) ? true : false; if (typeof navigator.cookieEnabled == 'undefined' && !cookieEnabled) { document.cookie = 'testcookie'; cookieEnabled = (document.cookie.indexOf('testcookie') != -1) ? true : false; } // system var os = unknown; var clientStrings = [ {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:'Chrome OS', r:/CrOS/}, {s:'Linux', r:/(Linux|X11(?!.*CrOS))/}, {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 id in clientStrings) { var cs = clientStrings[id]; if (cs.r.test(nAgt)) { os = cs.s; break; } } var osVersion = unknown; if (/Windows/.test(os)) { osVersion = /Windows (.*)/.exec(os)[1]; os = 'Windows'; } switch (os) { case 'Mac OS X': osVersion = /Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1]; break; case 'Android': osVersion = /Android ([\.\_\d]+)/.exec(nAgt)[1]; break; case 'iOS': osVersion = /OS (\d+)_(\d+)_?(\d+)?/.exec(nVer); osVersion = osVersion[1] + '.' + osVersion[2] + '.' + (osVersion[3] | 0); break; } // flash (you'll need to include swfobject) /* script src="//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" */ var flashVersion = 'no check'; if (typeof swfobject != 'undefined') { var fv = swfobject.getFlashPlayerVersion(); if (fv.major > 0) { flashVersion = fv.major + '.' + fv.minor + ' r' + fv.release; } else { flashVersion = unknown; } } return { screen: screenSize, browser: browser, browserVersion: version, browserMajorVersion: majorVersion, mobile: mobile, os: os, osVersion: osVersion, cookies: cookieEnabled, flashVersion: flashVersion }; } window.onerror = function (msg, url, lineNo, columnNo, error) { try { bwc_latest_javascript_error = error.stack; } catch(err) { //do nothing } if(!bwc_latest_javascript_error || bwc_latest_javascript_error == "None") { bwc_latest_javascript_error = msg + " \n at" + url + ":" + lineNo + ":" + columnNo; } return false; } bwc_inject_jquery();