Skip to content

Migrate core reports (Timeseries & Histogram) to Apache ECharts - #1336

Closed
max-ostapenko wants to merge 106 commits into
migrate-firebase-hostingfrom
echarts-core
Closed

max-ostapenko wants to merge 106 commits into
migrate-firebase-hostingfrom
echarts-core

Conversation

@max-ostapenko

Copy link
Copy Markdown
Contributor

Summary

Migrates core HTTP Archive reports (timeseries and histogram) from Highcharts to Apache ECharts, targeting migrate-firebase-hosting (#1333) to leverage Firebase preview channel deployments.

This transition delivers a modern, high-performance charting architecture with GPU-accelerated rendering, built-in mobile touch gestures, and rich interactive features matching and improving upon production UX.


Key Features & Highlights

1. Timeseries Reports (src/js/timeseries.js)

  • Native Dual Zooming:
    • dataZoom: 'slider' mini-map with data preview mini-bars, draggable dual-handles, and custom year tick marks (2014, 2018, 2022).
    • dataZoom: 'inside' supporting pinch-to-zoom on mobile and mouse wheel / drag pan on desktop.
  • Range Presets Toolbar:
    • Inline range buttons (1m, 3m, 6m, YTD, 1y, 3y, All) with active state tracking and synchronized live date range indicator (Jul 2025 → Aug 2026).
  • IQR Confidence Bands:
    • Smooth stacked area series (p25 transparent base + p75 - p25 shaded span) representing interquartile ranges alongside Desktop (#04c7fd) and Mobile (#b61877) median curves.
  • Changelog Milestones (Option A Pin Design):
    • Interactive custom flag pins docked to the X-axis for all releases (A through T) with intelligent stem staggering to prevent overlap.
    • On-demand vertical crosshairs and detailed milestone descriptions embedded in tooltips.
  • Synchronized Legend:
    • Clicking Desktop or Mobile toggles both median lines and confidence intervals together.

2. Dual-Axis Histogram (src/js/histogram.js)

  • Dual Y-Axis:
    • Left Axis: PDF Density percentage (0% to 2.5%) with blended translucent side-by-side bars.
    • Right Axis: CDF Cumulative Density percentage (0% to 100%) with smooth continuous curves and opposite-side top-to-bottom title orientation.
  • Interactive Drag-to-Zoom with Selection Overlay:
    • Horizontal drag-to-zoom across the plot area featuring a semi-transparent selection preview box.
    • Reset zoom button in the chart header appearing dynamically when zoomed.
    • Automatic filtering of the data table below to match the active zoomed bin range.
    • Mobile pinch-to-zoom support.
  • Tooltip Styling Parity:
    • Centered metric title, bold PDF percentages in series colors, and distinct uppercase CDF cumulative indicators.

3. Build & CI

  • Successfully rebased onto migrate-firebase-hosting.
  • Passes static build (npm run build).

Verification

  • Built all 46 static pages cleanly via Astro.
  • Verified timeseries navigation, range presets, changelog tooltips, and histogram drag-to-zoom selection in browser.

max-ostapenko and others added 30 commits June 28, 2026 14:35
…ve static HTML

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…e.js-based infrastructure

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…mp and filter selection logic

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…r with custom scoped HTTP Archive navigation component

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…dding settings

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…alization and build workflows

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
….json

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
….css

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…_updated configuration

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…te scripting'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
…ort, function or class'

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
…x page layout

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…nd modernize CSS properties

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…harts-init.js and remove static file generation

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…remove static css file

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
… 4 compatibility

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…ns to complete migration to Node.js

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…js and improve shell robustness

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…el toggles with tests

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…hnology reports

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
… tech report page

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…thouse CI

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
…eport pages

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
… XSS alert

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
- Migrate Timeseries and Histogram reports from Highcharts to Apache ECharts
- Implement native dataZoom slider (mini-map with data preview, handles, ticks) and inside zoom/pan
- Support IQR confidence bands via stacked area series and median line series
- Add inline range presets (1m, 3m, 6m, YTD, 1y, 3y, All) with active button styling and live date range indicators
- Implement dual Y-axis histogram with PDF density bars on left and CDF cumulative curve on right
- Add interactive crosshair tooltips with formatted date, Desktop/Mobile comparative metrics, and Changelog badges
- Add custom card header with source link and export context menu (PNG, SVG, SQL query)
- Scope section buttons in styles.css to ensure responsive mobile layout
- Pass all 30 automated integration and runtime error tests
… refined interactions

Signed-off-by: Max Ostapenko <1611259+max-ostapenko@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown
Contributor

Visit the preview URL for this PR (updated for commit c0f62b0):

https://httparchive--pr1336-echarts-core-71vmyi9j.web.app

(expires Sun, 27 Sep 2026 13:11:06 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: 1069cba7974889c25bacf4f0a19ddb6735592729

@max-ostapenko
max-ostapenko force-pushed the migrate-firebase-hosting branch from 7fa9785 to b9bfa56 Compare September 20, 2026 14:20
@max-ostapenko

Copy link
Copy Markdown
Contributor Author

Superseded by a clean cherry-pick onto main — see the replacement PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants