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