gitoria
All repositories: gitoria
3.2 KB
// components/list.hl — THE REPO LIST of the main address (ticket #6, gitoria#16): every repository, newest// first, and "Create a repository" (slug = its address, unique in the whole system) for a named user.// Composed into components/index.hl (route `/`) when the request's host is the main address. Rendered on// the server with its rows; a new repo from any session reaches every open list (push `repoCreated`).import Tokens from './tokens.hl'import SshKeys from './sshkeys.hl'import { repoRows, createRepo } from '../repos.hl'import { infoOfSession, userOfSession } from '../users.hl'session = nullme = infoOfSession(session)canCreate = me != null && me.namedneedsLogin = me == nullrepos = repoRows()noRepos = repos.length == 0createError = ''createdText = ''createdHref = ''hasCreated = falseView {repoList {h1 { id = "heading" "Repositories" }if (needsLogin) { p { id = "loginhint" class = "muted" "Log in with ident (top right) to create a repository." } }if (canCreate) {form { id = "createform"on submit(e) {e.preventDefault()emit createIt(e)}h2 { "Create a repository" }label { "Address — its name is unique in the whole system and becomes NAME.gitoria.worldapi.org"input { id = "slug" name = "slug" required = "required" minlength = "2" maxlength = "40" autocomplete = "off" autocapitalize = "none" spellcheck = "false" }}label { "Description (optional)"input { id = "description" name = "description" maxlength = "200" autocomplete = "off" }}button { id = "createsave" type = "submit" "Create repository" }p { id = "createerror" class = "message" createError }}}if (hasCreated) { p { id = "created" class = "notice" createdText " " a { id = "createdlink" href = createdHref "Open it" } } }if (noRepos) { p { id = "empty" class = "empty" "No repository yet." } }Tokens { }SshKeys { }ol { id = "repos"for (r of repos) {li {a { class = "slug" href = r.address r.slug }if (r.described) { span { class = "about" r.description } }repoMeta { span { r.owner } time { r.created } }}}}}}on createIt(e) {let f = e.target.elementslet r = emit server gitoriaCreate(f.slug.value, f.description.value)if (r == null || r.error != null) {createError = r != null ? r.error : 'could not create the repository'return null}createError = ''f.slug.value = ''f.description.value = ''createdText = "Created '" + r.repo.slug + "': "createdHref = r.repo.addresshasCreated = true}// this session's tabs follow a login / name / logout (the shell's faces push them)on client gitoriaSignedIn(tag, info) {canCreate = info.namedneedsLogin = false}on client gitoriaSignedOut(tag) {canCreate = falseneedsLogin = true}// a new repo, from any session: the list follows liveon client repoCreated(row) {let next = [row]for (x of repos) { if (x.id != row.id) { next.push(x) } }repos = nextnoRepos = false}on server gitoriaCreate(slug, description, session) {let u = userOfSession(session)if (u == null) { return { error = 'log in with ident (top right) to create a repository' } }let r = createRepo(u.id, slug, description)if (r.error != null) { return { error = r.error } }emit client repoCreated(r.repo)return r}
Branches
- mainmain branch
Latest commits
- 09ce4f3fgitoria: mission 069 re-vendor hybriel 8efba065 stopped (big SSR pages grow + slow down); lambda audit clean; old vendor keptmre
- 3dc43108antcolony#40: mission references point to the moved missionsmre
- 8d9450fdantcolony#40: history (LOG.md), worker briefs (missions/) and reports moved here from antcolony, numbered per project; old numbers in antcolony docs/mission-map.mdmre
- 205d5fe4gitoria: Hybriel master ff51cf46; ssh keys/tokens no double rows (session sync); gates follow #20mre
- 9b27cb26gitoria#21: installable app (manifest, service worker, offline start page), own iconmre
- 68dcb603deploy.sh: back up live storage/.sessions/.env before every deploy (newest 5 kept)mre
- e2deed6dgitoria#20: "Add code" only on the Code page of an empty repository, no collapsiblemre
- 8bb97ffddeploy.sh: never send .git or .gitignore to Byrodinmre
- fd981932State of 2026-09-27; bin/ no longer tracked (Hybriel commit is in README)mre
- 4a2d7125initial commitmre