\n";
From 9042cfd1614ec8c2f109273fc6517c78fe82f4e6 Mon Sep 17 00:00:00 2001
From: bees <78449839+hotbees@users.noreply.github.com>
Date: Mon, 1 Jun 2026 23:47:08 -0400
Subject: [PATCH 03/12] [HTML Report] Emit `section-open` for main actor of
single actor reports
---
engine/report/report_html_player.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/engine/report/report_html_player.cpp b/engine/report/report_html_player.cpp
index a262bb4575c..efc7a3579b5 100644
--- a/engine/report/report_html_player.cpp
+++ b/engine/report/report_html_player.cpp
@@ -3721,7 +3721,7 @@ void print_html_player_description( report::sc_html_stream& os, const player_t&
bool one_player = sim.players_by_name.size() == 1 && !p.is_enemy() && sim.profilesets->n_profilesets() == 0;
// Player Description
- os << "
\n";
+ os << "
\n";
os << "
Date: Tue, 2 Jun 2026 00:49:07 -0400
Subject: [PATCH 04/12] [HTML Report] Defer actor subsection loading
A significant portion of page load time on larger reports is spent parsing HTML and building the DOM. By enclosiong heavier per-actor subsections (Abilities, Buffs, Procs/Uptimes/Benefits, Resources, Action Priority List, Statistics & Data Analysis, Stats, Gear, Profile, Talents (multi-player only), Parsed Player Effects) in `\n";
os << "
\n";
}
diff --git a/engine/report/data/html_report_script.js b/engine/report/data/html_report_script.js
index 68d91a4cb48..1b80f46186c 100644
--- a/engine/report/data/html_report_script.js
+++ b/engine/report/data/html_report_script.js
@@ -86,7 +86,7 @@ jQuery(document).ready(function ($) {
}
}
});
- $('.toggle-details').click(function (e) {
+ $(document).on('click', '.toggle-details', function (e) {
e.preventDefault();
e.stopPropagation();
var $me = $(this);
@@ -99,16 +99,37 @@ jQuery(document).ready(function ($) {
$row.fadeToggle(150);
}
});
- $('.toggle, .toggle-details').each(function() {
- if ( __chartData[this.id] === undefined ) return;
- $(this).one('click', function() {
- var d = __chartData[this.id];
- for (var idx in d) {
- $('#' + d[idx]['target']).highcharts(d[idx]['data']);
- }
+ function bindChartLoaders($scope) {
+ $scope.find('.toggle, .toggle-details').each(function() {
+ if ( __chartData[this.id] === undefined ) return;
+ $(this).one('click', function() {
+ var d = __chartData[this.id];
+ for (var idx in d) {
+ $('#' + d[idx]['target']).highcharts(d[idx]['data']);
+ }
+ });
});
+ }
+ bindChartLoaders($(document));
+ $('.toggle').each(function() {
+ if ( !this.id ) return;
+ var $deferred = $('script[type="text/x-deferred-html"][data-toggle="' + this.id + '"]');
+ if ( !$deferred.length ) return;
+ var inject = function() {
+ $deferred.each(function() {
+ var $injected = $($.parseHTML(this.textContent));
+ $(this).replaceWith($injected);
+ bindChartLoaders($injected);
+ });
+ $('.stripetoprow').oddstripe();
+ };
+ if ( $(this).hasClass('open') ) {
+ inject();
+ } else {
+ $(this).one('click', inject);
+ }
});
- $('table.stripetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type').click(function (e) {
+ $(document).on('click', 'table.stripetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type', function (e) {
e.preventDefault();
$(this).children('.toggle-details').first().click();
});
@@ -202,7 +223,7 @@ jQuery(document).ready(function ($) {
$cells.removeClass('pulse');
}, 150);
}
- $('.sort').on('click', 'th.toggle-sort', function (e) {
+ $(document).on('click', '.sort th.toggle-sort', function (e) {
e.preventDefault();
var $me = $(this);
var $col = $me.closest('th');
diff --git a/engine/report/data/report_data.inc b/engine/report/data/report_data.inc
index e55d8319aaf..7eaffb45f88 100644
--- a/engine/report/data/report_data.inc
+++ b/engine/report/data/report_data.inc
@@ -1139,46 +1139,51 @@ static const char* __html_report_script[] = {
" $me.next('.toggle-content').slideToggle(150); var section = $me.parent('.section'); if (section.length) { section.v",
"alidate_section(); if ($me.hasClass('open')) { var wh = $(window).height() / 3; var pos = section[0].getBoundingClie",
"ntRect().top; if (pos > wh * 2) { $('html, body').animate( { scrollTop: section.offset().top - wh }, 300); } } } });",
-" $('.toggle-details').click(function (e) { e.preventDefault(); e.stopPropagation(); var $me = $(this); var $row = $m",
-"e.closest('tr').nextAll('.details').first(); if ($me.hasClass('open')) { $me.removeClass('open'); $row.fadeToggle(75",
-"); } else { $me.addClass('open'); $row.fadeToggle(150); } }); $('.toggle, .toggle-details').each(function() { if ( _",
-"_chartData[this.id] === undefined ) return; $(this).one('click', function() { var d = __chartData[this.id]; for (var",
-" idx in d) { $('#' + d[idx]['target']).highcharts(d[idx]['data']); } }); }); $('table.stripetoprow .toprow td:first-",
-"of-type, table.stripebody tbody td:first-of-type').click(function (e) { e.preventDefault(); $(this).children('.toggl",
-"e-details').first().click(); }); var hoverTimeout; function hoverHide() { clearTimeout(hoverTimeout); $('#active-hel",
-"p','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help').hover(function (e) { var $target = $(thi",
-"s.dataset.help + ' .help-box'); var content; if (!$target.length) { content = '
NO HELP FOUND
PLEASE REPOR",
-"T AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynamic .help-box').html(content); $('#active-",
-"help .help-box').show(); var pos = $(this).offset(); $('#active-help').css({ top: pos.top - $('#active-help').height",
-"() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(function() { $('#active-help').fadeIn(300); }, ",
-"750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, both) { var $row; var ret; var idx = i; if",
-" ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').first(); } ret = $row.children('td').eq(idx",
-").text().trim(); if (!ret.length && both) { var span = $row.children('td[rowspan]').length; $row = $row.nextAll('.ch",
-"ildrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row.children('td').eq(idx).text().trim(); } ",
-"} return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0') + 1).replace(/[^\\d.-]/g,''); } function",
-" numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0; var vb = +strip(getCell(b, i, both)) ||",
-" 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, both) { var va = getCell(a, i, both); var vb",
-" = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { return va > vb \? 1 : -1; } } function pulseco",
-"lumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetoprow')) { table.find('.toprow:not(.childrow",
-")').each(function() { var me = $(this); var cell = me.children('td').eq(index); if (both && (!cell.length || cell.is",
-"(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.nextAll('.childrow').first(); if (row.leng",
-"th && index >= span) { cell = row.children('td').eq(index - span); } } if (cell.length && !cell.is(':empty')) { $.me",
-"rge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells = table.find('tbody tr:first-of-type td:n",
-"th-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find('tbody tr td:nth-of-type(' + (index + 1)",
-" + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $cells.removeClass('pulse'); }, 150); } $(",
-"'.sort').on('click', 'th.toggle-sort', function (e) { e.preventDefault(); var $me = $(this); var $col = $me.closest(",
-"'th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('table.sort'); var $sib = $col.siblings('.asc-sorte",
-"d, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx = $col.index(); var doAlpha = this.dataset.sort",
-"type == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRows = this.dataset.sortrows == 'both'; if (!($me.",
-"hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleClass('dsc-sorted', !doAsc); } else { $me.toggleC",
-"lass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.toggleClass('asc-sorted', !isDsc); var srt; if (do",
-"Alpha) { srt = function(i, dsc, both) { return function(a, b) { return alphaSort(a, b, i, dsc, both); }; }; } else {",
-" srt = function(i, dsc, both) { return function(a, b) { return numberSort(a, b, i, dsc, both); }; }; } var $bucket =",
-" $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bucket.children('tr').first().nextUntil('.petrow')",
-".addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; do { $bucket.sort(srt(idx, isDsc, doRows)); $tbl.",
-"append($bucket); if (!$remain.length) { break; } $tbl.append($remain); $petrow = $remain.first(); $bucket = $petrow.",
-"nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($bucket.length > 1); if ($tbl.hasClass('stripetop",
-"row')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
+" $(document).on('click', '.toggle-details', function (e) { e.preventDefault(); e.stopPropagation(); var $me = $(this",
+"); var $row = $me.closest('tr').nextAll('.details').first(); if ($me.hasClass('open')) { $me.removeClass('open'); $r",
+"ow.fadeToggle(75); } else { $me.addClass('open'); $row.fadeToggle(150); } }); function bindChartLoaders($scope) { $s",
+"cope.find('.toggle, .toggle-details').each(function() { if ( __chartData[this.id] === undefined ) return; $(this).on",
+"e('click', function() { var d = __chartData[this.id]; for (var idx in d) { $('#' + d[idx]['target']).highcharts(d[id",
+"x]['data']); } }); }); } bindChartLoaders($(document)); $('.toggle').each(function() { if ( !this.id ) return; var $",
+"deferred = $('script[type=\"text/x-deferred-html\"][data-toggle=\"' + this.id + '\"]'); if ( !$deferred.length ) ret",
+"urn; var inject = function() { $deferred.each(function() { var $injected = $($.parseHTML(this.textContent)); $(this)",
+".replaceWith($injected); bindChartLoaders($injected); }); $('.stripetoprow').oddstripe(); }; if ( $(this).hasClass('",
+"open') ) { inject(); } else { $(this).one('click', inject); } }); $(document).on('click', 'table.stripetoprow .topro",
+"w td:first-of-type, table.stripebody tbody td:first-of-type', function (e) { e.preventDefault(); $(this).children('.",
+"toggle-details').first().click(); }); var hoverTimeout; function hoverHide() { clearTimeout(hoverTimeout); $('#activ",
+"e-help','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help').hover(function (e) { var $target = ",
+"$(this.dataset.help + ' .help-box'); var content; if (!$target.length) { content = '
NO HELP FOUND
PLEASE ",
+"REPORT AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynamic .help-box').html(content); $('#ac",
+"tive-help .help-box').show(); var pos = $(this).offset(); $('#active-help').css({ top: pos.top - $('#active-help').h",
+"eight() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(function() { $('#active-help').fadeIn(300)",
+"; }, 750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, both) { var $row; var ret; var idx = ",
+"i; if ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').first(); } ret = $row.children('td').e",
+"q(idx).text().trim(); if (!ret.length && both) { var span = $row.children('td[rowspan]').length; $row = $row.nextAll",
+"('.childrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row.children('td').eq(idx).text().trim(",
+"); } } return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0') + 1).replace(/[^\\d.-]/g,''); } fun",
+"ction numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0; var vb = +strip(getCell(b, i, both",
+")) || 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, both) { var va = getCell(a, i, both); v",
+"ar vb = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { return va > vb \? 1 : -1; } } function pu",
+"lsecolumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetoprow')) { table.find('.toprow:not(.chi",
+"ldrow)').each(function() { var me = $(this); var cell = me.children('td').eq(index); if (both && (!cell.length || ce",
+"ll.is(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.nextAll('.childrow').first(); if (row",
+".length && index >= span) { cell = row.children('td').eq(index - span); } } if (cell.length && !cell.is(':empty')) {",
+" $.merge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells = table.find('tbody tr:first-of-type",
+" td:nth-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find('tbody tr td:nth-of-type(' + (index",
+" + 1) + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $cells.removeClass('pulse'); }, 150);",
+" } $(document).on('click', '.sort th.toggle-sort', function (e) { e.preventDefault(); var $me = $(this); var $col = ",
+"$me.closest('th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('table.sort'); var $sib = $col.siblings",
+"('.asc-sorted, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx = $col.index(); var doAlpha = this.",
+"dataset.sorttype == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRows = this.dataset.sortrows == 'both'",
+"; if (!($me.hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleClass('dsc-sorted', !doAsc); } else {",
+" $me.toggleClass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.toggleClass('asc-sorted', !isDsc); var",
+" srt; if (doAlpha) { srt = function(i, dsc, both) { return function(a, b) { return alphaSort(a, b, i, dsc, both); };",
+" }; } else { srt = function(i, dsc, both) { return function(a, b) { return numberSort(a, b, i, dsc, both); }; }; } v",
+"ar $bucket = $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bucket.children('tr').first().nextUnti",
+"l('.petrow').addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; do { $bucket.sort(srt(idx, isDsc, doR",
+"ows)); $tbl.append($bucket); if (!$remain.length) { break; } $tbl.append($remain); $petrow = $remain.first(); $bucke",
+"t = $petrow.nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($bucket.length > 1); if ($tbl.hasClas",
+"s('stripetoprow')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
};
// Automatically generated from file style.css
diff --git a/engine/report/report_html_player.cpp b/engine/report/report_html_player.cpp
index efc7a3579b5..bc3b596a262 100644
--- a/engine/report/report_html_player.cpp
+++ b/engine/report/report_html_player.cpp
@@ -1181,10 +1181,11 @@ void print_html_gear( report::sc_html_stream& os, const player_t& p )
if ( p.items.empty() )
return;
+ os << "
\n";
+ os.printf( "
Gear
\n", p.index );
+ os << "
\n";
+ os.printf( "\n"
<< "
\n"
<< "
\n";
}
@@ -1437,12 +1439,14 @@ void print_html_profile( report::sc_html_stream& os, const player_t& p,
profile_str = util::encode_html( profile_str );
util::replace_all( profile_str, "\n", "
" );
- os << "
\n"
- << "
Profile
\n"
- << "
\n"
- << "
\n"
+ os << "
\n";
+ os.printf( "
Profile
\n", p.index );
+ os << "
\n";
+ os.printf( "\n"
<< "
\n"
<< "
\n";
}
@@ -1475,10 +1479,11 @@ void print_html_stats( report::sc_html_stream& os, const player_t& p )
if ( p.collected_data.fight_length.mean() > 0 )
{
- os << "
\n"
- << "
Stats
\n"
- << "
\n"
- << "
\n"
+ os << "\n";
+ os.printf( "
Stats
\n", p.index );
+ os << "
\n";
+ os.printf( "\n"
<< "
\n"
<< "
\n";
}
@@ -2042,11 +2048,14 @@ void print_html_talents( report::sc_html_stream& os, const player_t& p )
*points_ptr += _rank;
}
- os << "\n"
- << "
Talents
\n"
- << "
\n";
-
auto num_players = p.sim->players_by_name.size();
+
+ os << "
\n";
+ os.printf( "
Talents
\n", p.index );
+ os << "
\n";
+ if ( num_players > 1 )
+ os.printf( "\n";
+
os << "
\n"
<< "
\n";
}
@@ -2475,9 +2487,10 @@ void print_html_sample_sequence_table_entry( report::sc_html_stream& os,
void print_html_player_action_priority_list( report::sc_html_stream& os, const player_t& p )
{
const sim_t& sim = *( p.sim );
- os << "
\n"
- << "
Action Priority List
\n"
- << "
\n";
+ os << "
\n";
+ os.printf( "
Action Priority List
\n", p.index );
+ os << "
\n";
+ os.printf( "\n";
os << "
\n"
<< "
\n";
}
@@ -2652,10 +2666,11 @@ void print_html_player_statistics( report::sc_html_stream& os, const player_t& p
{
// Statistics & Data Analysis
- os << "
\n"
- "
Statistics & Data Analysis
\n"
- "
\n"
- "
\n";
+ os << "\n";
+ os.printf( "
Statistics & Data Analysis
\n", p.index );
+ os << "
\n";
+ os.printf( "\n";
+ os << "
\n"
"
\n";
}
@@ -2945,6 +2961,7 @@ void print_html_player_resources( report::sc_html_stream& os, const player_t& p
os << "\n"
<< "
Resources
\n"
<< "
\n";
+ os.printf( "\n";
+ os << "
\n"; // Open DIV for charts
for ( resource_e r = RESOURCE_MAX; --r > RESOURCE_NONE; )
{
@@ -3638,6 +3657,8 @@ void print_html_player_buffs( report::sc_html_stream& os, const player_t& p,
<< "
Buffs
\n"
<< "
\n";
+ os.printf( "\n";
+
os << "
\n"
<< "
\n";
}
@@ -4429,9 +4452,11 @@ void print_html_player_abilities( report::sc_html_stream& os, const player_t& p
<< "
Abilities
\n"
<< "
\n";
+ os.printf( "\n";
// close section
os << "
\n"
@@ -4743,6 +4768,8 @@ void print_html_player_procs( report::sc_html_stream& os, const player_t& p )
<< "
Procs, Uptimes & Benefits
\n"
<< "
\n"; // Can't use columns as detail toggle will change widths
+ os.printf( "\n";
+
os << "
\n"
<< "
\n";
}
From 55262d31dec2ba7645cda2e3cfe2b576e4935cec Mon Sep 17 00:00:00 2001
From: Kate Martin <51387586+renanthera@users.noreply.github.com>
Date: Sat, 6 Jun 2026 21:40:05 -0600
Subject: [PATCH 05/12] [report] Remove special casing for HTML reports based
on actor count.
---
engine/report/report_html_player.cpp | 30 ++++++++++------------------
engine/report/report_html_sim.cpp | 10 +---------
2 files changed, 11 insertions(+), 29 deletions(-)
diff --git a/engine/report/report_html_player.cpp b/engine/report/report_html_player.cpp
index bc3b596a262..32d965537f5 100644
--- a/engine/report/report_html_player.cpp
+++ b/engine/report/report_html_player.cpp
@@ -2048,25 +2048,19 @@ void print_html_talents( report::sc_html_stream& os, const player_t& p )
*points_ptr += _rank;
}
- auto num_players = p.sim->players_by_name.size();
-
os << "
\n";
os.printf( "
Talents
\n", p.index );
os << "
\n";
- if ( num_players > 1 )
- os.printf( "\n";
+ os << "
\n";
+ os << "\n";
os << "
\n"
<< "
\n";
diff --git a/engine/report/report_html_sim.cpp b/engine/report/report_html_sim.cpp
index 9060433c013..ace050125fa 100644
--- a/engine/report/report_html_sim.cpp
+++ b/engine/report/report_html_sim.cpp
@@ -1278,15 +1278,7 @@ void print_html_( report::sc_html_stream& os, sim_t& sim )
if ( sim.decorated_tooltips )
{
- //Apply the prettification stuff only if its a single report
- if ( num_players > 1 )
- {
- os << R"()";
- }
- else
- {
- os << R"()";
- }
+ os << R"()";
if ( !sim.offline )
os << std::endl << R"()";
From cd567eb7ed258bd25cb4d2d6c9e9eff7bac5f00d Mon Sep 17 00:00:00 2001
From: bees <78449839+hotbees@users.noreply.github.com>
Date: Sun, 7 Jun 2026 00:05:47 -0400
Subject: [PATCH 06/12] fix talent tables toggle
---
engine/report/report_html_player.cpp | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/engine/report/report_html_player.cpp b/engine/report/report_html_player.cpp
index 32d965537f5..81dbfcf5756 100644
--- a/engine/report/report_html_player.cpp
+++ b/engine/report/report_html_player.cpp
@@ -2057,10 +2057,12 @@ void print_html_talents( report::sc_html_stream& os, const player_t& p )
auto h_ = static_cast( 1165 - max_col * 28 );
os.format( R"()",
raidbots_talent_render_src( p.talents_str, p.true_level, 1165, false, p.dbc->ptr ), h_ );
+ os << "\n";
// Hide the talent table only if the Raidbots talent iframe is present.
- os << "Talent Tables
\n"
- << "\n";
+ os.printf( "
Talent Tables
\n", p.index );
+ os << "
\n";
+ os.printf( "\n";
+ os << "
\n";
os << "
\n"
<< "\n";
From bb81182c2c8940eccf805fc3e025bdab4c2028ff Mon Sep 17 00:00:00 2001
From: bees <78449839+hotbees@users.noreply.github.com>
Date: Sun, 7 Jun 2026 02:03:04 -0400
Subject: [PATCH 07/12] fix toggle onclick in deferred blocks
---
engine/report/data/html_report_script.js | 2 +-
engine/report/data/report_data.inc | 98 ++++++++++++------------
2 files changed, 50 insertions(+), 50 deletions(-)
diff --git a/engine/report/data/html_report_script.js b/engine/report/data/html_report_script.js
index 1b80f46186c..8496178d539 100644
--- a/engine/report/data/html_report_script.js
+++ b/engine/report/data/html_report_script.js
@@ -67,7 +67,7 @@ jQuery(document).ready(function ($) {
scrollTop: $anchor.parent().offset().top - $anchor.height()
}, 300);
});
- $('.toggle').click(function (e) {
+ $(document).on('click', '.toggle', function (e) {
e.preventDefault();
var $me = $(this);
$me.toggleClass('open');
diff --git a/engine/report/data/report_data.inc b/engine/report/data/report_data.inc
index 7eaffb45f88..54a2cf89961 100644
--- a/engine/report/data/report_data.inc
+++ b/engine/report/data/report_data.inc
@@ -1135,55 +1135,55 @@ static const char* __html_report_script[] = {
"$('a.ext').mouseover(function () { $(this).attr('target', '_blank'); }); $('ul.toc li a').click(function (e) { e.pre",
"ventDefault(); var href = this.getAttribute('href'); var $anchor = $(href).children('h2').first(); if (!$anchor.hasC",
"lass('open')) { $anchor.click(); } $('html, body').animate( { scrollTop: $anchor.parent().offset().top - $anchor.hei",
-"ght() }, 300); }); $('.toggle').click(function (e) { e.preventDefault(); var $me = $(this); $me.toggleClass('open');",
-" $me.next('.toggle-content').slideToggle(150); var section = $me.parent('.section'); if (section.length) { section.v",
-"alidate_section(); if ($me.hasClass('open')) { var wh = $(window).height() / 3; var pos = section[0].getBoundingClie",
-"ntRect().top; if (pos > wh * 2) { $('html, body').animate( { scrollTop: section.offset().top - wh }, 300); } } } });",
-" $(document).on('click', '.toggle-details', function (e) { e.preventDefault(); e.stopPropagation(); var $me = $(this",
-"); var $row = $me.closest('tr').nextAll('.details').first(); if ($me.hasClass('open')) { $me.removeClass('open'); $r",
-"ow.fadeToggle(75); } else { $me.addClass('open'); $row.fadeToggle(150); } }); function bindChartLoaders($scope) { $s",
-"cope.find('.toggle, .toggle-details').each(function() { if ( __chartData[this.id] === undefined ) return; $(this).on",
-"e('click', function() { var d = __chartData[this.id]; for (var idx in d) { $('#' + d[idx]['target']).highcharts(d[id",
-"x]['data']); } }); }); } bindChartLoaders($(document)); $('.toggle').each(function() { if ( !this.id ) return; var $",
-"deferred = $('script[type=\"text/x-deferred-html\"][data-toggle=\"' + this.id + '\"]'); if ( !$deferred.length ) ret",
-"urn; var inject = function() { $deferred.each(function() { var $injected = $($.parseHTML(this.textContent)); $(this)",
-".replaceWith($injected); bindChartLoaders($injected); }); $('.stripetoprow').oddstripe(); }; if ( $(this).hasClass('",
-"open') ) { inject(); } else { $(this).one('click', inject); } }); $(document).on('click', 'table.stripetoprow .topro",
-"w td:first-of-type, table.stripebody tbody td:first-of-type', function (e) { e.preventDefault(); $(this).children('.",
-"toggle-details').first().click(); }); var hoverTimeout; function hoverHide() { clearTimeout(hoverTimeout); $('#activ",
-"e-help','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help').hover(function (e) { var $target = ",
-"$(this.dataset.help + ' .help-box'); var content; if (!$target.length) { content = 'NO HELP FOUND
PLEASE ",
-"REPORT AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynamic .help-box').html(content); $('#ac",
-"tive-help .help-box').show(); var pos = $(this).offset(); $('#active-help').css({ top: pos.top - $('#active-help').h",
-"eight() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(function() { $('#active-help').fadeIn(300)",
-"; }, 750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, both) { var $row; var ret; var idx = ",
-"i; if ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').first(); } ret = $row.children('td').e",
-"q(idx).text().trim(); if (!ret.length && both) { var span = $row.children('td[rowspan]').length; $row = $row.nextAll",
-"('.childrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row.children('td').eq(idx).text().trim(",
-"); } } return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0') + 1).replace(/[^\\d.-]/g,''); } fun",
-"ction numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0; var vb = +strip(getCell(b, i, both",
-")) || 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, both) { var va = getCell(a, i, both); v",
-"ar vb = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { return va > vb \? 1 : -1; } } function pu",
-"lsecolumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetoprow')) { table.find('.toprow:not(.chi",
-"ldrow)').each(function() { var me = $(this); var cell = me.children('td').eq(index); if (both && (!cell.length || ce",
-"ll.is(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.nextAll('.childrow').first(); if (row",
-".length && index >= span) { cell = row.children('td').eq(index - span); } } if (cell.length && !cell.is(':empty')) {",
-" $.merge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells = table.find('tbody tr:first-of-type",
-" td:nth-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find('tbody tr td:nth-of-type(' + (index",
-" + 1) + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $cells.removeClass('pulse'); }, 150);",
-" } $(document).on('click', '.sort th.toggle-sort', function (e) { e.preventDefault(); var $me = $(this); var $col = ",
-"$me.closest('th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('table.sort'); var $sib = $col.siblings",
-"('.asc-sorted, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx = $col.index(); var doAlpha = this.",
-"dataset.sorttype == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRows = this.dataset.sortrows == 'both'",
-"; if (!($me.hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleClass('dsc-sorted', !doAsc); } else {",
-" $me.toggleClass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.toggleClass('asc-sorted', !isDsc); var",
-" srt; if (doAlpha) { srt = function(i, dsc, both) { return function(a, b) { return alphaSort(a, b, i, dsc, both); };",
-" }; } else { srt = function(i, dsc, both) { return function(a, b) { return numberSort(a, b, i, dsc, both); }; }; } v",
-"ar $bucket = $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bucket.children('tr').first().nextUnti",
-"l('.petrow').addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; do { $bucket.sort(srt(idx, isDsc, doR",
-"ows)); $tbl.append($bucket); if (!$remain.length) { break; } $tbl.append($remain); $petrow = $remain.first(); $bucke",
-"t = $petrow.nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($bucket.length > 1); if ($tbl.hasClas",
-"s('stripetoprow')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
+"ght() }, 300); }); $(document).on('click', '.toggle', function (e) { e.preventDefault(); var $me = $(this); $me.togg",
+"leClass('open'); $me.next('.toggle-content').slideToggle(150); var section = $me.parent('.section'); if (section.len",
+"gth) { section.validate_section(); if ($me.hasClass('open')) { var wh = $(window).height() / 3; var pos = section[0]",
+".getBoundingClientRect().top; if (pos > wh * 2) { $('html, body').animate( { scrollTop: section.offset().top - wh },",
+" 300); } } } }); $(document).on('click', '.toggle-details', function (e) { e.preventDefault(); e.stopPropagation(); ",
+"var $me = $(this); var $row = $me.closest('tr').nextAll('.details').first(); if ($me.hasClass('open')) { $me.removeC",
+"lass('open'); $row.fadeToggle(75); } else { $me.addClass('open'); $row.fadeToggle(150); } }); function bindChartLoad",
+"ers($scope) { $scope.find('.toggle, .toggle-details').each(function() { if ( __chartData[this.id] === undefined ) re",
+"turn; $(this).one('click', function() { var d = __chartData[this.id]; for (var idx in d) { $('#' + d[idx]['target'])",
+".highcharts(d[idx]['data']); } }); }); } bindChartLoaders($(document)); $('.toggle').each(function() { if ( !this.id",
+" ) return; var $deferred = $('script[type=\"text/x-deferred-html\"][data-toggle=\"' + this.id + '\"]'); if ( !$defer",
+"red.length ) return; var inject = function() { $deferred.each(function() { var $injected = $($.parseHTML(this.textCo",
+"ntent)); $(this).replaceWith($injected); bindChartLoaders($injected); }); $('.stripetoprow').oddstripe(); }; if ( $(",
+"this).hasClass('open') ) { inject(); } else { $(this).one('click', inject); } }); $(document).on('click', 'table.str",
+"ipetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type', function (e) { e.preventDefault(); $(t",
+"his).children('.toggle-details').first().click(); }); var hoverTimeout; function hoverHide() { clearTimeout(hoverTim",
+"eout); $('#active-help','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help').hover(function (e) ",
+"{ var $target = $(this.dataset.help + ' .help-box'); var content; if (!$target.length) { content = 'NO HELP FOUN",
+"D
PLEASE REPORT AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynamic .help-box').html(",
+"content); $('#active-help .help-box').show(); var pos = $(this).offset(); $('#active-help').css({ top: pos.top - $('",
+"#active-help').height() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(function() { $('#active-he",
+"lp').fadeIn(300); }, 750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, both) { var $row; var",
+" ret; var idx = i; if ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').first(); } ret = $row.",
+"children('td').eq(idx).text().trim(); if (!ret.length && both) { var span = $row.children('td[rowspan]').length; $ro",
+"w = $row.nextAll('.childrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row.children('td').eq(i",
+"dx).text().trim(); } } return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0') + 1).replace(/[^\\d",
+".-]/g,''); } function numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0; var vb = +strip(ge",
+"tCell(b, i, both)) || 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, both) { var va = getCel",
+"l(a, i, both); var vb = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { return va > vb \? 1 : -1;",
+" } } function pulsecolumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetoprow')) { table.find('",
+".toprow:not(.childrow)').each(function() { var me = $(this); var cell = me.children('td').eq(index); if (both && (!c",
+"ell.length || cell.is(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.nextAll('.childrow').",
+"first(); if (row.length && index >= span) { cell = row.children('td').eq(index - span); } } if (cell.length && !cell",
+".is(':empty')) { $.merge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells = table.find('tbody ",
+"tr:first-of-type td:nth-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find('tbody tr td:nth-of",
+"-type(' + (index + 1) + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $cells.removeClass('p",
+"ulse'); }, 150); } $(document).on('click', '.sort th.toggle-sort', function (e) { e.preventDefault(); var $me = $(th",
+"is); var $col = $me.closest('th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('table.sort'); var $sib",
+" = $col.siblings('.asc-sorted, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx = $col.index(); var",
+" doAlpha = this.dataset.sorttype == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRows = this.dataset.so",
+"rtrows == 'both'; if (!($me.hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleClass('dsc-sorted', !",
+"doAsc); } else { $me.toggleClass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.toggleClass('asc-sorte",
+"d', !isDsc); var srt; if (doAlpha) { srt = function(i, dsc, both) { return function(a, b) { return alphaSort(a, b, i",
+", dsc, both); }; }; } else { srt = function(i, dsc, both) { return function(a, b) { return numberSort(a, b, i, dsc, ",
+"both); }; }; } var $bucket = $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bucket.children('tr').",
+"first().nextUntil('.petrow').addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; do { $bucket.sort(srt",
+"(idx, isDsc, doRows)); $tbl.append($bucket); if (!$remain.length) { break; } $tbl.append($remain); $petrow = $remain",
+".first(); $bucket = $petrow.nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($bucket.length > 1); ",
+"if ($tbl.hasClass('stripetoprow')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
};
// Automatically generated from file style.css
From 6f41342d825da49fd9c42716330d586f886614fb Mon Sep 17 00:00:00 2001
From: Kate Martin <51387586+renanthera@users.noreply.github.com>
Date: Sun, 7 Jun 2026 00:38:24 -0600
Subject: [PATCH 08/12] [report] Remove deferral for talent tree iframe to
mitigate flashbang.
---
engine/report/report_html_player.cpp | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/engine/report/report_html_player.cpp b/engine/report/report_html_player.cpp
index 81dbfcf5756..a92d54cdc90 100644
--- a/engine/report/report_html_player.cpp
+++ b/engine/report/report_html_player.cpp
@@ -2049,17 +2049,14 @@ void print_html_talents( report::sc_html_stream& os, const player_t& p )
}
os << "\n";
- os.printf( "
Talents
\n", p.index );
+ os.printf( "
Talents
\n", p.index );
os << "
\n";
- os.printf( "\n";
- // Hide the talent table only if the Raidbots talent iframe is present.
os.printf( "
Talent Tables
\n", p.index );
os << "
\n";
os.printf( "\n";
- os << "
\n";
-
- os << "
\n"
+ os << "\n"
+ << "
\n"
+ << "\n"
<< "\n";
}
@@ -2950,7 +2949,6 @@ void print_html_player_resources( report::sc_html_stream& os, const player_t& p
os << "\n"
<< "
Resources
\n"
<< "
\n";
- os.printf( "\n";
os << "
\n"; // Open DIV for charts
for ( resource_e r = RESOURCE_MAX; --r > RESOURCE_NONE; )
@@ -3646,8 +3643,6 @@ void print_html_player_buffs( report::sc_html_stream& os, const player_t& p,
<< "
Buffs
\n"
<< "
\n";
- os.printf( "\n";
-
os << "
\n"
<< "
\n";
}
@@ -4441,11 +4434,9 @@ void print_html_player_abilities( report::sc_html_stream& os, const player_t& p
<< "
Abilities
\n"
<< "
\n";
- os.printf( "\n";
// close section
os << "
\n"
@@ -4757,8 +4748,6 @@ void print_html_player_procs( report::sc_html_stream& os, const player_t& p )
<< "
Procs, Uptimes & Benefits
\n"
<< "
\n"; // Can't use columns as detail toggle will change widths
- os.printf( "\n";
-
os << "
\n"
<< "
\n";
}
From e655ae0e19750be3775632b46b7f477a230d2c48 Mon Sep 17 00:00:00 2001
From: bees <78449839+hotbees@users.noreply.github.com>
Date: Sun, 7 Jun 2026 03:56:14 -0400
Subject: [PATCH 10/12] make charts inside deferred blocks load properly
---
engine/report/data/html_report_script.js | 19 ++++--
engine/report/data/report_data.inc | 87 ++++++++++++------------
2 files changed, 56 insertions(+), 50 deletions(-)
diff --git a/engine/report/data/html_report_script.js b/engine/report/data/html_report_script.js
index 8496178d539..a0f6f68421d 100644
--- a/engine/report/data/html_report_script.js
+++ b/engine/report/data/html_report_script.js
@@ -99,21 +99,25 @@ jQuery(document).ready(function ($) {
$row.fadeToggle(150);
}
});
+ function renderCharts(id) {
+ var d = __chartData[id];
+ if ( d === undefined ) return;
+ for (var idx in d) {
+ $('#' + d[idx]['target']).highcharts(d[idx]['data']);
+ }
+ }
function bindChartLoaders($scope) {
$scope.find('.toggle, .toggle-details').each(function() {
if ( __chartData[this.id] === undefined ) return;
- $(this).one('click', function() {
- var d = __chartData[this.id];
- for (var idx in d) {
- $('#' + d[idx]['target']).highcharts(d[idx]['data']);
- }
- });
+ var id = this.id;
+ $(this).one('click', function() { renderCharts(id); });
});
}
bindChartLoaders($(document));
$('.toggle').each(function() {
if ( !this.id ) return;
- var $deferred = $('script[type="text/x-deferred-html"][data-toggle="' + this.id + '"]');
+ var id = this.id;
+ var $deferred = $('script[type="text/x-deferred-html"][data-toggle="' + id + '"]');
if ( !$deferred.length ) return;
var inject = function() {
$deferred.each(function() {
@@ -122,6 +126,7 @@ jQuery(document).ready(function ($) {
bindChartLoaders($injected);
});
$('.stripetoprow').oddstripe();
+ renderCharts(id);
};
if ( $(this).hasClass('open') ) {
inject();
diff --git a/engine/report/data/report_data.inc b/engine/report/data/report_data.inc
index 54a2cf89961..f8ef8c5366f 100644
--- a/engine/report/data/report_data.inc
+++ b/engine/report/data/report_data.inc
@@ -1141,49 +1141,50 @@ static const char* __html_report_script[] = {
".getBoundingClientRect().top; if (pos > wh * 2) { $('html, body').animate( { scrollTop: section.offset().top - wh },",
" 300); } } } }); $(document).on('click', '.toggle-details', function (e) { e.preventDefault(); e.stopPropagation(); ",
"var $me = $(this); var $row = $me.closest('tr').nextAll('.details').first(); if ($me.hasClass('open')) { $me.removeC",
-"lass('open'); $row.fadeToggle(75); } else { $me.addClass('open'); $row.fadeToggle(150); } }); function bindChartLoad",
-"ers($scope) { $scope.find('.toggle, .toggle-details').each(function() { if ( __chartData[this.id] === undefined ) re",
-"turn; $(this).one('click', function() { var d = __chartData[this.id]; for (var idx in d) { $('#' + d[idx]['target'])",
-".highcharts(d[idx]['data']); } }); }); } bindChartLoaders($(document)); $('.toggle').each(function() { if ( !this.id",
-" ) return; var $deferred = $('script[type=\"text/x-deferred-html\"][data-toggle=\"' + this.id + '\"]'); if ( !$defer",
-"red.length ) return; var inject = function() { $deferred.each(function() { var $injected = $($.parseHTML(this.textCo",
-"ntent)); $(this).replaceWith($injected); bindChartLoaders($injected); }); $('.stripetoprow').oddstripe(); }; if ( $(",
-"this).hasClass('open') ) { inject(); } else { $(this).one('click', inject); } }); $(document).on('click', 'table.str",
-"ipetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type', function (e) { e.preventDefault(); $(t",
-"his).children('.toggle-details').first().click(); }); var hoverTimeout; function hoverHide() { clearTimeout(hoverTim",
-"eout); $('#active-help','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help').hover(function (e) ",
-"{ var $target = $(this.dataset.help + ' .help-box'); var content; if (!$target.length) { content = '
NO HELP FOUN",
-"D
PLEASE REPORT AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynamic .help-box').html(",
-"content); $('#active-help .help-box').show(); var pos = $(this).offset(); $('#active-help').css({ top: pos.top - $('",
-"#active-help').height() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(function() { $('#active-he",
-"lp').fadeIn(300); }, 750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, both) { var $row; var",
-" ret; var idx = i; if ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').first(); } ret = $row.",
-"children('td').eq(idx).text().trim(); if (!ret.length && both) { var span = $row.children('td[rowspan]').length; $ro",
-"w = $row.nextAll('.childrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row.children('td').eq(i",
-"dx).text().trim(); } } return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0') + 1).replace(/[^\\d",
-".-]/g,''); } function numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0; var vb = +strip(ge",
-"tCell(b, i, both)) || 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, both) { var va = getCel",
-"l(a, i, both); var vb = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { return va > vb \? 1 : -1;",
-" } } function pulsecolumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetoprow')) { table.find('",
-".toprow:not(.childrow)').each(function() { var me = $(this); var cell = me.children('td').eq(index); if (both && (!c",
-"ell.length || cell.is(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.nextAll('.childrow').",
-"first(); if (row.length && index >= span) { cell = row.children('td').eq(index - span); } } if (cell.length && !cell",
-".is(':empty')) { $.merge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells = table.find('tbody ",
-"tr:first-of-type td:nth-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find('tbody tr td:nth-of",
-"-type(' + (index + 1) + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $cells.removeClass('p",
-"ulse'); }, 150); } $(document).on('click', '.sort th.toggle-sort', function (e) { e.preventDefault(); var $me = $(th",
-"is); var $col = $me.closest('th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('table.sort'); var $sib",
-" = $col.siblings('.asc-sorted, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx = $col.index(); var",
-" doAlpha = this.dataset.sorttype == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRows = this.dataset.so",
-"rtrows == 'both'; if (!($me.hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleClass('dsc-sorted', !",
-"doAsc); } else { $me.toggleClass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.toggleClass('asc-sorte",
-"d', !isDsc); var srt; if (doAlpha) { srt = function(i, dsc, both) { return function(a, b) { return alphaSort(a, b, i",
-", dsc, both); }; }; } else { srt = function(i, dsc, both) { return function(a, b) { return numberSort(a, b, i, dsc, ",
-"both); }; }; } var $bucket = $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bucket.children('tr').",
-"first().nextUntil('.petrow').addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; do { $bucket.sort(srt",
-"(idx, isDsc, doRows)); $tbl.append($bucket); if (!$remain.length) { break; } $tbl.append($remain); $petrow = $remain",
-".first(); $bucket = $petrow.nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($bucket.length > 1); ",
-"if ($tbl.hasClass('stripetoprow')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
+"lass('open'); $row.fadeToggle(75); } else { $me.addClass('open'); $row.fadeToggle(150); } }); function renderCharts(",
+"id) { var d = __chartData[id]; if ( d === undefined ) return; for (var idx in d) { $('#' + d[idx]['target']).highcha",
+"rts(d[idx]['data']); } } function bindChartLoaders($scope) { $scope.find('.toggle, .toggle-details').each(function()",
+" { if ( __chartData[this.id] === undefined ) return; var id = this.id; $(this).one('click', function() { renderChart",
+"s(id); }); }); } bindChartLoaders($(document)); $('.toggle').each(function() { if ( !this.id ) return; var id = this",
+".id; var $deferred = $('script[type=\"text/x-deferred-html\"][data-toggle=\"' + id + '\"]'); if ( !$deferred.length ",
+") return; var inject = function() { $deferred.each(function() { var $injected = $($.parseHTML(this.textContent)); $(",
+"this).replaceWith($injected); bindChartLoaders($injected); }); $('.stripetoprow').oddstripe(); renderCharts(id); }; ",
+"if ( $(this).hasClass('open') ) { inject(); } else { $(this).one('click', inject); } }); $(document).on('click', 'ta",
+"ble.stripetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type', function (e) { e.preventDefault",
+"(); $(this).children('.toggle-details').first().click(); }); var hoverTimeout; function hoverHide() { clearTimeout(h",
+"overTimeout); $('#active-help','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help').hover(functi",
+"on (e) { var $target = $(this.dataset.help + ' .help-box'); var content; if (!$target.length) { content = '
NO HE",
+"LP FOUND
PLEASE REPORT AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynamic .help-box'",
+").html(content); $('#active-help .help-box').show(); var pos = $(this).offset(); $('#active-help').css({ top: pos.to",
+"p - $('#active-help').height() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(function() { $('#ac",
+"tive-help').fadeIn(300); }, 750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, both) { var $r",
+"ow; var ret; var idx = i; if ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').first(); } ret ",
+"= $row.children('td').eq(idx).text().trim(); if (!ret.length && both) { var span = $row.children('td[rowspan]').leng",
+"th; $row = $row.nextAll('.childrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row.children('td",
+"').eq(idx).text().trim(); } } return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0') + 1).replace",
+"(/[^\\d.-]/g,''); } function numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0; var vb = +s",
+"trip(getCell(b, i, both)) || 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, both) { var va =",
+" getCell(a, i, both); var vb = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { return va > vb \? ",
+"1 : -1; } } function pulsecolumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetoprow')) { table",
+".find('.toprow:not(.childrow)').each(function() { var me = $(this); var cell = me.children('td').eq(index); if (both",
+" && (!cell.length || cell.is(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.nextAll('.chil",
+"drow').first(); if (row.length && index >= span) { cell = row.children('td').eq(index - span); } } if (cell.length &",
+"& !cell.is(':empty')) { $.merge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells = table.find(",
+"'tbody tr:first-of-type td:nth-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find('tbody tr td",
+":nth-of-type(' + (index + 1) + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $cells.removeC",
+"lass('pulse'); }, 150); } $(document).on('click', '.sort th.toggle-sort', function (e) { e.preventDefault(); var $me",
+" = $(this); var $col = $me.closest('th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('table.sort'); v",
+"ar $sib = $col.siblings('.asc-sorted, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx = $col.index",
+"(); var doAlpha = this.dataset.sorttype == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRows = this.dat",
+"aset.sortrows == 'both'; if (!($me.hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleClass('dsc-sor",
+"ted', !doAsc); } else { $me.toggleClass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.toggleClass('as",
+"c-sorted', !isDsc); var srt; if (doAlpha) { srt = function(i, dsc, both) { return function(a, b) { return alphaSort(",
+"a, b, i, dsc, both); }; }; } else { srt = function(i, dsc, both) { return function(a, b) { return numberSort(a, b, i",
+", dsc, both); }; }; } var $bucket = $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bucket.children",
+"('tr').first().nextUntil('.petrow').addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; do { $bucket.s",
+"ort(srt(idx, isDsc, doRows)); $tbl.append($bucket); if (!$remain.length) { break; } $tbl.append($remain); $petrow = ",
+"$remain.first(); $bucket = $petrow.nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($bucket.length",
+" > 1); if ($tbl.hasClass('stripetoprow')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
};
// Automatically generated from file style.css
From 3d183c8fc9afcf68db39080dfb44110c872fd109 Mon Sep 17 00:00:00 2001
From: Kate Martin <51387586+renanthera@users.noreply.github.com>
Date: Sun, 7 Jun 2026 02:08:07 -0600
Subject: [PATCH 11/12] [report] Defer only actor, as nested script tags are
not permitted.
---
engine/player/player.cpp | 4 +---
engine/report/report_html_player.cpp | 29 ++++++++++------------------
2 files changed, 11 insertions(+), 22 deletions(-)
diff --git a/engine/player/player.cpp b/engine/player/player.cpp
index 33965b83e7d..8276499f5d4 100644
--- a/engine/player/player.cpp
+++ b/engine/player/player.cpp
@@ -16441,9 +16441,8 @@ void player_t::print_parsed_effects( report::sc_html_stream& os ) const
return;
os << R"(
)";
- os.format( R"(
Parsed Player Effects
)", index );
+ os.format( R"(
Parsed Player Effects
)", index );
os << R"(
)";
- os.format( R"(\n";
os << "
\n";
}
diff --git a/engine/report/report_html_player.cpp b/engine/report/report_html_player.cpp
index e4be044f6dc..32bd75c2b10 100644
--- a/engine/report/report_html_player.cpp
+++ b/engine/report/report_html_player.cpp
@@ -1182,9 +1182,8 @@ void print_html_gear( report::sc_html_stream& os, const player_t& p )
return;
os << "
\n";
- os.printf( "
Gear
\n", p.index );
+ os.printf( "
Gear
\n", p.index );
os << "
\n";
- os.printf( "\n"
<< "
\n"
<< "
\n";
}
@@ -1440,13 +1438,11 @@ void print_html_profile( report::sc_html_stream& os, const player_t& p,
util::replace_all( profile_str, "\n", "
" );
os << "
\n";
- os.printf( "
Profile
\n", p.index );
+ os.printf( "
Profile
\n", p.index );
os << "
\n";
- os.printf( "\n"
<< "
\n"
<< "
\n";
}
@@ -1480,9 +1476,8 @@ void print_html_stats( report::sc_html_stream& os, const player_t& p )
if ( p.collected_data.fight_length.mean() > 0 )
{
os << "
\n";
- os.printf( "
Stats
\n", p.index );
+ os.printf( "
Stats
\n", p.index );
os << "
\n";
- os.printf( "\n"
<< "
\n"
<< "
\n";
}
@@ -2057,9 +2051,8 @@ void print_html_talents( report::sc_html_stream& os, const player_t& p )
os.format( R"(
)",
raidbots_talent_render_src( p.talents_str, p.true_level, 1165, false, p.dbc->ptr ), h_ );
- os.printf( "
Talent Tables
\n", p.index );
+ os.printf( "
Talent Tables
\n", p.index );
os << "
\n";
- os.printf( "\n"
- << "
\n"
+ os << "
\n"
<< "\n"
<< "\n";
}
@@ -2476,9 +2468,8 @@ void print_html_player_action_priority_list( report::sc_html_stream& os, const p
{
const sim_t& sim = *( p.sim );
os << "\n";
- os.printf( "
Action Priority List
\n", p.index );
+ os.printf( "
Action Priority List
\n", p.index );
os << "
\n";
- os.printf( "\n";
os << "
\n"
<< "
\n";
}
@@ -2655,9 +2645,8 @@ void print_html_player_statistics( report::sc_html_stream& os, const player_t& p
// Statistics & Data Analysis
os << "\n";
- os.printf( "
Statistics & Data Analysis
\n", p.index );
+ os.printf( "
Statistics & Data Analysis
\n", p.index );
os << "
\n";
- os.printf( "\n";
os << "
\n"
"
\n";
}
@@ -3771,6 +3759,8 @@ void print_html_player_description( report::sc_html_stream& os, const player_t&
}
os << "\">\n";
+ os.printf( R"(\n";
os << "\n"
<< "\n\n";
}
From e993ada7e12624fcca49ccb541d6e6944c8d7a7e Mon Sep 17 00:00:00 2001
From: bees <78449839+hotbees@users.noreply.github.com>
Date: Sun, 7 Jun 2026 05:10:19 -0400
Subject: [PATCH 12/12] fix charts again; cleanup
---
engine/report/data/html_report_script.js | 48 +++++-------
engine/report/data/report_data.inc | 98 ++++++++++++------------
engine/report/report_html_sim.cpp | 8 --
engine/sim/sim.cpp | 10 +--
engine/sim/sim.hpp | 7 +-
5 files changed, 71 insertions(+), 100 deletions(-)
diff --git a/engine/report/data/html_report_script.js b/engine/report/data/html_report_script.js
index a0f6f68421d..713b9fe7eff 100644
--- a/engine/report/data/html_report_script.js
+++ b/engine/report/data/html_report_script.js
@@ -70,6 +70,7 @@ jQuery(document).ready(function ($) {
$(document).on('click', '.toggle', function (e) {
e.preventDefault();
var $me = $(this);
+ revealSection(this.id);
$me.toggleClass('open');
$me.next('.toggle-content').slideToggle(150);
var section = $me.parent('.section');
@@ -90,6 +91,7 @@ jQuery(document).ready(function ($) {
e.preventDefault();
e.stopPropagation();
var $me = $(this);
+ if ( this.id ) renderCharts(this.id);
var $row = $me.closest('tr').nextAll('.details').first();
if ($me.hasClass('open')) {
$me.removeClass('open');
@@ -99,41 +101,29 @@ jQuery(document).ready(function ($) {
$row.fadeToggle(150);
}
});
- function renderCharts(id) {
- var d = __chartData[id];
- if ( d === undefined ) return;
- for (var idx in d) {
- $('#' + d[idx]['target']).highcharts(d[idx]['data']);
- }
- }
- function bindChartLoaders($scope) {
- $scope.find('.toggle, .toggle-details').each(function() {
- if ( __chartData[this.id] === undefined ) return;
- var id = this.id;
- $(this).one('click', function() { renderCharts(id); });
+ function renderCharts(key) {
+ var items = __chartData[key];
+ if ( items === undefined ) return;
+ items.forEach(function(chart) {
+ var $el = $('#' + chart.target);
+ if ( $el.length && !$el.highcharts() ) {
+ $el.highcharts(chart.data);
+ }
});
}
- bindChartLoaders($(document));
- $('.toggle').each(function() {
- if ( !this.id ) return;
- var id = this.id;
- var $deferred = $('script[type="text/x-deferred-html"][data-toggle="' + id + '"]');
- if ( !$deferred.length ) return;
- var inject = function() {
+ function revealSection(id) {
+ var $deferred = id ? $('script[type="text/x-deferred-html"][data-toggle="' + id + '"]') : $();
+ if ( $deferred.length ) {
$deferred.each(function() {
- var $injected = $($.parseHTML(this.textContent));
- $(this).replaceWith($injected);
- bindChartLoaders($injected);
+ $(this).replaceWith($($.parseHTML(this.textContent)));
});
$('.stripetoprow').oddstripe();
- renderCharts(id);
- };
- if ( $(this).hasClass('open') ) {
- inject();
- } else {
- $(this).one('click', inject);
+ renderCharts('');
}
- });
+ if ( id ) renderCharts(id);
+ }
+ $('.toggle.open').each(function() { revealSection(this.id); });
+ renderCharts('');
$(document).on('click', 'table.stripetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type', function (e) {
e.preventDefault();
$(this).children('.toggle-details').first().click();
diff --git a/engine/report/data/report_data.inc b/engine/report/data/report_data.inc
index f8ef8c5366f..c070c957ed7 100644
--- a/engine/report/data/report_data.inc
+++ b/engine/report/data/report_data.inc
@@ -1135,56 +1135,54 @@ static const char* __html_report_script[] = {
"$('a.ext').mouseover(function () { $(this).attr('target', '_blank'); }); $('ul.toc li a').click(function (e) { e.pre",
"ventDefault(); var href = this.getAttribute('href'); var $anchor = $(href).children('h2').first(); if (!$anchor.hasC",
"lass('open')) { $anchor.click(); } $('html, body').animate( { scrollTop: $anchor.parent().offset().top - $anchor.hei",
-"ght() }, 300); }); $(document).on('click', '.toggle', function (e) { e.preventDefault(); var $me = $(this); $me.togg",
-"leClass('open'); $me.next('.toggle-content').slideToggle(150); var section = $me.parent('.section'); if (section.len",
-"gth) { section.validate_section(); if ($me.hasClass('open')) { var wh = $(window).height() / 3; var pos = section[0]",
-".getBoundingClientRect().top; if (pos > wh * 2) { $('html, body').animate( { scrollTop: section.offset().top - wh },",
-" 300); } } } }); $(document).on('click', '.toggle-details', function (e) { e.preventDefault(); e.stopPropagation(); ",
-"var $me = $(this); var $row = $me.closest('tr').nextAll('.details').first(); if ($me.hasClass('open')) { $me.removeC",
-"lass('open'); $row.fadeToggle(75); } else { $me.addClass('open'); $row.fadeToggle(150); } }); function renderCharts(",
-"id) { var d = __chartData[id]; if ( d === undefined ) return; for (var idx in d) { $('#' + d[idx]['target']).highcha",
-"rts(d[idx]['data']); } } function bindChartLoaders($scope) { $scope.find('.toggle, .toggle-details').each(function()",
-" { if ( __chartData[this.id] === undefined ) return; var id = this.id; $(this).one('click', function() { renderChart",
-"s(id); }); }); } bindChartLoaders($(document)); $('.toggle').each(function() { if ( !this.id ) return; var id = this",
-".id; var $deferred = $('script[type=\"text/x-deferred-html\"][data-toggle=\"' + id + '\"]'); if ( !$deferred.length ",
-") return; var inject = function() { $deferred.each(function() { var $injected = $($.parseHTML(this.textContent)); $(",
-"this).replaceWith($injected); bindChartLoaders($injected); }); $('.stripetoprow').oddstripe(); renderCharts(id); }; ",
-"if ( $(this).hasClass('open') ) { inject(); } else { $(this).one('click', inject); } }); $(document).on('click', 'ta",
-"ble.stripetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type', function (e) { e.preventDefault",
-"(); $(this).children('.toggle-details').first().click(); }); var hoverTimeout; function hoverHide() { clearTimeout(h",
-"overTimeout); $('#active-help','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help').hover(functi",
-"on (e) { var $target = $(this.dataset.help + ' .help-box'); var content; if (!$target.length) { content = 'NO HE",
-"LP FOUND
PLEASE REPORT AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynamic .help-box'",
-").html(content); $('#active-help .help-box').show(); var pos = $(this).offset(); $('#active-help').css({ top: pos.to",
-"p - $('#active-help').height() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(function() { $('#ac",
-"tive-help').fadeIn(300); }, 750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, both) { var $r",
-"ow; var ret; var idx = i; if ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').first(); } ret ",
-"= $row.children('td').eq(idx).text().trim(); if (!ret.length && both) { var span = $row.children('td[rowspan]').leng",
-"th; $row = $row.nextAll('.childrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row.children('td",
-"').eq(idx).text().trim(); } } return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0') + 1).replace",
-"(/[^\\d.-]/g,''); } function numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0; var vb = +s",
-"trip(getCell(b, i, both)) || 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, both) { var va =",
-" getCell(a, i, both); var vb = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { return va > vb \? ",
-"1 : -1; } } function pulsecolumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetoprow')) { table",
-".find('.toprow:not(.childrow)').each(function() { var me = $(this); var cell = me.children('td').eq(index); if (both",
-" && (!cell.length || cell.is(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.nextAll('.chil",
-"drow').first(); if (row.length && index >= span) { cell = row.children('td').eq(index - span); } } if (cell.length &",
-"& !cell.is(':empty')) { $.merge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells = table.find(",
-"'tbody tr:first-of-type td:nth-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find('tbody tr td",
-":nth-of-type(' + (index + 1) + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $cells.removeC",
-"lass('pulse'); }, 150); } $(document).on('click', '.sort th.toggle-sort', function (e) { e.preventDefault(); var $me",
-" = $(this); var $col = $me.closest('th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('table.sort'); v",
-"ar $sib = $col.siblings('.asc-sorted, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx = $col.index",
-"(); var doAlpha = this.dataset.sorttype == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRows = this.dat",
-"aset.sortrows == 'both'; if (!($me.hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleClass('dsc-sor",
-"ted', !doAsc); } else { $me.toggleClass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.toggleClass('as",
-"c-sorted', !isDsc); var srt; if (doAlpha) { srt = function(i, dsc, both) { return function(a, b) { return alphaSort(",
-"a, b, i, dsc, both); }; }; } else { srt = function(i, dsc, both) { return function(a, b) { return numberSort(a, b, i",
-", dsc, both); }; }; } var $bucket = $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bucket.children",
-"('tr').first().nextUntil('.petrow').addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; do { $bucket.s",
-"ort(srt(idx, isDsc, doRows)); $tbl.append($bucket); if (!$remain.length) { break; } $tbl.append($remain); $petrow = ",
-"$remain.first(); $bucket = $petrow.nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($bucket.length",
-" > 1); if ($tbl.hasClass('stripetoprow')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
+"ght() }, 300); }); $(document).on('click', '.toggle', function (e) { e.preventDefault(); var $me = $(this); revealSe",
+"ction(this.id); $me.toggleClass('open'); $me.next('.toggle-content').slideToggle(150); var section = $me.parent('.se",
+"ction'); if (section.length) { section.validate_section(); if ($me.hasClass('open')) { var wh = $(window).height() /",
+" 3; var pos = section[0].getBoundingClientRect().top; if (pos > wh * 2) { $('html, body').animate( { scrollTop: sect",
+"ion.offset().top - wh }, 300); } } } }); $(document).on('click', '.toggle-details', function (e) { e.preventDefault(",
+"); e.stopPropagation(); var $me = $(this); if ( this.id ) renderCharts(this.id); var $row = $me.closest('tr').nextAl",
+"l('.details').first(); if ($me.hasClass('open')) { $me.removeClass('open'); $row.fadeToggle(75); } else { $me.addCla",
+"ss('open'); $row.fadeToggle(150); } }); function renderCharts(key) { var items = __chartData[key]; if ( items === un",
+"defined ) return; items.forEach(function(chart) { var $el = $('#' + chart.target); if ( $el.length && !$el.highchart",
+"s() ) { $el.highcharts(chart.data); } }); } function revealSection(id) { var $deferred = id \? $('script[type=\"text",
+"/x-deferred-html\"][data-toggle=\"' + id + '\"]') : $(); if ( $deferred.length ) { $deferred.each(function() { $(thi",
+"s).replaceWith($($.parseHTML(this.textContent))); }); $('.stripetoprow').oddstripe(); renderCharts(''); } if ( id ) ",
+"renderCharts(id); } $('.toggle.open').each(function() { revealSection(this.id); }); renderCharts(''); $(document).on",
+"('click', 'table.stripetoprow .toprow td:first-of-type, table.stripebody tbody td:first-of-type', function (e) { e.p",
+"reventDefault(); $(this).children('.toggle-details').first().click(); }); var hoverTimeout; function hoverHide() { c",
+"learTimeout(hoverTimeout); $('#active-help','.help-box').hide(); $('#active-help').removeAttr('style'); } $('.help')",
+".hover(function (e) { var $target = $(this.dataset.help + ' .help-box'); var content; if (!$target.length) { content",
+" = 'NO HELP FOUND
PLEASE REPORT AS A BUG
'; } else { content = $target.html(); } $('#active-help-dynam",
+"ic .help-box').html(content); $('#active-help .help-box').show(); var pos = $(this).offset(); $('#active-help').css(",
+"{ top: pos.top - $('#active-help').height() - $(this).height(), left: pos.left, }); hoverTimeout = setTimeout(functi",
+"on() { $('#active-help').fadeIn(300); }, 750); }, hoverHide); window.onblur = hoverHide; function getCell(elem, i, b",
+"oth) { var $row; var ret; var idx = i; if ($(elem).is('tr')) { $row = $(elem); } else { $row = $(elem).find('tr').fi",
+"rst(); } ret = $row.children('td').eq(idx).text().trim(); if (!ret.length && both) { var span = $row.children('td[ro",
+"wspan]').length; $row = $row.nextAll('.childrow').first(); if ($row.length && idx >= span) { idx -= span; ret = $row",
+".children('td').eq(idx).text().trim(); } } return ret; } function strip(val) { return val.slice(val.indexOf('\\xa0')",
+" + 1).replace(/[^\\d.-]/g,''); } function numberSort(a, b, i, dsc, both) { var va = +strip(getCell(a, i, both)) || 0",
+"; var vb = +strip(getCell(b, i, both)) || 0; return dsc \? vb - va : va - vb; } function alphaSort(a, b, i, dsc, bot",
+"h) { var va = getCell(a, i, both); var vb = getCell(b, i, both); if (dsc) { return va < vb \? 1 : -1; } else { retur",
+"n va > vb \? 1 : -1; } } function pulsecolumn(table, index, both) { var $cells = $(); if (table.hasClass('stripetopr",
+"ow')) { table.find('.toprow:not(.childrow)').each(function() { var me = $(this); var cell = me.children('td').eq(ind",
+"ex); if (both && (!cell.length || cell.is(':empty'))) { var span = me.children('td[rowspan]').length; var row = me.n",
+"extAll('.childrow').first(); if (row.length && index >= span) { cell = row.children('td').eq(index - span); } } if (",
+"cell.length && !cell.is(':empty')) { $.merge($cells, cell); } }); } else if (table.hasClass('stripebody')) { $cells ",
+"= table.find('tbody tr:first-of-type td:nth-of-type(' + (index + 1) + '):not(:empty)'); } else { $cells = table.find",
+"('tbody tr td:nth-of-type(' + (index + 1) + '):not(:empty)'); } $cells.addClass('pulse'); setTimeout(function () { $",
+"cells.removeClass('pulse'); }, 150); } $(document).on('click', '.sort th.toggle-sort', function (e) { e.preventDefau",
+"lt(); var $me = $(this); var $col = $me.closest('th'); var $thd = $col.closest('thead'); var $tbl = $thd.closest('ta",
+"ble.sort'); var $sib = $col.siblings('.asc-sorted, .dsc-sorted'); $sib.removeClass('asc-sorted dsc-sorted'); var idx",
+" = $col.index(); var doAlpha = this.dataset.sorttype == 'alpha'; var doAsc = this.dataset.sortdir == 'asc'; var doRo",
+"ws = this.dataset.sortrows == 'both'; if (!($me.hasClass('dsc-sorted') || $me.hasClass('asc-sorted'))) { $me.toggleC",
+"lass('dsc-sorted', !doAsc); } else { $me.toggleClass('dsc-sorted'); } var isDsc = $me.hasClass('dsc-sorted'); $me.to",
+"ggleClass('asc-sorted', !isDsc); var srt; if (doAlpha) { srt = function(i, dsc, both) { return function(a, b) { retu",
+"rn alphaSort(a, b, i, dsc, both); }; }; } else { srt = function(i, dsc, both) { return function(a, b) { return numbe",
+"rSort(a, b, i, dsc, both); }; }; } var $bucket = $thd.nextUntil('.petrow'); if ($bucket.length == 1) { $bucket = $bu",
+"cket.children('tr').first().nextUntil('.petrow').addBack(); } var $remain = $bucket.last().nextAll(); var $petrow; d",
+"o { $bucket.sort(srt(idx, isDsc, doRows)); $tbl.append($bucket); if (!$remain.length) { break; } $tbl.append($remain",
+"); $petrow = $remain.first(); $bucket = $petrow.nextUntil('.petrow'); $remain = $bucket.last().nextAll(); } while ($",
+"bucket.length > 1); if ($tbl.hasClass('stripetoprow')) { $tbl.oddstripe(); } pulsecolumn($tbl, idx, doRows); });});",
};
// Automatically generated from file style.css
diff --git a/engine/report/report_html_sim.cpp b/engine/report/report_html_sim.cpp
index ace050125fa..fd0b58d94ab 100644
--- a/engine/report/report_html_sim.cpp
+++ b/engine/report/report_html_sim.cpp
@@ -1294,14 +1294,6 @@ void print_html_( report::sc_html_stream& os, sim_t& sim )
print_html_report_scripts( os );
os << "\n\n";
- os << "\n";
os << "