Skip to content

Commit f96c68d

Browse files
authored
Merge pull request #756 from frknbasaran/crashes
[crashes] code highlighting "flashes" in crash details page
2 parents b80cee3 + b26ee3f commit f96c68d

1 file changed

Lines changed: 47 additions & 44 deletions

File tree

plugins/crashes/frontend/public/javascripts/countly.views.js

Lines changed: 47 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -449,12 +449,12 @@ window.CrashesView = countlyView.extend({
449449
"id": "crash-cr-session",
450450
"help": "crashes.help-session"
451451
}/*,
452-
{
453-
"title":jQuery.i18n.map["crashes.resolved-users"],
454-
"data":dashboard.usage['crru'],
455-
"id":"crash-crru",
452+
{
453+
"title":jQuery.i18n.map["crashes.resolved-users"],
454+
"data":dashboard.usage['crru'],
455+
"id":"crash-crru",
456456
"help":"crashes.help-resolved-users"
457-
}*/
457+
}*/
458458
],
459459
"chart-select": [
460460
{
@@ -1313,10 +1313,10 @@ window.CrashgroupView = countlyView.extend({
13131313
this.dtable.stickyTableHeaders();
13141314

13151315
/*$('.crash-reports tbody').on("click", "tr", function (){
1316-
var id = $(this).attr("id");
1317-
if(id)
1318-
window.location.hash = window.location.hash.toString()+"/"+id;
1319-
});*/
1316+
var id = $(this).attr("id");
1317+
if(id)
1318+
window.location.hash = window.location.hash.toString()+"/"+id;
1319+
});*/
13201320
CountlyHelpers.expandRows(this.dtable, this.formatData);
13211321
countlyCommon.drawGraph(crashData.dp[this.curMetric], "#dashboard-graph", "bar");
13221322

@@ -1478,7 +1478,9 @@ window.CrashgroupView = countlyView.extend({
14781478
}
14791479

14801480
$("document").ready(function() {
1481-
self.redecorateStacktrace();
1481+
self.highlightStacktrace(crashData.error, function(highlighted) {
1482+
$("#error pre code").html(highlighted);
1483+
});
14821484
});
14831485

14841486
$(".crash-manipulate-options").on("cly-select-change", function(e, val) {
@@ -1566,30 +1568,29 @@ window.CrashgroupView = countlyView.extend({
15661568
});
15671569
}
15681570
},
1569-
redecorateStacktrace: function() {
1570-
$(".crash-stack .line-number").remove();
1571-
$(".crash-stack .cl").remove();
1572-
var pre = $(".crash-stack pre")[0];
1573-
pre.innerHTML = '<span class="line-number"></span>' + pre.innerHTML + '<span class="cl"></span>';
1574-
var num = pre.innerHTML.split(/\n/).length;
1571+
highlightStacktrace: function(code, callback) {
1572+
// create virtual element for clean escapes
1573+
var span = document.createElement('span');
1574+
span.innerHTML = code;
1575+
code = span.innerText;
1576+
var lines = '';
1577+
// generate lines
1578+
var num = code.split(/\r\n|\n|\r/).length;
15751579
for (var i = 0; i < num; i++) {
1576-
var line_num = pre.getElementsByTagName('span')[0];
1577-
line_num.innerHTML += '<span>' + (i + 1) + '</span>';
1580+
lines += '<span>' + (i + 1) + '</span>';
1581+
}
1582+
if (typeof Worker !== "undefined") {
1583+
var worker = new Worker(countlyGlobal.path + '/javascripts/utils/highlight/highlight.worker.js');
1584+
worker.onmessage = function(event) {
1585+
worker.terminate();
1586+
worker = undefined;
1587+
callback('<span class="line-number">' + lines + '</span>' + event.data + '<span class="cl"></span>');
1588+
};
1589+
worker.postMessage(code);
1590+
}
1591+
else if (typeof hljs !== "undefined") {
1592+
callback('<span class="line-number">' + lines + '</span>' + hljs.highlightBlock(code) + '<span class="cl"></span>');
15781593
}
1579-
$('pre code').each(function(a, block) {
1580-
if (typeof Worker !== "undefined") {
1581-
var worker = new Worker(countlyGlobal.path + '/javascripts/utils/highlight/highlight.worker.js');
1582-
worker.onmessage = function(event) {
1583-
block.innerHTML = event.data;
1584-
worker.terminate();
1585-
worker = undefined;
1586-
};
1587-
worker.postMessage(block.textContent);
1588-
}
1589-
else if (typeof hljs !== "undefined") {
1590-
hljs.highlightBlock(block);
1591-
}
1592-
});
15931594
},
15941595
refresh: function() {
15951596
var self = this;
@@ -1607,9 +1608,12 @@ window.CrashgroupView = countlyView.extend({
16071608
$(".crash-bars").replaceWith(newPage.find(".crash-bars"));
16081609

16091610
var crashData = countlyCrashes.getGroupData();
1610-
$("#error pre code").html(crashData.error);
1611+
self.highlightStacktrace(crashData.error, function(highlighted) {
1612+
$("#error pre code").html(highlighted);
1613+
});
16111614
var errorHeight = $("#expandable").find("code").outerHeight();
16121615

1616+
//self.redecorateStacktrace();
16131617
if (errorHeight < 200) {
16141618
$("#expandable").removeClass("collapsed");
16151619
$("#expand-crash").hide();
@@ -1621,7 +1625,6 @@ window.CrashgroupView = countlyView.extend({
16211625
}
16221626
}
16231627

1624-
self.redecorateStacktrace();
16251628
if (crashData.comments) {
16261629
var container = $("#comments");
16271630
var comment, parent;
@@ -1660,18 +1663,18 @@ window.CrashgroupView = countlyView.extend({
16601663
var str = '';
16611664
if (data) {
16621665
str += '<div class="datatablesubrow">' +
1663-
'<table style="width: 100%;">' +
1664-
'<tr>' +
1665-
'<td class="text-left">' + jQuery.i18n.map["crashes.app_version"] + '</td>' +
1666-
'<td class="text-left">' + jQuery.i18n.map["crashes.device"] + '</td>' +
1667-
'<td class="text-left">' + jQuery.i18n.map["crashes.state"] + '</td>';
1666+
'<table style="width: 100%;">' +
1667+
'<tr>' +
1668+
'<td class="text-left">' + jQuery.i18n.map["crashes.app_version"] + '</td>' +
1669+
'<td class="text-left">' + jQuery.i18n.map["crashes.device"] + '</td>' +
1670+
'<td class="text-left">' + jQuery.i18n.map["crashes.state"] + '</td>';
16681671
if (data.custom) {
16691672
str += '<td class="text-left">' + jQuery.i18n.map["crashes.custom"] + '</td>';
16701673
}
16711674
str += '</tr>' +
1672-
'<tr>' +
1673-
'<td class="text-left">' + data.app_version.replace(/:/g, '.') + '</td>' +
1674-
'<td class="text-left">' + data.os + ' ';
1675+
'<tr>' +
1676+
'<td class="text-left">' + data.app_version.replace(/:/g, '.') + '</td>' +
1677+
'<td class="text-left">' + data.os + ' ';
16751678
if (data.os_version) {
16761679
str += data.os_version.replace(/:/g, '.') + '<br/>';
16771680
}
@@ -1727,7 +1730,7 @@ window.CrashgroupView = countlyView.extend({
17271730
'<tr>' +
17281731
'<td colspan="4" class="stack-trace">';
17291732
str += '<pre>' + data.error + '</pre></td>' +
1730-
'</tr>';
1733+
'</tr>';
17311734
if (data.logs) {
17321735
str += '<tr>' +
17331736
'<td class="text-left">' + jQuery.i18n.map["crashes.logs"] + '</td>' +
@@ -1738,7 +1741,7 @@ window.CrashgroupView = countlyView.extend({
17381741
'</tr>';
17391742
}
17401743
str += '</table>' +
1741-
'</div>';
1744+
'</div>';
17421745
}
17431746
return str;
17441747
},

0 commit comments

Comments
 (0)