|
0e40dc2…
|
ragelink
|
1 |
<aside aria-label="Sidebar navigation" x-data="{ collapsed: localStorage.getItem('sidebarCollapsed') === 'true', projectsOpen: true, docsOpen: false }" |
|
4ce269c…
|
ragelink
|
2 |
:class="collapsed ? 'w-14' : 'w-60'" |
|
4ce269c…
|
ragelink
|
3 |
class="hidden lg:flex lg:flex-col flex-shrink-0 bg-gray-900 border-r border-gray-700 overflow-y-auto overflow-x-hidden transition-all duration-200"> |
|
c588255…
|
ragelink
|
4 |
|
|
c588255…
|
ragelink
|
5 |
<nav class="flex-1 px-2 py-3 space-y-1 overflow-y-auto"> |
|
c588255…
|
ragelink
|
6 |
|
|
c588255…
|
ragelink
|
7 |
<!-- Expand button (collapsed state only) — prominent, centered --> |
|
c588255…
|
ragelink
|
8 |
<button x-show="collapsed" style="display:none" |
|
c588255…
|
ragelink
|
9 |
@click="collapsed = false; localStorage.setItem('sidebarCollapsed', 'false')" |
|
c588255…
|
ragelink
|
10 |
class="flex items-center justify-center w-full rounded-md px-2 py-2 mb-1 text-gray-400 hover:text-white hover:bg-gray-800 transition-colors" |
|
c588255…
|
ragelink
|
11 |
title="Expand sidebar"> |
|
c588255…
|
ragelink
|
12 |
<svg class="h-4 w-4" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"> |
|
4ce269c…
|
ragelink
|
13 |
<path stroke-linecap="round" stroke-linejoin="round" d="M11.25 4.5l7.5 7.5-7.5 7.5m-6-15l7.5 7.5-7.5 7.5" /> |
|
4ce269c…
|
ragelink
|
14 |
</svg> |
|
4ce269c…
|
ragelink
|
15 |
</button> |
|
4ce269c…
|
ragelink
|
16 |
|
|
c588255…
|
ragelink
|
17 |
<!-- Dashboard + collapse toggle (expanded state) --> |
|
c588255…
|
ragelink
|
18 |
<div class="flex items-center gap-1" :class="collapsed && 'justify-center'"> |
|
c588255…
|
ragelink
|
19 |
<a href="{% url 'dashboard' %}" |
|
c588255…
|
ragelink
|
20 |
class="flex items-center gap-2 rounded-md px-2 py-2 text-sm font-medium {% if request.path == '/dashboard/' %}bg-gray-800 text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}" |
|
c588255…
|
ragelink
|
21 |
:class="collapsed ? '' : 'flex-1'" |
|
c588255…
|
ragelink
|
22 |
:title="collapsed ? 'Dashboard' : ''"> |
|
c588255…
|
ragelink
|
23 |
<svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
c588255…
|
ragelink
|
24 |
<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 12l8.954-8.955a1.126 1.126 0 011.591 0L21.75 12M4.5 9.75v10.125c0 .621.504 1.125 1.125 1.125H9.75v-4.875c0-.621.504-1.125 1.125-1.125h2.25c.621 0 1.125.504 1.125 1.125V21h4.125c.621 0 1.125-.504 1.125-1.125V9.75M8.25 21h8.25" /> |
|
c588255…
|
ragelink
|
25 |
</svg> |
|
c588255…
|
ragelink
|
26 |
<span x-show="!collapsed" class="truncate">Dashboard</span> |
|
c588255…
|
ragelink
|
27 |
</a> |
|
c588255…
|
ragelink
|
28 |
<button x-show="!collapsed" @click="collapsed = true; localStorage.setItem('sidebarCollapsed', 'true')" |
|
c588255…
|
ragelink
|
29 |
class="flex-shrink-0 rounded-md p-1.5 text-gray-500 hover:text-gray-300 hover:bg-gray-800 transition-colors" |
|
c588255…
|
ragelink
|
30 |
title="Collapse sidebar"> |
|
c588255…
|
ragelink
|
31 |
<svg class="h-3.5 w-3.5" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
c588255…
|
ragelink
|
32 |
<path stroke-linecap="round" stroke-linejoin="round" d="M18.75 19.5l-7.5-7.5 7.5-7.5m-6 15L5.25 12l7.5-7.5" /> |
|
c588255…
|
ragelink
|
33 |
</svg> |
|
c588255…
|
ragelink
|
34 |
</button> |
|
c588255…
|
ragelink
|
35 |
</div> |
|
c588255…
|
ragelink
|
36 |
|
|
c588255…
|
ragelink
|
37 |
<!-- Explore --> |
|
c588255…
|
ragelink
|
38 |
<a href="{% url 'explore' %}" |
|
c588255…
|
ragelink
|
39 |
class="flex items-center gap-2 rounded-md px-2 py-2 text-sm font-medium {% if request.path == '/explore/' %}bg-gray-800 text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}" |
|
c588255…
|
ragelink
|
40 |
:title="collapsed ? 'Explore' : ''"> |
|
4ce269c…
|
ragelink
|
41 |
<svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
c588255…
|
ragelink
|
42 |
<path stroke-linecap="round" stroke-linejoin="round" d="M12 21a9.004 9.004 0 008.716-6.747M12 21a9.004 9.004 0 01-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 017.843 4.582M12 3a8.997 8.997 0 00-7.843 4.582m15.686 0A11.953 11.953 0 0112 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0121 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0112 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 013 12c0-1.605.42-3.113 1.157-4.418" /> |
|
4ce269c…
|
ragelink
|
43 |
</svg> |
|
c588255…
|
ragelink
|
44 |
<span x-show="!collapsed" class="truncate">Explore</span> |
|
4ce269c…
|
ragelink
|
45 |
</a> |
|
4ce269c…
|
ragelink
|
46 |
|
|
4ce269c…
|
ragelink
|
47 |
<!-- Projects section --> |
|
4ce269c…
|
ragelink
|
48 |
{% if perms.projects.view_project %} |
|
4ce269c…
|
ragelink
|
49 |
<div> |
|
4ce269c…
|
ragelink
|
50 |
<button @click="collapsed ? (collapsed = false, projectsOpen = true) : (projectsOpen = !projectsOpen)" |
|
4ce269c…
|
ragelink
|
51 |
class="flex items-center justify-between w-full rounded-md px-2 py-2 text-sm font-medium {% if '/projects/' in request.path %}text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}" |
|
4ce269c…
|
ragelink
|
52 |
:title="collapsed ? 'Projects' : ''"> |
|
4ce269c…
|
ragelink
|
53 |
<span class="flex items-center gap-2"> |
|
4ce269c…
|
ragelink
|
54 |
<svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
4ce269c…
|
ragelink
|
55 |
<path stroke-linecap="round" stroke-linejoin="round" d="M2.25 12.75V12A2.25 2.25 0 014.5 9.75h15A2.25 2.25 0 0121.75 12v.75m-8.69-6.44l-2.12-2.12a1.5 1.5 0 00-1.061-.44H4.5A2.25 2.25 0 002.25 6v12a2.25 2.25 0 002.25 2.25h15A2.25 2.25 0 0021.75 18V9a2.25 2.25 0 00-2.25-2.25h-5.379a1.5 1.5 0 01-1.06-.44z" /> |
|
4ce269c…
|
ragelink
|
56 |
</svg> |
|
4ce269c…
|
ragelink
|
57 |
<span x-show="!collapsed" class="truncate">Projects</span> |
|
4ce269c…
|
ragelink
|
58 |
</span> |
|
4ce269c…
|
ragelink
|
59 |
<svg x-show="!collapsed" class="h-4 w-4 transition-transform" :class="projectsOpen && 'rotate-90'" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
4ce269c…
|
ragelink
|
60 |
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /> |
|
4ce269c…
|
ragelink
|
61 |
</svg> |
|
4ce269c…
|
ragelink
|
62 |
</button> |
|
4ce269c…
|
ragelink
|
63 |
<div x-show="projectsOpen && !collapsed" x-collapse class="ml-4 mt-1 space-y-0.5 border-l border-gray-700 pl-2"> |
|
c588255…
|
ragelink
|
64 |
{% for entry in sidebar_grouped %} |
|
c588255…
|
ragelink
|
65 |
<div class="mt-2"> |
|
c588255…
|
ragelink
|
66 |
<div class="flex items-center gap-1.5 px-2 py-1 text-xs font-semibold text-gray-500 uppercase tracking-wider"> |
|
c588255…
|
ragelink
|
67 |
<svg class="h-3 w-3" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
c588255…
|
ragelink
|
68 |
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776" /> |
|
4ce269c…
|
ragelink
|
69 |
</svg> |
|
c588255…
|
ragelink
|
70 |
{{ entry.group.name }} |
|
c588255…
|
ragelink
|
71 |
</div> |
|
c588255…
|
ragelink
|
72 |
{% for project in entry.projects %} |
|
c588255…
|
ragelink
|
73 |
{% include "includes/_sidebar_project.html" %} |
|
c588255…
|
ragelink
|
74 |
{% endfor %} |
|
c588255…
|
ragelink
|
75 |
</div> |
|
c588255…
|
ragelink
|
76 |
{% endfor %} |
|
c588255…
|
ragelink
|
77 |
{% for project in sidebar_ungrouped %} |
|
c588255…
|
ragelink
|
78 |
{% include "includes/_sidebar_project.html" %} |
|
4ce269c…
|
ragelink
|
79 |
{% endfor %} |
|
4ce269c…
|
ragelink
|
80 |
{% if perms.projects.add_project %} |
|
4ce269c…
|
ragelink
|
81 |
<a href="{% url 'projects:create' %}" |
|
4ce269c…
|
ragelink
|
82 |
class="block rounded-md px-2 py-1.5 text-sm text-gray-600 hover:text-brand-light"> |
|
4ce269c…
|
ragelink
|
83 |
+ New |
|
4ce269c…
|
ragelink
|
84 |
</a> |
|
4ce269c…
|
ragelink
|
85 |
{% endif %} |
|
4ce269c…
|
ragelink
|
86 |
</div> |
|
4ce269c…
|
ragelink
|
87 |
</div> |
|
4ce269c…
|
ragelink
|
88 |
{% endif %} |
|
4ce269c…
|
ragelink
|
89 |
|
|
45192ef…
|
ragelink
|
90 |
<!-- Knowledge Base (org wiki — user-editable) --> |
|
4ce269c…
|
ragelink
|
91 |
{% if perms.pages.view_page %} |
|
45192ef…
|
ragelink
|
92 |
<div x-data="{ kbOpen: false }"> |
|
45192ef…
|
ragelink
|
93 |
<button @click="collapsed ? (collapsed = false, kbOpen = true) : (kbOpen = !kbOpen)" |
|
45192ef…
|
ragelink
|
94 |
class="flex items-center justify-between w-full rounded-md px-2 py-2 text-sm font-medium text-gray-400 hover:bg-gray-800 hover:text-white" |
|
45192ef…
|
ragelink
|
95 |
:title="collapsed ? 'Knowledge Base' : ''"> |
|
4ce269c…
|
ragelink
|
96 |
<span class="flex items-center gap-2"> |
|
4ce269c…
|
ragelink
|
97 |
<svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
45192ef…
|
ragelink
|
98 |
<path stroke-linecap="round" stroke-linejoin="round" d="M3.75 9.776c.112-.017.227-.026.344-.026h15.812c.117 0 .232.009.344.026m-16.5 0a2.25 2.25 0 00-1.883 2.542l.857 6a2.25 2.25 0 002.227 1.932H19.05a2.25 2.25 0 002.227-1.932l.857-6a2.25 2.25 0 00-1.883-2.542m-16.5 0V6A2.25 2.25 0 016 3.75h3.879a1.5 1.5 0 011.06.44l2.122 2.12a1.5 1.5 0 001.06.44H18A2.25 2.25 0 0120.25 9v.776" /> |
|
4ce269c…
|
ragelink
|
99 |
</svg> |
|
45192ef…
|
ragelink
|
100 |
<span x-show="!collapsed" class="truncate">Knowledge Base</span> |
|
4ce269c…
|
ragelink
|
101 |
</span> |
|
45192ef…
|
ragelink
|
102 |
<svg x-show="!collapsed" class="h-4 w-4 transition-transform" :class="kbOpen && 'rotate-90'" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
4ce269c…
|
ragelink
|
103 |
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /> |
|
4ce269c…
|
ragelink
|
104 |
</svg> |
|
4ce269c…
|
ragelink
|
105 |
</button> |
|
45192ef…
|
ragelink
|
106 |
<div x-show="kbOpen && !collapsed" x-collapse class="ml-4 mt-1 space-y-0.5 border-l border-gray-700 pl-3"> |
|
45192ef…
|
ragelink
|
107 |
{% for p in sidebar_kb_pages %} |
|
4ce269c…
|
ragelink
|
108 |
<a href="{% url 'pages:detail' slug=p.slug %}" |
|
4ce269c…
|
ragelink
|
109 |
class="block rounded-md px-3 py-1.5 text-sm {% if p.slug in request.path %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %} truncate"> |
|
4ce269c…
|
ragelink
|
110 |
{{ p.name }} |
|
4ce269c…
|
ragelink
|
111 |
</a> |
|
4ce269c…
|
ragelink
|
112 |
{% endfor %} |
|
45192ef…
|
ragelink
|
113 |
{% if sidebar_kb_pages|length == 0 %} |
|
45192ef…
|
ragelink
|
114 |
<p class="px-3 py-1.5 text-xs text-gray-600">No articles yet.</p> |
|
45192ef…
|
ragelink
|
115 |
{% endif %} |
|
4ce269c…
|
ragelink
|
116 |
{% if perms.pages.add_page %} |
|
4ce269c…
|
ragelink
|
117 |
<a href="{% url 'pages:create' %}" |
|
4ce269c…
|
ragelink
|
118 |
class="block rounded-md px-3 py-1.5 text-sm text-gray-600 hover:text-brand-light"> |
|
4ce269c…
|
ragelink
|
119 |
+ New |
|
4ce269c…
|
ragelink
|
120 |
</a> |
|
4ce269c…
|
ragelink
|
121 |
{% endif %} |
|
7e1aaf6…
|
ragelink
|
122 |
</div> |
|
7e1aaf6…
|
ragelink
|
123 |
</div> |
|
7e1aaf6…
|
ragelink
|
124 |
{% endif %} |
|
7e1aaf6…
|
ragelink
|
125 |
|
|
7e1aaf6…
|
ragelink
|
126 |
<!-- FossilRepo Docs (product docs — read-only) --> |
|
7e1aaf6…
|
ragelink
|
127 |
{% if sidebar_product_docs %} |
|
7e1aaf6…
|
ragelink
|
128 |
<div x-data="{ docsOpen: false }"> |
|
7e1aaf6…
|
ragelink
|
129 |
<button @click="collapsed ? (collapsed = false, docsOpen = true) : (docsOpen = !docsOpen)" |
|
7e1aaf6…
|
ragelink
|
130 |
class="flex items-center justify-between w-full rounded-md px-2 py-2 text-sm font-medium {% if '/kb/' in request.path %}text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}" |
|
7e1aaf6…
|
ragelink
|
131 |
:title="collapsed ? 'FossilRepo Docs' : ''"> |
|
7e1aaf6…
|
ragelink
|
132 |
<span class="flex items-center gap-2"> |
|
7e1aaf6…
|
ragelink
|
133 |
<svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
7e1aaf6…
|
ragelink
|
134 |
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6.042A8.967 8.967 0 006 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 016 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 016-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0018 18a8.967 8.967 0 00-6 2.292m0-14.25v14.25" /> |
|
7e1aaf6…
|
ragelink
|
135 |
</svg> |
|
7e1aaf6…
|
ragelink
|
136 |
<span x-show="!collapsed" class="truncate">FossilRepo Docs</span> |
|
7e1aaf6…
|
ragelink
|
137 |
</span> |
|
7e1aaf6…
|
ragelink
|
138 |
<svg x-show="!collapsed" class="h-4 w-4 transition-transform" :class="docsOpen && 'rotate-90'" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
7e1aaf6…
|
ragelink
|
139 |
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /> |
|
7e1aaf6…
|
ragelink
|
140 |
</svg> |
|
7e1aaf6…
|
ragelink
|
141 |
</button> |
|
7e1aaf6…
|
ragelink
|
142 |
<div x-show="docsOpen && !collapsed" x-collapse class="ml-4 mt-1 space-y-0.5 border-l border-gray-700 pl-3"> |
|
7e1aaf6…
|
ragelink
|
143 |
{% for p in sidebar_product_docs %} |
|
7e1aaf6…
|
ragelink
|
144 |
<a href="{% url 'pages:detail' slug=p.slug %}" |
|
7e1aaf6…
|
ragelink
|
145 |
class="block rounded-md px-3 py-1.5 text-sm {% if p.slug in request.path %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %} truncate"> |
|
7e1aaf6…
|
ragelink
|
146 |
{{ p.name }} |
|
7e1aaf6…
|
ragelink
|
147 |
</a> |
|
7e1aaf6…
|
ragelink
|
148 |
{% endfor %} |
|
c588255…
|
ragelink
|
149 |
</div> |
|
c588255…
|
ragelink
|
150 |
</div> |
|
c588255…
|
ragelink
|
151 |
{% endif %} |
|
c588255…
|
ragelink
|
152 |
|
|
c588255…
|
ragelink
|
153 |
<!-- FossilSCM Guide --> |
|
4ce269c…
|
ragelink
|
154 |
<a href="{% url 'fossil:docs' slug='fossil-scm' %}" |
|
4ce269c…
|
ragelink
|
155 |
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 %}" |
|
c588255…
|
ragelink
|
156 |
:title="collapsed ? 'FossilSCM Guide' : ''"> |
|
4ce269c…
|
ragelink
|
157 |
<svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
4ce269c…
|
ragelink
|
158 |
<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" /> |
|
4ce269c…
|
ragelink
|
159 |
</svg> |
|
c588255…
|
ragelink
|
160 |
<span x-show="!collapsed" class="truncate">FossilSCM Guide</span> |
|
c588255…
|
ragelink
|
161 |
</a> |
|
c588255…
|
ragelink
|
162 |
|
|
c588255…
|
ragelink
|
163 |
<!-- Admin section (collapsible) --> |
|
c588255…
|
ragelink
|
164 |
{% if perms.organization.view_organization or user.is_staff %} |
|
c588255…
|
ragelink
|
165 |
<div x-data="{ adminOpen: window.location.pathname.includes('/settings/') || window.location.pathname.includes('/projects/groups/') }"> |
|
c588255…
|
ragelink
|
166 |
<button @click="collapsed ? (collapsed = false, adminOpen = true) : (adminOpen = !adminOpen)" |
|
c588255…
|
ragelink
|
167 |
class="flex items-center justify-between w-full rounded-md px-2 py-2 text-sm font-medium {% if '/settings/' in request.path or '/projects/groups/' in request.path %}text-white{% else %}text-gray-400 hover:bg-gray-800 hover:text-white{% endif %}" |
|
c588255…
|
ragelink
|
168 |
:title="collapsed ? 'Admin' : ''"> |
|
c588255…
|
ragelink
|
169 |
<span class="flex items-center gap-2"> |
|
c588255…
|
ragelink
|
170 |
<svg class="h-4 w-4 flex-shrink-0" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
c588255…
|
ragelink
|
171 |
<path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z" /> |
|
c588255…
|
ragelink
|
172 |
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z" /> |
|
c588255…
|
ragelink
|
173 |
</svg> |
|
c588255…
|
ragelink
|
174 |
<span x-show="!collapsed" class="truncate">Admin</span> |
|
c588255…
|
ragelink
|
175 |
</span> |
|
c588255…
|
ragelink
|
176 |
<svg x-show="!collapsed" class="h-4 w-4 transition-transform" :class="adminOpen && 'rotate-90'" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"> |
|
c588255…
|
ragelink
|
177 |
<path stroke-linecap="round" stroke-linejoin="round" d="M8.25 4.5l7.5 7.5-7.5 7.5" /> |
|
c588255…
|
ragelink
|
178 |
</svg> |
|
c588255…
|
ragelink
|
179 |
</button> |
|
c588255…
|
ragelink
|
180 |
<div x-show="adminOpen && !collapsed" x-collapse class="ml-4 mt-1 space-y-0.5 border-l border-gray-700 pl-2"> |
|
c588255…
|
ragelink
|
181 |
{% if perms.projects.view_projectgroup %} |
|
c588255…
|
ragelink
|
182 |
<a href="{% url 'projects:group_list' %}" |
|
c588255…
|
ragelink
|
183 |
class="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs {% if '/projects/groups/' in request.path %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %}"> |
|
c588255…
|
ragelink
|
184 |
Groups |
|
c588255…
|
ragelink
|
185 |
</a> |
|
c588255…
|
ragelink
|
186 |
{% endif %} |
|
c588255…
|
ragelink
|
187 |
{% if perms.organization.view_team %} |
|
c588255…
|
ragelink
|
188 |
<a href="{% url 'organization:team_list' %}" |
|
c588255…
|
ragelink
|
189 |
class="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs {% if '/settings/teams/' in request.path %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %}"> |
|
c588255…
|
ragelink
|
190 |
Teams |
|
c588255…
|
ragelink
|
191 |
</a> |
|
c588255…
|
ragelink
|
192 |
{% endif %} |
|
c588255…
|
ragelink
|
193 |
{% if perms.organization.view_organization %} |
|
c588255…
|
ragelink
|
194 |
<a href="{% url 'organization:role_list' %}" |
|
c588255…
|
ragelink
|
195 |
class="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs {% if '/settings/roles/' in request.path %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %}"> |
|
c588255…
|
ragelink
|
196 |
Roles |
|
c588255…
|
ragelink
|
197 |
</a> |
|
c588255…
|
ragelink
|
198 |
{% endif %} |
|
c588255…
|
ragelink
|
199 |
<a href="{% url 'organization:members' %}" |
|
c588255…
|
ragelink
|
200 |
class="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs {% if '/settings/members/' in request.path %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %}"> |
|
c588255…
|
ragelink
|
201 |
Members |
|
c588255…
|
ragelink
|
202 |
</a> |
|
c588255…
|
ragelink
|
203 |
{% if perms.organization.view_organization %} |
|
c588255…
|
ragelink
|
204 |
<a href="{% url 'organization:settings' %}" |
|
c588255…
|
ragelink
|
205 |
class="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs {% if request.path == '/settings/' %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %}"> |
|
c588255…
|
ragelink
|
206 |
Settings |
|
c588255…
|
ragelink
|
207 |
</a> |
|
c588255…
|
ragelink
|
208 |
{% endif %} |
|
c588255…
|
ragelink
|
209 |
{% if user.is_superuser or perms.organization.change_organization %} |
|
c588255…
|
ragelink
|
210 |
<a href="{% url 'organization:audit_log' %}" |
|
c588255…
|
ragelink
|
211 |
class="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs {% if '/settings/audit/' in request.path %}text-brand-light font-medium{% else %}text-gray-500 hover:text-gray-300{% endif %}"> |
|
c588255…
|
ragelink
|
212 |
Audit Log |
|
c588255…
|
ragelink
|
213 |
</a> |
|
c588255…
|
ragelink
|
214 |
{% endif %} |
|
c588255…
|
ragelink
|
215 |
{% if user.is_staff %} |
|
c588255…
|
ragelink
|
216 |
<a href="{% url 'admin:index' %}" |
|
c588255…
|
ragelink
|
217 |
class="flex items-center gap-1.5 rounded-md px-2 py-1 text-xs text-gray-500 hover:text-gray-300"> |
|
c588255…
|
ragelink
|
218 |
Super Admin |
|
c588255…
|
ragelink
|
219 |
</a> |
|
c588255…
|
ragelink
|
220 |
{% endif %} |
|
c588255…
|
ragelink
|
221 |
</div> |
|
c588255…
|
ragelink
|
222 |
</div> |
|
4ce269c…
|
ragelink
|
223 |
{% endif %} |
|
4ce269c…
|
ragelink
|
224 |
|
|
4ce269c…
|
ragelink
|
225 |
</nav> |
|
c588255…
|
ragelink
|
226 |
|
|
4ce269c…
|
ragelink
|
227 |
</aside> |