FossilRepo

Add Fossil Guide: curated docs section + doc page viewer - Curated index page with categorized links to Fossil documentation: Getting Started, Version Control, Built-in Features, Administration, Reference - Doc page viewer reads .wiki/.md files from the Fossil repo source tree and renders through the Fossil content renderer - "Fossil Guide" link in sidebar with graduation cap icon - Reads docs from the fossil-scm project's www/ directory

lmata 2026-04-06 21:07 trunk
Commit 25bbd0575b81f3136f398594d61c6bc308b37dfe9e3ee11773424cf044937621
--- fossil/urls.py
+++ fossil/urls.py
@@ -18,6 +18,8 @@
1818
path("wiki/edit/<path:page_name>", views.wiki_edit, name="wiki_edit"),
1919
path("tickets/create/", views.ticket_create, name="ticket_create"),
2020
path("forum/", views.forum_list, name="forum"),
2121
path("forum/<str:thread_uuid>/", views.forum_thread, name="forum_thread"),
2222
path("user/<str:username>/", views.user_activity, name="user_activity"),
23
+ path("docs/", views.fossil_docs, name="docs"),
24
+ path("docs/<path:doc_path>", views.fossil_doc_page, name="doc_page"),
2325
]
2426
--- fossil/urls.py
+++ fossil/urls.py
@@ -18,6 +18,8 @@
18 path("wiki/edit/<path:page_name>", views.wiki_edit, name="wiki_edit"),
19 path("tickets/create/", views.ticket_create, name="ticket_create"),
20 path("forum/", views.forum_list, name="forum"),
21 path("forum/<str:thread_uuid>/", views.forum_thread, name="forum_thread"),
22 path("user/<str:username>/", views.user_activity, name="user_activity"),
 
 
23 ]
24
--- fossil/urls.py
+++ fossil/urls.py
@@ -18,6 +18,8 @@
18 path("wiki/edit/<path:page_name>", views.wiki_edit, name="wiki_edit"),
19 path("tickets/create/", views.ticket_create, name="ticket_create"),
20 path("forum/", views.forum_list, name="forum"),
21 path("forum/<str:thread_uuid>/", views.forum_thread, name="forum_thread"),
22 path("user/<str:username>/", views.user_activity, name="user_activity"),
23 path("docs/", views.fossil_docs, name="docs"),
24 path("docs/<path:doc_path>", views.fossil_doc_page, name="doc_page"),
25 ]
26
--- fossil/views.py
+++ fossil/views.py
@@ -692,10 +692,58 @@
692692
"activity": activity,
693693
"active_tab": "timeline",
694694
},
695695
)
696696
697
+
698
+# --- Fossil Docs ---
699
+
700
+FOSSIL_SCM_SLUG = "fossil-scm"
701
+
702
+
703
+@login_required
704
+def fossil_docs(request, slug):
705
+ """Curated Fossil documentation index page."""
706
+ P.PROJECT_VIEW.check(request.user)
707
+ project = get_object_or_404(Project, slug=slug, deleted_at__isnull=True)
708
+ return render(request, "fossil/docs_index.html", {"project": project, "fossil_scm_slug": slug, "active_tab": "wiki"})
709
+
710
+
711
+@login_required
712
+def fossil_doc_page(request, slug, doc_path):
713
+ """Render a documentation file from the Fossil repo source tree."""
714
+ P.PROJECT_VIEW.check(request.user)
715
+ project, fossil_repo, reader = _get_repo_and_reader(slug)
716
+
717
+ with reader:
718
+ checkin_uuid = reader.get_latest_checkin_uuid()
719
+ files = reader.get_files_at_checkin(checkin_uuid) if checkin_uuid else []
720
+
721
+ target = None
722
+ for f in files:
723
+ if f.name == doc_path:
724
+ target = f
725
+ break
726
+
727
+ if not target:
728
+ raise Http404(f"Documentation file not found: {doc_path}")
729
+
730
+ content_bytes = reader.get_file_content(target.uuid)
731
+
732
+ try:
733
+ content = content_bytes.decode("utf-8")
734
+ except UnicodeDecodeError as e:
735
+ raise Http404("Binary file cannot be rendered as documentation") from e
736
+
737
+ content_html = mark_safe(_render_fossil_content(content, project_slug=slug))
738
+
739
+ return render(
740
+ request,
741
+ "fossil/doc_page.html",
742
+ {"project": project, "doc_path": doc_path, "content_html": content_html, "active_tab": "wiki"},
743
+ )
744
+
697745
698746
# --- Helpers ---
699747
700748
701749
def _build_file_tree(files, current_dir=""):
702750
703751
ADDED templates/fossil/doc_page.html
704752
ADDED templates/fossil/docs_index.html
--- fossil/views.py
+++ fossil/views.py
@@ -692,10 +692,58 @@
692 "activity": activity,
693 "active_tab": "timeline",
694 },
695 )
696
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
697
698 # --- Helpers ---
699
700
701 def _build_file_tree(files, current_dir=""):
702
703 DDED templates/fossil/doc_page.html
704 DDED templates/fossil/docs_index.html
--- fossil/views.py
+++ fossil/views.py
@@ -692,10 +692,58 @@
692 "activity": activity,
693 "active_tab": "timeline",
694 },
695 )
696
697
698 # --- Fossil Docs ---
699
700 FOSSIL_SCM_SLUG = "fossil-scm"
701
702
703 @login_required
704 def fossil_docs(request, slug):
705 """Curated Fossil documentation index page."""
706 P.PROJECT_VIEW.check(request.user)
707 project = get_object_or_404(Project, slug=slug, deleted_at__isnull=True)
708 return render(request, "fossil/docs_index.html", {"project": project, "fossil_scm_slug": slug, "active_tab": "wiki"})
709
710
711 @login_required
712 def fossil_doc_page(request, slug, doc_path):
713 """Render a documentation file from the Fossil repo source tree."""
714 P.PROJECT_VIEW.check(request.user)
715 project, fossil_repo, reader = _get_repo_and_reader(slug)
716
717 with reader:
718 checkin_uuid = reader.get_latest_checkin_uuid()
719 files = reader.get_files_at_checkin(checkin_uuid) if checkin_uuid else []
720
721 target = None
722 for f in files:
723 if f.name == doc_path:
724 target = f
725 break
726
727 if not target:
728 raise Http404(f"Documentation file not found: {doc_path}")
729
730 content_bytes = reader.get_file_content(target.uuid)
731
732 try:
733 content = content_bytes.decode("utf-8")
734 except UnicodeDecodeError as e:
735 raise Http404("Binary file cannot be rendered as documentation") from e
736
737 content_html = mark_safe(_render_fossil_content(content, project_slug=slug))
738
739 return render(
740 request,
741 "fossil/doc_page.html",
742 {"project": project, "doc_path": doc_path, "content_html": content_html, "active_tab": "wiki"},
743 )
744
745
746 # --- Helpers ---
747
748
749 def _build_file_tree(files, current_dir=""):
750
751 DDED templates/fossil/doc_page.html
752 DDED templates/fossil/docs_index.html
--- a/templates/fossil/doc_page.html
+++ b/templates/fossil/doc_page.html
@@ -0,0 +1,17 @@
1
+{% extends "base.html" %}
2
+{% block title %}{{ doc_path }} — Fossil Guide — Fossilrepo{% endblock %}
3
+
4
+{% block content %}
5
+<div class="max-w-4xl">
6
+ <div class="mb-4">
7
+ <a href="{% url 'fossil:docs' slug=project.slug %}" class="text-sm text-brand-light hover:text-bd">&larr; Back to FossilSCM Guide</a>
8
+ </div>
9
+
10
+ <div class="overflow-hidden rounded-lg bg-gray-800 shadow border border-gray-700">
11
+ <div class="px-6 py-4 border-b border-gray-700">
12
+ <h1 class="text-lg font-semibold text-gray-100 font-mono">{{ doc_path }}</h1>
13
+ </div>
14
+ <div class="px-6 py-6">
15
+ <div class="prose prose-invert prose-gray max-w-none">
16
+ {{ content_html }}
17
+
--- a/templates/fossil/doc_page.html
+++ b/templates/fossil/doc_page.html
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/templates/fossil/doc_page.html
+++ b/templates/fossil/doc_page.html
@@ -0,0 +1,17 @@
1 {% extends "base.html" %}
2 {% block title %}{{ doc_path }} — Fossil Guide — Fossilrepo{% endblock %}
3
4 {% block content %}
5 <div class="max-w-4xl">
6 <div class="mb-4">
7 <a href="{% url 'fossil:docs' slug=project.slug %}" class="text-sm text-brand-light hover:text-bd">&larr; Back to FossilSCM Guide</a>
8 </div>
9
10 <div class="overflow-hidden rounded-lg bg-gray-800 shadow border border-gray-700">
11 <div class="px-6 py-4 border-b border-gray-700">
12 <h1 class="text-lg font-semibold text-gray-100 font-mono">{{ doc_path }}</h1>
13 </div>
14 <div class="px-6 py-6">
15 <div class="prose prose-invert prose-gray max-w-none">
16 {{ content_html }}
17
--- a/templates/fossil/docs_index.html
+++ b/templates/fossil/docs_index.html
@@ -0,0 +1,62 @@
1
+{% extends "base.html"
2
+{% block title %}FossilSCM Guide — Fossilrepo{% endblock %}
3
+
4
+{% block content %}
5
+<div class="max-w-4xl">
6
+ <h1 class="text-2xl font-bold Guide</h1>
7
+ <p class6"text-sm text-gray-400 mb-4">Reference documentation for Fossil SCr, bundled grid grid-cols-1 gap-4 sm:grid-cols-2">
8
+
9
+ <div class="rounded-lg bg-gray-800 border border-gray-700 p-5">
10
+ <h3 class="text-sm font-semibold text-gray-200 mb-3 uppercase tracking-wider">Getting Started</h3>
11
+ <div class="space-y-2">
12
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/quickstart.wiki' %}" class="block text-sm text-bra500 flex-shrink-0"></span> Quick Start Guide</a>
13
+ <a href="{% url 'fossil:doc_page' slugblock text-sm text-braBuilding from Source</a>
14
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/concepts.wiki' %}" class="block text-sm text-braCore Concepts</a>
15
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_pathblock text-sm text-braFAQ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/chat.md' %}" class="flexgap-2 text-sm text-brand-light hover:text-brand">
16
+ <span class="w-2 h-2 rounde{% extends "base.html" %}
17
+{% block title %}FossilSCM Guide — Fossilrepo{% endblock %}
18
+
19
+{% block content %}
20
+<div class="max-w-4xl">
21
+ <h1 class="text-2xock t text-sm text-brand-light hover:text-brand">
22
+ <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Backups</a>
23
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/fileformat.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
24
+ <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> File Format</a>
25
+ </div>
26
+ </div>
27
+
28
+ <div class="rounded-lg bg-gray-800 border border-gray-700 p-5 sm:col-span-2">
29
+ <h3 class="text-sm font-semibold text-gray-200 mb-3 uppercase tracking-wider">Reference</h3>
30
+ <div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
31
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/changes.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
32
+ <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Changelog</a>
33
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/permutedindex.html' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
34
+ <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Command Reference</a>
35
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/th1.md' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
36
+ <span class="w-2 h-2 rounded-full bg-gray-600 flex-shrink-0"></span> TH1 Scripting
37
+ <span class="text-xs text-gray-500">(native Fossil only)</span></a>
38
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/fossil-v-git.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
39
+ <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Fossil vs Git</a>
40
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/hashpolicy.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
41
+ <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Hash Policy</a>
42
+ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/embeddeddoc.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
43
+ <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Embedded Docs</a>
44
+ </div>
45
+ </div>
46
+
47
+ </div>
48
+
49
+ <!-- FossilRepo-specific additions -->
50
+ <div class="mt-6 rounded-lg bg-gray-800/50 border border-gray-700 p-5">
51
+ <h3 class="text-sm font-semibold text-gray-200 mb-2">FossilRepo Additions</h3>
52
+ <p class="text-xs text-gray-400 mb-3">Features added by FossilRepo beyond native Fossil:</p>
53
+ <div class="grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-gray-400">
54
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Git mirror sync (GitHub/GitLab)</span>
55
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> MCP server for AI tools</span>
56
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> JSON API + batch operations</span>
57
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Agent workspaces + task claiming</span>
58
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> CI status checks + SVG badges</span>
59
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Webhooks with HMAC signing</span>
60
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Org roles + project-level RBAC</span>
61
+ <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Release management with archives</span>
62
+ <span class="flex items-center gap-2"><sp
--- a/templates/fossil/docs_index.html
+++ b/templates/fossil/docs_index.html
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/templates/fossil/docs_index.html
+++ b/templates/fossil/docs_index.html
@@ -0,0 +1,62 @@
1 {% extends "base.html"
2 {% block title %}FossilSCM Guide — Fossilrepo{% endblock %}
3
4 {% block content %}
5 <div class="max-w-4xl">
6 <h1 class="text-2xl font-bold Guide</h1>
7 <p class6"text-sm text-gray-400 mb-4">Reference documentation for Fossil SCr, bundled grid grid-cols-1 gap-4 sm:grid-cols-2">
8
9 <div class="rounded-lg bg-gray-800 border border-gray-700 p-5">
10 <h3 class="text-sm font-semibold text-gray-200 mb-3 uppercase tracking-wider">Getting Started</h3>
11 <div class="space-y-2">
12 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/quickstart.wiki' %}" class="block text-sm text-bra500 flex-shrink-0"></span> Quick Start Guide</a>
13 <a href="{% url 'fossil:doc_page' slugblock text-sm text-braBuilding from Source</a>
14 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/concepts.wiki' %}" class="block text-sm text-braCore Concepts</a>
15 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_pathblock text-sm text-braFAQ <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/chat.md' %}" class="flexgap-2 text-sm text-brand-light hover:text-brand">
16 <span class="w-2 h-2 rounde{% extends "base.html" %}
17 {% block title %}FossilSCM Guide — Fossilrepo{% endblock %}
18
19 {% block content %}
20 <div class="max-w-4xl">
21 <h1 class="text-2xock t text-sm text-brand-light hover:text-brand">
22 <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Backups</a>
23 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/fileformat.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
24 <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> File Format</a>
25 </div>
26 </div>
27
28 <div class="rounded-lg bg-gray-800 border border-gray-700 p-5 sm:col-span-2">
29 <h3 class="text-sm font-semibold text-gray-200 mb-3 uppercase tracking-wider">Reference</h3>
30 <div class="grid grid-cols-1 sm:grid-cols-2 gap-2">
31 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/changes.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
32 <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Changelog</a>
33 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/permutedindex.html' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
34 <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Command Reference</a>
35 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/th1.md' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
36 <span class="w-2 h-2 rounded-full bg-gray-600 flex-shrink-0"></span> TH1 Scripting
37 <span class="text-xs text-gray-500">(native Fossil only)</span></a>
38 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/fossil-v-git.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
39 <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Fossil vs Git</a>
40 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/hashpolicy.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
41 <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Hash Policy</a>
42 <a href="{% url 'fossil:doc_page' slug=fossil_scm_slug doc_path='www/embeddeddoc.wiki' %}" class="flex items-center gap-2 text-sm text-brand-light hover:text-brand">
43 <span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Embedded Docs</a>
44 </div>
45 </div>
46
47 </div>
48
49 <!-- FossilRepo-specific additions -->
50 <div class="mt-6 rounded-lg bg-gray-800/50 border border-gray-700 p-5">
51 <h3 class="text-sm font-semibold text-gray-200 mb-2">FossilRepo Additions</h3>
52 <p class="text-xs text-gray-400 mb-3">Features added by FossilRepo beyond native Fossil:</p>
53 <div class="grid grid-cols-1 sm:grid-cols-2 gap-2 text-sm text-gray-400">
54 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Git mirror sync (GitHub/GitLab)</span>
55 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> MCP server for AI tools</span>
56 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> JSON API + batch operations</span>
57 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Agent workspaces + task claiming</span>
58 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> CI status checks + SVG badges</span>
59 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Webhooks with HMAC signing</span>
60 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Org roles + project-level RBAC</span>
61 <span class="flex items-center gap-2"><span class="w-2 h-2 rounded-full bg-green-500 flex-shrink-0"></span> Release management with archives</span>
62 <span class="flex items-center gap-2"><sp
--- templates/includes/sidebar.html
+++ templates/includes/sidebar.html
@@ -131,10 +131,20 @@
131131
</a>
132132
{% endif %}
133133
</div>
134134
</div>
135135
{% endif %}
136
+
137
+ <!-- Fossil Guide -->
138
+ <a href="{% url 'fossil:docs' slug='fossil-scm' %}"
139
+ class="flex items-center gap-2 rounded-md px-2 py-2 text-sm font-medium {% if '/fossil/docs/' in request.path %}bg-gray-800 text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}"
140
+ :title="collapsed ? 'Fossil Guide' : ''">
141
+ <svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
142
+ <path stroke-linecap="round" stroke-linejoin="round" d="M4.26 10.147a60.438 60.438 0 00-.491 6.347A48.62 48.62 0 0112 20.904a48.62 48.62 0 018.232-4.41 60.46 60.46 0 00-.491-6.347m-15.482 0a50.636 50.636 0 00-2.658-.813A59.906 59.906 0 0112 3.493a59.903 59.903 0 0110.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0112 13.489a50.702 50.702 0 017.74-3.342M6.75 15a.75.75 0 100-1.5.75.75 0 000 1.5zm0 0v-3.675A55.378 55.378 0 0112 8.443m-7.007 11.55A5.981 5.981 0 006.75 15.75v-1.5" />
143
+ </svg>
144
+ <span x-show="!collapsed" class="truncate">Fossil Guide</span>
145
+ </a>
136146
137147
<!-- Settings -->
138148
{% if perms.organization.view_organization %}
139149
<a href="{% url 'organization:settings' %}"
140150
class="flex items-center gap-2 rounded-md px-2 py-2 text-sm font-medium {% if '/settings/' in request.path and '/settings/teams/' not in request.path %}bg-gray-800 text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}"
141151
--- templates/includes/sidebar.html
+++ templates/includes/sidebar.html
@@ -131,10 +131,20 @@
131 </a>
132 {% endif %}
133 </div>
134 </div>
135 {% endif %}
 
 
 
 
 
 
 
 
 
 
136
137 <!-- Settings -->
138 {% if perms.organization.view_organization %}
139 <a href="{% url 'organization:settings' %}"
140 class="flex items-center gap-2 rounded-md px-2 py-2 text-sm font-medium {% if '/settings/' in request.path and '/settings/teams/' not in request.path %}bg-gray-800 text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}"
141
--- templates/includes/sidebar.html
+++ templates/includes/sidebar.html
@@ -131,10 +131,20 @@
131 </a>
132 {% endif %}
133 </div>
134 </div>
135 {% endif %}
136
137 <!-- Fossil Guide -->
138 <a href="{% url 'fossil:docs' slug='fossil-scm' %}"
139 class="flex items-center gap-2 rounded-md px-2 py-2 text-sm font-medium {% if '/fossil/docs/' in request.path %}bg-gray-800 text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}"
140 :title="collapsed ? 'Fossil Guide' : ''">
141 <svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
142 <path stroke-linecap="round" stroke-linejoin="round" d="M4.26 10.147a60.438 60.438 0 00-.491 6.347A48.62 48.62 0 0112 20.904a48.62 48.62 0 018.232-4.41 60.46 60.46 0 00-.491-6.347m-15.482 0a50.636 50.636 0 00-2.658-.813A59.906 59.906 0 0112 3.493a59.903 59.903 0 0110.399 5.84c-.896.248-1.783.52-2.658.814m-15.482 0A50.717 50.717 0 0112 13.489a50.702 50.702 0 017.74-3.342M6.75 15a.75.75 0 100-1.5.75.75 0 000 1.5zm0 0v-3.675A55.378 55.378 0 0112 8.443m-7.007 11.55A5.981 5.981 0 006.75 15.75v-1.5" />
143 </svg>
144 <span x-show="!collapsed" class="truncate">Fossil Guide</span>
145 </a>
146
147 <!-- Settings -->
148 {% if perms.organization.view_organization %}
149 <a href="{% url 'organization:settings' %}"
150 class="flex items-center gap-2 rounded-md px-2 py-2 text-sm font-medium {% if '/settings/' in request.path and '/settings/teams/' not in request.path %}bg-gray-800 text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}"
151

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button