(project: dict)
| 758 | |
| 759 | |
| 760 | def project_card(project: dict) -> str: |
| 761 | tool_tags = "".join( |
| 762 | f'<a href="{tag_href(tool)}">{escape_html(display_tool(tool))}</a>' |
| 763 | for tool in project["tools"][:6] |
| 764 | ) |
| 765 | href = project_path(project) |
| 766 | return f""" <article class="project-card"> |
| 767 | <a class="project-card-link" href="{href}" aria-label="Open {escape_html(project['name'])}"></a> |
| 768 | <div class="project-card-body"> |
| 769 | <div class="lab-card-top"> |
| 770 | <span class="status-pill">Project {project['number']:02d}</span> |
| 771 | <span class="level-pill">{project['skill_level']}</span> |
| 772 | </div> |
| 773 | <strong>{escape_html(project['name'])}</strong> |
| 774 | <p>{escape_html(project['notes'])}</p> |
| 775 | <dl class="lab-card-facts"> |
| 776 | <div><dt>Time</dt><dd>{project['time_estimate']}</dd></div> |
| 777 | <div><dt>Cost</dt><dd>{project['cost_risk']}</dd></div> |
| 778 | <div><dt>Cleanup</dt><dd>{project['cleanup_available']}</dd></div> |
| 779 | <div><dt>Local</dt><dd>{project['works_locally']}</dd></div> |
| 780 | <div><dt>Cloud creds</dt><dd>{project['needs_cloud_credentials']}</dd></div> |
| 781 | <div><dt>Reviewed</dt><dd>{project['last_reviewed']}</dd></div> |
| 782 | </dl> |
| 783 | <div class="project-tags" aria-label="Tools used">{tool_tags}</div> |
| 784 | <p class="proof-line"><span>Proof:</span> {escape_html(project['outcome_proof'])}</p> |
| 785 | </div> |
| 786 | </article>""" |
| 787 | |
| 788 | |
| 789 | def project_path(project: dict) -> str: |
no test coverage detected