auditmysite 0.26.0

Resource-efficient WCAG 2.1 Accessibility Checker in Rust
Documentation
use crate::output::report_model::{HistoryTrendBlock, ReportHistoryPreview};

use super::super::helpers::build_trend_label;

pub(super) fn build_history_trend_block(
    locale: &str,
    preview: &ReportHistoryPreview,
) -> HistoryTrendBlock {
    let trend_label = build_trend_label(
        locale,
        preview.delta_accessibility,
        preview.delta_total_issues,
    );
    let en = locale == "en";

    let trend_interpretation = if en {
        match trend_label.as_str() {
            "Significantly improved" => format!(
                "Accessibility has improved significantly versus the run on {} (+{} points, {} fewer issues).",
                preview.previous_date,
                preview.delta_accessibility,
                -preview.delta_total_issues
            ),
            "Improved" => format!(
                "Accessibility has improved versus the run on {}.",
                preview.previous_date
            ),
            "Stable" => format!(
                "Accessibility is unchanged compared with the run on {}.",
                preview.previous_date
            ),
            "Significantly regressed" => format!(
                "Accessibility has regressed significantly versus the run on {} ({} points, +{} issues). Action needed.",
                preview.previous_date,
                preview.delta_accessibility,
                preview.delta_total_issues
            ),
            _ => format!(
                "Accessibility has slightly regressed versus the run on {}.",
                preview.previous_date
            ),
        }
    } else {
        match trend_label.as_str() {
            "Deutlich verbessert" => format!(
                "Die Barrierefreiheit hat sich gegenüber dem letzten Lauf vom {} deutlich verbessert (+{} Punkte, {} Issues weniger).",
                preview.previous_date,
                preview.delta_accessibility,
                -preview.delta_total_issues
            ),
            "Verbessert" => format!(
                "Die Barrierefreiheit hat sich gegenüber dem letzten Lauf vom {} verbessert.",
                preview.previous_date
            ),
            "Stabil" => format!(
                "Die Barrierefreiheit ist gegenüber dem letzten Lauf vom {} unverändert stabil.",
                preview.previous_date
            ),
            "Deutlich verschlechtert" => format!(
                "Die Barrierefreiheit ist gegenüber dem letzten Lauf vom {} deutlich zurückgegangen ({} Punkte, +{} Issues). Handlungsbedarf.",
                preview.previous_date,
                preview.delta_accessibility,
                preview.delta_total_issues
            ),
            _ => format!(
                "Die Barrierefreiheit ist gegenüber dem letzten Lauf vom {} leicht zurückgegangen.",
                preview.previous_date
            ),
        }
    };

    let summary = if en {
        format!(
            "{} The history covers {} usable snapshots.",
            trend_interpretation, preview.timeline_entries
        )
    } else {
        format!(
            "{} Die Historie umfasst {} verwertbare Snapshots.",
            trend_interpretation, preview.timeline_entries
        )
    };

    let (acc_delta, total_delta, issue_delta, crit_delta, prev_acc, prev_total) = if en {
        (
            "Accessibility delta",
            "Overall delta",
            "Issue delta",
            "Critical+High delta",
            "Previous accessibility",
            "Previous overall",
        )
    } else {
        (
            "Accessibility-Delta",
            "Gesamt-Delta",
            "Issue-Delta",
            "Kritisch+Hoch-Delta",
            "Vorher Accessibility",
            "Vorher Gesamt",
        )
    };

    HistoryTrendBlock {
        previous_date: preview.previous_date.clone(),
        timeline_entries: preview.timeline_entries,
        trend_label,
        summary,
        metrics: vec![
            (
                acc_delta.to_string(),
                format!("{:+}", preview.delta_accessibility),
            ),
            (
                total_delta.to_string(),
                format!("{:+}", preview.delta_overall),
            ),
            (
                issue_delta.to_string(),
                format!("{:+}", preview.delta_total_issues),
            ),
            (
                crit_delta.to_string(),
                format!("{:+}", preview.delta_critical_issues),
            ),
            (
                prev_acc.to_string(),
                preview.previous_accessibility_score.to_string(),
            ),
            (
                prev_total.to_string(),
                preview.previous_overall_score.to_string(),
            ),
        ],
        timeline_rows: preview
            .recent_entries
            .iter()
            .map(|entry| {
                (
                    entry.0.clone(),
                    entry.1.to_string(),
                    entry.2.to_string(),
                    entry.3.clone(),
                    entry.4.to_string(),
                )
            })
            .collect(),
        new_findings: preview.new_findings.clone(),
        resolved_findings: preview.resolved_findings.clone(),
    }
}