contentClass = $contentClass; $this->m_queries = $this->getMQKeys(); } public function roundKB($size) { $kb = round($size, 2); return $kb . ' KB'; } // We need m_queries, which is not available on the fronted preferences public function getMQKeys(){ $p = get_option('preferences_themer_loader'); if ($p){ return $p['m_queries']; } return null; } public function getKeyFromQuery($query){ $key = 'all-devices'; if ($this->m_queries && $query !== $key){ foreach ($this->m_queries as $mq_key => $array){ if (trim($query) === trim($array['query'])){ return $mq_key; } } } return $key; } public function generateHTML($debugAmends, &$modList, &$profiler, &$memoryProfiler, &$clientSide, &$logsArray, &$lazy) { $display = ''; $devData = ''; // show debug data if ($debugAmends){ // Performance table (time + memory) $zeroClientMods = empty($clientSide['clientModsCount']) ? 1 : 0; $zeroServerMods = empty($clientSide['serverModsCount']) ? 1 : 0; $zeroMods = $zeroClientMods && $zeroServerMods; // --- Time --- $assetPrepTime = !$zeroMods && isset($profiler['preparing_client_side_assets']['total_time']) ? $profiler['preparing_client_side_assets']['total_time'] * 1000 // to ms : 0; $assetPrepLabel = round($assetPrepTime, 2).' ms'; $htmlModsLabel = $zeroServerMods ? '0 ms' : 'checking...'; $totalModsLabel = $zeroServerMods ? $assetPrepLabel : 'checking...'; // --- Memory (avg net retained + max peak overhead) --- $assetPrepMemDelta = !$zeroMods && isset($memoryProfiler['preparing_client_side_assets']['avg_delta']) ? $memoryProfiler['preparing_client_side_assets']['avg_delta'] : 0; $assetPrepMemDeltaLabel = $this->formatBytes($assetPrepMemDelta); $htmlAdjustMemDeltaLabel = $zeroServerMods ? $this->formatBytes(0) : 'checking...'; $totalMemDeltaLabel = $zeroServerMods ? $assetPrepMemDeltaLabel : 'checking...'; $assetPrepPeak = isset($memoryProfiler['preparing_client_side_assets']['max_peak_window']) ? $memoryProfiler['preparing_client_side_assets']['max_peak_window'] : 0; $assetPrepPeakLabel = $this->formatBytes($assetPrepPeak); $htmlAdjustPeakLabel = $zeroServerMods ? $this->formatBytes(0) : 'checking...'; $totalPeak = $zeroServerMods ? $assetPrepPeakLabel : 'checking...'; // --- Table HTML --- $performance = '
Asset Preparation
HTML Adjustments
Total
Time (milliseconds):
'.$assetPrepLabel.'
'.$htmlModsLabel.'
'.$totalModsLabel.'
'; /* *
Net Memory Retained:
'.$assetPrepMemDeltaLabel.'
'.$htmlAdjustMemDeltaLabel.'
'.$totalMemDeltaLabel.'
Peak Extra Allocation:
'.$assetPrepPeakLabel.'
'.$htmlAdjustPeakLabel.'
'.$totalPeak.'
*/ // User CSS (todo need to include MT CSS) $css = implode("\n", $clientSide['css']); // JS functions and file contents $js = !$zeroClientMods && $clientSide['inline_functions'] ? "// Inline JS Functions \n" . $clientSide['inline_functions'] : ''; foreach ($clientSide['js'] as $slug){ $js.= "// ".$slug.".js\n" . file_get_contents($this->contentClass->getLocalJsFile($slug, 0, 0, 1)) . "\n\n"; } $this->contentClass->accumulateSizeKB( 'user_css', $clientSide, $css ); $this->contentClass->accumulateSizeKB( 'user_js', $clientSide, $js ); $asset_size = $clientSide['asset_size']; $totalSize = 0; if (!$zeroClientMods){ foreach ($asset_size as $key => $value){ if ($key === 'debug_only_data'){ $totalSize -= $value; } else { $totalSize += $value; } } } $size = '
CSS
JS
JS Packages
Modifications JSON
Amender Scripts
Total Size
'.$this->roundKB($asset_size['user_css']).'
'.$this->roundKB($asset_size['user_js']).'
'.$this->roundKB($asset_size['user_packages']).'
'. ($zeroClientMods ? '0 KB' : $this->roundKB($asset_size['amender_inline'] - $asset_size['debug_only_data']) ) .'
'. ($zeroClientMods ? '0 KB' : $this->roundKB($asset_size['amender_packages']) ) .'
'.$this->roundKB($totalSize).'
'; $user_packages = '
Package
Size
Version
URL
'; $hasPackages = false; // Show message about no modifications if relevant if ($zeroMods){ $table = 'No modifications have been made.'; } else { $table = '
Edit
Event
Devices
Selector
Action
Aspect
Content
'; //$debugRows = array(); /*foreach ($modList as $item){ $item[3] = esc_html($item[3]); //$debugRows[] = $item; $table.= '
serverHTMLReady
'.esc_html($item[6]).'
'.esc_html($item[5]).'
'.esc_html($item[1]['action']).'
'.esc_html($item[1]['aspect']).'
'.esc_html($item[3]).'
'; }*/ // Server and client side amendments (always dyn when reviewing) foreach ($clientSide['mods'] as $event => $devices){ foreach ($devices as $query => $selectors){ foreach ($selectors as $selectorId => $data){ foreach ($data['mods'] as $index => $modData){ $mod = $modData['mod']; $table.= '
Edit
'.esc_html($event).'
'.esc_html($query).'
'.esc_html($data['selectorCode']).'
'.esc_html($mod['action']).'
'.esc_html($mod['aspect']).'
'.esc_html($modData['debugValue']).'
'; } } } } $table.= '
'; } // List packages, including size breakdown foreach ($clientSide['import_map'] as $packageName => $one){ $dep = $this->contentClass->getDependencyInfo($packageName); $dep['deliveryUrl'] = $this->contentClass->deliveryUrl( $dep, $dep['value'], $this->contentClass->assetClass->micro_root_dir . 'mt/js/'.$this->contentClass->assetClass->fileStub.'/npm/' ); $url = $dep['deliveryUrl']; $user_packages.= '
'.$dep['value'].'
'.$dep['size'].' KB
'.$dep['version'].'
'.$url.'
'; $hasPackages = true; /*$devData.= '
Package: '.esc_html($packageName).'
'.esc_html(print_r($dep, 1)).'
';*/ } $user_packages.= '
Total
'.$this->roundKB($asset_size['user_packages']).'
'; // Dev only if ($this->contentClass->devMode){ $devData.= '
Dev clientSide
'.esc_html(print_r($clientSide, 1)).'
'; // Lazyloaded content $devData.= '
Lazy content
'.esc_html(print_r($lazy, 1)).'
'; } $packagesList = $hasPackages ? '
JS Packages
'.$user_packages.'
' : ''; //
'.print_r($debugRows, 1).'
$display.= '
Server-side Performance
'.$performance.'
Asset Size
'.$size.'
Modifications
'.$table.'
'.($css ? '
CSS
'.esc_html($css).'
' : ''). ($js ? '
JS
'.esc_html($js).'
' : '').' ' . $packagesList . $devData.'
'; } // Show errors if (count($logsArray)){ $heading = '
Amender errors ('.count($logsArray).')
'; $logs = ''; foreach ($logsArray as $item){ $data = $item['data'] ? '
'.esc_html(print_r($item['data'], 1)).'
' : ''; $logs.= '
  • '.$item['message'].' '.$data.'
  • '; } $display.= '
    '.$heading.'
    '; } return $display; } }