Default sort gists user preference (#744)

This commit is contained in:
Thomas
2026-06-28 02:06:08 +07:00
committed by GitHub
parent 71cbbfd5c6
commit 4b5a4377ba
4 changed files with 54 additions and 4 deletions
+2
View File
@@ -305,6 +305,8 @@ type UserStyleDTO struct {
AddedLineColor string `form:"addedlinecolor" json:"added_line_color" validate:"min=0,max=7"`
GitLineColor string `form:"gitlinecolor" json:"git_line_color" validate:"min=0,max=7"`
Theme string `form:"theme" json:"theme" validate:"oneof=light dark auto"`
DefaultSort string `form:"defaultsort" json:"default_sort" validate:"omitempty,oneof=created updated"`
DefaultOrder string `form:"defaultorder" json:"default_order" validate:"omitempty,oneof=asc desc"`
}
func (dto *UserStyleDTO) ToJson() string {
+6
View File
@@ -189,6 +189,12 @@ settings.style.theme: Theme
settings.style.theme-light: Light
settings.style.theme-dark: Dark
settings.style.theme-auto: Auto
settings.style.default-sort: Default sort order
settings.style.default-sort-created: Created date
settings.style.default-sort-updated: Updated date
settings.style.default-order: Default order direction
settings.style.default-order-desc: Newest first
settings.style.default-order-asc: Oldest first
settings.create-token: Create access token
settings.create-token-help: Access tokens can be used to access the API
settings.token-name: Name
+18 -4
View File
@@ -23,20 +23,34 @@ func AllGists(ctx *context.Context) error {
pageInt := handlers.GetPage(ctx)
sort := "created"
sortText := ctx.TrH("gist.list.sort-by-created")
order := "desc"
orderText := ctx.TrH("gist.list.order-by-desc")
if userLogged != nil {
if style := userLogged.GetStyle(); style != nil {
if style.DefaultSort == "updated" {
sort = "updated"
}
if style.DefaultOrder == "asc" {
order = "asc"
}
}
}
if ctx.QueryParam("sort") == "updated" {
sort = "updated"
sortText = ctx.TrH("gist.list.sort-by-updated")
} else if ctx.QueryParam("sort") == "created" {
sort = "created"
}
if ctx.QueryParam("order") == "asc" {
order = "asc"
orderText = ctx.TrH("gist.list.order-by-asc")
} else if ctx.QueryParam("order") == "desc" {
order = "desc"
}
sortText := ctx.TrH("gist.list.sort-by-" + sort)
orderText := ctx.TrH("gist.list.order-by-" + order)
pagination := &handlers.PaginationParams{
Sort: sort,
Order: order,
+28
View File
@@ -113,6 +113,34 @@
<input type="color" value="{{ if .currentStyle }}{{ .currentStyle.GitLineColor }}{{ else }}#8f8f8f{{ end }}" id="gitlinecolor" name="gitlinecolor">
</div>
</div>
<h2 class="text-md font-bold text-slate-700 dark:text-slate-300 mt-8 mb-4">
{{ .locale.Tr "settings.style.default-sort" }}
</h2>
<div class="mt-2 space-y-4 sm:flex sm:items-center sm:space-x-10 sm:space-y-0">
<div class="flex items-center">
<input id="default-sort-created" value="created" name="defaultsort" type="radio" {{ if .currentStyle }}{{ if or (eq .currentStyle.DefaultSort "created") (eq .currentStyle.DefaultSort "") }}checked{{ end }}{{ else }}checked{{ end }} class="relative size-4 appearance-none rounded-full border border-gray-300 bg-white before:absolute before:inset-1 before:rounded-full before:bg-white checked:border-indigo-600 checked:bg-indigo-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:before:bg-gray-400 forced-colors:appearance-auto forced-colors:before:hidden not-checked:before:hidden">
<label for="default-sort-created" class="ml-3 block text-sm font-medium text-slate-700 dark:text-slate-300">{{ .locale.Tr "settings.style.default-sort-created" }}</label>
</div>
<div class="flex items-center">
<input id="default-sort-updated" value="updated" name="defaultsort" type="radio" {{ if .currentStyle }}{{ if eq .currentStyle.DefaultSort "updated" }}checked{{ end }}{{ end }} class="relative size-4 appearance-none rounded-full border border-gray-300 bg-white before:absolute before:inset-1 before:rounded-full before:bg-white checked:border-indigo-600 checked:bg-indigo-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:before:bg-gray-400 forced-colors:appearance-auto forced-colors:before:hidden not-checked:before:hidden">
<label for="default-sort-updated" class="ml-3 block text-sm font-medium text-slate-700 dark:text-slate-300">{{ .locale.Tr "settings.style.default-sort-updated" }}</label>
</div>
</div>
<h2 class="text-md font-bold text-slate-700 dark:text-slate-300 mt-8 mb-4">
{{ .locale.Tr "settings.style.default-order" }}
</h2>
<div class="mt-2 space-y-4 sm:flex sm:items-center sm:space-x-10 sm:space-y-0">
<div class="flex items-center">
<input id="default-order-desc" value="desc" name="defaultorder" type="radio" {{ if .currentStyle }}{{ if or (eq .currentStyle.DefaultOrder "desc") (eq .currentStyle.DefaultOrder "") }}checked{{ end }}{{ else }}checked{{ end }} class="relative size-4 appearance-none rounded-full border border-gray-300 bg-white before:absolute before:inset-1 before:rounded-full before:bg-white checked:border-indigo-600 checked:bg-indigo-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:before:bg-gray-400 forced-colors:appearance-auto forced-colors:before:hidden not-checked:before:hidden">
<label for="default-order-desc" class="ml-3 block text-sm font-medium text-slate-700 dark:text-slate-300">{{ .locale.Tr "settings.style.default-order-desc" }}</label>
</div>
<div class="flex items-center">
<input id="default-order-asc" value="asc" name="defaultorder" type="radio" {{ if .currentStyle }}{{ if eq .currentStyle.DefaultOrder "asc" }}checked{{ end }}{{ end }} class="relative size-4 appearance-none rounded-full border border-gray-300 bg-white before:absolute before:inset-1 before:rounded-full before:bg-white checked:border-indigo-600 checked:bg-indigo-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600 disabled:border-gray-300 disabled:bg-gray-100 disabled:before:bg-gray-400 forced-colors:appearance-auto forced-colors:before:hidden not-checked:before:hidden">
<label for="default-order-asc" class="ml-3 block text-sm font-medium text-slate-700 dark:text-slate-300">{{ .locale.Tr "settings.style.default-order-asc" }}</label>
</div>
</div>
{{ .csrfHtml }}
<button type="submit" class="mt-4 inline-flex items-center px-4 py-2 border border-transparent border-gray-200 dark:border-gray-700 text-sm font-medium rounded-md shadow-sm text-white dark:text-white bg-primary-500 hover:bg-primary-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-primary-500">{{ .locale.Tr "settings.style.save-style" }}</button>
</form>