Monorepo for Tangled
0

Configure Feed

Select the types of activity you want to include in your feed.

appview: the great uppercasing

Passed down by generations of tormented minimalist developers, the great uppercasing is here.

Bow down to the great cavaliers of doom so that they can bestow their changes upon you.

With this pull request, we are finally free from our wicked casing system.

Let it be written. Let it be done. From this day forward, we speak in sentence case.

&+
appview/logo: keep logotype & alpha tag lowercase

Signed-off-by: eti <eti@eti.tf>

authored by

eti and committed by
oppiliappan
(May 8, 2026, 2:42 PM +0100) 3b090101 0f534173

+541 -544
+2 -2
appview/issues/issues.go
··· 419 419 420 420 body := r.FormValue("body") 421 421 if body == "" { 422 - rp.pages.Notice(w, "issue", "Body is required") 422 + rp.pages.Notice(w, "issue", "Body is required.") 423 423 return 424 424 } 425 425 ··· 1083 1083 1084 1084 tx, err := rp.db.BeginTx(r.Context(), nil) 1085 1085 if err != nil { 1086 - rp.pages.Notice(w, "issues", "Failed to create issue, try again later") 1086 + rp.pages.Notice(w, "issues", "Failed to create issue, try again later.") 1087 1087 return 1088 1088 } 1089 1089 rollback := func() {
+12 -12
appview/pages/funcmap.go
··· 487 487 "OrderedReactionKinds": models.OrderedReactionKinds, 488 488 // would be great to have ordered maps right about now 489 489 "UserSettingsTabs": []tab{ 490 - {"Name": "profile", "Icon": "user"}, 491 - {"Name": "keys", "Icon": "key"}, 492 - {"Name": "emails", "Icon": "mail"}, 493 - {"Name": "notifications", "Icon": "bell"}, 494 - {"Name": "knots", "Icon": "volleyball"}, 495 - {"Name": "spindles", "Icon": "spool"}, 496 - {"Name": "sites", "Icon": "globe"}, 490 + {"Name": "profile", "Label": "Profile", "Icon": "user"}, 491 + {"Name": "keys", "Label": "Keys", "Icon": "key"}, 492 + {"Name": "emails", "Label": "Emails", "Icon": "mail"}, 493 + {"Name": "notifications", "Label": "Notifications", "Icon": "bell"}, 494 + {"Name": "knots", "Label": "Knots", "Icon": "volleyball"}, 495 + {"Name": "spindles", "Label": "Spindles", "Icon": "spool"}, 496 + {"Name": "sites", "Label": "Sites", "Icon": "globe"}, 497 497 }, 498 498 "RepoSettingsTabs": []tab{ 499 - {"Name": "general", "Icon": "sliders-horizontal"}, 500 - {"Name": "access", "Icon": "users"}, 501 - {"Name": "pipelines", "Icon": "layers-2"}, 502 - {"Name": "hooks", "Icon": "webhook"}, 503 - {"Name": "sites", "Icon": "globe"}, 499 + {"Name": "general", "Label": "General", "Icon": "sliders-horizontal"}, 500 + {"Name": "access", "Label": "Access", "Icon": "users"}, 501 + {"Name": "pipelines", "Label": "Pipelines", "Icon": "layers-2"}, 502 + {"Name": "hooks", "Label": "Hooks", "Icon": "webhook"}, 503 + {"Name": "sites", "Label": "Sites", "Icon": "globe"}, 504 504 }, 505 505 "PdsUserDomain": p.pdsCfg.UserDomain, 506 506 }
+5 -5
appview/pages/pages.go
··· 645 645 646 646 func (p *ProfileCard) GetTabs() [][]any { 647 647 tabs := [][]any{ 648 - {"overview", "overview", "square-chart-gantt", nil}, 649 - {"repos", "repos", "book-marked", p.Stats.RepoCount}, 650 - {"starred", "starred", "star", p.Stats.StarredCount}, 651 - {"strings", "strings", "line-squiggle", p.Stats.StringCount}, 652 - {"vouches", "vouches", "shield", nil}, 648 + {"Overview", "overview", "square-chart-gantt", nil}, 649 + {"Repos", "repos", "book-marked", p.Stats.RepoCount}, 650 + {"Starred", "starred", "star", p.Stats.StarredCount}, 651 + {"Strings", "strings", "line-squiggle", p.Stats.StringCount}, 652 + {"Vouches", "vouches", "shield", nil}, 653 653 } 654 654 655 655 return tabs
+5 -5
appview/pages/repoinfo/repoinfo.go
··· 44 44 45 45 func (r RepoInfo) GetTabs() [][]string { 46 46 tabs := [][]string{ 47 - {"overview", "/", "square-chart-gantt"}, 48 - {"issues", "/issues", "circle-dot"}, 49 - {"pulls", "/pulls", "git-pull-request"}, 50 - {"pipelines", "/pipelines", "layers-2"}, 47 + {"overview", "/", "square-chart-gantt", "Overview"}, 48 + {"issues", "/issues", "circle-dot", "Issues"}, 49 + {"pulls", "/pulls", "git-pull-request", "Pulls"}, 50 + {"pipelines", "/pipelines", "layers-2", "Pipelines"}, 51 51 } 52 52 53 53 if r.Roles.SettingsAllowed() { 54 - tabs = append(tabs, []string{"settings", "/settings", "cog"}) 54 + tabs = append(tabs, []string{"settings", "/settings", "cog", "Settings"}) 55 55 } 56 56 57 57 return tabs
+1 -1
appview/pages/templates/errors/404.html
··· 19 19 <div class="flex flex-col sm:flex-row gap-3 justify-center items-center mt-6"> 20 20 <a href="javascript:history.back()" class="btn no-underline hover:no-underline gap-2"> 21 21 {{ i "arrow-left" "w-4 h-4" }} 22 - go back 22 + Go back 23 23 </a> 24 24 </div> 25 25 </div>
+2 -2
appview/pages/templates/errors/500.html
··· 19 19 <div class="flex flex-col sm:flex-row gap-3 justify-center items-center mt-6"> 20 20 <button onclick="location.reload()" class="btn-create gap-2"> 21 21 {{ i "refresh-cw" "w-4 h-4" }} 22 - try again 22 + Try again 23 23 </button> 24 24 <a href="/" class="btn no-underline hover:no-underline gap-2"> 25 25 {{ i "arrow-left" "w-4 h-4" }} 26 - back to home 26 + Back to home 27 27 </a> 28 28 </div> 29 29 </div>
+2 -2
appview/pages/templates/errors/503.html
··· 19 19 <div class="flex flex-col sm:flex-row gap-3 justify-center items-center mt-6"> 20 20 <button onclick="location.reload()" class="btn-create gap-2"> 21 21 {{ i "refresh-cw" "w-4 h-4" }} 22 - try again 22 + Try again 23 23 </button> 24 24 <a href="/" class="btn gap-2 no-underline hover:no-underline"> 25 25 {{ i "arrow-left" "w-4 h-4" }} 26 - back to timeline 26 + Back to timeline 27 27 </a> 28 28 </div> 29 29 </div>
+1 -1
appview/pages/templates/errors/knot404.html
··· 19 19 <div class="flex flex-col sm:flex-row gap-3 justify-center items-center mt-6"> 20 20 <a href="/" class="btn flex items-center gap-2 no-underline hover:no-underline"> 21 21 {{ i "arrow-left" "w-4 h-4" }} 22 - back to timeline 22 + Back to timeline 23 23 </a> 24 24 </div> 25 25 </div>
+2 -2
appview/pages/templates/fragments/pagination.html
··· 23 23 {{ end }} 24 24 > 25 25 {{ i "chevron-left" "w-4 h-4" }} 26 - prev 26 + Prev 27 27 </a> 28 28 29 29 {{ if gt $page.Offset 0 }} ··· 74 74 href="{{ $basePath }}?{{ $queryParams }}&offset={{ $next }}&limit={{ $page.Limit }}" 75 75 {{ end }} 76 76 > 77 - next 77 + Next 78 78 {{ i "chevron-right" "w-4 h-4" }} 79 79 </a> 80 80 </div>
+2 -2
appview/pages/templates/goodfirstissues/index.html
··· 141 141 href="/goodfirstissues?offset={{ $prev.Offset }}&limit={{ $prev.Limit }}" 142 142 > 143 143 {{ i "chevron-left" "w-4 h-4" }} 144 - previous 144 + Previous 145 145 </a> 146 146 {{ else }} 147 147 <div></div> ··· 154 154 hx-boost="true" 155 155 href="/goodfirstissues?offset={{ $next.Offset }}&limit={{ $next.Limit }}" 156 156 > 157 - next 157 + Next 158 158 {{ i "chevron-right" "w-4 h-4" }} 159 159 </a> 160 160 {{ end }}
+4 -4
appview/pages/templates/knots/dashboard.html
··· 30 30 {{ end }} 31 31 {{ else if .Registration.IsReadOnly }} 32 32 <span class="bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 {{$style}}"> 33 - {{ i "shield-alert" "w-4 h-4" }} read-only 33 + {{ i "shield-alert" "w-4 h-4" }} Read-only 34 34 </span> 35 35 {{ if $isOwner }} 36 36 {{ block "retryButton" .Registration }} {{ end }} ··· 101 101 hx-headers='{"shouldRedirect": "true"}' 102 102 > 103 103 {{ i "trash-2" "w-5 h-5" }} 104 - <span class="hidden md:inline">delete</span> 104 + <span class="hidden md:inline">Delete</span> 105 105 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 106 106 </button> 107 107 {{ end }} ··· 116 116 hx-headers='{"shouldRefresh": "true"}' 117 117 > 118 118 {{ i "rotate-ccw" "w-5 h-5" }} 119 - <span class="hidden md:inline">retry</span> 119 + <span class="hidden md:inline">Retry</span> 120 120 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 121 121 </button> 122 122 {{ end }} ··· 135 135 hx-confirm="Are you sure you want to remove {{ $memberHandle }} from this knot?" 136 136 > 137 137 {{ i "user-minus" "w-4 h-4" }} 138 - remove 138 + Remove 139 139 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 140 140 </button> 141 141 {{ end }}
+4 -4
appview/pages/templates/knots/fragments/addMemberModal.html
··· 6 6 popovertargetaction="toggle" 7 7 > 8 8 {{ i "user-plus" "w-5 h-5" }} 9 - <span class="hidden md:inline">add member</span> 9 + <span class="hidden md:inline">Add member</span> 10 10 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 11 11 </button> 12 12 ··· 28 28 class="flex flex-col gap-2" 29 29 > 30 30 <label for="member-did-{{ .Id }}" class="uppercase p-0"> 31 - ADD MEMBER 31 + Add member 32 32 </label> 33 33 <p class="text-sm text-gray-500 dark:text-gray-400">Members can create repositories and run workflows on this knot.</p> 34 34 <actor-typeahead> ··· 51 51 popovertargetaction="hide" 52 52 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 53 53 > 54 - {{ i "x" "size-4" }} cancel 54 + {{ i "x" "size-4" }} Cancel 55 55 </button> 56 56 <button type="submit" class="btn w-1/2 flex items-center"> 57 - <span class="inline-flex gap-2 items-center">{{ i "user-plus" "size-4" }} add</span> 57 + <span class="inline-flex gap-2 items-center">{{ i "user-plus" "size-4" }} Add</span> 58 58 <span id="spinner" class="group"> 59 59 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 60 60 </span>
+5 -5
appview/pages/templates/knots/fragments/knotListing.html
··· 32 32 {{ $style := "px-2 py-1 rounded flex items-center flex-shrink-0 gap-2 text-sm" }} 33 33 {{ if .IsRegistered }} 34 34 <span class="bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200 {{$style}}"> 35 - {{ i "shield-check" "w-4 h-4" }} verified 35 + {{ i "shield-check" "w-4 h-4" }} Verified 36 36 </span> 37 37 {{ template "knots/fragments/addMemberModal" . }} 38 38 {{ block "knotDeleteButton" . }} {{ end }} 39 39 {{ else if .IsNeedsUpgrade }} 40 40 <span class="bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 {{$style}}"> 41 - {{ i "shield-alert" "w-4 h-4" }} needs upgrade 41 + {{ i "shield-alert" "w-4 h-4" }} Needs upgrade 42 42 </span> 43 43 {{ block "knotRetryButton" . }} {{ end }} 44 44 {{ block "knotDeleteButton" . }} {{ end }} 45 45 {{ else }} 46 46 <span class="bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200 {{$style}}"> 47 - {{ i "shield-off" "w-4 h-4" }} unverified 47 + {{ i "shield-off" "w-4 h-4" }} Unverified 48 48 </span> 49 49 {{ block "knotRetryButton" . }} {{ end }} 50 50 {{ block "knotDeleteButton" . }} {{ end }} ··· 62 62 hx-confirm="Are you sure you want to delete the knot '{{ .Domain }}'?" 63 63 > 64 64 {{ i "trash-2" "w-5 h-5" }} 65 - <span class="hidden md:inline">delete</span> 65 + <span class="hidden md:inline">Delete</span> 66 66 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 67 67 </button> 68 68 {{ end }} ··· 77 77 hx-target="#knot-{{.Id}}" 78 78 > 79 79 {{ i "rotate-ccw" "w-5 h-5" }} 80 - <span class="hidden md:inline">retry</span> 80 + <span class="hidden md:inline">Retry</span> 81 81 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 82 82 </button> 83 83 {{ end }}
+5 -5
appview/pages/templates/knots/index.html
··· 48 48 49 49 {{ define "list" }} 50 50 <section class="rounded w-full flex flex-col gap-2"> 51 - <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">your knots</h2> 51 + <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">Your knots</h2> 52 52 <div class="flex flex-col rounded border border-gray-200 dark:border-gray-700 w-full"> 53 53 {{ range $registration := .Registrations }} 54 54 {{ template "knots/fragments/knotListing" . }} 55 55 {{ else }} 56 56 <div class="flex items-center justify-center p-2 border-b border-gray-200 dark:border-gray-700 text-gray-500"> 57 - no knots registered yet 57 + No knots registered yet 58 58 </div> 59 59 {{ end }} 60 60 </div> ··· 64 64 65 65 {{ define "register" }} 66 66 <section class="rounded w-full lg:w-fit flex flex-col gap-2"> 67 - <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">register a knot</h2> 67 + <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">Register a knot</h2> 68 68 <p class="mb-2 dark:text-gray-300">Enter the hostname of your knot to get started.</p> 69 69 <form 70 70 hx-post="/settings/knots/register" ··· 88 88 > 89 89 <span class="inline-flex items-center gap-2"> 90 90 {{ i "plus" "w-4 h-4" }} 91 - register 91 + Register 92 92 </span> 93 93 <span class="pl-2 hidden group-[.htmx-request]:inline"> 94 94 {{ i "loader-circle" "w-4 h-4 animate-spin" }} ··· 107 107 class="btn flex items-center gap-2" 108 108 href="https://docs.tangled.org/knot-self-hosting-guide.html#knot-self-hosting-guide"> 109 109 {{ i "book" "size-4" }} 110 - docs 110 + Docs 111 111 </a> 112 112 <div 113 113 id="add-email-modal"
+28 -28
appview/pages/templates/layouts/fragments/footer.html
··· 18 18 <!-- Center section with max-width --> 19 19 <div class="grid grid-cols-4 gap-2"> 20 20 <div class="flex flex-col gap-1"> 21 - <div class="{{ $headerStyle }}">legal</div> 22 - <a href="/terms" class="{{ $linkStyle }}">{{ i "file-text" $iconStyle }} terms of service</a> 23 - <a href="/privacy" class="{{ $linkStyle }}">{{ i "shield" $iconStyle }} privacy policy</a> 21 + <div class="{{ $headerStyle }}">Legal</div> 22 + <a href="/terms" class="{{ $linkStyle }}">{{ i "file-text" $iconStyle }} Terms of service</a> 23 + <a href="/privacy" class="{{ $linkStyle }}">{{ i "shield" $iconStyle }} Privacy policy</a> 24 24 </div> 25 25 26 26 <div class="flex flex-col gap-1"> 27 - <div class="{{ $headerStyle }}">resources</div> 28 - <a href="https://blog.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "book-open" $iconStyle }} blog</a> 29 - <a href="https://docs.tangled.org" class="{{ $linkStyle }}">{{ i "book" $iconStyle }} docs</a> 30 - <a href="https://tangled.org/@tangled.org/core" class="{{ $linkStyle }}">{{ i "code" $iconStyle }} source</a> 31 - <a href="https://tangled.org/brand" class="{{ $linkStyle }}">{{ i "paintbrush" $iconStyle }} brand</a> 27 + <div class="{{ $headerStyle }}">Resources</div> 28 + <a href="https://blog.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "book-open" $iconStyle }} Blog</a> 29 + <a href="https://docs.tangled.org" class="{{ $linkStyle }}">{{ i "book" $iconStyle }} Docs</a> 30 + <a href="https://tangled.org/@tangled.org/core" class="{{ $linkStyle }}">{{ i "code" $iconStyle }} Source</a> 31 + <a href="https://tangled.org/brand" class="{{ $linkStyle }}">{{ i "paintbrush" $iconStyle }} Brand</a> 32 32 </div> 33 33 34 34 <div class="flex flex-col gap-1"> 35 - <div class="{{ $headerStyle }}">social</div> 36 - <a href="https://chat.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "message-circle" $iconStyle }} discord</a> 37 - <a href="https://web.libera.chat/#tangled" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "hash" $iconStyle }} irc</a> 38 - <a href="https://bsky.app/profile/tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/bluesky" $iconStyle }} bluesky</a> 39 - <a href="https://x.com/tangled_org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/x" $iconStyle }} twitter (x)</a> 35 + <div class="{{ $headerStyle }}">Social</div> 36 + <a href="https://chat.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "message-circle" $iconStyle }} Discord</a> 37 + <a href="https://web.libera.chat/#tangled" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "hash" $iconStyle }} IRC</a> 38 + <a href="https://bsky.app/profile/tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/bluesky" $iconStyle }} Bluesky</a> 39 + <a href="https://x.com/tangled_org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/x" $iconStyle }} Twitter (X)</a> 40 40 </div> 41 41 42 42 <div class="flex flex-col gap-1"> 43 - <div class="{{ $headerStyle }}">contact</div> 43 + <div class="{{ $headerStyle }}">Contact</div> 44 44 <a href="mailto:team@tangled.org" class="{{ $linkStyle }}">{{ i "mail" "w-4 h-4 flex-shrink-0" }} team@tangled.org</a> 45 45 <a href="mailto:security@tangled.org" class="{{ $linkStyle }}">{{ i "shield-check" "w-4 h-4 flex-shrink-0" }} security@tangled.org</a> 46 46 </div> ··· 66 66 67 67 <div class="grid grid-cols-1 sm:grid-cols-1 md:grid-cols-4 sm:gap-6 md:gap-2 gap-6"> 68 68 <div class="flex flex-col gap-1"> 69 - <div class="{{ $headerStyle }}">legal</div> 70 - <a href="/terms" class="{{ $linkStyle }}">{{ i "file-text" $iconStyle }} terms of service</a> 71 - <a href="/privacy" class="{{ $linkStyle }}">{{ i "shield" $iconStyle }} privacy policy</a> 69 + <div class="{{ $headerStyle }}">Legal</div> 70 + <a href="/terms" class="{{ $linkStyle }}">{{ i "file-text" $iconStyle }} Terms of service</a> 71 + <a href="/privacy" class="{{ $linkStyle }}">{{ i "shield" $iconStyle }} Privacy policy</a> 72 72 </div> 73 73 74 74 <div class="flex flex-col gap-1"> 75 - <div class="{{ $headerStyle }}">resources</div> 76 - <a href="https://blog.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "book-open" $iconStyle }} blog</a> 77 - <a href="https://docs.tangled.org" class="{{ $linkStyle }}">{{ i "book" $iconStyle }} docs</a> 78 - <a href="https://tangled.org/@tangled.org/core" class="{{ $linkStyle }}">{{ i "code" $iconStyle }} source</a> 79 - <a href="https://tangled.org/brand" class="{{ $linkStyle }}">{{ i "paintbrush" $iconStyle }} brand</a> 75 + <div class="{{ $headerStyle }}">Resources</div> 76 + <a href="https://blog.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "book-open" $iconStyle }} Blog</a> 77 + <a href="https://docs.tangled.org" class="{{ $linkStyle }}">{{ i "book" $iconStyle }} Docs</a> 78 + <a href="https://tangled.org/@tangled.org/core" class="{{ $linkStyle }}">{{ i "code" $iconStyle }} Source</a> 79 + <a href="https://tangled.org/brand" class="{{ $linkStyle }}">{{ i "paintbrush" $iconStyle }} Brand</a> 80 80 </div> 81 81 82 82 <div class="flex flex-col gap-1"> 83 - <div class="{{ $headerStyle }}">social</div> 84 - <a href="https://chat.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "message-circle" $iconStyle }} discord</a> 85 - <a href="https://web.libera.chat/#tangled" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "hash" $iconStyle }} irc</a> 86 - <a href="https://bsky.app/profile/tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/bluesky" $iconStyle }} bluesky</a> 87 - <a href="https://x.com/tangled_org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/x" $iconStyle }} twitter (x)</a> 83 + <div class="{{ $headerStyle }}">Social</div> 84 + <a href="https://chat.tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "message-circle" $iconStyle }} Discord</a> 85 + <a href="https://web.libera.chat/#tangled" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ i "hash" $iconStyle }} IRC</a> 86 + <a href="https://bsky.app/profile/tangled.org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/bluesky" $iconStyle }} Bluesky</a> 87 + <a href="https://x.com/tangled_org" class="{{ $linkStyle }}" target="_blank" rel="noopener noreferrer">{{ template "user/fragments/x" $iconStyle }} Twitter (X)</a> 88 88 </div> 89 89 90 90 <div class="flex flex-col gap-1"> 91 - <div class="{{ $headerStyle }}">contact</div> 91 + <div class="{{ $headerStyle }}">Contact</div> 92 92 <a href="mailto:team@tangled.org" class="{{ $linkStyle }}">{{ i "mail" "w-4 h-4 flex-shrink-0" }} team@tangled.org</a> 93 93 <a href="mailto:security@tangled.org" class="{{ $linkStyle }}">{{ i "shield-check" "w-4 h-4 flex-shrink-0" }} security@tangled.org</a> 94 94 </div>
+9 -9
appview/pages/templates/layouts/fragments/footerMinimal.html
··· 7 7 </a> 8 8 <span>&copy; 2026 Tangled Labs Oy.</span> 9 9 </div> 10 - <a href="https://blog.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">blog</a> 11 - <a href="https://docs.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">docs</a> 12 - <a href="https://tangled.org/tangled.org/core" hx-boost="true" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">source</a> 13 - <a href="https://tangled.org/brand" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">brand</a> 14 - <a href="https://chat.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">discord</a> 15 - <a href="https://bsky.app/profile/tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">bluesky</a> 16 - <a href="https://x.com/tangled_org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">twitter (x)</a> 17 - <a href="/terms" hx-boost="true" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">terms</a> 18 - <a href="/privacy" hx-boost="true" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">privacy</a> 10 + <a href="https://blog.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Blog</a> 11 + <a href="https://docs.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Docs</a> 12 + <a href="https://tangled.org/tangled.org/core" hx-boost="true" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Source</a> 13 + <a href="https://tangled.org/brand" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Brand</a> 14 + <a href="https://chat.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">Discord</a> 15 + <a href="https://bsky.app/profile/tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">Bluesky</a> 16 + <a href="https://x.com/tangled_org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">Twitter (x)</a> 17 + <a href="/terms" hx-boost="true" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Terms</a> 18 + <a href="/privacy" hx-boost="true" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Privacy</a> 19 19 </div> 20 20 </footer> 21 21 {{ end }}
+12 -12
appview/pages/templates/layouts/fragments/topbar.html
··· 15 15 <div class="hidden md:block md:order-2 w-px h-6 bg-gray-200 dark:bg-gray-700 self-center"></div> 16 16 <div class="flex items-center order-4 md:order-5">{{ block "profileDropdown" . }} {{ end }}</div> 17 17 {{ else }} 18 - <a href="/login">login</a> 18 + <a href="/login">Login</a> 19 19 <span class="text-gray-500 dark:text-gray-400">or</span> 20 20 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 21 - join now {{ i "arrow-right" "size-4" }} 21 + Join now {{ i "arrow-right" "size-4" }} 22 22 </a> 23 23 {{ end }} 24 24 </div> ··· 29 29 {{ define "newButton" }} 30 30 <details class="relative inline-block text-left nav-dropdown"> 31 31 <summary class="btn py-0 cursor-pointer list-none flex items-center gap-2"> 32 - {{ i "plus" "w-4 h-4" }} <span class="hidden md:inline">new</span> 32 + {{ i "plus" "w-4 h-4" }} <span class="hidden md:inline">New</span> 33 33 </summary> 34 34 <div class="absolute flex flex-col right-0 mt-3 p-4 rounded w-48 bg-white dark:bg-gray-800 dark:text-white border border-gray-200 dark:border-gray-700"> 35 35 <a href="/repo/new" class="flex items-center gap-2"> 36 36 {{ i "book-plus" "w-4 h-4" }} 37 - new repository 37 + New repository 38 38 </a> 39 39 <a href="/strings/new" class="flex items-center gap-2"> 40 40 {{ i "line-squiggle" "w-4 h-4" }} 41 - new string 41 + New string 42 42 </a> 43 43 </div> 44 44 </details> ··· 143 143 144 144 {{ $others := .Accounts | otherAccounts .Did }} 145 145 {{ if $others }} 146 - <div class="text-sm text-gray-500 dark:text-gray-400 px-3 py-1 pt-2">switch account</div> 146 + <div class="text-sm text-gray-500 dark:text-gray-400 px-3 py-1 pt-2">Switch account</div> 147 147 {{ range $others }} 148 148 <button 149 149 type="button" ··· 164 164 </div> 165 165 166 166 <div class="text-left flex-1 min-w-0 block truncate"> 167 - add account 167 + Add account 168 168 </div> 169 169 </a> 170 170 171 171 <div class="border-t border-gray-200 dark:border-gray-700"> 172 172 <a href="/{{ $handle }}" class="{{$linkStyle}}"> 173 173 {{ i "user" "size-4" }} 174 - profile 174 + Profile 175 175 </a> 176 176 <a href="/{{ $handle }}?tab=repos" class="{{$linkStyle}}"> 177 177 {{ i "book-marked" "size-4" }} 178 - repositories 178 + Repositories 179 179 </a> 180 180 <a href="/{{ $handle }}?tab=strings" class="{{$linkStyle}}"> 181 181 {{ i "line-squiggle" "size-4" }} 182 - strings 182 + Strings 183 183 </a> 184 184 <a href="/settings" class="{{$linkStyle}}"> 185 185 {{ i "cog" "size-4" }} 186 - settings 186 + Settings 187 187 </a> 188 188 <a href="#" 189 189 hx-post="/logout" 190 190 hx-swap="none" 191 191 class="{{$linkStyle}} text-red-400 hover:text-red-400 hover:bg-red-100 dark:hover:bg-red-700/20 pb-2"> 192 192 {{ i "log-out" "size-4" }} 193 - logout 193 + Logout 194 194 </a> 195 195 </div> 196 196 </div>
+2 -2
appview/pages/templates/layouts/profilebase.html
··· 81 81 hx-boost="true"> 82 82 <div 83 83 class="px-4 py-1 mr-1 text-black dark:text-white min-w-[80px] text-center relative rounded-t whitespace-nowrap 84 - {{ if eq $.Active $key }} 84 + {{ if eq $.Active $value }} 85 85 {{ $activeTabStyles }} 86 86 {{ else }} 87 87 group-hover:bg-gray-100/25 group-hover:dark:bg-gray-700/25 ··· 105 105 {{ $now := now }} 106 106 <div> 107 107 <p class="px-2 pb-4 flex gap-2 text-sm font-bold dark:text-white"> 108 - PUNCHCARD 108 + Punchcard 109 109 <span class="font-mono font-normal text-sm text-gray-500 dark:text-gray-400 "> 110 110 {{ .Total | int64 | commaFmt }} commits 111 111 </span>
+10 -9
appview/pages/templates/layouts/repobase.html
··· 25 25 {{ $tabs := .RepoInfo.GetTabs }} 26 26 {{ $tabmeta := .RepoInfo.TabMetadata }} 27 27 {{ range $item := $tabs }} 28 - {{ $key := index $item 0 }} 29 - {{ $value := index $item 1 }} 28 + {{ $name := index $item 0 }} 29 + {{ $url := index $item 1 }} 30 30 {{ $icon := index $item 2 }} 31 - {{ $meta := index $tabmeta $key }} 31 + {{ $label := index $item 3 }} 32 + {{ $meta := index $tabmeta $name }} 32 33 <a 33 - href="/{{ $.RepoInfo.FullName }}{{ $value }}" 34 + href="/{{ $.RepoInfo.FullName }}{{ $url }}" 34 35 class="relative -mr-px group no-underline hover:no-underline" 35 36 hx-boost="true" 36 37 > 37 38 <div 38 39 class="px-4 py-1 mr-1 text-black dark:text-white min-w-[80px] text-center relative rounded-t whitespace-nowrap 39 - {{ if eq $.Active $key }} 40 + {{ if eq $.Active $name }} 40 41 {{ $activeTabStyles }} 41 42 {{ else }} 42 43 group-hover:bg-gray-100/25 group-hover:dark:bg-gray-700/25 ··· 45 46 > 46 47 <span class="flex items-center justify-center"> 47 48 {{ i $icon "w-4 h-4 mr-2" }} 48 - {{ $key }} 49 + {{ $label }} 49 50 {{ if $meta }} 50 51 <span class="bg-gray-200 dark:bg-gray-700 rounded py-1/2 px-1 text-sm ml-1">{{ $meta }}</span> 51 52 {{ end }} ··· 77 78 {{ $sourceOwner := resolve .RepoInfo.Source.Did }} 78 79 <div class="flex items-center gap-1 text-sm text-gray-600 dark:text-gray-300 mb-2 flex-wrap"> 79 80 {{ i "git-fork" "w-3 h-3 shrink-0" }} 80 - <span>forked from</span> 81 + <span>Forked from</span> 81 82 <a class="underline" href="/{{ $sourceOwner }}/{{ .RepoInfo.Source.Name }}"> 82 83 {{ $sourceOwner }}/{{ .RepoInfo.Source.Name }} 83 84 </a> ··· 90 91 {{ if .RepoInfo.Description }} 91 92 {{ .RepoInfo.Description | description }} 92 93 {{ else }} 93 - <span class="italic">this repo has no description</span> 94 + <span class="italic">This repo has no description</span> 94 95 {{ end }} 95 96 96 97 {{ with .RepoInfo.Website }} ··· 123 124 href="/{{ .RepoInfo.FullName }}/fork" 124 125 > 125 126 {{ i "git-fork" "w-4 h-4" }} 126 - fork 127 + Fork 127 128 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 128 129 </a> 129 130 {{ template "repo/fragments/feedDropdown" . }}
+1 -1
appview/pages/templates/legal/privacy.html
··· 3 3 {{ define "content" }} 4 4 <div class="grid grid-cols-10"> 5 5 <header class="col-span-full md:col-span-10 px-6 py-2 mb-4"> 6 - <h1 class="text-2xl font-bold dark:text-white mb-1">Privacy Policy</h1> 6 + <h1 class="text-2xl font-bold dark:text-white mb-1">Privacy policy</h1> 7 7 <p class="text-gray-600 dark:text-gray-400 mb-1"> 8 8 Learn how we collect, use, and protect your personal information. 9 9 </p>
+1 -1
appview/pages/templates/legal/terms.html
··· 3 3 {{ define "content" }} 4 4 <div class="grid grid-cols-10"> 5 5 <header class="col-span-full md:col-span-10 px-6 py-2 mb-4"> 6 - <h1 class="text-2xl font-bold dark:text-white mb-1">Terms of Service</h1> 6 + <h1 class="text-2xl font-bold dark:text-white mb-1">Terms of service</h1> 7 7 <p class="text-gray-600 dark:text-gray-400 mb-1"> 8 8 A few things you should know. 9 9 </p>
+10 -10
appview/pages/templates/notifications/fragments/item.html
··· 35 35 {{ if eq .Type "repo_starred" }} 36 36 starred <span class="text-black dark:text-white">{{ resolve .Repo.Did }}/{{ .Repo.Name }}</span> 37 37 {{ else if eq .Type "issue_created" }} 38 - opened an issue 38 + Opened an issue 39 39 {{ else if eq .Type "issue_commented" }} 40 - commented on an issue 40 + Commented on an issue 41 41 {{ else if eq .Type "issue_closed" }} 42 - closed an issue 42 + Closed an issue 43 43 {{ else if eq .Type "issue_reopen" }} 44 - reopened an issue 44 + Reopened an issue 45 45 {{ else if eq .Type "pull_created" }} 46 - created a pull request 46 + Created a pull request 47 47 {{ else if eq .Type "pull_commented" }} 48 48 commented on a pull request 49 49 {{ else if eq .Type "pull_merged" }} 50 - merged a pull request 50 + Merged a pull request 51 51 {{ else if eq .Type "pull_closed" }} 52 - closed a pull request 52 + Closed a pull request 53 53 {{ else if eq .Type "pull_reopen" }} 54 - reopened a pull request 54 + Reopened a pull request 55 55 {{ else if eq .Type "followed" }} 56 - followed you 56 + Followed you 57 57 {{ else if eq .Type "user_mentioned" }} 58 - mentioned you 58 + Mentioned you 59 59 {{ else }} 60 60 {{ end }} 61 61 {{ end }}
+3 -3
appview/pages/templates/notifications/list.html
··· 6 6 <p class="text-xl font-bold dark:text-white">Notifications</p> 7 7 <a href="/settings/notifications" class="flex items-center gap-2"> 8 8 {{ i "settings" "w-4 h-4" }} 9 - preferences 9 + Preferences 10 10 </a> 11 11 </div> 12 12 </div> ··· 43 43 href = "/notifications?offset={{ $prev.Offset }}&limit={{ $prev.Limit }}" 44 44 > 45 45 {{ i "chevron-left" "w-4 h-4" }} 46 - previous 46 + Previous 47 47 </a> 48 48 {{ else }} 49 49 <div></div> ··· 57 57 hx-boost="true" 58 58 href = "/notifications?offset={{ $next.Offset }}&limit={{ $next.Limit }}" 59 59 > 60 - next 60 + Next 61 61 {{ i "chevron-right" "w-4 h-4" }} 62 62 </a> 63 63 {{ end }}
+4 -4
appview/pages/templates/repo/blob.html
··· 31 31 {{ end }} 32 32 </div> 33 33 <div id="file-info" class="text-gray-500 dark:text-gray-400 text-xs md:text-sm flex flex-wrap items-center gap-1 md:gap-0"> 34 - <span>at <a href="/{{ .RepoInfo.FullName }}/tree/{{ pathEscape .Ref }}">{{ .Ref }}</a></span> 34 + <span>At <a href="/{{ .RepoInfo.FullName }}/tree/{{ pathEscape .Ref }}">{{ .Ref }}</a></span> 35 35 36 36 {{ if .BlobView.ShowingText }} 37 37 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> ··· 45 45 46 46 {{ if .BlobView.HasRawView }} 47 47 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 48 - <a href="/{{ .RepoInfo.FullName }}/raw/{{ pathEscape .Ref }}/{{ .Path }}">view raw</a> 48 + <a href="/{{ .RepoInfo.FullName }}/raw/{{ pathEscape .Ref }}/{{ .Path }}">View raw</a> 49 49 {{ end }} 50 50 51 51 {{ if .BlobView.ShowToggle }} 52 52 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 53 53 <a href="/{{ .RepoInfo.FullName }}/blob/{{ pathEscape .Ref }}/{{ .Path }}?code={{ .BlobView.ShowingRendered }}" hx-boost="true"> 54 - view {{ if .BlobView.ShowingRendered }}code{{ else }}rendered{{ end }} 54 + View {{ if .BlobView.ShowingRendered }}code{{ else }}rendered{{ end }} 55 55 </a> 56 56 {{ end }} 57 57 ··· 60 60 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 61 61 <label class="flex lowercase font-normal px-1 py-0 gap-1 text-xs md:text-sm"> 62 62 <input id="toggle-wrap-content-checkbox" type="checkbox" name="wrap"/> 63 - wrap content 63 + Wrap content 64 64 </label> 65 65 </div> 66 66 {{ end }}
+1 -1
appview/pages/templates/repo/branches.html
··· 1 1 {{ define "title" }} 2 - branches &middot; {{ .RepoInfo.FullName }} 2 + Branches &middot; {{ .RepoInfo.FullName }} 3 3 {{ end }} 4 4 5 5 {{ define "extrameta" }}
+5 -6
appview/pages/templates/repo/commit.html
··· 49 49 <div class="bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200 px-2 py-1 rounded cursor-pointer"> 50 50 <div class="flex items-center gap-2"> 51 51 {{ i "shield-check" "w-4 h-4" }} 52 - verified 52 + Verified 53 53 </div> 54 54 </div> 55 55 <div class="absolute z-[9999] hidden group-hover:block bg-white dark:bg-gray-900 text-sm text-black dark:text-white rounded-md shadow-md p-4 w-80 top-full mt-2"> 56 - <div class="mb-1">This commit was signed with the committer's <span class="text-green-600 font-semibold">known signature</span>.</div> 56 + <div class="mb-1">This commit was signed with the committer's <span class="text-green-600 font-semibold">Known signature</span>.</div> 57 57 <div class="flex items-center gap-2 my-2"> 58 58 {{ i "user" "w-4 h-4" }} 59 59 {{ $committerDid := index $.EmailToDid $commit.Committer.Email }} 60 60 {{ template "user/fragments/picHandleLink" $committerDid }} 61 61 </div> 62 62 <div class="my-1 pt-2 text-xs border-t border-gray-200 dark:border-gray-700"> 63 - <div class="text-gray-600 dark:text-gray-300">SSH Key Fingerprint:</div> 63 + <div class="text-gray-600 dark:text-gray-300">SSH key fingerprint:</div> 64 64 <div class="break-all">{{ .VerifiedCommit.Fingerprint $commit.This }}</div> 65 65 </div> 66 66 </div> ··· 85 85 {{ end }} 86 86 87 87 {{ if $showCommitter }} 88 - authored by {{ template "attributedUser" (list $commit.Author.Email $commit.Author.Name $.EmailToDid) }} 88 + Authored by {{ template "attributedUser" (list $commit.Author.Email $commit.Author.Name $.EmailToDid) }} 89 89 {{ range $commit.CoAuthors }} 90 90 {{ template "attributedUser" (list .Email .Name $.EmailToDid) }} 91 91 {{ end }} 92 - and committed by {{ template "attributedUser" (list $commit.Committer.Email $commit.Committer.Name $.EmailToDid) }} 92 + <span>and committed by</span> {{ template "attributedUser" (list $commit.Committer.Email $commit.Committer.Name $.EmailToDid) }} 93 93 {{ else }} 94 94 {{ template "attributedUser" (list $commit.Author.Email $commit.Author.Name $.EmailToDid )}} 95 95 {{ end }} ··· 132 132 {{ define "contentAfter" }} 133 133 {{ template "repo/fragments/diff" (list .Diff .DiffOpts) }} 134 134 {{end}} 135 -
+1 -1
appview/pages/templates/repo/compare/compare.html
··· 1 1 {{ define "title" }} 2 - comparing {{ .Base }} and {{ .Head }} on {{ .RepoInfo.FullName }} 2 + Comparing {{ .Base }} and {{ .Head }} on {{ .RepoInfo.FullName }} 3 3 {{ end }} 4 4 5 5 {{ define "repoContent" }}
+1 -1
appview/pages/templates/repo/compare/new.html
··· 1 1 {{ define "title" }} 2 - compare refs on {{ .RepoInfo.FullName }} 2 + Compare refs on {{ .RepoInfo.FullName }} 3 3 {{ end }} 4 4 5 5 {{ define "repoContent" }}
+1 -1
appview/pages/templates/repo/fork.html
··· 40 40 <div class="space-y-2"> 41 41 <button type="submit" class="btn-create flex items-center gap-2"> 42 42 {{ i "git-fork" "w-4 h-4" }} 43 - fork repo 43 + Fork repo 44 44 <span id="spinner" class="group"> 45 45 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 46 46 </span>
+2 -2
appview/pages/templates/repo/fragments/artifactList.html
··· 4 4 {{ $isPushAllowed := $root.RepoInfo.Roles.IsPushAllowed }} 5 5 {{ $artifacts := index $root.ArtifactMap $tag.Tag.Hash }} 6 6 7 - <h2 class="my-4 text-sm text-left text-gray-700 dark:text-gray-300 uppercase font-bold">artifacts</h2> 7 + <h2 class="my-4 text-sm text-left text-gray-700 dark:text-gray-300 uppercase font-bold">Artifacts</h2> 8 8 <div class="flex flex-col rounded border border-gray-200 dark:border-gray-700"> 9 9 {{ range $artifact := $artifacts }} 10 10 {{ $args := dict "LoggedInUser" $root.LoggedInUser "RepoInfo" $root.RepoInfo "Artifact" $artifact }} ··· 62 62 title="Upload artifact"> 63 63 {{ i "upload" "size-4 inline group-[.htmx-request]:hidden" }} 64 64 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 65 - <span class="hidden md:inline">upload</span> 65 + <span class="hidden md:inline">Upload</span> 66 66 </button> 67 67 </div> 68 68 </form>
+1 -1
appview/pages/templates/repo/fragments/backlinks.html
··· 37 37 </div> 38 38 {{ if not (eq $.RepoInfo.FullName $repoUrl) }} 39 39 <div> 40 - <span>on <a href="/{{ $repoUrl }}">{{ $repoUrl }}</a></span> 40 + <span>On <a href="/{{ $repoUrl }}">{{ $repoUrl }}</a></span> 41 41 </div> 42 42 {{ end }} 43 43 </div>
+1 -2
appview/pages/templates/repo/fragments/cloneDropdown.html
··· 9 9 popovertargetaction="toggle" 10 10 class="btn-create cursor-pointer list-none flex items-center gap-2 px-4"> 11 11 {{ i "download" "w-4 h-4" }} 12 - <span class="hidden md:inline">code</span> 12 + <span class="hidden md:inline">Code</span> 13 13 </button> 14 14 <div 15 15 popover ··· 118 118 </div> 119 119 </div> 120 120 {{ end }} 121 -
+1 -1
appview/pages/templates/repo/fragments/compareAllowPull.html
··· 18 18 class="btn flex items-center gap-2 no-underline hover:no-underline" 19 19 > 20 20 {{ i "git-pull-request-create" "w-4 h-4" }} 21 - create pull 21 + Create pull 22 22 <span id="create-pull-spinner" class="group"> 23 23 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 24 24 </span>
+4 -4
appview/pages/templates/repo/fragments/compareForm.html
··· 7 7 8 8 <form id="compare-form" class="flex items-center gap-2 py-4"> 9 9 <div> 10 - <span class="hidden md:inline">base:</span> 10 + <span class="hidden md:inline">Base:</span> 11 11 {{ block "dropdown" (list $ "base" $.Base) }} {{ end }} 12 12 </div> 13 13 <span class="flex-shrink-0"> 14 14 {{ i "arrow-left" "w-4 h-4" }} 15 15 </span> 16 16 <div> 17 - <span class="hidden md:inline">compare:</span> 17 + <span class="hidden md:inline">Compare:</span> 18 18 {{ block "dropdown" (list $ "head" $.Head) }} {{ end }} 19 19 </div> 20 20 <button ··· 27 27 const head = document.getElementById('head-select').value; 28 28 window.location.href = `/{{$.RepoInfo.FullName}}/compare/${encodeURIComponent(base)}...${encodeURIComponent(head)}`; 29 29 "> 30 - go 30 + Go 31 31 </button> 32 32 </form> 33 33 </div> ··· 66 66 {{ .Reference.Name }} 67 67 </option> 68 68 {{ else }} 69 - <option class="py-1" disabled>no tags found</option> 69 + <option class="py-1" disabled>No tags found</option> 70 70 {{ end }} 71 71 </optgroup> 72 72 </select>
+5 -5
appview/pages/templates/repo/fragments/diff.html
··· 64 64 <div class="flex items-center gap-2 before:content-['|'] before:text-gray-300 dark:before:text-gray-600 before:mr-2"> 65 65 <span class="text-xs text-gray-600 dark:text-gray-400 uppercase tracking-wide">Diff</span> 66 66 <span class="px-2 py-0.5 bg-white dark:bg-gray-700 rounded font-mono text-xs border border-gray-300 dark:border-gray-600"> 67 - <span class="hidden md:inline">round </span>#{{ $root.ActiveRound }} 67 + <span class="hidden md:inline">Round </span>#{{ $root.ActiveRound }} 68 68 </span> 69 69 </div> 70 70 {{ end }} ··· 195 195 /> 196 196 <span class="peer-checked:hidden">{{ i "circle" "size-4" }}</span> 197 197 <span class="hidden peer-checked:inline text-green-600 dark:text-green-400">{{ i "circle-check" "size-4" }}</span> 198 - <span class="hidden md:inline">reviewed</span> 198 + <span class="hidden md:inline">Reviewed</span> 199 199 </label> 200 200 </div> 201 201 </summary> ··· 229 229 230 230 {{ define "collapseToggle" }} 231 231 <label 232 - title="Expand/Collapse diffs" 232 + title="Expand/collapse diffs" 233 233 for="collapseToggle" 234 234 class="btn font-normal normal-case p-2" 235 235 > 236 236 <input type="checkbox" id="collapseToggle" class="peer/collapse hidden" checked/> 237 237 <span class="peer-checked/collapse:hidden inline-flex items-center gap-2"> 238 238 {{ i "unfold-vertical" "w-4 h-4" }} 239 - <span class="hidden md:inline">expand all</span> 239 + <span class="hidden md:inline">Expand all</span> 240 240 </span> 241 241 <span class="peer-checked/collapse:inline-flex hidden flex items-center gap-2"> 242 242 {{ i "fold-vertical" "w-4 h-4" }} 243 - <span class="hidden md:inline">collapse all</span> 243 + <span class="hidden md:inline">Collapse all</span> 244 244 </span> 245 245 </label> 246 246 <script>
+2 -2
appview/pages/templates/repo/fragments/diffOpts.html
··· 30 30 class="group flex items-center justify-center gap-2 px-3 py-1 text-sm whitespace-nowrap rounded hover:no-underline {{ if eq $active "unified" }} {{ $activeTab }} {{ else }} {{ $inactiveTab }} {{ end }}"> 31 31 {{ i "square-split-vertical" "size-4 inline group-[.htmx-request]:hidden" }} 32 32 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 33 - unified 33 + Unified 34 34 </button> 35 35 <button 36 36 {{ if $usePost }} ··· 48 48 class="group flex items-center justify-center gap-2 px-3 py-1 text-sm whitespace-nowrap rounded hover:no-underline {{ if eq $active "split" }} {{ $activeTab }} {{ else }} {{ $inactiveTab }} {{ end }}"> 49 49 {{ i "square-split-horizontal" "size-4 inline group-[.htmx-request]:hidden" }} 50 50 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 51 - split 51 + Split 52 52 </button> 53 53 </div> 54 54 {{ end }}
+5 -5
appview/pages/templates/repo/fragments/editLabelPanel.html
··· 44 44 {{ else }} 45 45 <p class="text-gray-500 dark:text-gray-400 text-sm py-1"> 46 46 No labels defined yet. You can choose default labels or define custom 47 - labels in <a class="underline" href="/{{ $.RepoInfo.FullName }}/settings">settings</a>. 47 + labels in <a class="underline" href="/{{ $.RepoInfo.FullName }}/settings">Settings</a>. 48 48 </p> 49 49 {{ end }} 50 50 </div> ··· 148 148 })()" 149 149 class="text-xs text-gray-500 dark:text-gray-400 hover:underline self-end inline-flex items-center gap-1"> 150 150 {{ i "user-round-plus" "size-3.5" }} 151 - assign to me 151 + Assign to me 152 152 </button> 153 153 {{ end }} 154 154 ··· 160 160 {{ template "multipleInputField" (dict "def" $def "value" "" "key" $def.AtUri.String "prefix" $prefix) }} 161 161 </div> 162 162 <button type="button" onClick="this.insertAdjacentHTML('beforebegin', document.getElementById('tpl-{{ $def.Id }}{{ $groupSuffix }}').innerHTML)" class="w-full btn flex items-center gap-2"> 163 - {{ i "plus" "size-4" }} add 163 + {{ i "plus" "size-4" }} Add 164 164 </button> 165 165 {{ end }} 166 166 ··· 254 254 hx-swap="outerHTML" 255 255 hx-target="#edit-label-panel" 256 256 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 group"> 257 - {{ i "x" "size-4" }} cancel 257 + {{ i "x" "size-4" }} Cancel 258 258 </button> 259 259 260 260 <button 261 261 id="save-btn" 262 262 type="submit" 263 263 class="btn w-1/2 flex items-center"> 264 - <span class="inline-flex gap-2 items-center">{{ i "check" "size-4" }} save</span> 264 + <span class="inline-flex gap-2 items-center">{{ i "check" "size-4" }} Save</span> 265 265 <span id="spinner" class="group"> 266 266 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 267 267 </span>
-1
appview/pages/templates/repo/fragments/externalLinkPanel.html
··· 45 45 } 46 46 </script> 47 47 {{ end }} 48 -
+3 -3
appview/pages/templates/repo/fragments/feedDropdown.html
··· 4 4 popovertargetaction="toggle" 5 5 class="btn text-sm cursor-pointer list-none flex items-center gap-2"> 6 6 {{ i "rss" "size-4" }} 7 - <span class="hidden md:inline">atom</span> 7 + <span class="hidden md:inline">Atom</span> 8 8 </button> 9 9 10 10 <div ··· 15 15 w-96 p-4 rounded drop-shadow overflow-visible"> 16 16 17 17 <h3 class="text-sm font-semibold text-gray-900 dark:text-white mb-3"> 18 - Configure Feed 18 + Configure feed 19 19 </h3> 20 20 21 21 <div class="space-y-2 mb-4"> ··· 36 36 class="feed-checkbox" 37 37 data-type="pulls" 38 38 checked> 39 - <span class="text-sm">Pull Requests</span> 39 + <span class="text-sm">Pull requests</span> 40 40 </label> 41 41 42 42 <label class="flex items-center gap-2 cursor-pointer">
+1 -1
appview/pages/templates/repo/fragments/singleTag.html
··· 58 58 {{ end }} 59 59 {{ template "repo/fragments/artifactList" (list $root .) }} 60 60 {{ else }} 61 - <p class="italic text-gray-500 dark:text-gray-400">no message</p> 61 + <p class="italic text-gray-500 dark:text-gray-400">No message</p> 62 62 {{ end }} 63 63 </div> 64 64 </div>
+5 -5
appview/pages/templates/repo/index.html
··· 96 96 {{ .Reference.Name }} 97 97 </option> 98 98 {{ else }} 99 - <option class="py-1" disabled>no tags found</option> 99 + <option class="py-1" disabled>No tags found</option> 100 100 {{ end }} 101 101 </optgroup> 102 102 </select> ··· 166 166 <div id="commit-log" class="md:col-span-1 px-2 pb-4"> 167 167 <div class="flex justify-between items-center"> 168 168 <a href="/{{ .RepoInfo.FullName }}/commits/{{ .Ref | urlquery }}" class="flex items-center gap-2 pb-2 cursor-pointer font-bold hover:text-gray-600 dark:hover:text-gray-300 hover:no-underline"> 169 - {{ i "logs" "w-4 h-4" }} commits 169 + {{ i "logs" "w-4 h-4" }} Commits 170 170 <span class="bg-gray-100 dark:bg-gray-700 font-normal rounded py-1/2 px-1 text-sm">{{ .TotalCommits }}</span> 171 171 </a> 172 172 </div> ··· 286 286 {{ if gt (len .BranchesTrunc) 0 }} 287 287 <div id="branches" class="md:col-span-1 px-2 py-4 border-t border-gray-200 dark:border-gray-700"> 288 288 <a href="/{{ .RepoInfo.FullName }}/branches" class="flex items-center gap-2 pb-2 cursor-pointer font-bold hover:text-gray-600 dark:hover:text-gray-300 hover:no-underline"> 289 - {{ i "git-branch" "w-4 h-4" }} branches 289 + {{ i "git-branch" "w-4 h-4" }} Branches 290 290 <span class="bg-gray-100 dark:bg-gray-700 font-normal rounded py-1/2 px-1 text-sm">{{ len .Branches }}</span> 291 291 </a> 292 292 <div class="flex flex-col gap-1"> ··· 310 310 <a href="/{{ $.RepoInfo.FullName }}/compare/{{ $.Ref | urlquery }}...{{ .Reference.Name | urlquery }}" 311 311 class="text-xs flex gap-2 items-center shrink-0 ml-2" 312 312 title="Compare branches or tags"> 313 - {{ i "git-compare" "w-3 h-3" }} compare 313 + {{ i "git-compare" "w-3 h-3" }} Compare 314 314 </a> 315 315 {{ end }} 316 316 </div> ··· 325 325 <div id="tags" class="md:col-span-1 px-2 py-4 border-t border-gray-200 dark:border-gray-700"> 326 326 <div class="flex justify-between items-center"> 327 327 <a href="/{{ .RepoInfo.FullName }}/tags" class="flex items-center gap-2 pb-2 cursor-pointer font-bold hover:text-gray-600 dark:hover:text-gray-300 hover:no-underline"> 328 - {{ i "tags" "w-4 h-4" }} tags 328 + {{ i "tags" "w-4 h-4" }} Tags 329 329 <span class="bg-gray-100 dark:bg-gray-700 font-normal rounded py-1/2 px-1 text-sm">{{ len .Tags }}</span> 330 330 </a> 331 331 </div>
+2 -2
appview/pages/templates/repo/issues/fragments/editIssueComment.html
··· 27 27 hx-target="#comment-body-{{ .Comment.Id }}" 28 28 hx-swap="outerHTML"> 29 29 {{ i "check" "size-4" }} 30 - save 30 + Save 31 31 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 32 32 </button> 33 33 {{ end }} ··· 39 39 hx-target="#comment-body-{{ .Comment.Id }}" 40 40 hx-swap="outerHTML"> 41 41 {{ i "x" "size-4" }} 42 - cancel 42 + Cancel 43 43 </button> 44 44 {{ end }}
+1 -1
appview/pages/templates/repo/issues/fragments/issueCommentHeader.html
··· 27 27 {{ if .Comment.Deleted }} 28 28 {{ template "repo/fragments/shortTimeAgo" .Comment.Deleted }} 29 29 {{ else if .Comment.Edited }} 30 - edited {{ template "repo/fragments/shortTimeAgo" .Comment.Edited }} 30 + Edited {{ template "repo/fragments/shortTimeAgo" .Comment.Edited }} 31 31 {{ else }} 32 32 {{ template "repo/fragments/shortTimeAgo" .Comment.Created }} 33 33 {{ end }}
+5 -5
appview/pages/templates/repo/issues/fragments/newComment.html
··· 33 33 > 34 34 {{ i "message-square-plus" "w-4 h-4 inline group-[.htmx-request]/form:hidden" }} 35 35 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]/form:inline" }} 36 - comment 36 + Comment 37 37 </button> 38 38 39 39 {{ $isIssueAuthor := and .LoggedInUser (eq .LoggedInUser.Did .Issue.Did) }} ··· 48 48 > 49 49 {{ i "ban" "w-4 h-4 inline group-[.htmx-request]/close:hidden" }} 50 50 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]/close:inline" }} 51 - <span id="close-button-text">close</span> 51 + <span id="close-button-text">Close</span> 52 52 </button> 53 53 <div 54 54 id="close-with-comment" ··· 91 91 > 92 92 {{ i "refresh-ccw-dot" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 93 93 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 94 - reopen 94 + Reopen 95 95 </button> 96 96 {{ end }} 97 97 ··· 130 130 {{ else }} 131 131 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded drop-shadow-sm p-6 relative flex gap-2 items-center"> 132 132 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 133 - sign up 133 + Sign up 134 134 </a> 135 135 <span class="text-gray-500 dark:text-gray-400">or</span> 136 - <a href="/login" class="underline">login</a> 136 + <a href="/login" class="underline">Login</a> 137 137 to add to the discussion 138 138 </div> 139 139 {{ end }}
+3 -3
appview/pages/templates/repo/issues/fragments/putIssue.html
··· 11 11 class="group"> 12 12 <div class="flex flex-col gap-2"> 13 13 <div> 14 - <label for="title">title</label> 14 + <label for="title">Title</label> 15 15 <input type="text" name="title" id="title" class="w-full" value="{{ if .Issue }}{{ .Issue.Title }}{{ end }}" /> 16 16 </div> 17 17 <div> 18 - <label for="body">body</label> 18 + <label for="body">Body</label> 19 19 <textarea 20 20 name="body" 21 21 id="body" ··· 37 37 {{ end }} 38 38 > 39 39 {{ i "x" "w-4 h-4" }} 40 - cancel 40 + Cancel 41 41 </a> 42 42 <button type="submit" class="btn-create flex items-center gap-2"> 43 43 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }}
+2 -2
appview/pages/templates/repo/issues/fragments/replyComment.html
··· 42 42 hx-target="#reply-form-{{ .Comment.Id }}" 43 43 hx-swap="outerHTML"> 44 44 {{ i "x" "size-4" }} 45 - cancel 45 + Cancel 46 46 </button> 47 47 {{ end }} 48 48 ··· 53 53 class="btn-create flex items-center gap-2 no-underline hover:no-underline"> 54 54 {{ i "reply" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 55 55 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 56 - reply 56 + Reply 57 57 </button> 58 58 {{ end }}
+2 -2
appview/pages/templates/repo/issues/issue.html
··· 67 67 </span> 68 68 69 69 <span class="text-gray-500 dark:text-gray-400 text-sm flex flex-wrap items-center gap-1"> 70 - opened by 70 + Opened by 71 71 {{ template "user/fragments/picLink" (list .Issue.Did "size-6" (index .VouchRelationships (did .Issue.Did))) }} 72 72 <a href="/{{ resolve .Issue.Did }}">{{ resolve .Issue.Did }}</a> 73 73 <span class="select-none before:content-['\00B7']"></span> 74 74 {{ if .Issue.Edited }} 75 - edited {{ template "repo/fragments/time" .Issue.Edited }} 75 + Edited {{ template "repo/fragments/time" .Issue.Edited }} 76 76 {{ else }} 77 77 {{ template "repo/fragments/time" .Issue.Created }} 78 78 {{ end }}
+2 -2
appview/pages/templates/repo/issues/issues.html
··· 33 33 type="text" 34 34 name="q" 35 35 value="{{ .FilterQuery }}" 36 - placeholder="search issues..." 36 + placeholder="Search issues..." 37 37 > 38 38 <a 39 39 {{ if $active }}href="?q=state:{{ $active }}"{{ else }}href="?"{{ end }} ··· 57 57 class="col-start-3 btn-create text-sm flex items-center justify-center gap-2 no-underline hover:no-underline hover:text-white" 58 58 > 59 59 {{ i "circle-plus" "w-4 h-4" }} 60 - <span>new</span> 60 + <span>New</span> 61 61 </a> 62 62 </div> 63 63 <div class="error" id="issues"></div>
+2 -2
appview/pages/templates/repo/log.html
··· 10 10 {{ define "repoContent" }} 11 11 <section id="commit-table" class="overflow-x-auto"> 12 12 <h2 class="font-bold text-sm mb-4 uppercase dark:text-white"> 13 - commits 13 + Commits 14 14 </h2> 15 15 16 16 <!-- desktop view (hidden on small screens) --> ··· 203 203 {{ $commits_len := len .Commits }} 204 204 <div class="flex justify-end mt-4 gap-2"> 205 205 {{ if gt .Page 1 }}<a class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700" hx-boost="true" onclick="window.location.href = window.location.pathname + '?page={{ sub .Page 1 }}'">{{ i "chevron-left" "w-4 h-4" }} previous</a>{{ else }}<div></div>{{ end }} 206 - {{ if eq $commits_len 60 }}<a class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700" hx-boost="true" onclick="window.location.href = window.location.pathname + '?page={{ add .Page 1 }}'">next {{ i "chevron-right" "w-4 h-4" }}</a>{{ end }} 206 + {{ if eq $commits_len 60 }}<a class="btn flex items-center gap-2 no-underline hover:no-underline dark:text-white dark:hover:bg-gray-700" hx-boost="true" onclick="window.location.href = window.location.pathname + '?page={{ add .Page 1 }}'">Next {{ i "chevron-right" "w-4 h-4" }}</a>{{ end }} 207 207 </div> 208 208 {{ end }}
+3 -3
appview/pages/templates/repo/new.html
··· 27 27 <div class="mt-8 flex justify-end"> 28 28 <button type="submit" class="btn-create flex items-center gap-2"> 29 29 {{ i "book-plus" "w-4 h-4" }} 30 - create repo 30 + Create repo 31 31 <span id="spinner" class="group"> 32 32 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 33 33 </span> ··· 161 161 <label for="domain-{{ . }}" class="dark:text-white lowercase">{{ . }}</label> 162 162 </div> 163 163 {{ else }} 164 - <p class="dark:text-white">no knots available.</p> 164 + <p class="dark:text-white">No knots available.</p> 165 165 {{ end }} 166 166 </div> 167 167 <p class="text-sm text-gray-500 dark:text-gray-400 mt-1"> 168 168 A knot hosts repository data and handles Git operations. 169 - You can also <a href="/settings/knots" class="underline">register your own knot</a>. 169 + You can also <a href="/settings/knots" class="underline">Register your own knot</a>. 170 170 </p> 171 171 </div> 172 172 {{ end }}
+5 -5
appview/pages/templates/repo/pipelines/pipelines.html
··· 12 12 {{ $all := 13 13 (dict 14 14 "Key" "all" 15 - "Value" "all" 15 + "Value" "All" 16 16 "Icon" "package" 17 17 "Meta" "") }} 18 18 {{ $push := 19 19 (dict 20 20 "Key" "push" 21 - "Value" "push" 21 + "Value" "Push" 22 22 "Icon" "git-commit-horizontal" 23 23 "Meta" "") }} 24 24 {{ $pr := 25 25 (dict 26 26 "Key" "pull_request" 27 - "Value" "pull request" 27 + "Value" "Pull request" 28 28 "Icon" "git-pull-request" 29 29 "Meta" "") }} 30 30 {{ $values := list $all $push $pr }} ··· 66 66 <span class="mt-0.5 text-xs bg-gray-200 dark:bg-gray-700 rounded-full size-6 flex items-center justify-center font-semibold shrink-0">1</span> 67 67 <p class="text-sm text-gray-700 dark:text-gray-300"> 68 68 Choose a spindle in your 69 - <a href="/{{ .RepoInfo.FullName }}/settings?tab=pipelines" class="underline hover:no-underline">repository settings</a> 69 + <a href="/{{ .RepoInfo.FullName }}/settings?tab=pipelines" class="underline hover:no-underline">Repository settings</a> 70 70 </p> 71 71 </div> 72 72 <div class="flex items-start gap-3"> 73 73 <span class="mt-0.5 text-xs bg-gray-200 dark:bg-gray-700 rounded-full size-6 flex items-center justify-center font-semibold shrink-0">2</span> 74 74 <p class="text-sm text-gray-700 dark:text-gray-300"> 75 75 Configure your CI/CD 76 - <a href="https://docs.tangled.org/spindles.html#pipelines" class="underline hover:no-underline" target="_blank" rel="noopener">pipeline</a> 76 + <a href="https://docs.tangled.org/spindles.html#pipelines" class="underline hover:no-underline" target="_blank" rel="noopener">Pipeline</a> 77 77 </p> 78 78 </div> 79 79 <div class="flex items-start gap-3">
+6 -6
appview/pages/templates/repo/pulls/fragments/pullActions.html
··· 30 30 class="btn-flat p-2 flex items-center gap-2 no-underline hover:no-underline group"> 31 31 {{ i "message-square-plus" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 32 32 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 33 - comment 33 + Comment 34 34 </button> 35 35 {{ if .BranchDeleteStatus }} 36 36 <button ··· 40 40 class="btn-flat p-2 flex items-center gap-2 no-underline hover:no-underline group text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 41 41 {{ i "git-branch" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 42 42 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 43 - delete branch 43 + Delete branch 44 44 </button> 45 45 {{ end }} 46 46 {{ if and $isPushAllowed $isOpen $isLastRound }} ··· 55 55 class="btn-flat p-2 flex items-center gap-2 group" {{ $disabled }}> 56 56 {{ i "git-merge" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 57 57 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 58 - merge{{if $stackCount}} {{$stackCount}}{{end}} 58 + Merge{{if $stackCount}} {{$stackCount}}{{end}} 59 59 </button> 60 60 {{ end }} 61 61 ··· 84 84 > 85 85 {{ i "rotate-ccw" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 86 86 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 87 - resubmit 87 + Resubmit 88 88 </button> 89 89 {{ end }} 90 90 ··· 95 95 class="btn-flat p-2 flex items-center gap-2 group"> 96 96 {{ i "ban" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 97 97 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 98 - close 98 + Close 99 99 </button> 100 100 {{ end }} 101 101 ··· 106 106 class="btn-flat p-2 flex items-center gap-2 group"> 107 107 {{ i "refresh-ccw-dot" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 108 108 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 109 - reopen 109 + Reopen 110 110 </button> 111 111 {{ end }} 112 112 </div>
+3 -3
appview/pages/templates/repo/pulls/fragments/pullComposeHost.html
··· 25 25 <div class="flex-shrink-0 relative z-10"> 26 26 {{ template "pullComposeSectionNumber" 1 }} 27 27 </div> 28 - <h3 class="uppercase text-sm tracking-wide font-bold my-0 dark:text-white">source</h3> 28 + <h3 class="uppercase text-sm tracking-wide font-bold my-0 dark:text-white">Source</h3> 29 29 </div> 30 30 <div class="ml-10 flex flex-col gap-3"> 31 31 {{ template "repo/pulls/fragments/pullStepSource" . }} ··· 42 42 <div class="flex-shrink-0 relative z-10"> 43 43 {{ template "pullComposeSectionNumber" 2 }} 44 44 </div> 45 - <h3 class="uppercase text-sm tracking-wide font-bold my-0 dark:text-white">review</h3> 45 + <h3 class="uppercase text-sm tracking-wide font-bold my-0 dark:text-white">Review</h3> 46 46 </div> 47 47 <div class="ml-10 flex flex-col gap-3"> 48 48 {{ template "repo/pulls/fragments/pullStepReview" . }} ··· 56 56 <div class="flex-shrink-0 relative z-10"> 57 57 {{ template "pullComposeSectionNumber" 3 }} 58 58 </div> 59 - <h3 class="uppercase text-sm tracking-wide font-bold my-0 dark:text-white">details</h3> 59 + <h3 class="uppercase text-sm tracking-wide font-bold my-0 dark:text-white">Details</h3> 60 60 </div> 61 61 <div class="ml-10 flex flex-col gap-3"> 62 62 {{ template "repo/pulls/fragments/pullStepDetails" . }}
+3 -3
appview/pages/templates/repo/pulls/fragments/pullHeader.html
··· 10 10 <div class="flex items-center gap-2"> 11 11 {{ template "repo/pulls/fragments/pullState" .Pull.State }} 12 12 <span class="text-gray-500 dark:text-gray-400 text-sm flex flex-wrap items-center gap-1"> 13 - opened by 13 + Opened by 14 14 {{ template "user/fragments/picLink" (list .Pull.OwnerDid "size-6" (index .VouchRelationships (did .Pull.OwnerDid))) }} 15 15 <a href="/{{ resolve .Pull.OwnerDid }}">{{ resolve .Pull.OwnerDid }}</a> 16 16 <span class="select-none before:content-['\00B7']"></span> ··· 18 18 19 19 <span class="select-none before:content-['\00B7']"></span> 20 20 <span> 21 - targeting 21 + Targeting 22 22 <span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center"> 23 23 <a href="/{{ .RepoInfo.FullName }}/tree/{{ .Pull.TargetBranch }}" class="no-underline hover:underline">{{ .Pull.TargetBranch }}</a> 24 24 </span> 25 25 </span> 26 26 {{ if not .Pull.IsPatchBased }} 27 - from 27 + From 28 28 <span class="text-xs rounded bg-gray-100 dark:bg-gray-700 text-black dark:text-white font-mono px-2 mx-1/2 inline-flex items-center"> 29 29 {{ if not .Pull.IsForkBased }} 30 30 {{ $repoPath := .RepoInfo.FullName }}
+2 -3
appview/pages/templates/repo/pulls/fragments/pullNewComment.html
··· 40 40 hx-target="#actions-{{.RoundNumber}}" 41 41 > 42 42 {{ i "x" "w-4 h-4" }} 43 - <span>cancel</span> 43 + <span>Cancel</span> 44 44 </button> 45 45 {{ end }} 46 46 ··· 51 51 class="btn-create flex items-center gap-2"> 52 52 {{ i "reply" "w-4 h-4 inline group-[.htmx-request]:hidden" }} 53 53 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 54 - reply 54 + Reply 55 55 </button> 56 56 {{ end }} 57 -
+3 -3
appview/pages/templates/repo/pulls/fragments/pullResubmit.html
··· 5 5 6 6 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-50"> 7 7 {{ i "pencil" "w-4 h-4" }} 8 - <span class="font-medium">resubmit your patch</span> 8 + <span class="font-medium">Resubmit your patch</span> 9 9 </div> 10 10 11 11 <div class="mt-2 text-sm text-gray-700 dark:text-gray-200"> ··· 37 37 {{ end }} 38 38 > 39 39 {{ i "rotate-ccw" "w-4 h-4" }} 40 - <span>resubmit</span> 40 + <span>Resubmit</span> 41 41 <span id="resubmit-spinner" class="group"> 42 42 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 43 43 </span> ··· 51 51 hx-indicator="#cancel-resubmit-spinner" 52 52 > 53 53 {{ i "x" "w-4 h-4" }} 54 - <span>cancel</span> 54 + <span>Cancel</span> 55 55 <span id="cancel-resubmit-spinner" class="group"> 56 56 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 57 57 </span>
+1 -1
appview/pages/templates/repo/pulls/fragments/pullStack.html
··· 8 8 <span class="hidden group-open:flex"> 9 9 {{ i "chevrons-down-up" "w-4 h-4" }} 10 10 </span> 11 - STACK 11 + Stack 12 12 <span class="bg-gray-200 dark:bg-gray-700 font-normal rounded py-1/2 px-1 text-sm">{{ len .Stack }}</span> 13 13 </span> 14 14 </summary>
+1 -1
appview/pages/templates/repo/pulls/fragments/pullStepDetails.html
··· 24 24 {{ $root := .Root }} 25 25 {{ $previewUrl := .PreviewUrl }} 26 26 <div class="flex flex-col gap-1"> 27 - <label for="title" class="text-xs uppercase tracking-wide text-gray-800 dark:text-gray-200">title</label> 27 + <label for="title" class="text-xs uppercase tracking-wide text-gray-800 dark:text-gray-200">Title</label> 28 28 <input 29 29 type="text" 30 30 name="title"
+4 -4
appview/pages/templates/repo/pulls/fragments/pullStepReview.html
··· 139 139 <div class="flex flex-col md:flex-row gap-6"> 140 140 <div class="flex-1 min-w-0 flex flex-col gap-3"> 141 141 <div class="flex flex-col gap-1"> 142 - <label class="text-xs uppercase tracking-wide text-gray-800 dark:text-gray-200">title</label> 142 + <label class="text-xs uppercase tracking-wide text-gray-800 dark:text-gray-200">Title</label> 143 143 <input 144 144 type="text" 145 145 name="{{ $titleName }}" ··· 187 187 </div> 188 188 {{ else }} 189 189 <div class="px-3 pb-3 pt-1 text-sm text-yellow-700 dark:text-yellow-300 border-t border-gray-100 dark:border-gray-700"> 190 - This commit has no <span class="font-mono">Change-Id</span> header and can't be stacked. Set one on the commit and re-push. 190 + This commit has no <span class="font-mono">Change-id</span> header and can't be stacked. Set one on the commit and re-push. 191 191 </div> 192 192 {{ end }} 193 193 </details> ··· 265 265 266 266 <div class="flex-grow"></div> 267 267 268 - <label title="Expand/Collapse diffs" for="{{ $colId }}" class="btn font-normal normal-case p-2"> 268 + <label title="Expand/collapse diffs" for="{{ $colId }}" class="btn font-normal normal-case p-2"> 269 269 <input type="checkbox" id="{{ $colId }}" class="peer/collapse hidden"/> 270 270 <span class="peer-checked/collapse:hidden inline-flex items-center gap-2"> 271 271 {{ i "unfold-vertical" "w-4 h-4" }} ··· 436 436 437 437 <div class="flex-grow"></div> 438 438 439 - <label title="Expand/Collapse diffs" for="composeCollapseToggle" class="btn font-normal normal-case p-2"> 439 + <label title="Expand/collapse diffs" for="composeCollapseToggle" class="btn font-normal normal-case p-2"> 440 440 <input type="checkbox" id="composeCollapseToggle" class="peer/collapse hidden"/> 441 441 <span class="peer-checked/collapse:hidden inline-flex items-center gap-2"> 442 442 {{ i "unfold-vertical" "w-4 h-4" }}
+2 -2
appview/pages/templates/repo/pulls/fragments/summarizedPullHeader.html
··· 24 24 <div class="inline-flex items-center gap-1"> 25 25 {{ i "message-square" "w-3 h-3 md:hidden" }} 26 26 {{ $commentCount }} 27 - <span class="hidden md:inline">comment{{if ne $commentCount 1}}s{{end}}</span> 27 + <span class="hidden md:inline">Comment{{if ne $commentCount 1}}s{{end}}</span> 28 28 </div> 29 29 </span> 30 30 <span class="before:content-['·'] before:select-none text-gray-500 dark:text-gray-400"></span> 31 31 <span> 32 - <span class="hidden md:inline">round</span> 32 + <span class="hidden md:inline">Round</span> 33 33 <span class="font-mono">#{{ $latestRound }}</span> 34 34 </span> 35 35 </div>
+1 -1
appview/pages/templates/repo/pulls/interdiff.html
··· 16 16 <div class="flex gap-3 items-center mb-3"> 17 17 <a href="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/" class="flex items-center gap-2 font-medium"> 18 18 {{ i "arrow-left" "w-5 h-5" }} 19 - back 19 + Back 20 20 </a> 21 21 <span class="select-none before:content-['\00B7']"></span> 22 22 interdiff of round #{{ .Round }} and #{{ sub .Round 1 }}
+2 -2
appview/pages/templates/repo/pulls/patch.html
··· 19 19 <div class="flex gap-3 items-center mb-3"> 20 20 <a href="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/" class="flex items-center gap-2 font-medium"> 21 21 {{ i "arrow-left" "w-5 h-5" }} 22 - back 22 + Back 23 23 </a> 24 24 <span class="select-none before:content-['\00B7']"></span> 25 25 round<span class="flex items-center">{{ i "hash" "w-4 h-4" }}{{ .Round }}</span> 26 26 <span class="select-none before:content-['\00B7']"></span> 27 27 <a href="/{{ .RepoInfo.FullName }}/pulls/{{ .Pull.PullId }}/round/{{ .Round }}.patch"> 28 - view raw 28 + View raw 29 29 </a> 30 30 </div> 31 31 <div class="border-t border-gray-200 dark:border-gray-700 my-2"></div>
+17 -17
appview/pages/templates/repo/pulls/pull.html
··· 335 335 text-gray-500 dark:text-gray-400 hover:text-gray-500 dark:hover:text-gray-300 336 336 {{ end }} 337 337 " href="/{{ $handle }}">{{ $handle }}</a> 338 - submitted 338 + Submitted 339 339 <span class="px-2 py-0.5 rounded font-mono text-xs border 340 340 {{ if eq $round $root.ActiveRound }} 341 341 text-blue-800 dark:text-white bg-blue-100 dark:bg-blue-600 border-blue-200 dark:border-blue-500 ··· 361 361 <a class="btn-flat flex items-center gap-2 no-underline hover:no-underline text-sm" 362 362 href="/{{ $root.RepoInfo.FullName }}/pulls/{{ $root.Pull.PullId }}/round/{{ $round }}?{{ safeUrl $root.DiffOpts.Encode }}#round-#{{ $round }}"> 363 363 {{ i "diff" "w-4 h-4" }} 364 - diff 364 + Diff 365 365 </a> 366 366 {{ end }} 367 367 {{ if and (ne $idx 0) (or (not $root.IsInterdiff) (ne $root.ActiveRound $round)) }} 368 368 <a class="btn-flat flex items-center gap-2 no-underline hover:no-underline text-sm" 369 369 href="/{{ $root.RepoInfo.FullName }}/pulls/{{ $root.Pull.PullId }}/round/{{ $round }}/interdiff?{{ safeUrl $root.DiffOpts.Encode }}"> 370 370 {{ i "chevrons-left-right-ellipsis" "w-4 h-4 rotate-90" }} 371 - interdiff 371 + Interdiff 372 372 </a> 373 373 {{ end }} 374 374 </div> ··· 386 386 <span>{{ i "git-commit-horizontal" "w-4 h-4" }}</span> 387 387 {{ len $patches }} commit{{ if ne (len $patches) 1 }}s{{ end }} 388 388 <div class="text-sm text-gray-500 dark:text-gray-400"> 389 - <span class="group-open/commit:hidden inline">expand</span> 390 - <span class="hidden group-open/commit:inline">collapse</span> 389 + <span class="group-open/commit:hidden inline">Expand</span> 390 + <span class="hidden group-open/commit:inline">Collapse</span> 391 391 </div> 392 392 </summary> 393 393 {{ range $patches }} ··· 453 453 <summary class="flex items-center justify-between cursor-pointer list-none"> 454 454 <div class="flex items-center gap-2 "> 455 455 {{ i "triangle-alert" "text-red-600 dark:text-red-500 w-4 h-4" }} 456 - <span class="font-medium">merge conflicts detected</span> 456 + <span class="font-medium">Merge conflicts detected</span> 457 457 <div class="text-sm text-gray-500 dark:text-gray-400"> 458 - <span class="group-open/conflict:hidden inline">expand</span> 459 - <span class="hidden group-open/conflict:inline">collapse</span> 458 + <span class="group-open/conflict:hidden inline">Expand</span> 459 + <span class="hidden group-open/conflict:inline">Collapse</span> 460 460 </div> 461 461 </div> 462 462 </summary> ··· 481 481 {{ else if and $isOpen .MergeCheck }} 482 482 <div class="flex items-center gap-2"> 483 483 {{ i "check" "w-4 h-4 text-green-600 dark:text-green-500" }} 484 - <span>no conflicts, ready to merge</span> 484 + <span>No conflicts, ready to merge</span> 485 485 </div> 486 486 {{ end }} 487 487 {{ end }} ··· 491 491 <div class="bg-gray-50 dark:bg-gray-700 border border-black dark:border-gray-500 rounded shadow-sm px-6 py-2 relative"> 492 492 <div class="flex items-center gap-2 text-black dark:text-white"> 493 493 {{ i "ban" "w-4 h-4" }} 494 - <span class="font-medium">closed without merging</span 494 + <span class="font-medium">Closed without merging</span 495 495 > 496 496 </div> 497 497 </div> ··· 499 499 <div class="bg-purple-50 dark:bg-purple-900 border border-purple-500 rounded shadow-sm px-6 py-2 relative"> 500 500 <div class="flex items-center gap-2 text-purple-500 dark:text-purple-300"> 501 501 {{ i "git-merge" "w-4 h-4" }} 502 - <span class="font-medium">pull request successfully merged</span 502 + <span class="font-medium">Pull request successfully merged</span 503 503 > 504 504 </div> 505 505 </div> ··· 518 518 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded shadow-sm px-6 py-2 relative"> 519 519 <div class="flex items-center gap-2 text-amber-500 dark:text-amber-300"> 520 520 {{ i "triangle-alert" "w-4 h-4" }} 521 - <span class="font-medium">this branch has been updated, consider resubmitting</span> 521 + <span class="font-medium">This branch has been updated, consider resubmitting</span> 522 522 </div> 523 523 </div> 524 524 {{ end }} ··· 535 535 <summary class="cursor-pointer list-none flex items-center gap-2"> 536 536 {{ template "repo/pipelines/fragments/pipelineSymbol" (dict "Pipeline" $pipeline "ShortSummary" false) }} 537 537 <div class="text-sm text-gray-500 dark:text-gray-400"> 538 - <span class="group-open/pipeline:hidden inline">expand</span> 539 - <span class="hidden group-open/pipeline:inline">collapse</span> 538 + <span class="group-open/pipeline:hidden inline">Expand</span> 539 + <span class="hidden group-open/pipeline:inline">Collapse</span> 540 540 </div> 541 541 </summary> 542 542 <div class="my-2 grid grid-cols-1 bg-white dark:bg-gray-800 rounded border border-gray-200 dark:border-gray-700 divide-y divide-gray-200 dark:divide-gray-700"> ··· 586 586 </div> 587 587 <span class="text-gray-500 dark:text-gray-400 text-sm group-hover/summary:text-gray-600 dark:group-hover/summary:text-gray-300 transition-colors flex items-center gap-2 -ml-2 relative"> 588 588 {{ i "circle-plus" "size-4 z-5" }} 589 - expand {{ $c }} comment{{ if ne $c 1 }}s{{ end }} 589 + Expand {{ $c }} comment{{ if ne $c 1 }}s{{ end }} 590 590 </span> 591 591 </div> 592 592 </summary> ··· 654 654 {{ define "loginPrompt" }} 655 655 <div class="bg-amber-50 dark:bg-amber-900 border border-amber-500 rounded shadow-sm p-2 relative flex gap-2 items-center"> 656 656 <a href="/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 657 - sign up 657 + Sign up 658 658 </a> 659 659 <span class="text-gray-500 dark:text-gray-400">or</span> 660 - <a href="/login" class="underline">login</a> 660 + <a href="/login" class="underline">Login</a> 661 661 to add to the discussion 662 662 </div> 663 663 {{ end }}
+3 -3
appview/pages/templates/repo/pulls/pulls.html
··· 37 37 type="text" 38 38 name="q" 39 39 value="{{ .FilterQuery }}" 40 - placeholder="search pulls..." 40 + placeholder="Search pulls..." 41 41 > 42 42 <a 43 43 {{ if $active }}href="?q=state:{{ $active }}"{{ else }}href="?"{{ end }} ··· 61 61 class="col-start-3 btn-create text-sm flex items-center gap-2 no-underline hover:no-underline hover:text-white" 62 62 > 63 63 {{ i "git-pull-request-create" "w-4 h-4" }} 64 - <span>new</span> 64 + <span>New</span> 65 65 </a> 66 66 </div> 67 67 <div class="error" id="pulls"></div> ··· 96 96 </span> 97 97 98 98 <span class="before:content-['·']"> 99 - round 99 + Round 100 100 <span class="font-mono"> 101 101 #{{ $topPR.LastRoundNumber }} 102 102 </span>
+3 -3
appview/pages/templates/repo/settings/access.html
··· 80 80 class="flex flex-col gap-2" 81 81 > 82 82 <label for="add-collaborator" class="uppercase p-0"> 83 - ADD COLLABORATOR 83 + Add collaborator 84 84 </label> 85 85 <p class="text-sm text-gray-500 dark:text-gray-400">Collaborators can push to this repository.</p> 86 86 <actor-typeahead> ··· 103 103 popovertargetaction="hide" 104 104 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 105 105 > 106 - {{ i "x" "size-4" }} cancel 106 + {{ i "x" "size-4" }} Cancel 107 107 </button> 108 108 <button type="submit" class="btn w-1/2 flex items-center"> 109 - <span class="inline-flex gap-2 items-center">{{ i "user-plus" "size-4" }} add</span> 109 + <span class="inline-flex gap-2 items-center">{{ i "user-plus" "size-4" }} Add</span> 110 110 <span id="spinner" class="group"> 111 111 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 112 112 </span>
+8 -8
appview/pages/templates/repo/settings/fragments/addLabelDefModal.html
··· 6 6 <!-- Labels as direct siblings --> 7 7 {{ $base := "py-2 text-sm font-normal normal-case block hover:no-underline text-center cursor-pointer bg-gray-100 dark:bg-gray-800 shadow-inner border border-gray-200 dark:border-gray-700" }} 8 8 <label for="basic-tab" class="{{$base}} peer-checked/basic:bg-white peer-checked/basic:dark:bg-gray-700 peer-checked/basic:shadow-sm rounded-l"> 9 - Basic Labels 9 + Basic labels 10 10 </label> 11 11 <label for="kv-tab" class="{{$base}} peer-checked/kv:bg-white peer-checked/kv:dark:bg-gray-700 peer-checked/kv:shadow-sm rounded-r"> 12 - Key-value Labels 12 + Key-value labels 13 13 </label> 14 14 15 15 <!-- Basic Labels Content - direct sibling --> ··· 76 76 {{ define "nameInput" }} 77 77 <div class="w-full"> 78 78 <label for="name">Name</label> 79 - <input class="w-full" type="text" id="label-name" name="name" required placeholder="improvement"/> 79 + <input class="w-full" type="text" id="label-name" name="name" required placeholder="Improvement"/> 80 80 </div> 81 81 {{ end }} 82 82 ··· 104 104 </label> 105 105 <label class="font-normal normal-case flex items-center gap-2 p-0"> 106 106 <input type="checkbox" id="pulls-scope" name="scope" value="sh.tangled.repo.pull" checked /> 107 - Pull Requests 107 + Pull requests 108 108 </label> 109 109 </div> 110 110 {{ end }} 111 111 112 112 {{ define "valueInput" }} 113 113 <div class="w-full"> 114 - <label for="valueType">Value Type</label> 114 + <label for="valueType">Value type</label> 115 115 <select id="value-type" name="valueType" class="w-full p-3 rounded border border-gray-300 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-600"> 116 116 <option value="string">String</option> 117 117 <option value="integer">Integer</option> ··· 120 120 121 121 <div class="w-full"> 122 122 <label for="enumValues">Permitted values</label> 123 - <input type="text" id="enumValues" name="enumValues" placeholder="value1, value2, value3" class="w-full"/> 123 + <input type="text" id="enumValues" name="enumValues" placeholder="Value1, value2, value3" class="w-full"/> 124 124 <p class="text-sm text-gray-400 dark:text-gray-500 mt-1"> 125 125 Enter comma-separated list of permitted values, or leave empty to allow any value. 126 126 </p> ··· 149 149 popovertargetaction="hide" 150 150 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 151 151 > 152 - {{ i "x" "size-4" }} cancel 152 + {{ i "x" "size-4" }} Cancel 153 153 </button> 154 154 {{ end }} 155 155 156 156 {{ define "submitButton" }} 157 157 <button type="submit" class="btn-create w-1/2 flex items-center"> 158 - <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} add</span> 158 + <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} Add</span> 159 159 <span id="spinner" class="group"> 160 160 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 161 161 </span>
+1 -1
appview/pages/templates/repo/settings/fragments/labelListing.html
··· 5 5 {{ template "labels/fragments/labelDef" $label }} 6 6 <div class="flex flex-wrap text items-center gap-1 text-gray-500 dark:text-gray-400"> 7 7 {{ if $label.ValueType.IsNull }} 8 - basic 8 + Basic 9 9 {{ else }} 10 10 {{ $label.ValueType.Type }} type 11 11 {{ end }}
+2 -2
appview/pages/templates/repo/settings/fragments/secretListing.html
··· 7 7 {{ $secret.Key }} 8 8 </span> 9 9 <div class="flex flex-wrap text items-center gap-1 text-gray-500 dark:text-gray-400"> 10 - <span>added by</span> 10 + <span>Added by</span> 11 11 <span>{{ template "user/fragments/picHandleLink" $secret.CreatedBy }}</span> 12 12 <span class="before:content-['·'] before:select-none"></span> 13 13 <span>{{ template "repo/fragments/shortTimeAgo" $secret.CreatedAt }}</span> ··· 22 22 hx-confirm="Are you sure you want to delete the secret {{ $secret.Key }}?" 23 23 > 24 24 {{ i "trash-2" "w-5 h-5" }} 25 - <span class="hidden md:inline">delete</span> 25 + <span class="hidden md:inline">Delete</span> 26 26 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 27 27 </button> 28 28 </div>
+1 -1
appview/pages/templates/repo/settings/fragments/sidebar.html
··· 7 7 <a href="/{{ $.RepoInfo.FullName }}/settings?tab={{.Name}}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25"> 8 8 <div class="flex gap-3 items-center p-2 {{ if eq .Name $active }} {{ $activeTab }} {{ else }} {{ $inactiveTab }} {{ end }}"> 9 9 {{ i .Icon "size-4" }} 10 - {{ .Name }} 10 + {{ .Label }} 11 11 </div> 12 12 </a> 13 13 {{ end }}
+4 -4
appview/pages/templates/repo/settings/fragments/webhookDeliveries.html
··· 1 1 {{define "repo/settings/fragments/webhookDeliveries"}} 2 2 <div class="flex flex-col gap-4"> 3 3 <div class="flex items-center justify-between"> 4 - <h3 class="text-lg font-bold uppercase text-sm">Recent Deliveries</h3> 4 + <h3 class="text-lg font-bold uppercase text-sm">Recent deliveries</h3> 5 5 <button 6 6 type="button" 7 7 onclick="this.closest('[popover]').hidePopover()" 8 8 class="btn text-sm flex items-center gap-1" 9 9 > 10 - {{ i "x" "size-4" }} close 10 + {{ i "x" "size-4" }} Close 11 11 </button> 12 12 </div> 13 13 ··· 50 50 <div class="px-4 pb-4 pt-2 bg-gray-50 dark:bg-gray-800/50"> 51 51 <div class="flex flex-col gap-3 text-sm"> 52 52 <div class="flex flex-col gap-2"> 53 - <h5 class="font-semibold text-gray-700 dark:text-gray-300">Request Body</h5> 53 + <h5 class="font-semibold text-gray-700 dark:text-gray-300">Request body</h5> 54 54 <pre class="bg-white dark:bg-gray-900 p-3 rounded text-xs overflow-x-auto border border-gray-200 dark:border-gray-700">{{ .RequestBody }}</pre> 55 55 </div> 56 56 57 57 {{ if .ResponseBody }} 58 58 <div class="flex flex-col gap-2"> 59 - <h5 class="font-semibold text-gray-700 dark:text-gray-300">Response Body</h5> 59 + <h5 class="font-semibold text-gray-700 dark:text-gray-300">Response body</h5> 60 60 <pre class="bg-white dark:bg-gray-900 p-3 rounded text-xs overflow-x-auto border border-gray-200 dark:border-gray-700">{{ .ResponseBody }}</pre> 61 61 </div> 62 62 {{ end }}
+10 -10
appview/pages/templates/repo/settings/general.html
··· 54 54 class="btn-create flex items-center gap-2 group" 55 55 > 56 56 {{ i "save" "w-4 h-4" }} 57 - save 57 + Save 58 58 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 59 59 </button> 60 60 </div> ··· 65 65 {{ define "branchSettings" }} 66 66 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 67 67 <div class="col-span-1 md:col-span-2"> 68 - <h2 class="text-sm pb-2 uppercase font-bold">Default Branch</h2> 68 + <h2 class="text-sm pb-2 uppercase font-bold">Default branch</h2> 69 69 <p class="text-gray-500 dark:text-gray-400"> 70 70 The default branch is considered the “base” branch in your repository, 71 71 against which all pull requests and code commits are automatically made, ··· 95 95 <div class="flex flex-col gap-2"> 96 96 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 97 97 <div class="col-span-1 md:col-span-2"> 98 - <h2 class="text-sm pb-2 uppercase font-bold">Default Labels</h2> 98 + <h2 class="text-sm pb-2 uppercase font-bold">Default labels</h2> 99 99 <p class="text-gray-500 dark:text-gray-400"> 100 100 Manage your issues and pulls by creating labels to categorize them. Only 101 101 repository owners may configure labels. You may choose to subscribe to ··· 153 153 </div> 154 154 {{ else }} 155 155 <div class="flex items-center justify-center p-2 text-gray-500"> 156 - no labels added yet 156 + No labels added yet 157 157 </div> 158 158 {{ end }} 159 159 </div> ··· 165 165 <div class="flex flex-col gap-2"> 166 166 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 167 167 <div class="col-span-1 md:col-span-2"> 168 - <h2 class="text-sm pb-2 uppercase font-bold">Custom Labels</h2> 168 + <h2 class="text-sm pb-2 uppercase font-bold">Custom labels</h2> 169 169 </div> 170 170 <div class="col-span-1 md:col-span-1 md:justify-self-end"> 171 171 <button ··· 175 175 {{ if not .RepoInfo.Roles.IsOwner }}disabled{{ end }} 176 176 popovertargetaction="toggle"> 177 177 {{ i "plus" "size-4" }} 178 - add label 178 + Add label 179 179 </button> 180 180 <div 181 181 id="add-labeldef-modal" ··· 199 199 hx-confirm="Are you sure you want to delete the label `{{ .Name }}`?" 200 200 > 201 201 {{ i "trash-2" "w-5 h-5" }} 202 - <span class="hidden md:inline">delete</span> 202 + <span class="hidden md:inline">Delete</span> 203 203 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 204 204 </button> 205 205 {{ end }} 206 206 </div> 207 207 {{ else }} 208 208 <div class="flex items-center justify-center p-2 text-gray-500"> 209 - no labels added yet 209 + No labels added yet 210 210 </div> 211 211 {{ end }} 212 212 </div> ··· 218 218 {{ if .RepoInfo.Roles.RepoDeleteAllowed }} 219 219 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 220 220 <div class="col-span-1 md:col-span-2"> 221 - <h2 class="text-sm pb-2 uppercase text-red-500 dark:text-red-400 font-bold">Delete Repository</h2> 221 + <h2 class="text-sm pb-2 uppercase text-red-500 dark:text-red-400 font-bold">Delete repository</h2> 222 222 <p class="text-red-500 dark:text-red-400 "> 223 223 Deleting a repository is irreversible and permanent. Be certain before deleting a repository. 224 224 </p> ··· 231 231 hx-delete="/{{ $.RepoInfo.FullName }}/settings/delete" 232 232 hx-confirm="Are you sure you want to delete {{ $.RepoInfo.FullName }}?"> 233 233 {{ i "trash-2" "size-4" }} 234 - delete 234 + Delete 235 235 <span class="ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline"> 236 236 {{ i "loader-circle" "w-4 h-4" }} 237 237 </span>
+14 -14
appview/pages/templates/repo/settings/hooks.html
··· 28 28 {{ if not .RepoInfo.Roles.IsOwner }}disabled{{ end }} 29 29 popovertargetaction="toggle"> 30 30 {{ i "plus" "size-4" }} 31 - new webhook 31 + New webhook 32 32 </button> 33 33 <div 34 34 id="add-webhook-modal" ··· 48 48 {{ if .Active }} 49 49 <span class="inline-flex items-center gap-1 px-2 py-1 text-sm rounded bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200"> 50 50 {{ i "circle-check" "size-4" }} 51 - active 51 + Active 52 52 </span> 53 53 {{ else }} 54 54 <span class="inline-flex items-center gap-1 px-2 py-1 text-sm rounded bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200"> 55 55 {{ i "circle" "size-4" }} 56 - inactive 56 + Inactive 57 57 </span> 58 58 {{ end }} 59 59 </div> ··· 68 68 popovertarget="edit-webhook-modal-{{.Id}}" 69 69 popovertargetaction="toggle"> 70 70 {{ i "pencil" "size-4" }} 71 - edit 71 + Edit 72 72 </button> 73 73 <button 74 74 class="btn text-sm text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 flex items-center gap-1 group" ··· 76 76 hx-swap="none" 77 77 hx-confirm="Are you sure you want to delete this webhook?"> 78 78 {{ i "trash-2" "size-4" }} 79 - delete 79 + Delete 80 80 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 81 81 </button> 82 82 </div> ··· 103 103 {{ if $deliveries }} 104 104 <div class="mt-3 border-t border-gray-200 dark:border-gray-700 pt-3"> 105 105 <div class="flex items-center justify-between mb-2"> 106 - <h4 class="text-sm font-semibold text-gray-700 dark:text-gray-300 uppercase">Recent Deliveries</h4> 106 + <h4 class="text-sm font-semibold text-gray-700 dark:text-gray-300 uppercase">Recent deliveries</h4> 107 107 </div> 108 108 <div class="flex flex-col gap-2"> 109 109 {{ range $deliveries }} ··· 141 141 popovertargetaction="toggle" 142 142 > 143 143 {{ i "list" "size-3" }} 144 - show all 144 + Show all 145 145 </button> 146 146 </div> 147 147 </div> ··· 175 175 </div> 176 176 {{ else }} 177 177 <div class="flex items-center justify-center p-4 text-gray-500"> 178 - no webhooks configured yet 178 + No webhooks configured yet 179 179 </div> 180 180 {{ end }} 181 181 </div> ··· 187 187 hx-swap="none" 188 188 class="flex flex-col gap-4" 189 189 > 190 - <h3 class="uppercase font-bold">New Webhook</h3> 190 + <h3 class="uppercase font-bold">New webhook</h3> 191 191 192 192 <div class="flex flex-col gap-2"> 193 193 <label for="webhook-url" class="text-sm font-semibold">Payload URL</label> ··· 243 243 popovertargetaction="hide" 244 244 class="btn flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 245 245 > 246 - {{ i "x" "size-4" }} cancel 246 + {{ i "x" "size-4" }} Cancel 247 247 </button> 248 248 <button type="submit" class="btn-create flex items-center gap-2 group"> 249 - {{ i "plus" "size-4" }} add webhook 249 + {{ i "plus" "size-4" }} Add webhook 250 250 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 251 251 </button> 252 252 </div> ··· 262 262 hx-swap="none" 263 263 class="flex flex-col gap-4" 264 264 > 265 - <h3 class="uppercase font-bold">Edit Webhook</h3> 265 + <h3 class="uppercase font-bold">Edit webhook</h3> 266 266 267 267 <div class="flex flex-col gap-2"> 268 268 <label for="edit-webhook-url-{{ $webhook.Id }}" class="text-sm font-semibold">Payload URL</label> ··· 319 319 popovertargetaction="hide" 320 320 class="btn flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 321 321 > 322 - {{ i "x" "size-4" }} cancel 322 + {{ i "x" "size-4" }} Cancel 323 323 </button> 324 324 <button type="submit" class="btn-create flex items-center gap-2 group"> 325 - {{ i "save" "size-4" }} save 325 + {{ i "save" "size-4" }} Save 326 326 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 327 327 </button> 328 328 </div>
+10 -10
appview/pages/templates/repo/settings/pipelines.html
··· 23 23 Choose a spindle to execute your workflows on. Only repository owners 24 24 can configure spindles. Spindles can be selfhosted, 25 25 <a class="text-gray-500 dark:text-gray-400 underline" href="https://docs.tangled.org/spindles.html#self-hosting-guide"> 26 - click to learn more. 26 + Click to learn more. 27 27 </a> 28 28 </p> 29 29 </div> ··· 64 64 {{ define "secretSettings" }} 65 65 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 66 66 <div class="col-span-1 md:col-span-2"> 67 - <h2 class="text-sm pb-2 uppercase font-bold">SECRETS</h2> 67 + <h2 class="text-sm pb-2 uppercase font-bold">Secrets</h2> 68 68 <p class="text-gray-500 dark:text-gray-400"> 69 69 Secrets are accessible in workflow runs via environment variables. Anyone 70 70 with collaborator access to this repository can add and use secrets in 71 - workflow runs. 71 + Workflow runs. 72 72 </p> 73 73 </div> 74 74 <div class="col-span-1 md:col-span-1 md:justify-self-end"> ··· 80 80 {{ template "repo/settings/fragments/secretListing" (list $ .) }} 81 81 {{ else }} 82 82 <div class="flex items-center justify-center p-2 text-gray-500"> 83 - no secrets added yet 83 + No secrets added yet 84 84 </div> 85 85 {{ end }} 86 86 </div> ··· 92 92 popovertarget="add-secret-modal" 93 93 popovertargetaction="toggle"> 94 94 {{ i "plus" "size-4" }} 95 - add secret 95 + Add secret 96 96 </button> 97 97 <div 98 98 id="add-secret-modal" ··· 110 110 hx-swap="none" 111 111 class="flex flex-col gap-2" 112 112 > 113 - <p class="uppercase p-0 font-bold">ADD SECRET</p> 113 + <p class="uppercase p-0 font-bold">Add secret</p> 114 114 <p class="text-sm text-gray-500 dark:text-gray-400">Secrets are available as environment variables in the workflow.</p> 115 115 <input 116 116 type="text" 117 117 id="secret-key" 118 118 name="key" 119 119 required 120 - placeholder="SECRET_NAME" 120 + placeholder="Secret_name" 121 121 /> 122 122 <textarea 123 123 type="text" 124 124 id="secret-value" 125 125 name="value" 126 126 required 127 - placeholder="secret value"></textarea> 127 + placeholder="Secret value"></textarea> 128 128 <div class="flex gap-2 pt-2"> 129 129 <button 130 130 type="button" ··· 132 132 popovertargetaction="hide" 133 133 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 134 134 > 135 - {{ i "x" "size-4" }} cancel 135 + {{ i "x" "size-4" }} Cancel 136 136 </button> 137 137 <button type="submit" class="btn w-1/2 flex items-center"> 138 - <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} add</span> 138 + <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} Add</span> 139 139 <span id="spinner" class="group"> 140 140 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 141 141 </span>
+17 -17
appview/pages/templates/repo/settings/sites.html
··· 14 14 {{ define "repoSiteSettings" }} 15 15 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-start"> 16 16 <div class="col-span-1 md:col-span-2"> 17 - <h2 class="text-sm pb-2 uppercase font-bold">Git Sites</h2> 17 + <h2 class="text-sm pb-2 uppercase font-bold">Git sites</h2> 18 18 <p class="text-gray-500 dark:text-gray-400"> 19 19 Serve a static site directly from this repository. 20 20 Choose a branch and the directory containing your <code>index.html</code>. ··· 38 38 {{ else if and .SiteConfig (not .OwnerClaim) }} 39 39 <div class="flex items-center gap-2 px-3 py-2 rounded border border-amber-200 dark:border-amber-800 bg-amber-50 dark:bg-amber-900/20 text-sm text-amber-800 dark:text-amber-300"> 40 40 {{ i "triangle-alert" "size-4 shrink-0" }} 41 - site is configured but not live &mdash; <a class="underline" href="/settings/sites">claim a domain</a> to publish it. 41 + site is configured but not live &mdash; <a class="underline" href="/settings/sites">Claim a domain</a> to publish it. 42 42 </div> 43 43 {{ else if and (not .SiteConfig) .OwnerClaim }} 44 44 <div class="flex items-center gap-2 px-3 py-2 rounded border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 text-sm text-gray-600 dark:text-gray-400"> ··· 48 48 {{ else }} 49 49 <div class="flex items-center gap-2 px-3 py-2 rounded border border-gray-200 dark:border-gray-700 bg-gray-50 dark:bg-gray-800/50 text-sm text-gray-600 dark:text-gray-400"> 50 50 {{ i "circle-dashed" "size-4 shrink-0" }} 51 - not enabled &mdash; configure a branch below and <a class="underline" href="/settings/sites">claim a domain</a> to publish. 51 + not enabled &mdash; configure a branch below and <a class="underline" href="/settings/sites">Claim a domain</a> to publish. 52 52 </div> 53 53 {{ end }} 54 54 ··· 130 130 {{ if and .IndexSiteTakenBy (not (and .SiteConfig .SiteConfig.IsIndex)) }}disabled{{ end }} 131 131 /> 132 132 <div> 133 - <span class="font-medium">index site</span> 133 + <span class="font-medium">Index site</span> 134 134 <p class="text-xs text-gray-500 dark:text-gray-400 mt-2"> 135 135 {{ if .OwnerClaim }} 136 136 <code>{{ .OwnerClaim.Domain }}</code> 137 137 {{ else }} 138 - e.g. <code>you.tngl.page</code> 138 + E.g. <code>you.tngl.page</code> 139 139 {{ end }} 140 140 </p> 141 141 {{ if and .IndexSiteTakenBy (not (and .SiteConfig .SiteConfig.IsIndex)) }} 142 142 <p class="text-xs text-amber-600 dark:text-amber-400 mt-1"> 143 - already used by <code>{{ .IndexSiteTakenBy }}</code> 143 + Already used by <code>{{ .IndexSiteTakenBy }}</code> 144 144 </p> 145 145 {{ end }} 146 146 </div> ··· 154 154 {{ if and .SiteConfig (not .SiteConfig.IsIndex) }}checked{{ end }} 155 155 /> 156 156 <div> 157 - <span class="font-medium">sub-path site</span> 157 + <span class="font-medium">Sub-path site</span> 158 158 <p class="text-xs text-gray-500 dark:text-gray-400 mt-2"> 159 159 {{ if .OwnerClaim }} 160 160 <code>{{ .OwnerClaim.Domain }}/{{ $.RepoInfo.Name }}</code> 161 161 {{ else }} 162 - e.g. <code>you.tngl.page/{{ $.RepoInfo.Name }}</code> 162 + E.g. <code>you.tngl.page/{{ $.RepoInfo.Name }}</code> 163 163 {{ end }} 164 164 </p> 165 165 </div> ··· 174 174 type="submit" 175 175 class="btn-create flex items-center gap-2 group"> 176 176 {{ i "save" "size-4" }} 177 - save 177 + Save 178 178 <span id="sites-spinner" class="group"> 179 179 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 180 180 </span> ··· 187 187 {{ if .SiteConfig }} 188 188 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 189 189 <div class="col-span-1 md:col-span-2"> 190 - <h2 class="text-sm pb-2 uppercase text-red-500 dark:text-red-400 font-bold">Disable Site</h2> 190 + <h2 class="text-sm pb-2 uppercase text-red-500 dark:text-red-400 font-bold">Disable site</h2> 191 191 <p class="text-red-500 dark:text-red-400"> 192 192 Removes the site configuration for this repository. The site will no longer be served. 193 193 </p> ··· 202 202 class="btn group flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 203 203 {{ if not .RepoInfo.Roles.IsOwner }}disabled{{ end }}> 204 204 {{ i "trash-2" "size-4" }} 205 - disable 205 + Disable 206 206 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 207 207 </button> 208 208 </form> ··· 211 211 {{ end }} 212 212 213 213 <div class="flex flex-col gap-3"> 214 - <h2 class="text-sm uppercase font-bold">Recent Deploys</h2> 214 + <h2 class="text-sm uppercase font-bold">Recent deploys</h2> 215 215 {{ if .Deploys }} 216 216 <div class="flex flex-col divide-y divide-gray-200 dark:divide-gray-700 border border-gray-200 dark:border-gray-700 rounded"> 217 217 {{ range .Deploys }} ··· 220 220 {{ if eq .Status "success" }} 221 221 <span class="inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200"> 222 222 {{ i "circle-check" "size-3" }} 223 - success 223 + Success 224 224 </span> 225 225 {{ else }} 226 226 <span class="inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"> 227 227 {{ i "circle-x" "size-3" }} 228 - failed 228 + Failed 229 229 </span> 230 230 {{ end }} 231 231 {{ if eq .Trigger "push" }} 232 232 <span class="inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200"> 233 233 {{ i "git-commit-horizontal" "size-3" }} 234 - push 234 + Push 235 235 </span> 236 236 {{ else if eq .Trigger "config_change" }} 237 237 <span class="inline-flex items-center gap-1 px-2 py-0.5 text-xs rounded bg-gray-100 text-gray-700 dark:bg-gray-700 dark:text-gray-300"> 238 238 {{ i "settings" "size-3" }} 239 - config change 239 + Config change 240 240 </span> 241 241 {{ end }} 242 242 <span class="font-mono text-xs text-gray-600 dark:text-gray-400"> ··· 261 261 </div> 262 262 {{ else }} 263 263 <div class="flex items-center justify-center p-6 text-gray-500 dark:text-gray-400 border border-gray-200 dark:border-gray-700 rounded"> 264 - no deploys yet 264 + No deploys yet 265 265 </div> 266 266 {{ end }} 267 267 </div>
+1 -1
appview/pages/templates/repo/stars.html
··· 11 11 <div class="flex-1 min-w-0"> 12 12 <a href="/{{ $handle }}" class="block truncate">{{ $handle }}</a> 13 13 <p class="text-sm text-gray-500 dark:text-gray-400"> 14 - starred {{ .Created | relTimeFmt }} 14 + Starred {{ .Created | relTimeFmt }} 15 15 </p> 16 16 </div> 17 17 </div>
+1 -1
appview/pages/templates/repo/tag.html
··· 1 1 {{ define "title" }} 2 - tags · {{ .RepoInfo.FullName }} 2 + Tags · {{ .RepoInfo.FullName }} 3 3 {{ end }} 4 4 5 5 {{ define "extrameta" }}
+3 -3
appview/pages/templates/repo/tags.html
··· 1 1 {{ define "title" }} 2 - tags · {{ .RepoInfo.FullName }} 2 + Tags · {{ .RepoInfo.FullName }} 3 3 {{ end }} 4 4 5 5 {{ define "extrameta" }} ··· 11 11 12 12 {{ define "repoContent" }} 13 13 <section> 14 - <h2 class="mb-4 text-sm text-left text-gray-700 dark:text-gray-300 uppercase font-bold">tags</h2> 14 + <h2 class="mb-4 text-sm text-left text-gray-700 dark:text-gray-300 uppercase font-bold">Tags</h2> 15 15 <div class="flex flex-col py-2 gap-12 md:gap-0"> 16 16 {{ range .Tags }} 17 17 {{ template "repo/fragments/singleTag" (list $ . ) }} ··· 38 38 {{ $artifacts := $root.DanglingArtifacts }} 39 39 40 40 {{ if and (gt (len $artifacts) 0) $isPushAllowed }} 41 - <h2 class="mb-2 text-sm text-left text-red-700 dark:text-red-400 uppercase font-bold">dangling artifacts</h2> 41 + <h2 class="mb-2 text-sm text-left text-red-700 dark:text-red-400 uppercase font-bold">Dangling artifacts</h2> 42 42 <p class="mb-4">The tags that these artifacts were attached to have been deleted. These artifacts are only visible to collaborators.</p> 43 43 <div class="flex flex-col rounded border border-gray-200 dark:border-gray-700"> 44 44 {{ range $artifact := $artifacts }}
+1 -1
appview/pages/templates/repo/tree.html
··· 31 31 <div id="dir-info" class="text-gray-500 dark:text-gray-400 text-xs md:text-sm flex flex-wrap items-center gap-1 md:gap-0"> 32 32 {{ $stats := .TreeStats }} 33 33 34 - <span>at <a href="/{{ $.RepoInfo.FullName }}/tree/{{ pathEscape $.Ref }}">{{ $.Ref }}</a></span> 34 + <span>At <a href="/{{ $.RepoInfo.FullName }}/tree/{{ pathEscape $.Ref }}">{{ $.Ref }}</a></span> 35 35 {{ if eq $stats.NumFolders 1 }} 36 36 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 37 37 <span>{{ $stats.NumFolders }} folder</span>
+1 -1
appview/pages/templates/search/search.html
··· 25 25 type="text" 26 26 name="q" 27 27 value="{{ .FilterQuery }}" 28 - placeholder="search repos..." 28 + placeholder="Search repos..." 29 29 > 30 30 <a 31 31 href="/search"
+3 -3
appview/pages/templates/spindles/dashboard.html
··· 93 93 hx-headers='{"shouldRedirect": "true"}' 94 94 > 95 95 {{ i "trash-2" "w-5 h-5" }} 96 - <span class="hidden md:inline">delete</span> 96 + <span class="hidden md:inline">Delete</span> 97 97 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 98 98 </button> 99 99 {{ end }} ··· 108 108 hx-headers='{"shouldRefresh": "true"}' 109 109 > 110 110 {{ i "rotate-ccw" "w-5 h-5" }} 111 - <span class="hidden md:inline">retry</span> 111 + <span class="hidden md:inline">Retry</span> 112 112 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 113 113 </button> 114 114 {{ end }} ··· 126 126 hx-confirm="Are you sure you want to remove {{ resolve $member }} from this instance?" 127 127 > 128 128 {{ i "user-minus" "w-4 h-4" }} 129 - remove 129 + Remove 130 130 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 131 131 </button> 132 132 {{ end }}
+4 -4
appview/pages/templates/spindles/fragments/addMemberModal.html
··· 6 6 popovertargetaction="toggle" 7 7 > 8 8 {{ i "user-plus" "w-5 h-5" }} 9 - <span class="hidden md:inline">add member</span> 9 + <span class="hidden md:inline">Add member</span> 10 10 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 11 11 </button> 12 12 ··· 28 28 class="flex flex-col gap-2" 29 29 > 30 30 <label for="member-did-{{ .Id }}" class="uppercase p-0"> 31 - ADD MEMBER 31 + Add member 32 32 </label> 33 33 <p class="text-sm text-gray-500 dark:text-gray-400">Members can register repositories and run workflows on this spindle.</p> 34 34 <actor-typeahead> ··· 51 51 popovertargetaction="hide" 52 52 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 53 53 > 54 - {{ i "x" "size-4" }} cancel 54 + {{ i "x" "size-4" }} Cancel 55 55 </button> 56 56 <button type="submit" class="btn w-1/2 flex items-center"> 57 - <span class="inline-flex gap-2 items-center">{{ i "user-plus" "size-4" }} add</span> 57 + <span class="inline-flex gap-2 items-center">{{ i "user-plus" "size-4" }} Add</span> 58 58 <span id="spinner" class="group"> 59 59 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 60 60 </span>
+2 -2
appview/pages/templates/spindles/fragments/spindleListing.html
··· 56 56 hx-confirm="Are you sure you want to delete the spindle '{{ .Instance }}'?" 57 57 > 58 58 {{ i "trash-2" "w-5 h-5" }} 59 - <span class="hidden md:inline">delete</span> 59 + <span class="hidden md:inline">Delete</span> 60 60 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 61 61 </button> 62 62 {{ end }} ··· 71 71 hx-target="#spindle-{{.Id}}" 72 72 > 73 73 {{ i "rotate-ccw" "w-5 h-5" }} 74 - <span class="hidden md:inline">retry</span> 74 + <span class="hidden md:inline">Retry</span> 75 75 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 76 76 </button> 77 77 {{ end }}
+5 -5
appview/pages/templates/spindles/index.html
··· 45 45 46 46 {{ define "list" }} 47 47 <section class="rounded w-full flex flex-col gap-2"> 48 - <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">your spindles</h2> 48 + <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">Your spindles</h2> 49 49 <div class="flex flex-col rounded border border-gray-200 dark:border-gray-700 w-full"> 50 50 {{ range $spindle := .Spindles }} 51 51 {{ template "spindles/fragments/spindleListing" . }} 52 52 {{ else }} 53 53 <div class="flex items-center justify-center p-2 border-b border-gray-200 dark:border-gray-700 text-gray-500"> 54 - no spindles registered yet 54 + No spindles registered yet 55 55 </div> 56 56 {{ end }} 57 57 </div> ··· 61 61 62 62 {{ define "register" }} 63 63 <section class="rounded w-full lg:w-fit flex flex-col gap-2"> 64 - <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">register a spindle</h2> 64 + <h2 class="text-sm font-bold py-2 uppercase dark:text-gray-300">Register a spindle</h2> 65 65 <p class="mb-2 dark:text-gray-300">Enter the hostname of your spindle to get started.</p> 66 66 <form 67 67 hx-post="/settings/spindles/register" ··· 85 85 > 86 86 <span class="inline-flex items-center gap-2"> 87 87 {{ i "plus" "w-4 h-4" }} 88 - register 88 + Register 89 89 </span> 90 90 <span class="pl-2 hidden group-[.htmx-request]:inline"> 91 91 {{ i "loader-circle" "w-4 h-4 animate-spin" }} ··· 104 104 class="btn flex items-center gap-2" 105 105 href="https://docs.tangled.org/spindles.html#self-hosting-guide"> 106 106 {{ i "book" "size-4" }} 107 - docs 107 + Docs 108 108 </a> 109 109 <div 110 110 id="add-email-modal"
+2 -2
appview/pages/templates/strings/dashboard.html
··· 21 21 {{ end }} 22 22 23 23 {{ define "allStrings" }} 24 - <p class="text-sm font-bold p-2 dark:text-white">ALL STRINGS</p> 24 + <p class="text-sm font-bold p-2 dark:text-white">All strings</p> 25 25 <div id="strings" class="grid grid-cols-1 gap-4 mb-6"> 26 26 {{ range .Strings }} 27 27 {{ template "singleString" (list $ .) }} ··· 49 49 <span>{{ $stat.LineCount }} line{{if ne $stat.LineCount 1}}s{{end}}</span> 50 50 <span class="select-none [&:before]:content-['·']"></span> 51 51 {{ with $s.Edited }} 52 - <span>edited {{ template "repo/fragments/shortTimeAgo" . }}</span> 52 + <span>Edited {{ template "repo/fragments/shortTimeAgo" . }}</span> 53 53 {{ else }} 54 54 {{ template "repo/fragments/shortTimeAgo" $s.Created }} 55 55 {{ end }}
+2 -2
appview/pages/templates/strings/fragments/form.html
··· 47 47 <a class="btn flex items-center gap-2 no-underline hover:no-underline p-2 group text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 " 48 48 href="/strings/{{ .String.Did }}/{{ .String.Rkey }}"> 49 49 {{ i "x" "size-4" }} 50 - <span class="hidden md:inline">cancel</span> 50 + <span class="hidden md:inline">Cancel</span> 51 51 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 52 52 </a> 53 53 {{ end }} ··· 58 58 > 59 59 <span class="inline-flex items-center gap-2"> 60 60 {{ i "arrow-up" "w-4 h-4" }} 61 - publish 61 + Publish 62 62 </span> 63 63 <span class="pl-2 hidden group-[.htmx-request]:inline"> 64 64 {{ i "loader-circle" "w-4 h-4 animate-spin" }}
+6 -6
appview/pages/templates/strings/string.html
··· 25 25 {{ if .String.Description }} 26 26 {{ .String.Description }} 27 27 {{ else }} 28 - <span class="italic">this string has no description</span> 28 + <span class="italic">This string has no description</span> 29 29 {{ end }} 30 30 </span> 31 31 </div> ··· 36 36 hx-boost="true" 37 37 href="/strings/{{ .String.Did }}/{{ .String.Rkey }}/edit"> 38 38 {{ i "pencil" "w-4 h-4" }} 39 - <span class="hidden md:inline">edit</span> 39 + <span class="hidden md:inline">Edit</span> 40 40 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 41 41 </a> 42 42 <button ··· 47 47 hx-confirm="Are you sure you want to delete the string `{{ .String.Filename }}`?" 48 48 > 49 49 {{ i "trash-2" "w-4 h-4" }} 50 - <span class="hidden md:inline">delete</span> 50 + <span class="hidden md:inline">Delete</span> 51 51 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 52 52 </button> 53 53 {{ end }} ··· 65 65 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 66 66 <span> 67 67 {{ with .String.Edited }} 68 - edited {{ template "repo/fragments/shortTimeAgo" . }} 68 + Edited {{ template "repo/fragments/shortTimeAgo" . }} 69 69 {{ else }} 70 70 {{ template "repo/fragments/shortTimeAgo" .String.Created }} 71 71 {{ end }} ··· 76 76 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 77 77 <span>{{ byteFmt .Stats.ByteCount }}</span> 78 78 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 79 - <a href="/strings/{{ $ownerId }}/{{ .String.Rkey }}/raw">view raw</a> 79 + <a href="/strings/{{ $ownerId }}/{{ .String.Rkey }}/raw">View raw</a> 80 80 {{ if .RenderToggle }} 81 81 <span class="select-none px-1 md:px-2 [&:before]:content-['·']"></span> 82 82 <a href="?code={{ .ShowRendered }}" hx-boost="true"> 83 - view {{ if .ShowRendered }}code{{ else }}rendered{{ end }} 83 + View {{ if .ShowRendered }}code{{ else }}rendered{{ end }} 84 84 </a> 85 85 {{ end }} 86 86 </div>
+1 -1
appview/pages/templates/strings/timeline.html
··· 49 49 <span>{{ $stat.LineCount }} line{{if ne $stat.LineCount 1}}s{{end}}</span> 50 50 <span class="select-none [&:before]:content-['·']"></span> 51 51 {{ with .Edited }} 52 - <span>edited {{ template "repo/fragments/shortTimeAgo" . }}</span> 52 + <span>Edited {{ template "repo/fragments/shortTimeAgo" . }}</span> 53 53 {{ else }} 54 54 {{ template "repo/fragments/shortTimeAgo" .Created }} 55 55 {{ end }}
+2 -2
appview/pages/templates/timeline/fragments/hero.html
··· 1 1 {{ define "timeline/fragments/hero" }} 2 2 <div class="mx-auto max-w-[100rem] grid grid-cols-1 md:grid-cols-2 text-black dark:text-white px-6 py-4 gap-6 items-center md:flex-row"> 3 - <h1 class="font-bold text-5xl md:text-6xl lg:text-8xl">tightly-knit<br>social coding.</h1> 3 + <h1 class="font-bold text-5xl md:text-6xl lg:text-8xl">tightly-knit<br>Social coding.</h1> 4 4 <div id="hero-right" class="space-y-6"> 5 5 <p class="text-xl"> 6 6 The next-generation social coding platform. ··· 21 21 class="py-2 w-full md:w-fit" 22 22 /> 23 23 <button class="btn-create flex items-center gap-2 text-base whitespace-nowrap" type="submit"> 24 - join now 24 + Join now 25 25 {{ i "arrow-right" "size-4" }} 26 26 </button> 27 27 </form>
+2 -2
appview/pages/templates/timeline/fragments/newsletterForm.html
··· 17 17 placeholder="Enter your email" 18 18 class="py-2 w-full" /> 19 19 <button class="btn-create flex items-center gap-2 text-base whitespace-nowrap" type="submit"> 20 - subscribe 20 + Subscribe 21 21 {{ i "arrow-right" "size-4" }} 22 22 </button> 23 23 </span> ··· 37 37 class="flex-1 min-w-0 text-sm py-2" /> 38 38 <button type="submit" class="btn whitespace-nowrap px-4 pb-0 gap-2"> 39 39 {{ i "mail-plus" "size-4 inline" }} 40 - subscribe 40 + Subscribe 41 41 </button> 42 42 </span> 43 43 </form>
+7 -7
appview/pages/templates/timeline/fragments/preview.html
··· 120 120 {{ template "user/fragments/picHandleLink" $repo.Did }} 121 121 {{ with $source }} 122 122 {{ $sourceDid := resolve .Did }} 123 - forked 123 + Forked 124 124 <a href="/{{ $sourceDid }}/{{ .Name }}"class="no-underline hover:underline"> 125 125 {{ $sourceDid }}/{{ .Name }} 126 126 </a> 127 - to 127 + To 128 128 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline">{{ $repo.Name }}</a> 129 129 {{ else }} 130 - created 130 + Created 131 131 <a href="/{{ $userHandle }}/{{ $repo.Name }}" class="no-underline hover:underline"> 132 132 {{ $repo.Name }} 133 133 </a> ··· 153 153 {{ if $group.IsCollapsed }} 154 154 <span class="inline-flex items-center gap-1.5"> 155 155 {{ template "timeline/fragments/othersBadge" $group }} 156 - starred 156 + Starred 157 157 </span> 158 158 {{ else }} 159 - starred 159 + Starred 160 160 {{ end }} 161 161 {{ template "user/fragments/pic" (list $repoOwnerHandle "size-6") }} 162 162 <a href="/{{ $repoOwnerHandle }}/{{ .Repo.Name }}" class="no-underline hover:underline"> ··· 187 187 {{ if $group.IsCollapsed }} 188 188 <span class="inline-flex items-center gap-1.5"> 189 189 {{ template "timeline/fragments/othersBadge" $group }} 190 - followed 190 + Followed 191 191 </span> 192 192 {{ else }} 193 - followed 193 + Followed 194 194 {{ end }} 195 195 {{ template "user/fragments/picHandleLink" $subjectHandle }} 196 196 </div>
+1 -1
appview/pages/templates/timeline/fragments/vouchSuggestions.html
··· 7 7 Suggested 8 8 </h3> 9 9 <a href="/{{ .LoggedInUser.Did }}?tab=vouches" class="text-sm font-normal hover:no-underline no-underline flex items-center gap-1 pb-4 pr-4"> 10 - view all {{ i "arrow-right" "size-3.5" }} 10 + View all {{ i "arrow-right" "size-3.5" }} 11 11 </a> 12 12 </div> 13 13 <div class="flex flex-col gap-4 bg-white dark:bg-gray-800 p-4 border border-gray-200 dark:border-gray-700 shadow-sm">
+6 -6
appview/pages/templates/timeline/home.html
··· 181 181 <section class="space-y-4"> 182 182 <h1 class="{{ $titleStyle }}">Run it at home</h1> 183 183 <p class="text-gray-600 dark:text-gray-400"> 184 - Host your repositories on your own infrastructure with <a href="https://docs.tangled.org/knot-self-hosting-guide.html#knot-self-hosting-guide" class="no-underline">knots</a>. 185 - Run CI on your own machines with <a href="https://docs.tangled.org/spindles.html#self-hosting-guide" class="no-underline">spindles</a>. 184 + Host your repositories on your own infrastructure with <a href="https://docs.tangled.org/knot-self-hosting-guide.html#knot-self-hosting-guide" class="no-underline">Knots</a>. 185 + Run CI on your own machines with <a href="https://docs.tangled.org/spindles.html#self-hosting-guide" class="no-underline">Spindles</a>. 186 186 <br> 187 187 Don't want to self-host? All are welcome on our hosted instances. 188 188 </p> ··· 218 218 Pick and choose dependencies for your CI pipelines from <a 219 219 href="https://docs.tangled.org/spindles.html#dependencies" 220 220 class="no-underline"><code>nixpkgs</code></a>, one of the biggest 221 - package repositories. 221 + Package repositories. 222 222 <br> 223 223 Support for Docker and MicroVM based runners coming soon! 224 224 </p> ··· 344 344 <h3 class="{{ $titleStyle }}">Free and open source</h3> 345 345 <p class="{{ $descriptionStyle }}"> 346 346 All of Tangled is open source and built with the community! 347 - Check out the <a class="underline" href="https://tangled.org/core">monorepo</a> and join in on the fun. 347 + Check out the <a class="underline" href="https://tangled.org/core">Monorepo</a> and join in on the fun. 348 348 <br> 349 349 <br> 350 350 We welcome contributions however big or small. You can start contributing by picking up a ··· 408 408 {{ range $index := list 0 1 2 3 }} 409 409 <div class="bg-white dark:bg-gray-800 rounded shadow-sm border border-gray-200 dark:border-gray-700 p-6"> 410 410 <div class="flex items-center gap-2 mb-3"> 411 - <span class="text-xs font-medium text-gray-500 dark:text-gray-400">v1.{{ sub 3 $index }}.0</span> 411 + <span class="text-xs font-medium text-gray-500 dark:text-gray-400">V1.{{ sub 3 $index }}.0</span> 412 412 <span class="text-xs text-gray-400 dark:text-gray-500">•</span> 413 413 <span class="text-xs text-gray-500 dark:text-gray-400">Feb {{ sub 16 $index }}, 2026</span> 414 414 </div> 415 - <h3 class="text-lg font-semibold mb-2 text-gray-900 dark:text-gray-100">Feature Update {{ sub 4 $index }}</h3> 415 + <h3 class="text-lg font-semibold mb-2 text-gray-900 dark:text-gray-100">Feature update {{ sub 4 $index }}</h3> 416 416 <p class="text-sm text-gray-600 dark:text-gray-300 leading-relaxed"> 417 417 Improvements to the platform including bug fixes, performance enhancements, and new features. 418 418 </p>
+5 -5
appview/pages/templates/user/completeSignup.html
··· 8 8 hx-disabled-elt="#complete-signup-button" 9 9 > 10 10 <div class="flex flex-col"> 11 - <label for="code">verification code</label> 11 + <label for="code">Verification code</label> 12 12 <input 13 13 type="text" 14 14 id="code" ··· 23 23 </div> 24 24 25 25 <div class="flex flex-col"> 26 - <label for="username">username</label> 26 + <label for="username">Username</label> 27 27 <input 28 28 type="text" 29 29 id="username" 30 30 name="username" 31 31 tabindex="2" 32 32 required 33 - placeholder="jason" 33 + placeholder="Jason" 34 34 /> 35 35 <span class="text-sm text-gray-500 mt-1"> 36 36 Your complete handle will be of the form <code>user.tngl.sh</code>. ··· 38 38 </div> 39 39 40 40 <div class="flex flex-col"> 41 - <label for="password">password</label> 41 + <label for="password">Password</label> 42 42 <input 43 43 type="password" 44 44 id="password" ··· 58 58 tabindex="4" 59 59 > 60 60 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 61 - <span class="inline group-[.htmx-request]:hidden">complete signup</span> 61 + <span class="inline group-[.htmx-request]:hidden">Complete signup</span> 62 62 </button> 63 63 </form> 64 64 <p id="signup-error" class="error w-full"></p>
+1 -1
appview/pages/templates/user/followers.html
··· 7 7 {{ end }} 8 8 9 9 {{ define "followers" }} 10 - <p class="text-sm font-bold p-2 dark:text-white">ALL FOLLOWERS</p> 10 + <p class="text-sm font-bold p-2 dark:text-white">All followers</p> 11 11 <div id="followers" class="grid grid-cols-1 gap-4 mb-6"> 12 12 {{ range .Followers }} 13 13 {{ template "user/fragments/followCard"
+1 -1
appview/pages/templates/user/following.html
··· 7 7 {{ end }} 8 8 9 9 {{ define "following" }} 10 - <p class="text-sm font-bold p-2 dark:text-white">ALL FOLLOWING</p> 10 + <p class="text-sm font-bold p-2 dark:text-white">All following</p> 11 11 <div id="following" class="grid grid-cols-1 gap-4 mb-6"> 12 12 {{ range .Following }} 13 13 {{ template "user/fragments/followCard"
+4 -4
appview/pages/templates/user/fragments/editAvatar.html
··· 5 5 hx-swap="none" 6 6 class="flex flex-col gap-2 group/form"> 7 7 <label for="avatar-file" class="uppercase p-0"> 8 - Upload or Remove Avatar 8 + Upload or remove avatar 9 9 </label> 10 10 <p class="text-sm text-gray-500 dark:text-gray-400">Upload a new image (PNG or JPEG, max 5MB) or remove your current avatar.</p> 11 11 <input ··· 25 25 <button type="submit" class="btn w-full flex items-center justify-center gap-2"> 26 26 {{ i "upload" "size-4 inline group-[.htmx-request]/form:hidden" }} 27 27 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]/form:inline" }} 28 - upload 28 + Upload 29 29 </button> 30 30 {{ if .Profile.Avatar }} 31 31 <button ··· 36 36 class="btn w-full flex items-center justify-center gap-2 group"> 37 37 {{ i "trash-2" "size-4 inline group-[.htmx-request]:hidden" }} 38 38 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 39 - remove avatar 39 + Remove avatar 40 40 </button> 41 41 {{ end }} 42 42 <button ··· 46 46 popovertargetaction="hide" 47 47 class="btn text-red-500 dark:text-red-400 w-full flex items-center justify-center gap-2"> 48 48 {{ i "x" "size-4" }} 49 - cancel 49 + Cancel 50 50 </button> 51 51 </div> 52 52 <div id="avatar-error" class="text-red-500 dark:text-red-400 text-sm"></div>
+11 -11
appview/pages/templates/user/fragments/editBio.html
··· 10 10 {{ if and .Profile .Profile.Description }} 11 11 {{ $description = .Profile.Description }} 12 12 {{ end }} 13 - <label class="m-0 p-0" for="description">bio</label> 13 + <label class="m-0 p-0" for="description">Bio</label> 14 14 <textarea 15 15 type="text" 16 16 class="p-2 w-full" 17 17 name="description" 18 18 rows="3" 19 - placeholder="write a bio">{{ $description }}</textarea> 19 + placeholder="Write a bio">{{ $description }}</textarea> 20 20 </div> 21 21 22 22 <div class="flex flex-col gap-1"> 23 - <label class="m-0 p-0" for="pronouns">pronouns</label> 23 + <label class="m-0 p-0" for="pronouns">Pronouns</label> 24 24 <div class="flex items-center gap-2 w-full"> 25 25 {{ $pronouns := "" }} 26 26 {{ if and .Profile .Profile.Pronouns }} ··· 38 38 39 39 {{ if gt (len .AlsoKnownAs) 1 }} 40 40 <div class="flex flex-col gap-1"> 41 - <label class="m-0 p-0" for="preferredHandle">preferred handle</label> 41 + <label class="m-0 p-0" for="preferredHandle">Preferred handle</label> 42 42 <div class="flex items-center gap-2 w-full"> 43 43 {{ $preferredHandle := "" }} 44 44 {{ if and .Profile .Profile.PreferredHandle }} ··· 56 56 {{ end }} 57 57 58 58 <div class="flex flex-col gap-1"> 59 - <label class="m-0 p-0" for="location">location</label> 59 + <label class="m-0 p-0" for="location">Location</label> 60 60 <div class="flex items-center gap-2 w-full"> 61 61 {{ $location := "" }} 62 62 {{ if and .Profile .Profile.Location }} ··· 68 68 </div> 69 69 70 70 <div class="flex flex-col gap-1"> 71 - <label class="m-0 p-0">social links</label> 71 + <label class="m-0 p-0">Social links</label> 72 72 <div class="flex items-center gap-2 py-1"> 73 73 {{ $includeBsky := false }} 74 74 {{ if and .Profile .Profile.IncludeBluesky }} ··· 89 89 90 90 <div class="flex items-center gap-2 w-full"> 91 91 <span class="flex-shrink-0">{{ i "link" "size-4" }}</span> 92 - <input type="text" class="py-1 px-1 w-full" name="link{{$idx}}" value="{{ $link }}" placeholder="social link {{add $idx 1}}"> 92 + <input type="text" class="py-1 px-1 w-full" name="link{{$idx}}" value="{{ $link }}" placeholder="Social link {{add $idx 1}}"> 93 93 </div> 94 94 {{ end }} 95 95 </div> 96 96 97 97 <div class="flex flex-col gap-1"> 98 - <label class="m-0 p-0">vanity stats</label> 98 + <label class="m-0 p-0">Vanity stats</label> 99 99 {{ range $idx, $s := (sequence 2) }} 100 100 {{ $stat := "" }} 101 101 {{ if and $profile $profile.Stats }} ··· 111 111 112 112 <div class="flex items-center gap-2 justify-between"> 113 113 <button id="save-btn" type="submit" class="btn p-1 w-full flex items-center gap-2 no-underline text-sm"> 114 - {{ i "check" "size-4" }} save 114 + {{ i "check" "size-4" }} Save 115 115 <span id="spinner" class="group"> 116 116 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 117 117 </span> 118 118 </button> 119 119 <a href="/{{.LoggedInUser.Did}}" class="w-full no-underline hover:no-underline"> 120 120 <button id="cancel-btn" type="button" class="btn p-1 w-full flex items-center gap-2 no-underline text-sm"> 121 - {{ i "x" "size-4" }} cancel 121 + {{ i "x" "size-4" }} Cancel 122 122 </button> 123 123 </a> 124 124 </div> ··· 129 129 {{ $id := index . 0 }} 130 130 {{ $stat := index . 1 }} 131 131 <select class="stat-group w-full p-1 border border-gray-200 bg-white dark:bg-gray-800 dark:text-white dark:border-gray-700 text-sm" id="stat{{$id}}" name="stat{{$id}}"> 132 - <option value="">Choose Stat</option> 132 + <option value="">Choose stat</option> 133 133 {{ $stats := assoc 134 134 "merged-pull-request-count" "Merged PR Count" 135 135 "closed-pull-request-count" "Closed PR Count"
+3 -3
appview/pages/templates/user/fragments/editPins.html
··· 6 6 hx-swap="none" 7 7 hx-indicator="#spinner"> 8 8 <div class="flex items-center justify-between mb-2"> 9 - <p class="text-sm font-bold p-2 dark:text-white">SELECT PINNED REPOS</p> 9 + <p class="text-sm font-bold p-2 dark:text-white">Select pinned repos</p> 10 10 <div class="flex items-center gap-2"> 11 11 <button id="save-btn" type="submit" class="btn px-2 flex items-center gap-2 no-underline text-sm"> 12 - {{ i "check" "w-3 h-3" }} save 12 + {{ i "check" "w-3 h-3" }} Save 13 13 <span id="spinner" class="group"> 14 14 {{ i "loader-circle" "w-3 h-3 animate-spin hidden group-[.htmx-request]:inline" }} 15 15 </span> 16 16 </button> 17 17 <a href="/{{.LoggedInUser.Did}}" class="w-full no-underline hover:no-underline"> 18 18 <button id="cancel-btn" type="button" class="btn px-2 w-full flex items-center gap-2 no-underline text-sm"> 19 - {{ i "x" "w-3 h-3" }} cancel 19 + {{ i "x" "w-3 h-3" }} Cancel 20 20 </button> 21 21 </a> 22 22 </div>
+2 -2
appview/pages/templates/user/fragments/follow.html
··· 15 15 {{ if eq .FollowStatus.String "IsNotFollowing" }} 16 16 {{ i "user-round-plus" "size-4 inline group-[.htmx-request]:hidden" }} 17 17 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 18 - follow 18 + Follow 19 19 {{ else }} 20 20 {{ i "user-round-minus" "size-4 inline group-[.htmx-request]:hidden" }} 21 21 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 22 - unfollow 22 + Unfollow 23 23 {{ end }} 24 24 </button> 25 25 {{ end }}
+2 -2
appview/pages/templates/user/fragments/networkVouches.html
··· 19 19 {{ if $denounces }} border-t {{ else }} border-y {{ end }} 20 20 "> 21 21 <a class="text-sm text-green-800 dark:text-green-200 hover:no-underline" href="/{{ .SubjectDid.String }}?tab=vouches"> 22 - vouched for by {{ len $vouches }} {{ if eq (len $vouches) 1 }}user{{ else }}users{{ end }} 22 + Vouched for by {{ len $vouches }} {{ if eq (len $vouches) 1 }}user{{ else }}users{{ end }} 23 23 </a> 24 24 {{ template "fragments/tinyAvatarList" (dict "all" $vouches "classes" "size-6") }} 25 25 </div> ··· 33 33 {{ if $vouches }} border-b {{ else }} border-y {{ end }} 34 34 "> 35 35 <a class="text-sm text-red-800 dark:text-red-200 hover:no-underline" href="/{{ .SubjectDid.String }}?tab=vouches"> 36 - denounced by {{ len $denounces }} {{ if eq (len $denounces) 1 }}user{{ else }}users{{ end }} 36 + Denounced by {{ len $denounces }} {{ if eq (len $denounces) 1 }}user{{ else }}users{{ end }} 37 37 </a> 38 38 {{ template "fragments/tinyAvatarList" (dict "all" $denounces "classes" "size-6") }} 39 39 </div>
+2 -2
appview/pages/templates/user/fragments/profileCard.html
··· 97 97 hx-get="/profile/edit-bio" 98 98 hx-swap="innerHTML"> 99 99 {{ i "pencil" "w-4 h-4" }} 100 - edit 100 + Edit 101 101 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 102 102 </button> 103 103 {{ end }} ··· 159 159 {{ template "repo/fragments/shortTime" .CreatedAt }} 160 160 </div> 161 161 <div class="absolute inset-0 flex items-center gap-1 justify-center opacity-0 group-hover/item:opacity-100 transition-opacity text-xs font-medium text-green-900 dark:text-green-100"> 162 - view {{ i "arrow-right" "size-3" }} 162 + View {{ i "arrow-right" "size-3" }} 163 163 </div> 164 164 </div> 165 165 </div>
+3 -3
appview/pages/templates/user/fragments/vouchButton.html
··· 20 20 popovertargetaction="toggle" 21 21 class="{{ if $isVouched }}btn-create{{else if $isDenounced}}btn-cancel{{else}}btn{{end}} w-full flex gap-2 items-center justify-center"> 22 22 {{ if $isVouched }} 23 - {{ i "shield-check" "size-4" }} vouched 23 + {{ i "shield-check" "size-4" }} Vouched 24 24 {{ else if $isDenounced }} 25 - {{ i "shield-off" "size-4" }} denounced 25 + {{ i "shield-off" "size-4" }} Denounced 26 26 {{ else }} 27 - {{ i "shield-question-mark" "size-4" }} vouch 27 + {{ i "shield-question-mark" "size-4" }} Vouch 28 28 {{ end }} 29 29 </button> 30 30 {{ end }}
+2 -2
appview/pages/templates/user/fragments/vouchPopover.html
··· 134 134 popovertargetaction="hide" 135 135 class="btn flex-1 flex items-center justify-center gap-2"> 136 136 {{ i "x" "size-4" }} 137 - cancel 137 + Cancel 138 138 </button> 139 139 <button 140 140 type="submit" 141 141 class="btn-create flex-1 flex items-center justify-center gap-2 text-white group"> 142 142 {{ i "check" "size-4 inline group-[.htmx-request]:hidden" }} 143 143 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 144 - {{ if and .VouchRelationship .VouchRelationship.GetDirectVouch }} update {{ else }} save {{end}} 144 + {{ if and .VouchRelationship .VouchRelationship.GetDirectVouch }} Update {{ else }} Save {{end}} 145 145 </button> 146 146 </div> 147 147 </form>
+3 -3
appview/pages/templates/user/login.html
··· 54 54 hx-disabled-elt="#login-button" 55 55 > 56 56 <div class="flex flex-col"> 57 - <label for="handle">handle</label> 57 + <label for="handle">Handle</label> 58 58 <input 59 59 autocapitalize="none" 60 60 autocorrect="off" ··· 82 82 tabindex="3" 83 83 > 84 84 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 85 - <span class="inline group-[.htmx-request]:hidden">login</span> 85 + <span class="inline group-[.htmx-request]:hidden">Login</span> 86 86 </button> 87 87 </form> 88 88 {{ if .ErrorCode }} ··· 98 98 {{ else if eq .ErrorCode "max_accounts" }} 99 99 You have reached the maximum of 20 linked accounts. Please remove an account before adding a new one. 100 100 {{ else }} 101 - Internal Server error. 101 + Internal server error. 102 102 {{ end }} 103 103 Please try again. 104 104 </p>
+10 -10
appview/pages/templates/user/overview.html
··· 13 13 {{ end }} 14 14 15 15 {{ define "profileTimeline" }} 16 - <p class="text-sm font-bold px-2 pb-4 dark:text-white">ACTIVITY</p> 16 + <p class="text-sm font-bold px-2 pb-4 dark:text-white">Activity</p> 17 17 <div class="flex flex-col gap-4 relative"> 18 18 {{ if .ProfileTimeline.IsEmpty }} 19 19 <div class="text-base text-gray-500 flex items-center justify-center italic p-12 border border-gray-200 dark:border-gray-700 rounded"> ··· 30 30 <div class="border border-gray-200 dark:border-gray-700 rounded-sm py-4 px-6"> 31 31 <p class="text-sm font-mono mb-2 text-gray-500 dark:text-gray-400"> 32 32 {{ if eq $idx 0 }} 33 - this month 33 + This month 34 34 {{ else }} 35 35 {{$idx}} month{{if ne $idx 1}}s{{end}} ago 36 36 {{ end }} ··· 54 54 {{ if . }} 55 55 <div class="flex flex-wrap items-center gap-1"> 56 56 {{ i "git-commit-horizontal" "size-5" }} 57 - created {{ . }} commits 57 + Created {{ . }} commits 58 58 </div> 59 59 {{ end }} 60 60 {{ end }} ··· 65 65 <summary class="list-none cursor-pointer hover:text-gray-500 hover:dark:text-gray-400"> 66 66 <div class="flex flex-wrap items-center gap-2"> 67 67 {{ i "book-plus" "w-4 h-4" }} 68 - created {{ len . }} {{if eq (len .) 1 }}repository{{else}}repositories{{end}} 68 + Created {{ len . }} {{if eq (len .) 1 }}repository{{else}}repositories{{end}} 69 69 </div> 70 70 </summary> 71 71 <div class="py-2 text-sm flex flex-col gap-3 mb-2"> ··· 110 110 {{ i "circle-dot" "w-4 h-4" }} 111 111 112 112 <div> 113 - created {{ len $items }} {{if eq (len $items) 1 }}issue{{else}}issues{{end}} 113 + Created {{ len $items }} {{if eq (len $items) 1 }}issue{{else}}issues{{end}} 114 114 </div> 115 115 116 116 {{ if gt $stats.Open 0 }} ··· 150 150 <a href="/{{$repoUrl}}/issues/{{ .IssueId }}" class="no-underline hover:underline"> 151 151 {{ .Title -}} 152 152 </a> 153 - on 153 + On 154 154 <a href="/{{$repoUrl}}" class="no-underline hover:underline whitespace-nowrap"> 155 155 {{$repoUrl}} 156 156 </a> ··· 172 172 {{ i "git-pull-request" "w-4 h-4" }} 173 173 174 174 <div> 175 - created {{ len $items }} {{if eq (len $items) 1 }}pull request{{else}}pull requests{{end}} 175 + Created {{ len $items }} {{if eq (len $items) 1 }}pull request{{else}}pull requests{{end}} 176 176 </div> 177 177 178 178 {{ if gt $stats.Open 0 }} ··· 223 223 <a href="/{{$repoUrl}}/pulls/{{ .PullId }}" class="no-underline hover:underline"> 224 224 {{ .Title -}} 225 225 </a> 226 - on 226 + On 227 227 <a href="/{{$repoUrl}}" class="no-underline hover:underline whitespace-nowrap"> 228 228 {{$repoUrl}} 229 229 </a> ··· 240 240 <div class="text-sm font-bold px-2 pb-4 dark:text-white flex items-center gap-2"> 241 241 <a href="/{{ resolve $.Card.UserDid }}?tab=repos" 242 242 class="flex text-black dark:text-white items-center gap-2 no-underline hover:no-underline group"> 243 - <span>PINNED REPOS</span> 243 + <span>Pinned repos</span> 244 244 </a> 245 245 {{ if and .LoggedInUser (eq .LoggedInUser.Did .Card.UserDid) }} 246 246 <button ··· 283 283 {{ define "collaboratingRepos" }} 284 284 {{ if gt (len .CollaboratingRepos) 0 }} 285 285 <div> 286 - <p class="text-sm font-bold px-2 pb-4 dark:text-white">COLLABORATING ON</p> 286 + <p class="text-sm font-bold px-2 pb-4 dark:text-white">Collaborating on</p> 287 287 <div id="collaborating" class="grid grid-cols-1 gap-4"> 288 288 {{ range .CollaboratingRepos }} 289 289 <div class="border border-gray-200 dark:border-gray-700 rounded-sm">
+1 -1
appview/pages/templates/user/repos.html
··· 12 12 type="text" 13 13 name="q" 14 14 value="{{ .FilterQuery }}" 15 - placeholder="search repos..." 15 + placeholder="Search repos..." 16 16 > 17 17 <a 18 18 {{ if .FilterQuery }}href="?tab=repos"{{ else }}href="#"{{ end }}
+6 -6
appview/pages/templates/user/settings/emails.html
··· 19 19 {{ define "emailSettings" }} 20 20 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 21 21 <div class="col-span-1 md:col-span-2"> 22 - <h2 class="text-sm pb-2 uppercase font-bold">Email Addresses</h2> 22 + <h2 class="text-sm pb-2 uppercase font-bold">Email addresses</h2> 23 23 <p class="text-gray-500 dark:text-gray-400"> 24 24 Commits authored using emails listed here will be associated with your Tangled profile. 25 25 </p> ··· 33 33 {{ template "user/settings/fragments/emailListing" (list $ .) }} 34 34 {{ else }} 35 35 <div class="flex items-center justify-center p-2 text-gray-500"> 36 - no emails added yet 36 + No emails added yet 37 37 </div> 38 38 {{ end }} 39 39 </div> ··· 45 45 popovertarget="add-email-modal" 46 46 popovertargetaction="toggle"> 47 47 {{ i "plus" "size-4" }} 48 - add email 48 + Add email 49 49 </button> 50 50 <div 51 51 id="add-email-modal" ··· 63 63 class="flex flex-col gap-2" 64 64 > 65 65 <label for="email-address" class="uppercase p-0"> 66 - add email 66 + Add email 67 67 </label> 68 68 <p class="text-sm text-gray-500 dark:text-gray-400">Commits using this email will be associated with your profile.</p> 69 69 <input ··· 81 81 popovertargetaction="hide" 82 82 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 83 83 > 84 - {{ i "x" "size-4" }} cancel 84 + {{ i "x" "size-4" }} Cancel 85 85 </button> 86 86 <button type="submit" class="btn w-1/2 flex items-center"> 87 - <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} add</span> 87 + <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} Add</span> 88 88 <span id="spinner" class="group"> 89 89 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 90 90 </span>
+6 -6
appview/pages/templates/user/settings/fragments/dangerDeleteToken.html
··· 4 4 <p class="text-sm text-gray-500 dark:text-gray-400 pt-1">Check your email for an account deletion code.</p> 5 5 <form hx-post="/settings/delete/confirm" hx-swap="none" hx-confirm="This will permanently delete your account. This cannot be undone. Continue?" hx-disabled-elt="find button[type='submit']" class="flex flex-col gap-3 pt-2"> 6 6 <div class="flex flex-col"> 7 - <label for="delete-token">deletion code</label> 7 + <label for="delete-token">Deletion code</label> 8 8 <input type="text" id="delete-token" name="token" required autocomplete="off" placeholder="xxxx-xxxx" /> 9 9 </div> 10 10 <div class="flex flex-col"> 11 - <label for="delete-password-confirm">password</label> 11 + <label for="delete-password-confirm">Password</label> 12 12 <input type="password" id="delete-password-confirm" name="password" required autocomplete="current-password" /> 13 13 </div> 14 14 <div class="flex flex-col"> 15 - <label for="delete-confirmation">confirmation</label> 16 - <input type="text" id="delete-confirmation" name="confirmation" required autocomplete="off" placeholder="delete my account" /> 15 + <label for="delete-confirmation">Confirmation</label> 16 + <input type="text" id="delete-confirmation" name="confirmation" required autocomplete="off" placeholder="Delete my account" /> 17 17 <span class="text-sm text-gray-500 mt-1">Type <strong>delete my account</strong> to confirm.</span> 18 18 </div> 19 19 <div class="flex gap-2 pt-2"> 20 - <button type="button" popovertarget="delete-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300">cancel</button> 21 - <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2 text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300">delete account</button> 20 + <button type="button" popovertarget="delete-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300">Cancel</button> 21 + <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2 text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300">Delete account</button> 22 22 </div> 23 23 <div id="delete-error" class="text-red-500 dark:text-red-400 text-sm empty:hidden"></div> 24 24 </form>
+5 -5
appview/pages/templates/user/settings/fragments/dangerPasswordToken.html
··· 4 4 <p class="text-sm text-gray-500 dark:text-gray-400 pt-1">Check your email for a password reset code.</p> 5 5 <form hx-post="/settings/password/reset" hx-swap="none" hx-disabled-elt="find button[type='submit']" class="flex flex-col gap-3 pt-2"> 6 6 <div class="flex flex-col"> 7 - <label for="token">reset code</label> 7 + <label for="token">Reset code</label> 8 8 <input type="text" id="token" name="token" required autocomplete="off" placeholder="xxxx-xxxx" /> 9 9 </div> 10 10 <div class="flex flex-col"> 11 - <label for="new-password">new password</label> 11 + <label for="new-password">New password</label> 12 12 <input type="password" id="new-password" name="new_password" required autocomplete="new-password" /> 13 13 </div> 14 14 <div class="flex flex-col"> 15 - <label for="confirm-password">confirm new password</label> 15 + <label for="confirm-password">Confirm new password</label> 16 16 <input type="password" id="confirm-password" name="confirm_password" required autocomplete="new-password" /> 17 17 </div> 18 18 <div class="flex gap-2 pt-2"> 19 - <button type="button" popovertarget="change-password-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300">cancel</button> 20 - <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2">set new password</button> 19 + <button type="button" popovertarget="change-password-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300">Cancel</button> 20 + <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2">Set new password</button> 21 21 </div> 22 22 <div id="password-error" class="text-red-500 dark:text-red-400 text-sm empty:hidden"></div> 23 23 </form>
+7 -7
appview/pages/templates/user/settings/fragments/emailListing.html
··· 10 10 </span> 11 11 <div class="inline-flex items-center gap-1"> 12 12 {{ if $email.Verified }} 13 - <span class="text-xs bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200 px-2 py-1 rounded">verified</span> 13 + <span class="text-xs bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200 px-2 py-1 rounded">Verified</span> 14 14 {{ else }} 15 - <span class="text-xs bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 px-2 py-1 rounded">unverified</span> 15 + <span class="text-xs bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200 px-2 py-1 rounded">Unverified</span> 16 16 {{ end }} 17 17 {{ if $email.Primary }} 18 - <span class="text-xs bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-2 py-1 rounded">primary</span> 18 + <span class="text-xs bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200 px-2 py-1 rounded">Primary</span> 19 19 {{ end }} 20 20 </div> 21 21 </div> 22 22 <div class="flex text-sm flex-wrap text items-center gap-1 text-gray-500 dark:text-gray-400"> 23 - <span>added {{ template "repo/fragments/time" $email.CreatedAt }}</span> 23 + <span>Added {{ template "repo/fragments/time" $email.CreatedAt }}</span> 24 24 </div> 25 25 </div> 26 26 <div class="flex gap-2 items-center"> ··· 31 31 hx-swap="none" 32 32 hx-vals='{"email": "{{ $email.Address }}"}'> 33 33 {{ i "rotate-cw" "w-4 h-4" }} 34 - <span class="hidden md:inline">resend</span> 34 + <span class="hidden md:inline">Resend</span> 35 35 </button> 36 36 {{ end }} 37 37 {{ if and (not $email.Primary) $email.Verified }} ··· 40 40 hx-post="/settings/emails/primary" 41 41 hx-swap="none" 42 42 hx-vals='{"email": "{{ $email.Address }}"}'> 43 - set as primary 43 + Set as primary 44 44 </button> 45 45 {{ end }} 46 46 {{ if not $email.Primary }} ··· 53 53 hx-confirm="Are you sure you want to delete the email {{ $email.Address }}?" 54 54 > 55 55 {{ i "trash-2" "w-5 h-5" }} 56 - <span class="hidden md:inline">delete</span> 56 + <span class="hidden md:inline">Delete</span> 57 57 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 58 58 </button> 59 59 {{ end }}
+2 -2
appview/pages/templates/user/settings/fragments/keyListing.html
··· 13 13 {{ sshFingerprint $key.Key }} 14 14 </span> 15 15 <div class="flex flex-wrap text-sm items-center gap-1 text-gray-500 dark:text-gray-400"> 16 - <span>added {{ template "repo/fragments/time" $key.Created }}</span> 16 + <span>Added {{ template "repo/fragments/time" $key.Created }}</span> 17 17 </div> 18 18 </div> 19 19 <button ··· 24 24 hx-confirm="Are you sure you want to delete the key {{ $key.Name }}?" 25 25 > 26 26 {{ i "trash-2" "w-5 h-5" }} 27 - <span class="hidden md:inline">delete</span> 27 + <span class="hidden md:inline">Delete</span> 28 28 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 29 29 </button> 30 30 </div>
+1 -1
appview/pages/templates/user/settings/fragments/sidebar.html
··· 7 7 <a href="/settings/{{.Name}}" class="no-underline hover:no-underline hover:bg-gray-100/25 hover:dark:bg-gray-700/25"> 8 8 <div class="flex gap-3 items-center p-2 {{ if eq .Name $active }} {{ $activeTab }} {{ else }} {{ $inactiveTab }} {{ end }}"> 9 9 {{ i .Icon "size-4" }} 10 - {{ .Name }} 10 + {{ .Label }} 11 11 </div> 12 12 </a> 13 13 {{ end }}
+7 -7
appview/pages/templates/user/settings/keys.html
··· 19 19 {{ define "sshKeysSettings" }} 20 20 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 21 21 <div class="col-span-1 md:col-span-2"> 22 - <h2 class="text-sm pb-2 uppercase font-bold">SSH Keys</h2> 22 + <h2 class="text-sm pb-2 uppercase font-bold">SSH keys</h2> 23 23 <p class="text-gray-500 dark:text-gray-400"> 24 24 SSH public keys added here will be broadcasted to knots that you are a member of, 25 25 allowing you to push to repositories there. ··· 34 34 {{ template "user/settings/fragments/keyListing" (list $ .) }} 35 35 {{ else }} 36 36 <div class="flex items-center justify-center p-2 text-gray-500"> 37 - no keys added yet 37 + No keys added yet 38 38 </div> 39 39 {{ end }} 40 40 </div> ··· 46 46 popovertarget="add-key-modal" 47 47 popovertargetaction="toggle"> 48 48 {{ i "plus" "size-4" }} 49 - add key 49 + Add key 50 50 </button> 51 51 <div 52 52 id="add-key-modal" ··· 64 64 class="flex flex-col gap-2" 65 65 > 66 66 <label for="key-name" class="uppercase p-0"> 67 - add ssh key 67 + Add SSH key 68 68 </label> 69 69 <p class="text-sm text-gray-500 dark:text-gray-400">SSH keys allow you to push to repositories in knots you're a member of.</p> 70 70 <input ··· 72 72 id="key-name" 73 73 name="name" 74 74 required 75 - placeholder="key name" 75 + placeholder="Key name" 76 76 class="w-full dark:bg-gray-800 dark:text-white dark:border-gray-700 dark:placeholder-gray-400" 77 77 /> 78 78 <textarea ··· 89 89 popovertargetaction="hide" 90 90 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300" 91 91 > 92 - {{ i "x" "size-4" }} cancel 92 + {{ i "x" "size-4" }} Cancel 93 93 </button> 94 94 <button type="submit" class="btn w-1/2 flex items-center"> 95 - <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} add</span> 95 + <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} Add</span> 96 96 <span id="spinner" class="group"> 97 97 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 98 98 </span>
+2 -2
appview/pages/templates/user/settings/notifications.html
··· 19 19 {{ define "notificationSettings" }} 20 20 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 21 21 <div class="col-span-1 md:col-span-2"> 22 - <h2 class="text-sm pb-2 uppercase font-bold">Notification Preferences</h2> 22 + <h2 class="text-sm pb-2 uppercase font-bold">Notification preferences</h2> 23 23 <p class="text-gray-500 dark:text-gray-400"> 24 24 Choose which notifications you want to receive when activity happens on your repositories and profile. 25 25 </p> ··· 176 176 class="btn-create flex items-center gap-2 group" 177 177 > 178 178 {{ i "save" "w-4 h-4" }} 179 - save 179 + Save 180 180 {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 181 181 </button> 182 182 </div>
+26 -26
appview/pages/templates/user/settings/profile.html
··· 36 36 <button 37 37 popovertarget="change-handle-modal" 38 38 popovertargetaction="toggle" 39 - class="text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 cursor-pointer">change</button> 39 + class="text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300 cursor-pointer">Change</button> 40 40 {{ else }} 41 - <a href="/settings/handle" class="text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300">change</a> 41 + <a href="/settings/handle" class="text-xs text-gray-400 hover:text-gray-600 dark:hover:text-gray-300">Change</a> 42 42 {{ end }} 43 43 {{ end }} 44 44 </div> 45 45 </div> 46 46 <div class="flex flex-col gap-1 p-4"> 47 - <span class="text-sm text-gray-500 dark:text-gray-400">Decentralized Identifier (DID)</span> 47 + <span class="text-sm text-gray-500 dark:text-gray-400">Decentralized identifier (DID)</span> 48 48 <span class="font-mono font-bold">{{ .LoggedInUser.Did }}</span> 49 49 </div> 50 50 <div class="flex flex-col gap-1 p-4"> 51 - <span class="text-sm text-gray-500 dark:text-gray-400">Personal Data Server (PDS)</span> 51 + <span class="text-sm text-gray-500 dark:text-gray-400">Personal data server (PDS)</span> 52 52 <span class="font-bold">{{ resolvePds .LoggedInUser.Did }}</span> 53 53 </div> 54 54 </div> ··· 62 62 <form hx-post="/settings/handle" hx-swap="none" class="flex flex-col gap-3"> 63 63 <input type="hidden" name="type" value="subdomain"> 64 64 <div class="flex items-stretch rounded border border-gray-200 dark:border-gray-600 overflow-hidden focus-within:ring-1 focus-within:ring-blue-500 dark:bg-gray-700"> 65 - <input type="text" name="handle" placeholder="username" class="flex-1 px-2 py-1.5 bg-transparent dark:text-white border-0 focus:outline-none focus:ring-0 min-w-0" required> 65 + <input type="text" name="handle" placeholder="Username" class="flex-1 px-2 py-1.5 bg-transparent dark:text-white border-0 focus:outline-none focus:ring-0 min-w-0" required> 66 66 <span class="px-2 py-1.5 bg-gray-100 dark:bg-gray-600 text-gray-500 dark:text-gray-300 select-none whitespace-nowrap border-l border-gray-200 dark:border-gray-600 content-center">{{ const.PdsUserDomain }}</span> 67 67 </div> 68 68 <div class="flex gap-2 pt-2"> 69 69 <button type="button" popovertarget="change-handle-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 70 - {{ i "x" "size-4" }} cancel 70 + {{ i "x" "size-4" }} Cancel 71 71 </button> 72 72 <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2"> 73 - {{ i "check" "size-4" }} save 73 + {{ i "check" "size-4" }} Save 74 74 </button> 75 75 </div> 76 76 </form> ··· 97 97 </div> 98 98 <div class="flex gap-2 pt-2"> 99 99 <button type="button" popovertarget="change-handle-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 100 - {{ i "x" "size-4" }} cancel 100 + {{ i "x" "size-4" }} Cancel 101 101 </button> 102 102 <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2"> 103 - {{ i "check" "size-4" }} verify & save 103 + {{ i "check" "size-4" }} Verify & save 104 104 </button> 105 105 </div> 106 106 </form> 107 - <a href="#" id="switch-to-subdomain" class="text-sm text-gray-400 underline hover:text-gray-600 dark:hover:text-gray-300">use a {{ const.PdsUserDomain }} subdomain instead</a> 107 + <a href="#" id="switch-to-subdomain" class="text-sm text-gray-400 underline hover:text-gray-600 dark:hover:text-gray-300">Use a {{ const.PdsUserDomain }} subdomain instead</a> 108 108 </div> 109 109 <div id="handle-error" class="text-red-500 dark:text-red-400 text-sm empty:hidden"></div> 110 110 <div id="handle-success" class="text-green-500 dark:text-green-400 text-sm empty:hidden"></div> ··· 146 146 popovertargetaction="toggle" 147 147 class="btn flex items-center gap-2 text-sm cursor-pointer"> 148 148 {{ i "key" "size-4" }} 149 - change password 149 + Change password 150 150 </button> 151 151 {{ if $isDeactivated }} 152 152 <button ··· 154 154 popovertargetaction="toggle" 155 155 class="btn flex items-center gap-2 text-sm text-green-600 hover:text-green-700 dark:text-green-400 dark:hover:text-green-300 border-green-300 dark:border-green-600 cursor-pointer"> 156 156 {{ i "play" "size-4" }} 157 - reactivate account 157 + Reactivate account 158 158 </button> 159 159 {{ else }} 160 160 <button ··· 162 162 popovertargetaction="toggle" 163 163 class="btn flex items-center gap-2 text-sm text-amber-600 hover:text-amber-700 dark:text-amber-400 dark:hover:text-amber-300 border-amber-300 dark:border-amber-600 cursor-pointer"> 164 164 {{ i "pause" "size-4" }} 165 - deactivate account 165 + Deactivate account 166 166 </button> 167 167 {{ end }} 168 168 <button ··· 170 170 popovertargetaction="toggle" 171 171 class="btn flex items-center gap-2 text-sm text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300 border-red-300 dark:border-red-600 cursor-pointer"> 172 172 {{ i "trash-2" "size-4" }} 173 - delete account 173 + Delete account 174 174 </button> 175 175 </div> 176 176 </div> ··· 183 183 <label class="uppercase text-sm font-bold p-0">Change password</label> 184 184 <form hx-post="/settings/password/request" hx-swap="none" hx-disabled-elt="find button[type='submit']" class="flex flex-col gap-3"> 185 185 <div class="flex flex-col"> 186 - <label for="current-password">current password</label> 186 + <label for="current-password">Current password</label> 187 187 <input type="password" id="current-password" name="current_password" required autocomplete="current-password" /> 188 188 <span class="text-sm text-gray-500 mt-1">Confirm your identity to proceed.</span> 189 189 </div> 190 190 <div class="flex gap-2 pt-2"> 191 191 <button type="button" popovertarget="change-password-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 192 - {{ i "x" "size-4" }} cancel 192 + {{ i "x" "size-4" }} Cancel 193 193 </button> 194 194 <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2"> 195 - {{ i "key" "size-4" }} send reset code 195 + {{ i "key" "size-4" }} Send reset code 196 196 </button> 197 197 </div> 198 198 </form> ··· 210 210 <p class="text-sm text-gray-500 dark:text-gray-400">This will restore your profile and repositories, making them accessible again.</p> 211 211 <form hx-post="/settings/reactivate" hx-swap="none" hx-disabled-elt="find button[type='submit']" class="flex flex-col gap-3"> 212 212 <div class="flex flex-col"> 213 - <label for="reactivate-password">password</label> 213 + <label for="reactivate-password">Password</label> 214 214 <input type="password" id="reactivate-password" name="password" required autocomplete="current-password" /> 215 215 <span class="text-sm text-gray-500 mt-1">Confirm your identity to proceed.</span> 216 216 </div> 217 217 <div class="flex gap-2 pt-2"> 218 218 <button type="button" popovertarget="reactivate-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 219 - {{ i "x" "size-4" }} cancel 219 + {{ i "x" "size-4" }} Cancel 220 220 </button> 221 221 <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2 text-green-600 hover:text-green-700 dark:text-green-400 dark:hover:text-green-300"> 222 - {{ i "play" "size-4" }} reactivate 222 + {{ i "play" "size-4" }} Reactivate 223 223 </button> 224 224 </div> 225 225 </form> ··· 236 236 <p class="text-sm text-gray-500 dark:text-gray-400">Your profile and repositories will become inaccessible. You can reactivate by logging in again.</p> 237 237 <form hx-post="/settings/deactivate" hx-swap="none" hx-confirm="Are you sure you want to deactivate your account?" hx-disabled-elt="find button[type='submit']" class="flex flex-col gap-3"> 238 238 <div class="flex flex-col"> 239 - <label for="deactivate-password">password</label> 239 + <label for="deactivate-password">Password</label> 240 240 <input type="password" id="deactivate-password" name="password" required autocomplete="current-password" /> 241 241 <span class="text-sm text-gray-500 mt-1">Confirm your identity to proceed.</span> 242 242 </div> 243 243 <div class="flex gap-2 pt-2"> 244 244 <button type="button" popovertarget="deactivate-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 245 - {{ i "x" "size-4" }} cancel 245 + {{ i "x" "size-4" }} Cancel 246 246 </button> 247 247 <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2 text-amber-600 hover:text-amber-700 dark:text-amber-400 dark:hover:text-amber-300"> 248 - {{ i "pause" "size-4" }} deactivate 248 + {{ i "pause" "size-4" }} Deactivate 249 249 </button> 250 250 </div> 251 251 </form> ··· 263 263 <p class="text-sm text-gray-500 dark:text-gray-400">This permanently deletes your account and all associated data. This cannot be undone.</p> 264 264 <form hx-post="/settings/delete/request" hx-swap="none" hx-disabled-elt="find button[type='submit']" class="flex flex-col gap-3"> 265 265 <div class="flex flex-col"> 266 - <label for="delete-password">password</label> 266 + <label for="delete-password">Password</label> 267 267 <input type="password" id="delete-password" name="password" required autocomplete="current-password" /> 268 268 <span class="text-sm text-gray-500 mt-1">Confirm your identity to proceed.</span> 269 269 </div> 270 270 <div class="flex gap-2 pt-2"> 271 271 <button type="button" popovertarget="delete-modal" popovertargetaction="hide" class="btn w-1/2 flex items-center gap-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"> 272 - {{ i "x" "size-4" }} cancel 272 + {{ i "x" "size-4" }} Cancel 273 273 </button> 274 274 <button type="submit" class="btn w-1/2 flex items-center justify-center gap-2 text-red-600 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 275 - {{ i "trash-2" "size-4" }} send deletion code 275 + {{ i "trash-2" "size-4" }} Send deletion code 276 276 </button> 277 277 </div> 278 278 </form>
+9 -9
appview/pages/templates/user/settings/sites.html
··· 19 19 {{ define "sitesSettings" }} 20 20 <div class="grid grid-cols-1 md:grid-cols-3 gap-4 items-center"> 21 21 <div class="col-span-1 md:col-span-2"> 22 - <h2 class="text-sm pb-2 uppercase font-bold">Git Sites</h2> 22 + <h2 class="text-sm pb-2 uppercase font-bold">Git sites</h2> 23 23 {{ if .IsTnglHandle }} 24 24 <p class="text-gray-500 dark:text-gray-400"> 25 25 Since your handle is on <code>tngl.sh</code>, it doubles as your sites domain&mdash;your site will be served from that subdomain automatically. ··· 43 43 {{ template "activeClaim" . }} 44 44 {{ else }} 45 45 <div class="flex items-center justify-center p-2 text-gray-500"> 46 - no domain claimed yet 46 + No domain claimed yet 47 47 </div> 48 48 {{ end }} 49 49 </div> ··· 51 51 52 52 {{ if .Claim }} 53 53 <p class="text-gray-500 dark:text-gray-400"> 54 - To deploy your site on this domain, <a href="https://docs.tangled.org/hosting-websites-on-tangled.html">read the docs</a>. 54 + To deploy your site on this domain, <a href="https://docs.tangled.org/hosting-websites-on-tangled.html">Read the docs</a>. 55 55 </p> 56 56 {{ end }} 57 57 {{ end }} ··· 75 75 type="submit" 76 76 class="btn flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 77 77 {{ i "trash-2" "size-4" }} 78 - release 78 + Release 79 79 </button> 80 80 </form> 81 81 </div> ··· 87 87 popovertarget="claim-domain-modal" 88 88 popovertargetaction="toggle"> 89 89 {{ i "plus" "size-4" }} 90 - claim domain 90 + Claim domain 91 91 </button> 92 92 <div 93 93 id="claim-domain-modal" ··· 104 104 hx-swap="none" 105 105 class="flex flex-col gap-2" 106 106 > 107 - <label class="uppercase p-0">claim a subdomain</label> 107 + <label class="uppercase p-0">Claim a subdomain</label> 108 108 <p class="text-gray-500 dark:text-gray-400">Choose a subdomain under <code>{{ .SitesDomain }}</code>. Only lowercase letters, digits, and hyphens are allowed.</p> 109 109 <div class="flex items-stretch rounded border border-gray-200 dark:border-gray-600 overflow-hidden focus-within:ring-1 focus-within:ring-blue-500 dark:bg-gray-700"> 110 110 <input 111 111 type="text" 112 112 name="subdomain" 113 113 required 114 - placeholder="yourname" 114 + placeholder="Yourname" 115 115 pattern="[a-z0-9][a-z0-9\-]{0,61}[a-z0-9]" 116 116 class="flex-1 px-2 py-1.5 bg-transparent dark:text-white border-0 focus:outline-none focus:ring-0 min-w-0" 117 117 /> ··· 123 123 popovertarget="claim-domain-modal" 124 124 popovertargetaction="hide" 125 125 class="btn w-1/2 flex items-center gap-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"> 126 - {{ i "x" "size-4" }} cancel 126 + {{ i "x" "size-4" }} Cancel 127 127 </button> 128 128 <button type="submit" class="btn w-1/2 flex items-center"> 129 - <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} claim</span> 129 + <span class="inline-flex gap-2 items-center">{{ i "plus" "size-4" }} Claim</span> 130 130 <span id="claim-spinner" class="group"> 131 131 {{ i "loader-circle" "ml-2 w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} 132 132 </span>
+2 -2
appview/pages/templates/user/signup.html
··· 12 12 hx-disabled-elt="#signup-button" 13 13 > 14 14 <div class="flex flex-col mt-2"> 15 - <label for="email">email</label> 15 + <label for="email">Email</label> 16 16 <input 17 17 type="email" 18 18 id="email" ··· 33 33 </div> 34 34 <button class="btn text-base w-full my-2 mt-6" type="submit" id="signup-button" tabindex="7" > 35 35 {{ i "loader-circle" "size-4 animate-spin hidden group-[.htmx-request]:inline" }} 36 - <span class="inline group-[.htmx-request]:hidden">join now</span> 36 + <span class="inline group-[.htmx-request]:hidden">Join now</span> 37 37 </button> 38 38 <p class="text-sm text-gray-500"> 39 39 Already have an AT Protocol account? <a href="/login" class="underline">Login to Tangled</a>.
+1 -1
appview/pages/templates/user/strings.html
··· 38 38 <span>{{ $stat.LineCount }} line{{if ne $stat.LineCount 1}}s{{end}}</span> 39 39 <span class="select-none [&:before]:content-['·']"></span> 40 40 {{ with $s.Edited }} 41 - <span>edited {{ template "repo/fragments/shortTimeAgo" . }}</span> 41 + <span>Edited {{ template "repo/fragments/shortTimeAgo" . }}</span> 42 42 {{ else }} 43 43 {{ template "repo/fragments/shortTimeAgo" $s.Created }} 44 44 {{ end }}
+1 -1
appview/pages/templates/user/vouches.html
··· 21 21 {{ $isSelf := and .LoggedInUser (eq .LoggedInUser.Did .Card.UserDid) }} 22 22 {{ if not .LoggedInUser }} 23 23 <div class="text-base text-gray-500 flex items-center justify-center italic p-12 border border-gray-200 dark:border-gray-700 rounded"> 24 - <span>You need to <a href="/login" class="underline">log in</a> to view vouches.</span> 24 + <span>You need to <a href="/login" class="underline">Log in</a> to view vouches.</span> 25 25 </div> 26 26 {{ else if not .Vouches }} 27 27 {{ if not (and $isSelf .Suggestions) }}
+1 -1
appview/pulls/comment.go
··· 60 60 case http.MethodPost: 61 61 body := r.FormValue("body") 62 62 if body == "" { 63 - s.pages.Notice(w, "pull", "Comment body is required") 63 + s.pages.Notice(w, "pull", "Comment body is required.") 64 64 return 65 65 } 66 66
+1 -1
appview/pulls/compose.go
··· 81 81 } 82 82 sanitizer := markup.NewSanitizer() 83 83 if st := strings.TrimSpace(sanitizer.SanitizeDescription(title)); (st) == "" { 84 - s.pages.Notice(w, "pull", "Title is empty after HTML sanitization") 84 + s.pages.Notice(w, "pull", "Title is empty after HTML sanitization.") 85 85 return 86 86 } 87 87 }
+1 -1
appview/pulls/resubmit.go
··· 375 375 // must have atleast 1 patch to begin with 376 376 if len(formatPatches) == 0 { 377 377 l.Error("no patches found in the generated format-patch") 378 - s.pages.Notice(w, "pull-resubmit-error", "Failed to resubmit pull request: No patches found in the generated patch.") 378 + s.pages.Notice(w, "pull-resubmit-error", "Failed to resubmit pull request: no patches found in the generated patch.") 379 379 return 380 380 } 381 381
+5 -5
appview/repo/artifact.go
··· 37 37 f, err := rp.repoResolver.Resolve(r) 38 38 if err != nil { 39 39 l.Error("failed to get repo and knot", "err", err) 40 - rp.pages.Notice(w, "upload", "failed to upload artifact, error in repo resolution") 40 + rp.pages.Notice(w, "upload", "Failed to upload artifact, error in repo resolution.") 41 41 return 42 42 } 43 43 44 44 tag, err := rp.resolveTag(r.Context(), f, tagParam) 45 45 if err != nil { 46 46 l.Error("failed to resolve tag", "err", err) 47 - rp.pages.Notice(w, "upload", "failed to upload artifact, error in tag resolution") 47 + rp.pages.Notice(w, "upload", "Failed to upload artifact, error in tag resolution.") 48 48 return 49 49 } 50 50 51 51 file, header, err := r.FormFile("artifact") 52 52 if err != nil { 53 53 l.Error("failed to upload artifact", "err", err) 54 - rp.pages.Notice(w, "upload", "failed to upload artifact") 54 + rp.pages.Notice(w, "upload", "Failed to upload artifact.") 55 55 return 56 56 } 57 57 defer file.Close() ··· 59 59 client, err := rp.oauth.AuthorizedClient(r) 60 60 if err != nil { 61 61 l.Error("failed to get authorized client", "err", err) 62 - rp.pages.Notice(w, "upload", "failed to get authorized client") 62 + rp.pages.Notice(w, "upload", "Failed to get authorized client.") 63 63 return 64 64 } 65 65 ··· 148 148 tag, err := rp.resolveTag(r.Context(), f, tagParam) 149 149 if err != nil { 150 150 l.Error("failed to resolve tag", "err", err) 151 - rp.pages.Notice(w, "upload", "failed to upload artifact, error in tag resolution") 151 + rp.pages.Notice(w, "upload", "Failed to upload artifact, error in tag resolution.") 152 152 return 153 153 } 154 154
+17 -17
appview/repo/webhooks.go
··· 27 27 webhooks, err := db.GetWebhooksForRepo(rp.db, f.RepoAt()) 28 28 if err != nil { 29 29 l.Error("failed to get webhooks", "err", err) 30 - rp.pages.Notice(w, "webhooks-error", "Failed to load webhooks") 30 + rp.pages.Notice(w, "webhooks-error", "Failed to load webhooks.") 31 31 return 32 32 } 33 33 ··· 64 64 65 65 url := strings.TrimSpace(r.FormValue("url")) 66 66 if url == "" { 67 - rp.pages.Notice(w, "webhooks-error", "Webhook URL is required") 67 + rp.pages.Notice(w, "webhooks-error", "Webhook URL is required.") 68 68 return 69 69 } 70 70 ··· 84 84 } 85 85 86 86 if len(events) == 0 { 87 - rp.pages.Notice(w, "webhooks-error", "Push events must be enabled") 87 + rp.pages.Notice(w, "webhooks-error", "Push events must be enabled.") 88 88 return 89 89 } 90 90 ··· 99 99 tx, err := rp.db.Begin() 100 100 if err != nil { 101 101 l.Error("failed to start transaction", "err", err) 102 - rp.pages.Notice(w, "webhooks-error", "Failed to create webhook") 102 + rp.pages.Notice(w, "webhooks-error", "Failed to create webhook.") 103 103 return 104 104 } 105 105 defer tx.Rollback() 106 106 107 107 if err := db.AddWebhook(tx, webhook); err != nil { 108 108 l.Error("failed to add webhook", "err", err) 109 - rp.pages.Notice(w, "webhooks-error", "Failed to create webhook") 109 + rp.pages.Notice(w, "webhooks-error", "Failed to create webhook.") 110 110 return 111 111 } 112 112 113 113 if err := tx.Commit(); err != nil { 114 114 l.Error("failed to commit transaction", "err", err) 115 - rp.pages.Notice(w, "webhooks-error", "Failed to create webhook") 115 + rp.pages.Notice(w, "webhooks-error", "Failed to create webhook.") 116 116 return 117 117 } 118 118 ··· 141 141 webhook, err := db.GetWebhook(rp.db, id) 142 142 if err != nil { 143 143 l.Error("failed to get webhook", "err", err) 144 - rp.pages.Notice(w, "webhooks-error", "Webhook not found") 144 + rp.pages.Notice(w, "webhooks-error", "Webhook not found.") 145 145 return 146 146 } 147 147 ··· 181 181 tx, err := rp.db.Begin() 182 182 if err != nil { 183 183 l.Error("failed to start transaction", "err", err) 184 - rp.pages.Notice(w, "webhooks-error", "Failed to update webhook") 184 + rp.pages.Notice(w, "webhooks-error", "Failed to update webhook.") 185 185 return 186 186 } 187 187 defer tx.Rollback() 188 188 189 189 if err := db.UpdateWebhook(tx, webhook); err != nil { 190 190 l.Error("failed to update webhook", "err", err) 191 - rp.pages.Notice(w, "webhooks-error", "Failed to update webhook") 191 + rp.pages.Notice(w, "webhooks-error", "Failed to update webhook.") 192 192 return 193 193 } 194 194 195 195 if err := tx.Commit(); err != nil { 196 196 l.Error("failed to commit transaction", "err", err) 197 - rp.pages.Notice(w, "webhooks-error", "Failed to update webhook") 197 + rp.pages.Notice(w, "webhooks-error", "Failed to update webhook.") 198 198 return 199 199 } 200 200 ··· 237 237 tx, err := rp.db.Begin() 238 238 if err != nil { 239 239 l.Error("failed to start transaction", "err", err) 240 - rp.pages.Notice(w, "webhooks-error", "Failed to delete webhook") 240 + rp.pages.Notice(w, "webhooks-error", "Failed to delete webhook.") 241 241 return 242 242 } 243 243 defer tx.Rollback() 244 244 245 245 if err := db.DeleteWebhook(tx, id); err != nil { 246 246 l.Error("failed to delete webhook", "err", err) 247 - rp.pages.Notice(w, "webhooks-error", "Failed to delete webhook") 247 + rp.pages.Notice(w, "webhooks-error", "Failed to delete webhook.") 248 248 return 249 249 } 250 250 251 251 if err := tx.Commit(); err != nil { 252 252 l.Error("failed to commit transaction", "err", err) 253 - rp.pages.Notice(w, "webhooks-error", "Failed to delete webhook") 253 + rp.pages.Notice(w, "webhooks-error", "Failed to delete webhook.") 254 254 return 255 255 } 256 256 ··· 296 296 tx, err := rp.db.Begin() 297 297 if err != nil { 298 298 l.Error("failed to start transaction", "err", err) 299 - rp.pages.Notice(w, "webhooks-error", "Failed to toggle webhook") 299 + rp.pages.Notice(w, "webhooks-error", "Failed to toggle webhook.") 300 300 return 301 301 } 302 302 defer tx.Rollback() 303 303 304 304 if err := db.UpdateWebhook(tx, webhook); err != nil { 305 305 l.Error("failed to update webhook", "err", err) 306 - rp.pages.Notice(w, "webhooks-error", "Failed to toggle webhook") 306 + rp.pages.Notice(w, "webhooks-error", "Failed to toggle webhook.") 307 307 return 308 308 } 309 309 310 310 if err := tx.Commit(); err != nil { 311 311 l.Error("failed to commit transaction", "err", err) 312 - rp.pages.Notice(w, "webhooks-error", "Failed to toggle webhook") 312 + rp.pages.Notice(w, "webhooks-error", "Failed to toggle webhook.") 313 313 return 314 314 } 315 315 ··· 352 352 deliveries, err := db.GetWebhookDeliveries(rp.db, webhook.Id, 100) 353 353 if err != nil { 354 354 l.Error("failed to get webhook deliveries", "err", err) 355 - rp.pages.Notice(w, "webhooks-error", "Failed to load deliveries") 355 + rp.pages.Notice(w, "webhooks-error", "Failed to load deliveries.") 356 356 return 357 357 } 358 358
+1 -1
appview/settings/settings.go
··· 194 194 195 195 isTnglHandle, err := s.isTnglHandle(r.Context(), syntax.DID(user.Did)) 196 196 if err != nil { 197 - s.Pages.Notice(w, "settings-sites-error", "Unable to resolve user identity") 197 + s.Pages.Notice(w, "settings-sites-error", "Unable to resolve user identity.") 198 198 return 199 199 } 200 200 if isTnglHandle {
+11 -11
appview/state/profile.go
··· 547 547 func (s *State) followersPage(w http.ResponseWriter, r *http.Request) { 548 548 followPage, err := s.followPage(r, db.GetFollowers, func(f models.Follow) string { return f.UserDid }) 549 549 if err != nil { 550 - s.pages.Notice(w, "all-followers", "Failed to load followers") 550 + s.pages.Notice(w, "all-followers", "Failed to load followers.") 551 551 return 552 552 } 553 553 ··· 561 561 func (s *State) followingPage(w http.ResponseWriter, r *http.Request) { 562 562 followPage, err := s.followPage(r, db.GetFollowing, func(f models.Follow) string { return f.SubjectDid }) 563 563 if err != nil { 564 - s.pages.Notice(w, "all-following", "Failed to load following") 564 + s.pages.Notice(w, "all-following", "Failed to load following.") 565 565 return 566 566 } 567 567 ··· 1031 1031 // Parse multipart form (10MB max) 1032 1032 if err := r.ParseMultipartForm(10 << 20); err != nil { 1033 1033 l.Error("failed to parse form", "err", err) 1034 - s.pages.Notice(w, "avatar-error", "Failed to parse form") 1034 + s.pages.Notice(w, "avatar-error", "Failed to parse form.") 1035 1035 return 1036 1036 } 1037 1037 1038 1038 file, header, err := r.FormFile("avatar") 1039 1039 if err != nil { 1040 1040 l.Error("failed to read avatar file", "err", err) 1041 - s.pages.Notice(w, "avatar-error", "Failed to read avatar file") 1041 + s.pages.Notice(w, "avatar-error", "Failed to read avatar file.") 1042 1042 return 1043 1043 } 1044 1044 defer file.Close() ··· 1059 1059 client, err := s.oauth.AuthorizedClient(r) 1060 1060 if err != nil { 1061 1061 l.Error("failed to get PDS client", "err", err) 1062 - s.pages.Notice(w, "avatar-error", "Failed to connect to your PDS") 1062 + s.pages.Notice(w, "avatar-error", "Failed to connect to your PDS.") 1063 1063 return 1064 1064 } 1065 1065 1066 1066 uploadBlobResp, err := xrpc.RepoUploadBlob(r.Context(), client, file, header.Header.Get("Content-Type")) 1067 1067 if err != nil { 1068 1068 l.Error("failed to upload avatar blob", "err", err) 1069 - s.pages.Notice(w, "avatar-error", "Failed to upload avatar to your PDS") 1069 + s.pages.Notice(w, "avatar-error", "Failed to upload avatar to your PDS.") 1070 1070 return 1071 1071 } 1072 1072 ··· 1076 1076 getRecordResp, err := comatproto.RepoGetRecord(r.Context(), client, "", tangled.ActorProfileNSID, user.Did, "self") 1077 1077 if err != nil { 1078 1078 l.Error("failed to get current profile record", "err", err) 1079 - s.pages.Notice(w, "avatar-error", "Failed to get current profile from your PDS") 1079 + s.pages.Notice(w, "avatar-error", "Failed to get current profile from your PDS.") 1080 1080 return 1081 1081 } 1082 1082 ··· 1105 1105 1106 1106 if err != nil { 1107 1107 l.Error("failed to update profile record", "err", err) 1108 - s.pages.Notice(w, "avatar-error", "Failed to update profile on your PDS") 1108 + s.pages.Notice(w, "avatar-error", "Failed to update profile on your PDS.") 1109 1109 return 1110 1110 } 1111 1111 ··· 1147 1147 client, err := s.oauth.AuthorizedClient(r) 1148 1148 if err != nil { 1149 1149 l.Error("failed to get PDS client", "err", err) 1150 - s.pages.Notice(w, "avatar-error", "Failed to connect to your PDS") 1150 + s.pages.Notice(w, "avatar-error", "Failed to connect to your PDS.") 1151 1151 return 1152 1152 } 1153 1153 1154 1154 getRecordResp, err := comatproto.RepoGetRecord(r.Context(), client, "", tangled.ActorProfileNSID, user.Did, "self") 1155 1155 if err != nil { 1156 1156 l.Error("failed to get current profile record", "err", err) 1157 - s.pages.Notice(w, "avatar-error", "Failed to get current profile from your PDS") 1157 + s.pages.Notice(w, "avatar-error", "Failed to get current profile from your PDS.") 1158 1158 return 1159 1159 } 1160 1160 ··· 1183 1183 1184 1184 if err != nil { 1185 1185 l.Error("failed to update profile record", "err", err) 1186 - s.pages.Notice(w, "avatar-error", "Failed to remove avatar from your PDS") 1186 + s.pages.Notice(w, "avatar-error", "Failed to remove avatar from your PDS.") 1187 1187 return 1188 1188 } 1189 1189
+6 -6
blog/templates/fragments/footer.html
··· 7 7 </a> 8 8 <span>&copy; 2026 Tangled Labs Oy.</span> 9 9 </div> 10 - <a href="https://docs.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">docs</a> 11 - <a href="https://tangled.org/tangled.org/core" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">source</a> 12 - <a href="https://chat.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">discord</a> 13 - <a href="https://bsky.app/profile/tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">bluesky</a> 14 - <a href="https://x.com/tangled_org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">twitter (x)</a> 15 - <a href="/feed.xml" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">feed</a> 10 + <a href="https://docs.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Docs</a> 11 + <a href="https://tangled.org/tangled.org/core" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Source</a> 12 + <a href="https://chat.tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">Discord</a> 13 + <a href="https://bsky.app/profile/tangled.org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">Bluesky</a> 14 + <a href="https://x.com/tangled_org" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline" target="_blank" rel="noopener noreferrer">Twitter (x)</a> 15 + <a href="/feed.xml" class="hover:text-gray-900 dark:hover:text-gray-200 hover:underline">Feed</a> 16 16 </div> 17 17 </footer> 18 18 {{ end }}
+2 -2
blog/templates/fragments/topbar.html
··· 9 9 </div> 10 10 11 11 <div id="right-items" class="flex items-center gap-4"> 12 - <a href="https://tangled.org/login">login</a> 12 + <a href="https://tangled.org/login">Login</a> 13 13 <span class="text-gray-500 dark:text-gray-400">or</span> 14 14 <a href="https://tangled.org/signup" class="btn-create py-0 hover:no-underline hover:text-white flex items-center gap-2"> 15 - join now {{ i "arrow-right" "size-4" }} 15 + Join now {{ i "arrow-right" "size-4" }} 16 16 </a> 17 17 </div> 18 18 </div>
+2 -2
blog/templates/index.html
··· 16 16 <div class="max-w-screen-lg mx-auto w-full px-4 py-10"> 17 17 18 18 <header class="mb-10 text-center"> 19 - <h1 class="text-3xl font-bold dark:text-white mb-2">the tangled blog</h1> 20 - <p class="text-gray-500 dark:text-gray-400">all the ropes and scaffolding</p> 19 + <h1 class="text-3xl font-bold dark:text-white mb-2">The Tangled blog</h1> 20 + <p class="text-gray-500 dark:text-gray-400">All the ropes and scaffolding</p> 21 21 </header> 22 22 23 23 {{ if .Featured }}
+3 -3
blog/templates/text.html
··· 1 1 {{ define "fragments/logotypeSmall" }} 2 2 <span class="flex items-center gap-2"> 3 3 {{ template "fragments/dolly/logo" "size-8 text-black dark:text-white" }} 4 - <span class="font-bold text-xl not-italic">tangled</span> 5 - <span class="font-normal not-italic text-xs rounded bg-gray-100 dark:bg-gray-700 px-1">alpha</span> 4 + <span class="font-bold text-xl not-italic">Tangled</span> 5 + <span class="font-normal not-italic text-xs rounded bg-gray-100 dark:bg-gray-700 px-1">Alpha</span> 6 6 </span> 7 7 {{ end }} 8 8 ··· 55 55 56 56 <span class="mx-2 select-none">&middot;</span> 57 57 58 - by 58 + By 59 59 {{ $authors := index .Meta "authors" }} 60 60 {{ if eq (len $authors) 2 }} 61 61 <a href="https://bsky.app/profile/{{ (index $authors 0).handle }}" class="no-underline">{{ (index $authors 0).name }}</a>