- Work done on the Bug Email component

This commit is contained in:
Dave Mc Nicoll committed 2019-08-21 15:54:17 -04:00
1 parent ec873145d2
commit a7dcdf4ee7
8 files changed
+286 -139

No files matched your search

+34 -54
View File
@@ -1,54 +1,34 @@
<script>
(function(send) {
XMLHttpRequest.prototype.send = function(data) {
console.log("Hey ! Something was sent !");
send.call(this, data);
};
})(XMLHttpRequest.prototype.send);
class ErrorHandler
{
constructor(options) {
if ( options ) {
if ( "url" in options ) {
this.url = options['url'];
}
}
this.catchError();
}
catchError() {
window.onerror = function(message, url, line, column, error) {
fetch(this.url ? this.url : window.location.href, {
method: "post",
headers: {
'Accept': "application/json",
'Content-Type': "application/json",
'User-Agent': "TheBugs/1.0"
},
body: JSON.stringify({
'message': message,
'url': url,
'line': line,
'column': column,
'stack': error.stack,
'location': window.location.toString()
})
}).then( response => response ).then(data => {
console.info("Error reported", data);
});
return false;
}.bind(this);
}
get url() {
return this._url;
}
set url(set) {
return this._url = set;
}
}
</script>
<script>
(send => {
XMLHttpRequest.prototype.send = function() {
this.addEventListener('load', function(e) {
switch(this.status) {
case 500:
let response = JSON.parse(this.response),
content = JSON.stringify(response.error.trace, null, 2),
element = document.createElement('div'),
body = document.querySelector("body");
body.appendChild(element);
element.outerHTML = `
<div ondblclick="this.parentNode.removeChild(this);">
<dialog style="top:10vh;width:75%;z-index:1500;background:#444;color:#444;border:0px solid #2f2a2a;padding:2px;position:fixed; max-height:80vh;">
<div style="background:#fff">
<div style="padding:15px; color:#fff; border-bottom:2px solid #444;background:#c61f1f;font-weight:bold">${response.error.message}</div>
<pre style="overflow-y:auto;max-height:65vh;padding:15px;">${content}</pre>
<div style="padding:8px 15px; color:#fff; border-top:2px solid #444;text-align:right;background:#c61f1f;font-weight:bold">${response.error.file}:${response.error.line}</div>
</div>
</dialog>
<div style="position:fixed;top:0;left:0;width:100vw;height:100vh;background:#000;opacity:0.5"></div>
</div>
`.trim();
body.querySelector("dialog").showModal();
break;
}
});
send.apply(this, arguments);
};
})(XMLHttpRequest.prototype.send);
</script>