@@ -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