code.gitea.io/gitea@v1.22.3/routers/web/repo/middlewares.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo 5 6 import ( 7 "fmt" 8 "strconv" 9 10 system_model "code.gitea.io/gitea/models/system" 11 user_model "code.gitea.io/gitea/models/user" 12 "code.gitea.io/gitea/modules/git" 13 "code.gitea.io/gitea/modules/optional" 14 "code.gitea.io/gitea/services/context" 15 user_service "code.gitea.io/gitea/services/user" 16 ) 17 18 // SetEditorconfigIfExists set editor config as render variable 19 func SetEditorconfigIfExists(ctx *context.Context) { 20 if ctx.Repo.Repository.IsEmpty { 21 return 22 } 23 24 ec, _, err := ctx.Repo.GetEditorconfig() 25 26 if err != nil && !git.IsErrNotExist(err) { 27 description := fmt.Sprintf("Error while getting .editorconfig file: %v", err) 28 if err := system_model.CreateRepositoryNotice(description); err != nil { 29 ctx.ServerError("ErrCreatingReporitoryNotice", err) 30 } 31 return 32 } 33 34 ctx.Data["Editorconfig"] = ec 35 } 36 37 // SetDiffViewStyle set diff style as render variable 38 func SetDiffViewStyle(ctx *context.Context) { 39 queryStyle := ctx.FormString("style") 40 41 if !ctx.IsSigned { 42 ctx.Data["IsSplitStyle"] = queryStyle == "split" 43 return 44 } 45 46 var ( 47 userStyle = ctx.Doer.DiffViewStyle 48 style string 49 ) 50 51 if queryStyle == "unified" || queryStyle == "split" { 52 style = queryStyle 53 } else if userStyle == "unified" || userStyle == "split" { 54 style = userStyle 55 } else { 56 style = "unified" 57 } 58 59 ctx.Data["IsSplitStyle"] = style == "split" 60 61 opts := &user_service.UpdateOptions{ 62 DiffViewStyle: optional.Some(style), 63 } 64 if err := user_service.UpdateUser(ctx, ctx.Doer, opts); err != nil { 65 ctx.ServerError("UpdateUser", err) 66 } 67 } 68 69 // SetWhitespaceBehavior set whitespace behavior as render variable 70 func SetWhitespaceBehavior(ctx *context.Context) { 71 const defaultWhitespaceBehavior = "show-all" 72 whitespaceBehavior := ctx.FormString("whitespace") 73 switch whitespaceBehavior { 74 case "", "ignore-all", "ignore-eol", "ignore-change": 75 break 76 default: 77 whitespaceBehavior = defaultWhitespaceBehavior 78 } 79 if ctx.IsSigned { 80 userWhitespaceBehavior, err := user_model.GetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyDiffWhitespaceBehavior, defaultWhitespaceBehavior) 81 if err == nil { 82 if whitespaceBehavior == "" { 83 whitespaceBehavior = userWhitespaceBehavior 84 } else if whitespaceBehavior != userWhitespaceBehavior { 85 _ = user_model.SetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyDiffWhitespaceBehavior, whitespaceBehavior) 86 } 87 } // else: we can ignore the error safely 88 } 89 90 // these behaviors are for gitdiff.GetWhitespaceFlag 91 if whitespaceBehavior == "" { 92 ctx.Data["WhitespaceBehavior"] = defaultWhitespaceBehavior 93 } else { 94 ctx.Data["WhitespaceBehavior"] = whitespaceBehavior 95 } 96 } 97 98 // SetShowOutdatedComments set the show outdated comments option as context variable 99 func SetShowOutdatedComments(ctx *context.Context) { 100 showOutdatedCommentsValue := ctx.FormString("show-outdated") 101 if showOutdatedCommentsValue != "true" && showOutdatedCommentsValue != "false" { 102 // invalid or no value for this form string -> use default or stored user setting 103 showOutdatedCommentsValue = "true" 104 if ctx.IsSigned { 105 showOutdatedCommentsValue, _ = user_model.GetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyShowOutdatedComments, showOutdatedCommentsValue) 106 } 107 } else if ctx.IsSigned { 108 // valid value -> update user setting if user is logged in 109 _ = user_model.SetUserSetting(ctx, ctx.Doer.ID, user_model.SettingsKeyShowOutdatedComments, showOutdatedCommentsValue) 110 } 111 ctx.Data["ShowOutdatedComments"], _ = strconv.ParseBool(showOutdatedCommentsValue) 112 }