| 110 |
110 |
|
hx-swap="innerHTML"
|
| 111 |
111 |
|
hx-indicator="#tab-spinner"
|
| 112 |
112 |
|
onclick="setActiveTab(this)">Account</button>
|
| 113 |
|
- |
<button class="tab"
|
| 114 |
|
- |
role="tab"
|
| 115 |
|
- |
aria-selected="false"
|
| 116 |
|
- |
aria-controls="tab-content"
|
| 117 |
|
- |
id="tab-payments"
|
| 118 |
|
- |
hx-get="/dashboard/tabs/payments"
|
| 119 |
|
- |
hx-target="#tab-content"
|
| 120 |
|
- |
hx-swap="innerHTML"
|
| 121 |
|
- |
hx-indicator="#tab-spinner"
|
| 122 |
|
- |
onclick="setActiveTab(this)">Payments</button>
|
| 123 |
113 |
|
{% if let Some(su) = session_user %}{% if su.can_create_projects %}
|
| 124 |
114 |
|
<button class="tab"
|
| 125 |
115 |
|
role="tab"
|
| 131 |
121 |
|
hx-swap="innerHTML"
|
| 132 |
122 |
|
hx-indicator="#tab-spinner"
|
| 133 |
123 |
|
onclick="setActiveTab(this)">Projects</button>
|
| 134 |
|
- |
<button class="tab"
|
| 135 |
|
- |
role="tab"
|
| 136 |
|
- |
aria-selected="false"
|
| 137 |
|
- |
aria-controls="tab-content"
|
| 138 |
|
- |
id="tab-analytics"
|
| 139 |
|
- |
hx-get="/dashboard/tabs/analytics"
|
| 140 |
|
- |
hx-target="#tab-content"
|
| 141 |
|
- |
hx-swap="innerHTML"
|
| 142 |
|
- |
hx-indicator="#tab-spinner"
|
| 143 |
|
- |
onclick="setActiveTab(this)">Analytics</button>
|
| 144 |
|
- |
{% endif %}{% endif %}
|
| 145 |
|
- |
<button class="tab"
|
| 146 |
|
- |
role="tab"
|
| 147 |
|
- |
aria-selected="false"
|
| 148 |
|
- |
aria-controls="tab-content"
|
| 149 |
|
- |
id="tab-creator"
|
| 150 |
|
- |
hx-get="/dashboard/tabs/creator"
|
| 151 |
|
- |
hx-target="#tab-content"
|
| 152 |
|
- |
hx-swap="innerHTML"
|
| 153 |
|
- |
hx-indicator="#tab-spinner"
|
| 154 |
|
- |
onclick="setActiveTab(this)">Creator</button>
|
| 155 |
|
- |
{% if let Some(su) = session_user %}{% if su.can_create_projects && !projects.is_empty() %}
|
| 156 |
|
- |
<button class="tab"
|
| 157 |
|
- |
role="tab"
|
| 158 |
|
- |
aria-selected="false"
|
| 159 |
|
- |
aria-controls="tab-content"
|
| 160 |
|
- |
id="tab-synckit"
|
| 161 |
|
- |
hx-get="/dashboard/tabs/synckit"
|
| 162 |
|
- |
hx-target="#tab-content"
|
| 163 |
|
- |
hx-swap="innerHTML"
|
| 164 |
|
- |
hx-indicator="#tab-spinner"
|
| 165 |
|
- |
onclick="setActiveTab(this)">SyncKit</button>
|
| 166 |
|
- |
<button class="tab"
|
| 167 |
|
- |
role="tab"
|
| 168 |
|
- |
aria-selected="false"
|
| 169 |
|
- |
aria-controls="tab-content"
|
| 170 |
|
- |
id="tab-media"
|
| 171 |
|
- |
hx-get="/dashboard/tabs/media"
|
| 172 |
|
- |
hx-target="#tab-content"
|
| 173 |
|
- |
hx-swap="innerHTML"
|
| 174 |
|
- |
hx-indicator="#tab-spinner"
|
| 175 |
|
- |
onclick="setActiveTab(this)">Media</button>
|
| 176 |
124 |
|
{% endif %}{% endif %}
|
| 177 |
|
- |
{% if git_enabled %}
|
| 178 |
125 |
|
<button class="tab"
|
| 179 |
126 |
|
role="tab"
|
| 180 |
127 |
|
aria-selected="false"
|
| 181 |
128 |
|
aria-controls="tab-content"
|
| 182 |
|
- |
id="tab-ssh-keys"
|
| 183 |
|
- |
hx-get="/dashboard/tabs/ssh-keys"
|
| 184 |
|
- |
hx-target="#tab-content"
|
| 185 |
|
- |
hx-swap="innerHTML"
|
| 186 |
|
- |
hx-indicator="#tab-spinner"
|
| 187 |
|
- |
onclick="setActiveTab(this)">SSH Keys</button>
|
| 188 |
|
- |
{% endif %}
|
| 189 |
|
- |
{% if has_mt_memberships %}
|
| 190 |
|
- |
<button class="tab"
|
| 191 |
|
- |
role="tab"
|
| 192 |
|
- |
aria-selected="false"
|
| 193 |
|
- |
aria-controls="tab-content"
|
| 194 |
|
- |
id="tab-forums"
|
| 195 |
|
- |
hx-get="/dashboard/tabs/forums"
|
|
129 |
+ |
id="tab-payments"
|
|
130 |
+ |
hx-get="/dashboard/tabs/payments"
|
| 196 |
131 |
|
hx-target="#tab-content"
|
| 197 |
132 |
|
hx-swap="innerHTML"
|
| 198 |
133 |
|
hx-indicator="#tab-spinner"
|
| 199 |
|
- |
onclick="setActiveTab(this)">Forums</button>
|
| 200 |
|
- |
{% endif %}
|
|
134 |
+ |
onclick="setActiveTab(this)">Payments</button>
|
| 201 |
135 |
|
<button class="tab"
|
| 202 |
136 |
|
role="tab"
|
| 203 |
137 |
|
aria-selected="false"
|
| 208 |
142 |
|
hx-swap="innerHTML"
|
| 209 |
143 |
|
hx-indicator="#tab-spinner"
|
| 210 |
144 |
|
onclick="setActiveTab(this)">Support</button>
|
|
145 |
+ |
|
|
146 |
+ |
<div class="tab-overflow" style="position: relative; display: inline-block;">
|
|
147 |
+ |
<button class="tab" onclick="var m=this.nextElementSibling; m.style.display=m.style.display==='block'?'none':'block';" type="button">More</button>
|
|
148 |
+ |
<div class="tab-overflow-menu" style="display: none; position: absolute; top: 100%; left: 0; z-index: 10; background: var(--background); border: 1px solid var(--border); min-width: 160px; box-shadow: 0 2px 8px rgba(0,0,0,0.1);">
|
|
149 |
+ |
{% if let Some(su) = session_user %}{% if su.can_create_projects %}
|
|
150 |
+ |
<button class="tab" style="display: block; width: 100%; text-align: left; padding: 0.5rem 1rem;"
|
|
151 |
+ |
hx-get="/dashboard/tabs/analytics"
|
|
152 |
+ |
hx-target="#tab-content"
|
|
153 |
+ |
hx-swap="innerHTML"
|
|
154 |
+ |
hx-indicator="#tab-spinner"
|
|
155 |
+ |
onclick="setActiveTab(this); this.closest('.tab-overflow-menu').style.display='none';">Analytics</button>
|
|
156 |
+ |
{% endif %}{% endif %}
|
|
157 |
+ |
<button class="tab" style="display: block; width: 100%; text-align: left; padding: 0.5rem 1rem;"
|
|
158 |
+ |
hx-get="/dashboard/tabs/creator"
|
|
159 |
+ |
hx-target="#tab-content"
|
|
160 |
+ |
hx-swap="innerHTML"
|
|
161 |
+ |
hx-indicator="#tab-spinner"
|
|
162 |
+ |
onclick="setActiveTab(this); this.closest('.tab-overflow-menu').style.display='none';">Creator</button>
|
|
163 |
+ |
{% if let Some(su) = session_user %}{% if su.can_create_projects && !projects.is_empty() %}
|
|
164 |
+ |
<button class="tab" style="display: block; width: 100%; text-align: left; padding: 0.5rem 1rem;"
|
|
165 |
+ |
hx-get="/dashboard/tabs/synckit"
|
|
166 |
+ |
hx-target="#tab-content"
|
|
167 |
+ |
hx-swap="innerHTML"
|
|
168 |
+ |
hx-indicator="#tab-spinner"
|
|
169 |
+ |
onclick="setActiveTab(this); this.closest('.tab-overflow-menu').style.display='none';">SyncKit</button>
|
|
170 |
+ |
<button class="tab" style="display: block; width: 100%; text-align: left; padding: 0.5rem 1rem;"
|
|
171 |
+ |
hx-get="/dashboard/tabs/media"
|
|
172 |
+ |
hx-target="#tab-content"
|
|
173 |
+ |
hx-swap="innerHTML"
|
|
174 |
+ |
hx-indicator="#tab-spinner"
|
|
175 |
+ |
onclick="setActiveTab(this); this.closest('.tab-overflow-menu').style.display='none';">Media</button>
|
|
176 |
+ |
{% endif %}{% endif %}
|
|
177 |
+ |
{% if git_enabled %}
|
|
178 |
+ |
<button class="tab" style="display: block; width: 100%; text-align: left; padding: 0.5rem 1rem;"
|
|
179 |
+ |
hx-get="/dashboard/tabs/ssh-keys"
|
|
180 |
+ |
hx-target="#tab-content"
|
|
181 |
+ |
hx-swap="innerHTML"
|
|
182 |
+ |
hx-indicator="#tab-spinner"
|
|
183 |
+ |
onclick="setActiveTab(this); this.closest('.tab-overflow-menu').style.display='none';">SSH Keys</button>
|
|
184 |
+ |
{% endif %}
|
|
185 |
+ |
{% if has_mt_memberships %}
|
|
186 |
+ |
<button class="tab" style="display: block; width: 100%; text-align: left; padding: 0.5rem 1rem;"
|
|
187 |
+ |
hx-get="/dashboard/tabs/forums"
|
|
188 |
+ |
hx-target="#tab-content"
|
|
189 |
+ |
hx-swap="innerHTML"
|
|
190 |
+ |
hx-indicator="#tab-spinner"
|
|
191 |
+ |
onclick="setActiveTab(this); this.closest('.tab-overflow-menu').style.display='none';">Forums</button>
|
|
192 |
+ |
{% endif %}
|
|
193 |
+ |
</div>
|
|
194 |
+ |
</div>
|
| 211 |
195 |
|
<span id="tab-spinner" class="htmx-indicator" style="margin-left: 1rem;" aria-live="polite"> Loading...</span>
|
| 212 |
196 |
|
</div>
|
| 213 |
197 |
|
|
|
198 |
+ |
<script>
|
|
199 |
+ |
document.addEventListener('click', function(e) {
|
|
200 |
+ |
var menus = document.querySelectorAll('.tab-overflow-menu');
|
|
201 |
+ |
menus.forEach(function(m) {
|
|
202 |
+ |
if (!m.parentElement.contains(e.target)) m.style.display = 'none';
|
|
203 |
+ |
});
|
|
204 |
+ |
});
|
|
205 |
+ |
</script>
|
|
206 |
+ |
|
| 214 |
207 |
|
<!-- Tab Content Container - initially loaded with Details -->
|
| 215 |
208 |
|
<div id="tab-content" class="tab-content active"
|
| 216 |
209 |
|
role="tabpanel"
|