]> source.dussan.org Git - gitea.git/commitdiff
Added auto-save whitespace behavior if it changed manually (#15566)
authorViktor Suprun <popsul1993@gmail.com>
Tue, 8 Feb 2022 06:15:04 +0000 (17:15 +1100)
committerGitHub <noreply@github.com>
Tue, 8 Feb 2022 06:15:04 +0000 (14:15 +0800)
models/user/setting_keys.go
routers/web/repo/middlewares.go
services/gitdiff/gitdiff.go
templates/repo/diff/whitespace_dropdown.tmpl

index 458b78e357f0cbd0059b6e5c3ce1e32277f207a8..109b5dd916365d144bf3b856384c8339478e8c48 100644 (file)
@@ -5,6 +5,8 @@
 package user
 
 const (
-       // SettingsKeyHiddenCommentTypes is the settings key for hidden comment types
+       // SettingsKeyHiddenCommentTypes is the setting key for hidden comment types
        SettingsKeyHiddenCommentTypes = "issue.hidden_comment_types"
+       // SettingsKeyDiffWhitespaceBehavior is the setting key for whitespace behavior of diff
+       SettingsKeyDiffWhitespaceBehavior = "diff.whitespace_behaviour"
 )
index 3ee9d1a3e98f11e6480eb27a9e927d83c6fc52f8..c99f0ee8f9e57514f4622c1659a7c1485bdf48dd 100644 (file)
@@ -63,11 +63,29 @@ func SetDiffViewStyle(ctx *context.Context) {
 
 // SetWhitespaceBehavior set whitespace behavior as render variable
 func SetWhitespaceBehavior(ctx *context.Context) {
+       const defaultWhitespaceBehavior = "show-all"
        whitespaceBehavior := ctx.FormString("whitespace")
        switch whitespaceBehavior {
-       case "ignore-all", "ignore-eol", "ignore-change":
-               ctx.Data["WhitespaceBehavior"] = whitespaceBehavior
+       case "", "ignore-all", "ignore-eol", "ignore-change":
+               break
        default:
-               ctx.Data["WhitespaceBehavior"] = ""
+               whitespaceBehavior = defaultWhitespaceBehavior
+       }
+       if ctx.IsSigned {
+               userWhitespaceBehavior, err := user_model.GetUserSetting(ctx.User.ID, user_model.SettingsKeyDiffWhitespaceBehavior, defaultWhitespaceBehavior)
+               if err == nil {
+                       if whitespaceBehavior == "" {
+                               whitespaceBehavior = userWhitespaceBehavior
+                       } else if whitespaceBehavior != userWhitespaceBehavior {
+                               _ = user_model.SetUserSetting(ctx.User.ID, user_model.SettingsKeyDiffWhitespaceBehavior, whitespaceBehavior)
+                       }
+               } // else: we can ignore the error safely
+       }
+
+       // these behaviors are for gitdiff.GetWhitespaceFlag
+       if whitespaceBehavior == "" {
+               ctx.Data["WhitespaceBehavior"] = defaultWhitespaceBehavior
+       } else {
+               ctx.Data["WhitespaceBehavior"] = whitespaceBehavior
        }
 }
index 0fcb36161967af2d3dec48d8ea16317d5ccf6d62..017341d63f648910e8318422a1e9424fa2f64c45 100644 (file)
@@ -1532,13 +1532,17 @@ func CommentMustAsDiff(c *models.Comment) *Diff {
 }
 
 // GetWhitespaceFlag returns git diff flag for treating whitespaces
-func GetWhitespaceFlag(whiteSpaceBehavior string) string {
+func GetWhitespaceFlag(whitespaceBehavior string) string {
        whitespaceFlags := map[string]string{
                "ignore-all":    "-w",
                "ignore-change": "-b",
                "ignore-eol":    "--ignore-space-at-eol",
-               "":              "",
+               "show-all":      "",
        }
 
-       return whitespaceFlags[whiteSpaceBehavior]
+       if flag, ok := whitespaceFlags[whitespaceBehavior]; ok {
+               return flag
+       }
+       log.Warn("unknown whitespace behavior: %q, default to 'show-all'", whitespaceBehavior)
+       return ""
 }
index 1e0e046925c4631559deb020684fb816ac0cb4e2..7ea4238d6d28062e0ec5e96ec558559f06ec586a 100644 (file)
@@ -2,8 +2,8 @@
        {{.i18n.Tr "repo.diff.whitespace_button"}}
        {{svg "octicon-triangle-down" 14 "dropdown icon"}}
        <div class="menu">
-               <a class="item" href="?style={{if .IsSplitStyle}}split{{else}}unified{{end}}&whitespace=">
-                       <i class="circle {{ if eq .WhitespaceBehavior "" }}dot{{else}}outline{{end}} icon"></i>
+               <a class="item" href="?style={{if .IsSplitStyle}}split{{else}}unified{{end}}&whitespace=show-all">
+                       <i class="circle {{ if eq .WhitespaceBehavior "show-all" }}dot{{else}}outline{{end}} icon"></i>
                        {{.i18n.Tr "repo.diff.whitespace_show_everything"}}
                </a>
                <a class="item" href="?style={{if .IsSplitStyle}}split{{else}}unified{{end}}&whitespace=ignore-all">