Projects under organizations with fixed URL name and feature ID prefix, three visibility levels, open contribution, per-project roles, settings and typed-confirmation delete. Hidden projects 404. Leaving an org drops its project roles. Project access rules live in intent/access.py alongside org access. Features numbered per project (INT-12) in a tree. Every change is a revision with a required note; history, old revisions, and side-by-side field and line diffs between any two. Cycles and superseded-without-replacement are rejected. Markdown renders safely with source-line attributes for Phase 3 line comments and headings shifted below the page h1. Server-side preview works without JS. Structural accessibility check runs on every page in tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
45 lines
1.6 KiB
HTML
45 lines
1.6 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}{{ org.name }} · Intent{% endblock %}
|
|
|
|
{% block content %}
|
|
<h1>{{ org.name }}</h1>
|
|
|
|
<section aria-labelledby="projects-heading">
|
|
<h2 id="projects-heading">Projects</h2>
|
|
{% if projects %}
|
|
<ul>
|
|
{% for project in projects %}
|
|
<li>
|
|
<a href="{% url 'projects:home' org_slug=org.slug project_slug=project.slug %}">{{ project.name }}</a>
|
|
{% if project.visibility != "public" %}<span class="muted">({{ project.visibility }})</span>{% endif %}
|
|
</li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% else %}
|
|
<p>No projects{% if not access.is_member %} you can see{% endif %} yet.</p>
|
|
{% endif %}
|
|
{% if access.can_create_projects %}
|
|
<p><a href="{% url 'project_create' org_slug=org.slug %}">New project</a></p>
|
|
{% endif %}
|
|
</section>
|
|
|
|
{% if access.is_member %}
|
|
<section aria-labelledby="team-heading">
|
|
<h2 id="team-heading">Team</h2>
|
|
<p>You're {% if access.is_owner %}an owner{% else %}a collaborator{% endif %} of this organization.</p>
|
|
<ul>
|
|
<li><a href="{% url 'orgs:members' org_slug=org.slug %}">Members</a></li>
|
|
</ul>
|
|
|
|
<details>
|
|
<summary>Leave {{ org.name }}</summary>
|
|
<form method="post" action="{% url 'orgs:member_remove' org_slug=org.slug membership_id=access.membership.pk %}">
|
|
{% csrf_token %}
|
|
<p>You'll need a new invitation to rejoin, and you'll lose your project roles.</p>
|
|
<p><button type="submit">Leave {{ org.name }}</button></p>
|
|
</form>
|
|
</details>
|
|
</section>
|
|
{% endif %}
|
|
{% endblock %}
|