Skip to content

Commit de825be

Browse files
authored
Merge pull request #236 from tonyhallett/fix-issue-233
Correct report browser state logic
2 parents a3936dc + 23dad86 commit de825be

File tree

1 file changed

+91
-1
lines changed

1 file changed

+91
-1
lines changed

SharedProject/Core/ReportGenerator/ReportGeneratorUtil.cs

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -927,6 +927,8 @@ public string ProcessUnifiedHtml(string htmlForProcessing, string reportOutputFo
927927
928928
var outerHtml = doc.DocumentNode.OuterHtml;
929929
var htmlSb = new StringBuilder(outerHtml);
930+
FixGroupingMax(htmlSb);
931+
FixCollapse(htmlSb);
930932
931933
var assembliesSearch = "var assemblies = [";
932934
var startIndex = outerHtml.IndexOf(assembliesSearch) + assembliesSearch.Length - 1;
@@ -1377,7 +1379,7 @@ function clearFCCWindowLogs(){{
13771379
coverageLogElement.textContent = '';
13781380
window.external.{nameof(ScriptManager.ClearFCCWindowLogs)}();
13791381
}}
1380-
1382+
13811383
function addCoverageLogElements(){{
13821384
var container = document.getElementsByClassName('container')[0];
13831385
var coverageLogContainer = document.createElement('div');
@@ -1547,6 +1549,94 @@ Risk Hotspots
15471549
});
15481550
}
15491551

1552+
private void PreventBrowserHistory(StringBuilder documentStringBuilder)
1553+
{
1554+
documentStringBuilder.Replace(
1555+
@"{key:""onDonBeforeUnlodad"",value:function(){if(this.saveCollapseState(),void 0!==this.window.history&&void 0!==this.window.history.replaceState){console.log(""Coverage info: Updating history"",this.settings);var e=null;(e=null!==window.history.state?JSON.parse(JSON.stringify(this.window.history.state)):new Gc).coverageInfoSettings=JSON.parse(JSON.stringify(this.settings)),window.history.replaceState(e,null)}}},",
1556+
@"{key:""onDonBeforeUnlodad"",value: function(){}},");
1557+
}
1558+
1559+
private void FixCollapse(StringBuilder documentStringBuilder)
1560+
{
1561+
documentStringBuilder.Replace(
1562+
@"{key:""saveCollapseState"",value:function(){var e=this;this.settings.collapseStates=[],function t(n){for(var r=0;r<n.length;r++)e.settings.collapseStates.push(n[r].collapsed),t(n[r].subElements)}(this.codeElements)}},{key:""restoreCollapseState"",value:function(){var e=this,t=0;!function n(r){for(var i=0;i<r.length;i++)e.settings.collapseStates.length>t&&(r[i].collapsed=e.settings.collapseStates[t]),t++,n(r[i].subElements)}(this.codeElements)}}",
1563+
@"{
1564+
key:""saveCollapseState"",
1565+
value:function(){
1566+
var e=this;
1567+
this.settings.collapseStates=[];
1568+
function t(level,n){
1569+
for(var r=0;r<n.length;r++){
1570+
console.log(n[r].name);
1571+
1572+
e.settings.collapseStates.push(n[r].name + ':' + level.toString() + ':' + n[r].collapsed.toString())
1573+
t(level+1,n[r].subElements)
1574+
}
1575+
}
1576+
t(0,this.codeElements);
1577+
}
1578+
},{
1579+
key:""restoreCollapseState"",
1580+
value:function(){
1581+
var e=this;
1582+
var collapsedStates = e.settings.collapseStates;
1583+
function n(level,r){
1584+
for(var i=0;i<r.length;i++){
1585+
var codeElement = r[i];
1586+
for(var j=0;j<collapsedStates.length;j++){
1587+
var collapsedState = collapsedStates[j];
1588+
var parts = collapsedState.split(':');
1589+
var name = parts[0];
1590+
var stateLevel = parts[1];
1591+
var isCollapsed = (parts[2] === 'true');
1592+
if(name == codeElement.name && stateLevel == level.toString()){
1593+
codeElement.collapsed = isCollapsed;
1594+
break;
1595+
}
1596+
}
1597+
n(level + 1, r[i].subElements);// conditional on collapsed ?
1598+
1599+
}
1600+
}
1601+
n(0,this.codeElements);
1602+
}
1603+
}");
1604+
}
1605+
1606+
private void FixGroupingMax(StringBuilder documentStringBuilder)
1607+
{
1608+
documentStringBuilder.Replace(
1609+
@"{key:""ngOnInit"",value:function(){this.historicCoverageExecutionTimes=this.window.historicCoverageExecutionTimes,this.branchCoverageAvailable=this.window.branchCoverageAvailable,this.translations=this.window.translations;var e=!1;if(void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.coverageInfoSettings)console.log(""Coverage info: Restoring from history"",this.window.history.state.coverageInfoSettings),e=!0,this.settings=JSON.parse(JSON.stringify(this.window.history.state.coverageInfoSettings));else{for(var t=0,n=this.window.assemblies,r=0;r<n.length;r++)for(var i=0;i<n[r].classes.length;i++)t=Math.max(t,(n[r].classes[i].name.match(/\./g)||[]).length);this.settings.groupingMaximum=t,console.log(""Grouping maximum: ""+t)}var o=window.location.href.indexOf(""?"");o>-1&&(this.queryString=window.location.href.substr(o)),this.updateCoverageInfo(),e&&this.restoreCollapseState()}}",
1610+
@"{key:""ngOnInit"",value:function(){
1611+
this.historicCoverageExecutionTimes=this.window.historicCoverageExecutionTimes;
1612+
this.branchCoverageAvailable=this.window.branchCoverageAvailable;
1613+
this.translations=this.window.translations;
1614+
var restoredFromHistory = false;
1615+
if(void 0!==this.window.history&&void 0!==this.window.history.replaceState&&null!==this.window.history.state&&null!=this.window.history.state.coverageInfoSettings){
1616+
restoredFromHistory = true;
1617+
this.settings=JSON.parse(JSON.stringify(this.window.history.state.coverageInfoSettings));
1618+
1619+
}
1620+
1621+
for(var t=0,n=this.window.assemblies,r=0;r<n.length;r++){
1622+
for(var i=0;i<n[r].classes.length;i++){
1623+
t=Math.max(t,(n[r].classes[i].name.match(/\./g)||[]).length);
1624+
}
1625+
}
1626+
this.settings.groupingMaximum=t;
1627+
if(this.settings.grouping > this.settings.groupingMaximum){
1628+
this.settings.grouping = this.settings.groupingMaximum;
1629+
}
1630+
1631+
this.updateCoverageInfo();
1632+
if(restoredFromHistory){
1633+
this.restoreCollapseState()
1634+
}
1635+
1636+
}}");
1637+
1638+
}
1639+
15501640
private void HideRowsFromOverviewTable(HtmlDocument doc)
15511641
{
15521642
var table = doc.DocumentNode.QuerySelectorAll("table.overview").First();

0 commit comments

Comments
 (0)