@@ -502,6 +509,8 @@ document.addEventListener('alpine:init', function() {
defaultView: localStorage.getItem('fd_default_view') || 'tree',
userInfo: {full_name: '{{ user.full_name or "" }}', login: '{{ user.login or "" }}', email: '{{ user.email or "" }}'},
userIsAdmin: {{ 'true' if user.get('is_admin') else 'false' }},
+ // Gitea
+ giteaLinked: false,
// Account form
accountForm: {login:'{{ user.login or "" }}', full_name:'{{ user.full_name or "" }}', email:'{{ user.email or "" }}', password:''},
accountSaving: false,
@@ -518,6 +527,7 @@ document.addEventListener('alpine:init', function() {
async init() {
await this.loadTags();
+ await this.loadGiteaStatus();
},
async loadTags() {
@@ -716,6 +726,21 @@ document.addEventListener('alpine:init', function() {
saveDefaultView() {
localStorage.setItem('fd_default_view', this.defaultView);
}
+ async loadGiteaStatus() {
+ try {
+ var r = await fetch('/api/gitea/status');
+ var d = await r.json();
+ this.giteaLinked = d.linked || false;
+ } catch(e) { this.giteaLinked = false; }
+ },
+
+ async disconnectGitea() {
+ if (!confirm('Disconnect Gitea? You can reconnect anytime.')) return;
+ try {
+ var r = await fetch('/api/gitea/disconnect', { method: 'DELETE', headers: {'X-CSRF-Token': this.getCsrfToken()} });
+ if (r.ok) { this.giteaLinked = false; }
+ } catch(e) {}
+ },
};
});
});
diff --git a/app/templates/workspaces.html b/app/templates/workspaces.html
index b486970..5c9a7f4 100644
--- a/app/templates/workspaces.html
+++ b/app/templates/workspaces.html
@@ -63,6 +63,12 @@
.btn-new:hover{background:var(--bg-tertiary);color:var(--text);}
.btn-sm{padding:4px 8px;font-size:11px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--text-dim);cursor:pointer;}
.btn-sm:hover{background:var(--bg-tertiary);color:var(--text);}
+/* Org tabs */
+.org-tab{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:6px;font-size:13px;color:var(--text-dim);background:transparent;border:1px solid var(--border);cursor:pointer;white-space:nowrap;transition:all 100ms;}
+.org-tab:hover{background:var(--bg-tertiary);color:var(--text);}
+.org-tab.active{background:var(--accent);color:#fff;border-color:var(--accent);}
+.org-tab-badge{font-size:10px;padding:0 5px;border-radius:8px;background:rgba(255,255,255,.15);}
+.search-input:focus{border-color:var(--accent);}
@@ -98,7 +104,9 @@
@@ -110,35 +118,57 @@
-
-
-
-
-
-
-
-
-
-
- /
-
-
-
- π
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+ /
+
+
+
+ π
+
+
+
+
+
+
+
+
+ No projects match your search.
+
+
+
+
+
No Gitea projects found.
@@ -171,6 +201,20 @@ function workspacesPage() {
giteaStatus: 'loading', // loading|ok|not_linked|error
giteaGroups: [],
giteaTotal: 0,
+ activeOrg: 'all',
+ giteaSearch: '',
+
+ get filteredGroups() {
+ var self = this;
+ var q = (this.giteaSearch || '').toLowerCase();
+ var groups = this.activeOrg === 'all' ? this.giteaGroups : this.giteaGroups.filter(function(g) { return g.org === self.activeOrg; });
+ if (!q) return groups;
+ return groups.map(function(g) {
+ return {org: g.org, avatar: g.avatar, projects: g.projects.filter(function(p) {
+ return p.name.toLowerCase().includes(q) || (p.description||'').toLowerCase().includes(q);
+ })};
+ }).filter(function(g) { return g.projects.length > 0; });
+ },
async init() {
await this.load();