From a8e49709bb243d53a0e668782edacbb0a55236f2 Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Fri, 10 Jun 2022 20:12:14 +0300 Subject: [PATCH 01/39] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B7=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B0=20=D0=B3=D1=80=D1=83=D0=B1?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D1=8B=20=D1=81=20=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=D0=BC=D0=B8=20?= =?UTF-8?q?#1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- options/locale/locale_ru-RU.ini | 1 + routers/web/map/umap.go | 114 ++ routers/web/web.go | 4 + templates/base/head_navbar.tmpl | 1 + templates/map/umap.tmpl | 2859 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 2979 insertions(+) create mode 100644 routers/web/map/umap.go create mode 100644 templates/map/umap.tmpl diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 0111dfe434..53806d44ee 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -63,6 +63,7 @@ settings=Настройки your_profile=Профиль your_starred=Избранные your_settings=Настройки +map=Карта all=Все sources=Собственные diff --git a/routers/web/map/umap.go b/routers/web/map/umap.go new file mode 100644 index 0000000000..7032b70909 --- /dev/null +++ b/routers/web/map/umap.go @@ -0,0 +1,114 @@ +// Copyright 2021 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package umap + +import ( + "bytes" + "net/http" + + "code.gitea.io/gitea/models/db" + user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/util" +) + +const ( + // tplExploreUsers map page template + tplExploreUsers base.TplName = "map/umap" +) + +// UserSearchDefaultSortType is the default sort type for user search +const UserSearchDefaultSortType = "alphabetically" + +var ( + nullByte = []byte{0x00} +) + +func isKeywordValid(keyword string) bool { + return !bytes.Contains([]byte(keyword), nullByte) +} + +// RenderUserSearch render user search page +func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions, tplName base.TplName) { + opts.Page = ctx.FormInt("page") + if opts.Page <= 1 { + opts.Page = 1 + } + + var ( + users []*user_model.User + count int64 + err error + orderBy db.SearchOrderBy + ) + + // we can not set orderBy to `models.SearchOrderByXxx`, because there may be a JOIN in the statement, different tables may have the same name columns + ctx.Data["SortType"] = ctx.FormString("sort") + switch ctx.FormString("sort") { + case "newest": + orderBy = "`user`.id DESC" + case "oldest": + orderBy = "`user`.id ASC" + case "recentupdate": + orderBy = "`user`.updated_unix DESC" + case "leastupdate": + orderBy = "`user`.updated_unix ASC" + case "reversealphabetically": + orderBy = "`user`.name DESC" + case UserSearchDefaultSortType: // "alphabetically" + default: + orderBy = "`user`.name ASC" + ctx.Data["SortType"] = UserSearchDefaultSortType + } + + opts.Keyword = ctx.FormTrim("q") + opts.OrderBy = orderBy + if len(opts.Keyword) == 0 || isKeywordValid(opts.Keyword) { + users, count, err = user_model.SearchUsers(opts) + if err != nil { + ctx.ServerError("SearchUsers", err) + return + } + } + + ctx.Data["Keyword"] = opts.Keyword + ctx.Data["Total"] = count + ctx.Data["Users"] = users + ctx.Data["UsersTwoFaStatus"] = user_model.UserList(users).GetTwoFaStatus() + ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail + ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled + + pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5) + pager.SetDefaultParams(ctx) + for paramKey, paramVal := range opts.ExtraParamStrings { + pager.AddParamString(paramKey, paramVal) + } + ctx.Data["Page"] = pager + + ctx.HTML(http.StatusOK, tplName) +} + +// Users render explore users page +func UsersMap(ctx *context.Context) { + if setting.Service.Explore.DisableUsersPage { + ctx.Redirect(setting.AppSubURL + "/map/umap") + return + } + ctx.Data["Title"] = ctx.Tr("map") + ctx.Data["PageIsMap"] = true + ctx.Data["PageIsMapUsers"] = true + ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled + + RenderUserSearch(ctx, &user_model.SearchUserOptions{ + Actor: ctx.User, + Type: user_model.UserTypeIndividual, + ListOptions: db.ListOptions{PageSize: setting.UI.ExplorePagingNum}, + IsActive: util.OptionalBoolTrue, + Visible: []structs.VisibleType{structs.VisibleTypePublic, structs.VisibleTypeLimited, structs.VisibleTypePrivate}, + }, tplExploreUsers) +} diff --git a/routers/web/web.go b/routers/web/web.go index e18ed8f8ee..ef1b83ed7d 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -28,6 +28,7 @@ import ( "code.gitea.io/gitea/routers/web/dev" "code.gitea.io/gitea/routers/web/events" "code.gitea.io/gitea/routers/web/explore" + "code.gitea.io/gitea/routers/web/map" "code.gitea.io/gitea/routers/web/org" "code.gitea.io/gitea/routers/web/repo" "code.gitea.io/gitea/routers/web/user" @@ -254,6 +255,9 @@ func RegisterRoutes(m *web.Route) { m.Get("/organizations", explore.Organizations) m.Get("/code", explore.Code) }, ignExploreSignIn) + m.Group("/map", func() { + m.Get("/umap", umap.UsersMap) + }, ignExploreSignIn) m.Get("/issues", reqSignIn, user.Issues) m.Get("/pulls", reqSignIn, user.Pulls) m.Get("/milestones", reqSignIn, reqMilestonesDashboardPageEnabled, user.Milestones) diff --git a/templates/base/head_navbar.tmpl b/templates/base/head_navbar.tmpl index 5ce1d0b888..ad8843f4b8 100644 --- a/templates/base/head_navbar.tmpl +++ b/templates/base/head_navbar.tmpl @@ -21,6 +21,7 @@ {{if .ShowMilestonesDashboardPage}}{{.i18n.Tr "milestones"}}{{end}} {{end}} {{.i18n.Tr "explore"}} + {{.i18n.Tr "map"}} {{else if .IsLandingPageOrganizations}} {{.i18n.Tr "explore"}} {{else}} diff --git a/templates/map/umap.tmpl b/templates/map/umap.tmpl new file mode 100644 index 0000000000..7e014f1f6a --- /dev/null +++ b/templates/map/umap.tmpl @@ -0,0 +1,2859 @@ +{{template "base/head" .}} +
+ {{template "explore/navbar" .}} + + + + + + + + + + + + + + +
+ Mouse over a cluster to see the bounds of its children and click a cluster to zoom to those bounds + + +
+{{template "base/footer" .}} -- 2.11.0 From 76e532f00cbb79a88d7d0e5087db601ab55f1f32 Mon Sep 17 00:00:00 2001 From: Gitea Date: Tue, 14 Jun 2022 16:18:50 +0300 Subject: [PATCH 02/39] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D0=B2=D0=B8=D0=B3=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BD=D0=B0=D0=B4=20=D0=BA=D0=B0=D1=80?= =?UTF-8?q?=D1=82=D0=BE=D0=B9=20=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=B2=20=D1=81=D1=82=D0=B8=D0=BB=D1=8F=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- templates/map/navbar.tmpl | 18 ++++++++++++++++++ templates/map/umap.tmpl | 5 +++-- 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 templates/map/navbar.tmpl diff --git a/templates/map/navbar.tmpl b/templates/map/navbar.tmpl new file mode 100644 index 0000000000..137f077657 --- /dev/null +++ b/templates/map/navbar.tmpl @@ -0,0 +1,18 @@ + diff --git a/templates/map/umap.tmpl b/templates/map/umap.tmpl index 7e014f1f6a..f320c689c9 100644 --- a/templates/map/umap.tmpl +++ b/templates/map/umap.tmpl @@ -1,6 +1,6 @@ {{template "base/head" .}}
- {{template "explore/navbar" .}} + {{template "map/navbar" .}} @@ -10,9 +10,10 @@ + + + + + + + +
+ +{{template "base/footer" .}} diff --git a/templates/shared/issuelistfortree.tmpl b/templates/shared/issuelistfortree.tmpl new file mode 100644 index 0000000000..faf20964bc --- /dev/null +++ b/templates/shared/issuelistfortree.tmpl @@ -0,0 +1,144 @@ +
+ {{ $approvalCounts := .ApprovalCounts}} + {{range .Issues}} +
+
  • +
    + {{if $.CanWriteIssuesOrPulls}} +
    + + +
    + {{end}} +
    + {{if .IsPull}} + {{if .PullRequest.HasMerged}} + {{svg "octicon-git-merge" 16 "text purple"}} + {{else}} + {{if .IsClosed}} + {{svg "octicon-git-pull-request" 16 "text red"}} + {{else}} + {{svg "octicon-git-pull-request" 16 "text green"}} + {{end}} + {{end}} + {{else}} + {{if .IsClosed}} + {{svg "octicon-issue-closed" 16 "text red"}} + {{else}} + {{svg "octicon-issue-opened" 16 "text green"}} + {{end}} + {{end}} +
    +
    +
    +
    + {{RenderEmoji .Title}} + {{if .IsPull}} + {{if (index $.CommitStatus .PullRequest.ID)}} + {{template "repo/commit_status" (index $.CommitStatus .PullRequest.ID)}} + {{end}} + {{end}} + + {{range .Labels}} + {{.Name | RenderEmoji}} + {{end}} + +
    +
    + + {{if eq $.listType "dashboard"}} + {{.Repo.FullName}}#{{.Index}} + {{else}} + #{{.Index}} + {{end}} + + {{ $timeStr := TimeSinceUnix .GetLastEventTimestamp $.Lang }} + {{if .OriginalAuthor }} + {{$.i18n.Tr .GetLastEventLabelFake $timeStr (.OriginalAuthor|Escape) | Safe}} + {{else if gt .Poster.ID 0}} + {{$.i18n.Tr .GetLastEventLabel $timeStr (.Poster.HomeLink|Escape) (.Poster.GetDisplayName | Escape) | Safe}} + {{else}} + {{$.i18n.Tr .GetLastEventLabelFake $timeStr (.Poster.GetDisplayName | Escape) | Safe}} + {{end}} + {{if and .Milestone (ne $.listType "milestone")}} + + {{svg "octicon-milestone" 14 "mr-2"}}{{.Milestone.Name}} + + {{end}} + {{if .Ref}} + + {{svg "octicon-git-branch" 14 "mr-2"}}{{index $.IssueRefEndNames .ID}} + + {{end}} + {{$tasks := .GetTasks}} + {{if gt $tasks 0}} + {{$tasksDone := .GetTasksDone}} + + {{svg "octicon-checklist" 14 "mr-2"}}{{$tasksDone}} / {{$tasks}} + + {{end}} + {{if ne .DeadlineUnix 0}} + + + {{svg "octicon-calendar" 14 "mr-2"}} + {{.DeadlineUnix.FormatShort}} + + + {{end}} + {{if .IsPull}} + {{$approveOfficial := call $approvalCounts .ID "approve"}} + {{$rejectOfficial := call $approvalCounts .ID "reject"}} + {{$waitingOfficial := call $approvalCounts .ID "waiting"}} + {{if gt $approveOfficial 0}} + + {{svg "octicon-check" 14 "mr-1"}} + {{$.i18n.TrN $approveOfficial "repo.pulls.approve_count_1" "repo.pulls.approve_count_n" $approveOfficial}} + + {{end}} + {{if gt $rejectOfficial 0}} + + {{svg "octicon-diff" 14 "mr-2"}} + {{$.i18n.TrN $rejectOfficial "repo.pulls.reject_count_1" "repo.pulls.reject_count_n" $rejectOfficial}} + + {{end}} + {{if gt $waitingOfficial 0}} + + {{svg "octicon-eye" 14 "mr-2"}} + {{$.i18n.TrN $waitingOfficial "repo.pulls.waiting_count_1" "repo.pulls.waiting_count_n" $waitingOfficial}} + + {{end}} + {{if and (not .PullRequest.HasMerged) (gt (len .PullRequest.ConflictedFiles) 0)}} + + {{svg "octicon-x" 14}} + {{$.i18n.TrN (len .PullRequest.ConflictedFiles) "repo.pulls.num_conflicting_files_1" "repo.pulls.num_conflicting_files_n" (len .PullRequest.ConflictedFiles)}} + + {{end}} + {{end}} +
    +
    +
    +
    + {{if .TotalTrackedTime}} + {{svg "octicon-clock" 16 "mr-2"}} + {{.TotalTrackedTime | Sec2Time}} + {{end}} +
    +
    + {{range .Assignees}} + + {{avatar .}} + + {{end}} +
    + +
    +
  • +
    + {{end}} +
    -- 2.11.0 From 86f641fd9d0bdc124ec18d283db20d8a6a215c66 Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Fri, 24 Jun 2022 22:16:31 +0300 Subject: [PATCH 09/39] =?UTF-8?q?=D0=9E=D1=84=D0=BE=D1=80=D0=BC=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20'=D0=9E=20=D1=81=D0=B5=D0=B1=D0=B5'=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=B0=D1=80=D1=82=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9=20#14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/web/map/umap.go | 19 +++++++++++++++++++ templates/map/umap.tmpl | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/routers/web/map/umap.go b/routers/web/map/umap.go index 7032b70909..a91334cdc9 100644 --- a/routers/web/map/umap.go +++ b/routers/web/map/umap.go @@ -15,6 +15,9 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/modules/markup" + "code.gitea.io/gitea/modules/markup/markdown" + ) const ( @@ -76,6 +79,22 @@ func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions, } } + for i := range users { + if len(users[i].Description) != 0 { + content, err := markdown.RenderString(&markup.RenderContext{ + URLPrefix: ctx.Repo.RepoLink, + Metas: map[string]string{"mode": "document"}, + GitRepo: ctx.Repo.GitRepo, + Ctx: ctx, + }, users[i].Description) + if err != nil { + ctx.ServerError("RenderString", err) + return + } + users[i].Description = content + } + } + ctx.Data["Keyword"] = opts.Keyword ctx.Data["Total"] = count ctx.Data["Users"] = users diff --git a/templates/map/umap.tmpl b/templates/map/umap.tmpl index 83e1143805..a13e4cb1b5 100644 --- a/templates/map/umap.tmpl +++ b/templates/map/umap.tmpl @@ -2822,7 +2822,7 @@ {{range .Users}} {{if .LocationCoordinate}} - [parseFloat({{.LocationCoordinate}}.split(',')[0]) , parseFloat({{.LocationCoordinate}}.split(',')[1]), "{{avatar .}} {{.HomeLink}} {{.FullName}} {{.Description}}"], + [parseFloat({{.LocationCoordinate}}.split(',')[0]) , parseFloat({{.LocationCoordinate}}.split(',')[1]), "{{avatar .}} {{.HomeLink}} {{.FullName}}
  • {{.Description | Str2html}}
  • "], {{end}} {{else}} -- 2.11.0 From 9ec307e7fda2ea25db5db386c372173b8785b612 Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Sat, 25 Jun 2022 15:55:42 +0300 Subject: [PATCH 10/39] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=80=D0=BE=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8F?= =?UTF-8?q?=D0=BC=20#31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/web/repo/issue_parent.go | 2 +- templates/repo/issue/view_content/sidebar.tmpl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/routers/web/repo/issue_parent.go b/routers/web/repo/issue_parent.go index 355d5272cc..364c06efce 100644 --- a/routers/web/repo/issue_parent.go +++ b/routers/web/repo/issue_parent.go @@ -104,7 +104,7 @@ func RemoveParent(ctx *context.Context) { case "child": parentType = models.ParentTypeChild default: - ctx.Error(http.StatusBadRequest, "GetDependecyType") + ctx.Error(http.StatusBadRequest, "GetParentType") return } diff --git a/templates/repo/issue/view_content/sidebar.tmpl b/templates/repo/issue/view_content/sidebar.tmpl index 292b681b23..5cc874c1e1 100644 --- a/templates/repo/issue/view_content/sidebar.tmpl +++ b/templates/repo/issue/view_content/sidebar.tmpl @@ -477,7 +477,7 @@
    {{if and $.CanCreateIssueParents (not $.Repository.IsArchived)}} - + {{svg "octicon-trash" 16}} {{end}} @@ -504,7 +504,7 @@
    {{if and $.CanCreateIssueParents (not $.Repository.IsArchived)}} - + {{svg "octicon-trash" 16}} {{end}} -- 2.11.0 From f310ff2fa084cc40af493769577e7a280101f817 Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Sat, 25 Jun 2022 21:15:06 +0300 Subject: [PATCH 11/39] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=20=D1=81=20=D1=80=D0=BE=D0=B4=D0=B8=D1=82=D0=B5=D0=BB=D1=8F?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B8=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D0=B8=D1=8F=D0=BC=D0=B8=20#31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/issue_comment.go | 22 ++++++-- models/issue_comment_list.go | 67 +++++++++++++++++++++++++ modules/convert/issue_comment.go | 10 ++++ modules/structs/issue_comment.go | 2 + routers/web/repo/issue.go | 7 +++ templates/repo/issue/view_content/comments.tmpl | 50 ++++++++++++++++++ 6 files changed, 154 insertions(+), 4 deletions(-) diff --git a/models/issue_comment.go b/models/issue_comment.go index 8b6b204008..e3dc31233f 100644 --- a/models/issue_comment.go +++ b/models/issue_comment.go @@ -82,10 +82,6 @@ const ( CommentTypeAddDependency // 20 Dependency removed CommentTypeRemoveDependency - // 19 Parent added - CommentTypeAddParent - // 20 Parent removed - CommentTypeRemoveParent // 21 Comment a line of code CommentTypeCode // 22 Reviews a pull request by giving general feedback @@ -112,6 +108,10 @@ const ( CommentTypeDismissReview // 33 Change issue ref CommentTypeChangeIssueRef + // 34 Parent added + CommentTypeAddParent + // 35 Parent removed + CommentTypeRemoveParent ) var commentStrings = []string{ @@ -149,6 +149,8 @@ var commentStrings = []string{ "project_board", "dismiss_review", "change_issue_ref", + "add_parent", + "remove_parent", } func (t CommentType) String() string { @@ -228,6 +230,8 @@ type Comment struct { NewRef string DependentIssueID int64 DependentIssue *Issue `xorm:"-"` + ParentIssueID int64 + ParentIssue *Issue `xorm:"-"` CommitID int64 Line int64 // - previous line / + proposed line @@ -623,6 +627,15 @@ func (c *Comment) LoadDepIssueDetails() (err error) { return err } +// LoadParentIssueDetails loads Parent Issue Details +func (c *Comment) LoadParentIssueDetails() (err error) { + if c.ParentIssueID <= 0 || c.ParentIssue != nil { + return nil + } + c.ParentIssue, err = getIssueByID(db.GetEngine(db.DefaultContext), c.ParentIssueID) + return err +} + // LoadTime loads the associated time for a CommentTypeAddTimeManual func (c *Comment) LoadTime() error { if c.Time != nil || c.TimeID == 0 { @@ -793,6 +806,7 @@ func createComment(ctx context.Context, opts *CreateCommentOptions) (_ *Comment, OldRef: opts.OldRef, NewRef: opts.NewRef, DependentIssueID: opts.DependentIssueID, + ParentIssueID: opts.ParentIssueID, TreePath: opts.TreePath, ReviewID: opts.ReviewID, Patch: opts.Patch, diff --git a/models/issue_comment_list.go b/models/issue_comment_list.go index 23a2756dcf..c614535f84 100644 --- a/models/issue_comment_list.go +++ b/models/issue_comment_list.go @@ -395,6 +395,69 @@ func (comments CommentList) loadDependentIssues(ctx context.Context) error { return nil } +func (comments CommentList) getParentIssueIDs() []int64 { + ids := make(map[int64]struct{}, len(comments)) + for _, comment := range comments { + if comment.ParentIssue != nil { + continue + } + if _, ok := ids[comment.ParentIssueID]; !ok { + ids[comment.ParentIssueID] = struct{}{} + } + } + return keysInt64(ids) +} + +func (comments CommentList) loadParentIssues(ctx context.Context) error { + if len(comments) == 0 { + return nil + } + + e := db.GetEngine(ctx) + issueIDs := comments.getParentIssueIDs() + issues := make(map[int64]*Issue, len(issueIDs)) + left := len(issueIDs) + for left > 0 { + limit := defaultMaxInSize + if left < limit { + limit = left + } + rows, err := e. + In("id", issueIDs[:limit]). + Rows(new(Issue)) + if err != nil { + return err + } + + for rows.Next() { + var issue Issue + err = rows.Scan(&issue) + if err != nil { + _ = rows.Close() + return err + } + + issues[issue.ID] = &issue + } + _ = rows.Close() + + left -= limit + issueIDs = issueIDs[limit:] + } + + for _, comment := range comments { + if comment.ParentIssue == nil { + comment.ParentIssue = issues[comment.ParentIssueID] + if comment.ParentIssue != nil { + if err := comment.ParentIssue.loadRepo(ctx); err != nil { + return err + } + } + } + } + return nil +} + func (comments CommentList) loadAttachments(e db.Engine) (err error) { if len(comments) == 0 { return nil @@ -528,6 +591,10 @@ func (comments CommentList) loadAttributes(ctx context.Context) (err error) { return } + if err = comments.loadParentIssues(ctx); err != nil { + return + } + return nil } diff --git a/modules/convert/issue_comment.go b/modules/convert/issue_comment.go index caba2b506e..061fe59142 100644 --- a/modules/convert/issue_comment.go +++ b/modules/convert/issue_comment.go @@ -52,6 +52,12 @@ func ToTimelineComment(c *models.Comment, doer *user_model.User) *api.TimelineCo return nil } + err = c.LoadParentIssueDetails() + if err != nil { + log.Error("LoadParentIssueDetails: %v", err) + return nil + } + err = c.LoadTime() if err != nil { log.Error("LoadTime: %v", err) @@ -163,5 +169,9 @@ func ToTimelineComment(c *models.Comment, doer *user_model.User) *api.TimelineCo comment.DependentIssue = ToAPIIssue(c.DependentIssue) } + if c.ParentIssue != nil { + comment.ParentIssue = ToAPIIssue(c.ParentIssue) + } + return comment } diff --git a/modules/structs/issue_comment.go b/modules/structs/issue_comment.go index e13ec05d01..d6bf5ef887 100644 --- a/modules/structs/issue_comment.go +++ b/modules/structs/issue_comment.go @@ -79,4 +79,6 @@ type TimelineComment struct { ResolveDoer *User `json:"resolve_doer"` DependentIssue *Issue `json:"dependent_issue"` + + ParentIssue *Issue `json:"parent_issue"` } diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 7ec1af728f..1bb9d9fc7f 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -1473,6 +1473,13 @@ func ViewIssue(ctx *context.Context) { return } } + } else if comment.Type == models.CommentTypeRemoveParent || comment.Type == models.CommentTypeAddParent { + if err = comment.LoadParentIssueDetails(); err != nil { + if !models.IsErrIssueNotExist(err) { + ctx.ServerError("LoadParentIssueDetails", err) + return + } + } } else if comment.Type == models.CommentTypeCode || comment.Type == models.CommentTypeReview || comment.Type == models.CommentTypeDismissReview { comment.RenderedContent, err = markdown.RenderString(&markup.RenderContext{ URLPrefix: ctx.Repo.RepoLink, diff --git a/templates/repo/issue/view_content/comments.tmpl b/templates/repo/issue/view_content/comments.tmpl index a0ab487a5b..65b214c407 100644 --- a/templates/repo/issue/view_content/comments.tmpl +++ b/templates/repo/issue/view_content/comments.tmpl @@ -831,5 +831,55 @@ {{end}}
    + {{else if eq .Type 34}} +
    + {{svg "octicon-package-parents"}} + + {{avatar .Poster}} + + + {{.Poster.GetDisplayName}} + {{$.i18n.Tr "repo.issues.parent.added_parent" $createdStr | Safe}} + + {{if .ParentIssue}} + + {{end}} +
    + {{else if eq .Type 35}} +
    + {{svg "octicon-package-parents"}} + + {{avatar .Poster}} + + + {{.Poster.GetDisplayName}} + {{$.i18n.Tr "repo.issues.parent.removed_parent" $createdStr | Safe}} + + {{if .ParentIssue}} + + {{end}} +
    {{end}} {{end}} -- 2.11.0 From ccde6c5b8ca430e0fcf1320c4b74045eac9c48b4 Mon Sep 17 00:00:00 2001 From: Sergey_Aksenov Date: Mon, 27 Jun 2022 08:30:40 +0000 Subject: [PATCH 12/39] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB(=D0=B0)=20=D0=BD=D0=B0=20'options/locale/=D0=9A=D0=BE?= =?UTF-8?q?=D0=B4'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- options/locale/{locale_ru-RU.ini => Код} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename options/locale/{locale_ru-RU.ini => Код} (100%) diff --git a/options/locale/locale_ru-RU.ini b/options/locale/Код similarity index 100% rename from options/locale/locale_ru-RU.ini rename to options/locale/Код -- 2.11.0 From a95f75ad676000c7891853eb505a9f7553b33415 Mon Sep 17 00:00:00 2001 From: Sergey_Aksenov Date: Mon, 27 Jun 2022 10:05:50 +0000 Subject: [PATCH 13/39] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB(=D0=B0)=20=D0=BD=D0=B0=20'options/locale/locale=5Fru-RU.?= =?UTF-8?q?ini'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- options/locale/{Код => locale_ru-RU.ini} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename options/locale/{Код => locale_ru-RU.ini} (100%) diff --git a/options/locale/Код b/options/locale/locale_ru-RU.ini similarity index 100% rename from options/locale/Код rename to options/locale/locale_ru-RU.ini -- 2.11.0 From 65ec0bf03fc8267216138db3d5a40b73b4277003 Mon Sep 17 00:00:00 2001 From: Sergey_Aksenov Date: Mon, 27 Jun 2022 10:11:05 +0000 Subject: [PATCH 14/39] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB(=D0=B0)=20=D0=BD=D0=B0=20'options/locale/locale=5Fru-RU.?= =?UTF-8?q?ini'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Выполнено переименование --- options/locale/locale_ru-RU.ini | 356 ++++++++++++++++++++-------------------- 1 file changed, 178 insertions(+), 178 deletions(-) diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 301b8702e6..4b660d87fb 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -46,15 +46,15 @@ webauthn_error_unable_to_process=Сервер не смог обработать webauthn_error_duplicated=Представленный ключ не подходит для этого запроса. Если вы пытаетесь зарегистрировать его, убедитесь, что ключ ещё не зарегистрирован. webauthn_error_empty=Вы должны указать имя для этого ключа. -repository=Репозиторий +repository=Проект organization=Организация mirror=Зеркало -new_repo=Новый репозиторий +new_repo=Новый проект new_migrate=Новая миграция new_mirror=Новое зеркало -new_fork=Новый форк репозитория +new_fork=Новый форк проекта new_org=Новая организация -new_project=Новый проект +new_project=Новое направление new_project_board=Новая доска проекта manage_org=Управление организациями admin_panel=Панель управления @@ -115,7 +115,7 @@ platform_desc=Gitea работает на любой операционной с lightweight=Легковесный lightweight_desc=Gitea имеет низкие системные требования и может работать на недорогом Raspberry Pi. Экономьте энергию вашей машины! license=Открытый исходный код -license_desc=Всё это на code.gitea.io/gitea! Присоединяйтесь к нам, внося вклад, чтобы сделать этот проект ещё лучше. Не бойтесь помогать! +license_desc=Всё это на code.gitea.io/gitea! Присоединяйтесь к нам, внося вклад, чтобы сделать это направление ещё лучше. Не бойтесь помогать! [install] install=Установка @@ -230,15 +230,15 @@ password_algorithm_helper=Задайте алгоритм хеширования uname_holder=Имя пользователя / Адрес эл. почты password_holder=Пароль switch_dashboard_context=Переключить контекст панели управления -my_repos=Репозитории +my_repos=Проекты show_more_repos=Показать больше репозиториев… -collaborative_repos=Совместные репозитории +collaborative_repos=Совместные проекты my_orgs=Мои организации my_mirrors=Мои зеркала view_home=Показать %s -search_repos=Поиск репозитория… +search_repos=Поиск проекта… filter=Другие фильтры -filter_by_team_repositories=Фильтровать по репозиториям команды +filter_by_team_repositories=Фильтровать по проектам команды feed_of=Лента "%s" show_archived=Архивировано @@ -251,17 +251,17 @@ show_both_private_public=Показаны как публичные, так и show_only_private=Показаны только приватные show_only_public=Показаны только публичные -issues.in_your_repos=В ваших репозиториях +issues.in_your_repos=В ваших проектах [explore] -repos=Репозитории +repos=Проекты users=Пользователи organizations=Организации search=Поиск -code=Код +code=Файлы ERROR search.fuzzy=Неточный search.match=Соответствие -repo_no_results=Подходящие репозитории не найдены. +repo_no_results=Подходящие проекты не найдены. user_no_results=Подходящие пользователи не найдены. org_no_results=Подходящие организации не найдены. code_no_results=Соответствующий поисковому запросу исходный код не найден. @@ -324,7 +324,7 @@ email_domain_blacklisted=С данным адресом электронной authorize_application=Авторизация приложения authorize_redirect_notice=Вы будете перенаправлены на %s, если вы авторизуете это приложение. authorize_application_created_by=Это приложение было создано %s. -authorize_application_description=Если вы предоставите доступ, оно сможет получить доступ и редактировать любую информацию о вашей учётной записи, включая содержимое частных репозиториев и организаций. +authorize_application_description=Если вы предоставите доступ, оно сможет получить доступ и редактировать любую информацию о вашей учётной записи, включая содержимое частных проектов и организаций. authorize_title=Разрешить "%s" доступ к вашей учётной записи? authorization_failed=Ошибка авторизации authorization_failed_desc=Ошибка авторизации, обнаружен неверный запрос. Пожалуйста, свяжитесь с автором приложения, которое вы пытались авторизовать. @@ -390,7 +390,7 @@ repo.transfer.to_you=вам repo.transfer.body=Для того чтобы принять или отклонить перейдите по ссылке %s или просто проигнорируйте данный запрос. repo.collaborator.added.subject=%s добавил вас в %s -repo.collaborator.added.text=Вы были добавлены в качестве соавтора репозитория: +repo.collaborator.added.text=Вы были добавлены в качестве соавтора проекта: [modal] yes=Да @@ -399,7 +399,7 @@ modify=Изменить [form] UserName=Пользователь -RepoName=Название репозитория +RepoName=Название проекта Email=Адрес эл. почты Password=Пароль Retype=Введите пароль еще раз @@ -439,17 +439,17 @@ lang_select_error=Выберите язык из списка. username_been_taken=Имя пользователя уже занято. username_change_not_local_user=Нелокальным пользователям запрещено изменять их имя пользователя. -repo_name_been_taken=Название репозитория уже используется. -repository_force_private=Включена принудительная приватность: приватные репозитории не могут быть сделаны публичными. -repository_files_already_exist=Файлы уже существуют для этого репозитория. Обратитесь к системному администратору. -repository_files_already_exist.adopt=Файлы уже существуют для этого репозитория и могут быть только приняты. -repository_files_already_exist.delete=Файлы уже существуют для этого репозитория. Вы должны удалить их. -repository_files_already_exist.adopt_or_delete=Файлы уже существуют для этого репозитория. Или принять их или удалить их. +repo_name_been_taken=Название проекта уже используется. +repository_force_private=Включена принудительная приватность: приватные проекты не могут быть сделаны публичными. +repository_files_already_exist=Файлы уже существуют для этого проекта. Обратитесь к системному администратору. +repository_files_already_exist.adopt=Файлы уже существуют для этого проекта и могут быть только приняты. +repository_files_already_exist.delete=Файлы уже существуют для этого проекта. Вы должны удалить их. +repository_files_already_exist.adopt_or_delete=Файлы уже существуют для этого проекта. Или принять их или удалить их. visit_rate_limit=Удалённый вход отклонён в связи с ограничением количества попыток в секунду. 2fa_auth_required=Удалённый вход требует двух-факторную аутентификацию. org_name_been_taken=Название организации уже занято. team_name_been_taken=Название команды уже занято. -team_no_units_error=Разрешите доступ хотя бы к одному разделу репозитория. +team_no_units_error=Разрешите доступ хотя бы к одному разделу проекта. email_been_used=Этот адрес электронной почты уже используется. email_invalid=Недопустимый адрес электронной почты. openid_been_used=Адрес OpenID '%s' уже используется. @@ -459,7 +459,7 @@ password_lowercase_one=Как минимум один строчный симв password_uppercase_one=Как минимум один заглавный символ password_digit_one=По крайней мере одна цифра password_special_one=По крайней мере один специальный символ (знаки пунктуации, скобки, кавычки и т. д.) -enterred_invalid_repo_name=Введённое вами название репозитория неверно. +enterred_invalid_repo_name=Введённое вами название проекта неверно. enterred_invalid_org_name=Введённое вам название организации некорректно. enterred_invalid_owner_name=Имя нового владельца некорректно. enterred_invalid_password=Введённый пароль неверен. @@ -483,12 +483,12 @@ target_branch_not_exist=Целевая ветка не существует. [user] change_avatar=Изменить свой аватар… join_on=Присоединился(-ась) -repositories=Репозитории +repositories=Проекты activity=Активность followers=Подписчики -starred=Избранные репозитории -watched=Отслеживаемые репозитории -projects=Проекты +starred=Избранные проекты +watched=Отслеживаемые проекты +projects=Направления following=Подписки follow=Подписаться unfollow=Отписаться @@ -511,7 +511,7 @@ ssh_gpg_keys=SSH / GPG ключи social=Учётные записи в соцсетях applications=Приложения orgs=Управление организациями -repos=Репозитории +repos=Проекты delete=Удалить аккаунт twofa=Двухфакторная аутентификация account_link=Привязанные аккаунты @@ -748,7 +748,7 @@ remove_account_link_desc=Удаление привязанной учетной remove_account_link_success=Привязанная учетная запись удалена. orgs_none=Вы не состоите ни в одной организации. -repos_none=Вы не владеете репозиториями +repos_none=Вы не владеете проектами delete_account=Удалить свой аккаунт delete_prompt=Эта операция навсегда удалит вашу учетную запись. Это НЕВОЗМОЖНО будет отменить. @@ -773,18 +773,18 @@ visibility.private_tooltip=Видимый только членам органи [repo] new_repo_helper=Репозиторий содержит все файлы проекта, включая историю ревизии. Уже есть где-то еще? Мигрировать репозиторий. owner=Владелец -owner_helper=Некоторые организации могут не отображаться в раскрывающемся списке из-за максимального ограничения количества репозиториев. -repo_name=Название репозитория +owner_helper=Некоторые организации могут не отображаться в раскрывающемся списке из-за максимального ограничения количества проектов. +repo_name=Название проекта repo_name_helper=Лучшие названия репозиториев состоят из коротких, легко запоминаемых и уникальных ключевых слов. -repo_size=Размер репозитория +repo_size=Размер проекта template=Шаблон template_select=Выбрать шаблон. -template_helper=Сделать репозиторий шаблоном -template_description=Шаблонные репозитории дают возможность пользователям создавать новые репозитории с той же структурой каталогов, файлами и дополнительными настройками. +template_helper=Сделать проект шаблоном +template_description=Шаблонные проекты дают возможность пользователям создавать новые проекты с той же структурой каталогов, файлами и дополнительными настройками. visibility=Видимость visibility_description=Только владелец или члены организации, при наличии прав, смогут увидеть это. -visibility_helper=Сделать репозиторий частным -visibility_helper_forced=Администратор сайта настроил параметр видимости новых репозиториев. Репозиторий приватный по умолчанию. +visibility_helper=Сделать проект частным +visibility_helper_forced=Администратор сайта настроил параметр видимости новых проектов. Проект приватный по умолчанию. visibility_fork_helper=(Изменение этого повлияет на все форки.) clone_helper=Нужна помощь в клонировании? Посетите страницу помощи. fork_repo=Форкнуть репозиторий @@ -795,7 +795,7 @@ clone_in_vsc=Клонировать в VS Code download_zip=Скачать ZIP download_tar=Скачать TAR.GZ download_bundle=Скачать BUNDLE -generate_repo=Создать репозиторий +generate_repo=Создать проект generate_from=Создать из repo_desc=Описание repo_desc_helper=Добавьте краткое описание (необязательно) @@ -816,7 +816,7 @@ trust_model_helper_collaborator=Соавтор: Подписи доверия о trust_model_helper_committer=Участник: доверенные подписи участников trust_model_helper_collaborator_committer=Соавтор+Коммитер: Доверять подписи соавторам, которые соответствуют коммитеру trust_model_helper_default=По умолчанию: используйте модель доверия по умолчанию для этой установки -create_repo=Создать репозиторий +create_repo=Создать проект default_branch=Ветка по умолчанию default_branch_helper=Ветка по умолчанию является базовой веткой для запросов на слияние и коммитов кода. mirror_prune=Очистить @@ -840,13 +840,13 @@ stargazers=Звездочеты forks=Форки pick_reaction=Оставьте свою оценку! reactions_more=и ещё %d -unit_disabled=Администратор сайта отключил этот раздел репозитория. +unit_disabled=Администратор сайта отключил этот раздел проекта. language_other=Разное -adopt_search=Введите имя пользователя для поиска неутверждённых репозиториев... (оставьте пустым, чтобы найти все) +adopt_search=Введите имя пользователя для поиска неутверждённых проектов... (оставьте пустым, чтобы найти все) adopt_preexisting_label=Принятые файлы adopt_preexisting=Принять уже существующие файлы -adopt_preexisting_content=Создать репозиторий из %s -adopt_preexisting_success=Приняты файлы и создан репозиторий из %s +adopt_preexisting_content=Создать проект из %s +adopt_preexisting_success=Приняты файлы и создан проект из %s delete_preexisting_label=Удалить delete_preexisting=Удалить уже существующие файлы delete_preexisting_content=Удалить файлы из %s @@ -883,15 +883,15 @@ archive.title=Это репозиторий в архиве. Вы можете archive.issue.nocomment=Этот репозиторий в архиве. Вы не можете комментировать задачи. archive.pull.nocomment=Это репозиторий в архиве. Вы не можете комментировать запросы на слияние. -form.reach_limit_of_creation_1=Достигнуто ограничение на количество репозиториев: %d. -form.reach_limit_of_creation_n=Достигнуто ограничение на количество репозиториев: %d. -form.name_reserved=Название репозитория '%s' зарезервировано. -form.name_pattern_not_allowed=Шаблон имени репозитория '%s' не допускается. +form.reach_limit_of_creation_1=Достигнуто ограничение на количество проектов: %d. +form.reach_limit_of_creation_n=Достигнуто ограничение на количество проектов: %d. +form.name_reserved=Название проекта '%s' зарезервировано. +form.name_pattern_not_allowed=Шаблон имени проекта '%s' не допускается. need_auth=Авторизация migrate_options=Параметры миграции migrate_service=Сервис миграции -migrate_options_mirror_helper=Этот репозиторий будет зеркалом +migrate_options_mirror_helper=Этот проект будет зеркалом migrate_options_mirror_disabled=Администратор вашего сайта отключил новые зеркала. migrate_options_lfs=Перенос LFS файлов migrate_options_lfs_endpoint.label=LFS Endpoint @@ -906,7 +906,7 @@ migrate_items_issues=Задачи migrate_items_pullrequests=Запросы на слияние migrate_items_merge_requests=Запросы на слияние migrate_items_releases=Релизы -migrate_repo=Перенос репозитория +migrate_repo=Перенос проекта migrate.clone_address=Перенос / Клонирование по URL migrate.clone_address_desc=Это может быть HTTP/HTTPS/GIT адрес или локальный путь существующего репозитория на сервере. migrate.clone_local_path=или локальный путь на сервере @@ -944,23 +944,23 @@ generated_from=создано из fork_from_self=Вы не можете форкнуть ваш собственный репозиторий. fork_guest_user=Войдите, чтобы форкнуть репозиторий. watch_guest_user=Войдите, чтобы следить за этим репозиторием. -star_guest_user=Войдите, чтобы добавить в избранное этот репозиторий. +star_guest_user=Войдите, чтобы добавить в избранное этот проект. unwatch=Перестать следить watch=Следить unstar=Убрать из избранного star=В избранное fork=Форкнуть -download_archive=Скачать репозиторий +download_archive=Скачать проект no_desc=Нет описания quick_guide=Краткое руководство -clone_this_repo=Клонировать репозиторий -create_new_repo_command=Создать новый репозиторий из командной строки -push_exist_repo=Push существующего репозитория из командной строки +clone_this_repo=Клонировать проект +create_new_repo_command=Создать новый проект из командной строки +push_exist_repo=Push существующего проекта из командной строки empty_message=В репозитории нет файлов. -code=Код -code.desc=Исходный код, файлы, коммиты и ветки. +code=Файлы ERROR +code.desc=Файлы, коммиты и ветки. branch=ветка tree=Дерево clear_ref=`Удалить текущую ссылку` @@ -970,7 +970,7 @@ branches=Ветки tags=Теги issues=Задачи pulls=Запросы на слияние -project_board=Проекты +project_board=Направления labels=Метки org_labels_desc=Метки уровня организации, которые можно использовать с всеми репозиториями< / strong> в этой организации org_labels_desc_manage=управлять @@ -1086,27 +1086,27 @@ commits.gpg_key_id=Идентификатор GPG ключа ext_issues.desc=Ссылка на внешнюю систему отслеживания ошибок. -projects=Проекты +projects=Направления projects.desc=Управление задачами и pull'ами в досках проекта. projects.description=Описание (необязательно) projects.description_placeholder=Описание -projects.create=Создать проект +projects.create=Создать направление projects.title=Заголовок -projects.new=Новый проект +projects.new=Новое направление projects.new_subheader=Координируйте, отслеживайте и обновляйте работу в одном месте, так что проекты остаются прозрачными и в графике. -projects.create_success=Проект '%s' был создан. -projects.deletion=Удалить проект -projects.deletion_desc=Удаление проекта приведёт к его удалению из всех связанных задач. Продолжить? -projects.deletion_success=Проект был удалён. -projects.edit=Редактировать проекты +projects.create_success=Направление '%s' был создан. +projects.deletion=Удалить направление +projects.deletion_desc=Удаление направления приведёт к его удалению из всех связанных задач. Продолжить? +projects.deletion_success=Направление было удалено. +projects.edit=Редактировать направления projects.edit_subheader=Создавайте и организуйте задачи и отслеживайте прогресс. -projects.modify=Обновить проект +projects.modify=Обновить направление projects.edit_success=Проект '%s' был обновлён. projects.type.none=Нет projects.type.basic_kanban=Обычный Канбан projects.type.bug_triage=Планирование работы с багами -projects.template.desc=Шаблон проекта -projects.template.desc_helper=Выберите шаблон проекта для начала +projects.template.desc=Шаблон направления +projects.template.desc_helper=Выберите шаблон направления для начала projects.type.uncategorized=Без категории projects.board.edit=Редактировать доску projects.board.edit_title=Новое имя доски @@ -1116,7 +1116,7 @@ projects.board.new=Новая доска projects.board.set_default=Установить по умолчанию projects.board.set_default_desc=Установить эту доску по умолчанию для неклассифицированных задач и pull-ов projects.board.delete=Удалить доску -projects.board.deletion_desc=Удаление доски проектов перемещает все связанные задачи в 'Без категории'. Продолжить? +projects.board.deletion_desc=Удаление доски направления перемещает все связанные задачи в 'Без категории'. Продолжить? projects.board.color=Цвет projects.open=Открыть projects.close=Закрыть @@ -1124,7 +1124,7 @@ projects.close=Закрыть issues.desc=Организация отчетов об ошибках, задач и этапов. issues.filter_assignees=Фильтр назначений issues.filter_milestones=Фильтр этапов -issues.filter_projects=Фильтровать проекты +issues.filter_projects=Фильтровать направления issues.filter_labels=Фильтр меток issues.filter_reviewers=Фильтр рецензентов issues.new=Новая задача @@ -1133,12 +1133,12 @@ issues.new.labels=Метки issues.new.add_labels_title=Применить метки issues.new.no_label=Нет меток issues.new.clear_labels=Очистить метки -issues.new.projects=Проекты -issues.new.add_project_title=Задать проект -issues.new.clear_projects=Очистить проекты -issues.new.no_projects=Нет проекта -issues.new.open_projects=Открытые проекты -issues.new.closed_projects=Закрытые проекты +issues.new.projects=Направления +issues.new.add_project_title=Задать направление +issues.new.clear_projects=Очистить направления +issues.new.no_projects=Нет направления +issues.new.open_projects=Открытые направления +issues.new.closed_projects=Закрытые направления issues.new.no_items=Нет элементов issues.new.milestone=Этап issues.new.add_milestone_title=Установить этап @@ -1172,11 +1172,11 @@ issues.remove_label=удалён %s с меткой %s issues.remove_labels=удалён %s с метками %s issues.add_remove_labels=добавлен %s и удалён %s с метками %s issues.add_milestone_at=`добавил(а) к этапу %s %s` -issues.add_project_at=`добавил(а) в %s проект %s` +issues.add_project_at=`добавил(а) в %s направление %s` issues.change_milestone_at=`поменял(а) целевой этап с %s на %s %s` -issues.change_project_at=`изменил(а) проект с %s на %s %s` +issues.change_project_at=`изменил(а) направление с %s на %s %s` issues.remove_milestone_at=`удалил(а) из этапа %s %s` -issues.remove_project_at=`удалил(а) это из проекта %s %s` +issues.remove_project_at=`удалил(а) это из направления %s %s` issues.deleted_milestone=`(удалено)` issues.deleted_project=`(удалено)` issues.self_assign_at=`назначил(а) на себя %s` @@ -1300,7 +1300,7 @@ issues.unlock_comment=снял(а) ограничение %s issues.lock_confirm=Ограничить issues.unlock_confirm=Снять issues.lock.notice_1=- Другие пользователи не могут добавлять новые комментарии к этой задаче. -issues.lock.notice_2=- Вы и другие соавторы с доступом к этому репозиторию могут оставлять комментарии, которые могут видеть другие. +issues.lock.notice_2=- Вы и другие соавторы с доступом к этому проекту могут оставлять комментарии, которые могут видеть другие. issues.lock.notice_3=- Вы всегда можете снять ограничение с обсуждения этой задачи. issues.unlock.notice_1=- Все снова смогут принять участие в обсуждении данной задачи. issues.unlock.notice_2=- Вы всегда можете снова наложить ограничение на обсуждение этой задачи. @@ -1373,7 +1373,7 @@ issues.dependency.add_error_dep_issue_not_exist=Зависимая задача issues.dependency.add_error_dep_not_exist=Зависимости не существует. issues.dependency.add_error_dep_exists=Зависимость уже существует. issues.dependency.add_error_cannot_create_circular=Вы не можете создать зависимость с двумя задачами, блокирующими друг друга. -issues.dependency.add_error_dep_not_same_repo=Обе задачи должны находиться в одном репозитории. +issues.dependency.add_error_dep_not_same_repo=Обе задачи должны находиться в одном проекте. issues.parent.title=Родительские задачи issues.parent.issue_no_parents=В настоящее время эта задача не имеет родителей. @@ -1399,7 +1399,7 @@ issues.parent.add_error_dep_issue_not_exist=Родительсткая зада issues.parent.add_error_dep_not_exist=Родительсткой задачи не существует. issues.parent.add_error_dep_exists=Привязка к родителю уже существует. issues.parent.add_error_cannot_create_circular=Вы не можете создать родителей с двумя задачами, блокирующими друг друга. -issues.parent.add_error_dep_not_same_repo=Обе задачи должны находиться в одном репозитории. +issues.parent.add_error_dep_not_same_repo=Обе задачи должны находиться в одном проекте. issues.review.self.approval=Вы не можете одобрить собственный запрос на слияние. issues.review.self.rejection=Невозможно запрашивать изменения своего запроса на слияние. @@ -1535,7 +1535,7 @@ pulls.closed_at=`закрыл этот запрос на слияние %[2]s` pulls.merge_instruction_hint=`Вы также можете просмотреть инструкции командной строки.` -pulls.merge_instruction_step1_desc=В репозитории вашего проекта посмотрите новую ветку и протестируйте изменения. +pulls.merge_instruction_step1_desc=В проекте вашего направления посмотрите новую ветку и протестируйте изменения. pulls.merge_instruction_step2_desc=Объединить изменения и обновить на Gitea. milestones.new=Новый этап @@ -1584,31 +1584,31 @@ signing.wont_sign.commitssigned=Слияние не будет подписан signing.wont_sign.approved=Слияние не будет подписано, так как PR не одобрен signing.wont_sign.not_signed_in=Вы не авторизовались -ext_wiki.desc=Ссылка на внешнюю вики. +ext_wiki.desc=Ссылка на внешнее описание. -wiki=Вики -wiki.welcome=Добро пожаловать в Вики. -wiki.welcome_desc=Вики позволяет писать и делиться документацией с сотрудниками. -wiki.desc=Вики - это место для хранения документации. +wiki=Описание направления +wiki.welcome=Добро пожаловать в описание направления. +wiki.welcome_desc=Описание направления позволяет делиться документацией с сотрудниками. +wiki.desc=В описании направления храниться вся документация по нему. wiki.create_first_page=Создать первую страницу wiki.page=Страница wiki.filter_page=Фильтр страницы wiki.new_page=Страница -wiki.default_commit_message=Описание изменения вики-страницы (необязательно). +wiki.default_commit_message=Изменения описания направления (необязательно). wiki.save_page=Сохранить страницу wiki.last_commit_info=%s редактировал(а) эту страницу %s wiki.edit_page_button=Редактировать wiki.new_page_button=Новая страница wiki.file_revision=Версия страницы -wiki.wiki_page_revisions=Версии Вики-страниц -wiki.back_to_wiki=Вернуться на вики страницу +wiki.wiki_page_revisions=Версии описания направления +wiki.back_to_wiki=Вернуться на описание направления wiki.delete_page_button=Удалить страницу -wiki.delete_page_notice_1=Удаление вики-страницы '%s' не может быть отменено. Продолжить? -wiki.page_already_exists=Вики-страница с таким именем уже существует. -wiki.reserved_page=Имя вики-страницы '%s' зарезервировано. +wiki.delete_page_notice_1=Удаление описания направления '%s' не может быть отменено. Продолжить? +wiki.page_already_exists=Описание направления с таким именем уже существует. +wiki.reserved_page=Имя описания направления '%s' зарезервировано. wiki.pages=Страницы wiki.last_updated=Последнее обновление %s -wiki.page_name_desc=Введите имя страницы Вики. Некоторые специальные имена: 'Главна', '_Sidebar' и '_Footer'. +wiki.page_name_desc=Введите имя страницы описания. Некоторые специальные имена: 'Главна', '_Sidebar' и '_Footer'. activity=Активность activity.period.filter_label=Период: @@ -1677,14 +1677,14 @@ activity.git_stats_deletion_1=%d удаление activity.git_stats_deletion_n=%d удалений search=Поиск -search.search_repo=Поиск по репозиторию +search.search_repo=Поиск по проекту search.fuzzy=Неточный search.match=Соответствие search.results=Результаты поиска "%s" в %s settings=Настройки -settings.desc=В настройках вы можете менять различные параметры этого репозитория -settings.options=Репозиторий +settings.desc=В настройках вы можете менять различные параметры этого проекта +settings.options=Проект settings.collaboration=Соавторы settings.collaboration.admin=Администратор settings.collaboration.write=Запись @@ -1695,7 +1695,7 @@ settings.hooks=Веб-хуки settings.githooks=Git Hook'и settings.basic_settings=Основные параметры settings.mirror_settings=Настройки зеркалирования -settings.mirror_settings.docs=Настройте свой проект, чтобы автоматически отправлять и/или получать изменения из другого репозитория. Ветки, теги и коммиты будут синхронизированы автоматически. Как мне зеркалировать репозитории? +settings.mirror_settings.docs=Настройте своё направление, чтобы автоматически отправлять и/или получать изменения из другого проекта. Ветки, теги и коммиты будут синхронизированы автоматически. Как мне зеркалировать репозитории? settings.mirror_settings.mirrored_repository=Синхронизированное хранилище settings.mirror_settings.direction=Направление settings.mirror_settings.direction.pull=Отправка @@ -1714,13 +1714,13 @@ settings.site=Сайт settings.update_settings=Обновить настройки settings.branches.update_default_branch=Обновить ветку по умолчанию settings.advanced_settings=Расширенные настройки -settings.wiki_desc=Включить Вики для репозитория +settings.wiki_desc=Включить Описание для направления settings.use_internal_wiki=Использовать встроенную вики-систему settings.use_external_wiki=Использовать внешнюю вики-систему -settings.external_wiki_url=URL-адрес внешней Вики -settings.external_wiki_url_error=URL внешней вики не является допустимым URL-адресом. +settings.external_wiki_url=URL-адрес внешнего Описания +settings.external_wiki_url_error=URL внешнего Описания не является допустимым URL-адресом. settings.external_wiki_url_desc=Посетители будут перенаправлены на URL-адрес, когда они кликнут по вкладке. -settings.issues_desc=Включить систему учёта задач репозитория +settings.issues_desc=Включить систему учёта задач проекта settings.use_internal_issue_tracker=Использовать встроенную систему учета задач settings.use_external_issue_tracker=Использовать внешнюю систему учета задач settings.external_tracker_url=URL внешней системы отслеживания ошибок @@ -1743,7 +1743,7 @@ settings.pulls.allow_squash_commits=Разрешить объединять ко settings.pulls.allow_manual_merge=Пометить PR как слитый вручную settings.pulls.enable_autodetect_manual_merge=Включить автоопределение ручного слияния (Примечание: в некоторых особых случаях могут возникнуть ошибки) settings.pulls.default_delete_branch_after_merge=Удалить ветку запроса после его слияния по умолчанию -settings.projects_desc=Включить проекты репозитория +settings.projects_desc=Включитьнаправления проекта settings.admin_settings=Настройки администратора settings.admin_enable_health_check=Выполнять проверки целостности этого репозитория (git fsck) settings.admin_code_indexer=Индексатор кода @@ -1771,16 +1771,16 @@ settings.transfer.success=Трансфер репозитория успешно settings.transfer_abort=Отменить трансфер settings.transfer_abort_invalid=Невозможно отменить трансфер несуществующего репозитория. settings.transfer_abort_success=Трансфер репозитория в %s успешно отменён. -settings.transfer_desc=Передать репозиторий другому пользователю или организации где у вас есть права администратора. +settings.transfer_desc=Передать проект другому пользователю или организации где у вас есть права администратора. settings.transfer_form_title=Введите сопутствующую информацию для подтверждения операции: settings.transfer_in_progress=Трансфер в процессе выполнения. Отмените его, если желаете выполнить трансфер другому пользователю. settings.transfer_notices_1=- Вы можете потерять доступ, если новый владелец является отдельным пользователем. settings.transfer_notices_2=- Вы сохраните доступ, если новым владельцем станет организация, владельцем которой вы являетесь. -settings.transfer_notices_3=- если репозиторий является приватным и передается отдельному пользователю, это действие позволяет убедиться, что пользователь имеет хотя бы права на чтение (и при необходимости изменяет права доступа). +settings.transfer_notices_3=- если проект является приватным и передается отдельному пользователю, это действие позволяет убедиться, что пользователь имеет хотя бы права на чтение (и при необходимости изменяет права доступа). settings.transfer_owner=Новый владелец settings.transfer_perform=Выполнить трансфер settings.transfer_started=Репозиторий ожидает подтверждения трансфера от "%s" -settings.transfer_succeed=Репозиторий перенесён. +settings.transfer_succeed=Проект перенесён. settings.signing_settings=Настройки подписи верификации settings.trust_model=Модель доверия подписи settings.trust_model.default=Модель доверия по умолчанию @@ -1794,39 +1794,39 @@ settings.trust_model.committer.desc=Допустимые подписи буду settings.trust_model.collaboratorcommitter=Соавтор+Коммитер settings.trust_model.collaboratorcommitter.long=Соавтор+Коммитер: Доверять подписи соавторам, которые соответствуют коммитеру settings.trust_model.collaboratorcommitter.desc=Допустимые подписи соавторов этого репозитория будут помечены "доверенными", если они соответствуют коммиту. В противном случае, правильные подписи будут помечены как "недоверенными", если подпись соответствует коммиту и не совпадает. Это заставит Gitea быть отмеченным в качестве ответственного за подписание коммитеров с фактическим коммитером, обозначенным как Co-Authored-By: и Co-Committed-By: прикреплённым для выполнения этого коммита. По умолчанию ключ Gitea должен совпадать с пользователем в базе данных. -settings.wiki_delete=Стереть данные Вики -settings.wiki_delete_desc=Будьте внимательны! Как только вы удалите Вики — пути назад не будет. -settings.wiki_delete_notices_1=- Это навсегда удалит и отключит Вики для %s. -settings.confirm_wiki_delete=Стереть данные Вики -settings.wiki_deletion_success=Данные Вики успешно стерты. -settings.delete=Удалить этот репозиторий -settings.delete_desc=Будьте внимательны! Как только вы удалите репозиторий — пути назад не будет. +settings.wiki_delete=Стереть описание направления +settings.wiki_delete_desc=Будьте внимательны! Как только вы удалите описание направления — пути назад не будет. +settings.wiki_delete_notices_1=- Это навсегда удалит и отключит Описание направления для %s. +settings.confirm_wiki_delete=Стереть Описание направления +settings.wiki_deletion_success=Описание направления успешно стерто. +settings.delete=Удалить этот проект +settings.delete_desc=Будьте внимательны! Как только вы удалите проект — пути назад не будет. settings.delete_notices_1=- Эта операция НЕ МОЖЕТ быть отменена. settings.delete_notices_2=- Эта операция навсегда удалит всё из репозитория %s, включая данные Git, связанные с ним задачи, комментарии и права доступа для сотрудников. settings.delete_notices_fork_1=- Все форки станут независимыми репозиториями после удаления. -settings.deletion_success=Репозиторий удалён. +settings.deletion_success=Проект удалён. settings.update_settings_success=Настройки репозитория обновлены. settings.confirm_delete=Удалить репозиторий settings.add_collaborator=Добавить соавтора settings.add_collaborator_success=Соавтор добавлен. settings.add_collaborator_inactive_user=Невозможно добавить неактивного пользователя как соавтора. -settings.add_collaborator_duplicate=Соавтор уже добавлен в этот репозиторий. +settings.add_collaborator_duplicate=Соавтор уже добавлен в этот проект. settings.delete_collaborator=Удалить settings.collaborator_deletion=Удалить соавтора -settings.collaborator_deletion_desc=Этот пользователь больше не будет иметь доступа для совместной работы в этом репозитории после удаления. Вы хотите продолжить? +settings.collaborator_deletion_desc=Этот пользователь больше не будет иметь доступа для совместной работы в этом проекте после удаления. Вы хотите продолжить? settings.remove_collaborator_success=Соавтор удалён. settings.search_user_placeholder=Поиск пользователя… settings.org_not_allowed_to_be_collaborator=Организации не могут быть добавлены как соавторы. -settings.change_team_access_not_allowed=Доступ к репозиторию команде был ограничен владельцем организации -settings.team_not_in_organization=Команда не в той же организации, что и репозиторий +settings.change_team_access_not_allowed=Доступ к проекту команде был ограничен владельцем организации +settings.team_not_in_organization=Команда не в той же организации, что и проект settings.teams=Команды settings.add_team=Добавить команду -settings.add_team_duplicate=Команда уже имеет репозиторий -settings.add_team_success=Команда теперь имеет доступ к репозиторию. +settings.add_team_duplicate=Команда уже имеет проект +settings.add_team_success=Команда теперь имеет доступ к проекту. settings.search_team=Поиск команды… -settings.change_team_permission_tip=Разрешение команды установлено на странице настройки команды и не может быть изменено для каждого репозитория -settings.delete_team_tip=Эта команда имеет доступ ко всем репозиториям и не может быть удалена -settings.remove_team_success=Доступ команды к репозиторию был удалён. +settings.change_team_permission_tip=Разрешение команды установлено на странице настройки команды и не может быть изменено для каждого проекта +settings.delete_team_tip=Эта команда имеет доступ ко всем проектам и не может быть удалена +settings.remove_team_success=Доступ команды к проекту был удалён. settings.add_webhook=Добавить Вебхук settings.add_webhook.invalid_channel_name=Название канала вебхука не может быть пустым или состоять только из символа #. settings.hooks_desc=Вебхуки позволяют внешним службам получать уведомления при возникновении определенных событий на Gitea. При возникновении указанных событий мы отправим запрос POST на каждый заданный вами URL. Узнать больше можно в нашем руководстве по вебхукам. @@ -1858,19 +1858,19 @@ settings.event_desc=На какие события этот веб-хук дол settings.event_push_only=Просто push событие settings.event_send_everything=Все события settings.event_choose=Позвольте мне выбрать то, что нужно. -settings.event_header_repository=События репозитория +settings.event_header_repository=События проекта settings.event_create=Создать settings.event_create_desc=Ветка или тэг созданы. settings.event_delete=Удалить settings.event_delete_desc=Ветка или тег удалены. settings.event_fork=Форкнуть -settings.event_fork_desc=Репозиторий форкнут. +settings.event_fork_desc=Проект форкнут. settings.event_release=Релиз -settings.event_release_desc=Релиз опубликован, обновлён или удалён из репозитория. +settings.event_release_desc=Релиз опубликован, обновлён или удалён из проекта. settings.event_push=Push -settings.event_push_desc=Push в репозиторий. -settings.event_repository=Репозиторий -settings.event_repository_desc=Репозиторий создан или удален. +settings.event_push_desc=Push в проект. +settings.event_repository=Проект +settings.event_repository_desc=Проект создан или удален. settings.event_header_issue=События задачи settings.event_issues=Задачи settings.event_issues_desc=Задача открыта, закрыта, переоткрыта или отредактирована. @@ -1907,22 +1907,22 @@ settings.update_hook_success=Вебхук был обновлён. settings.delete_webhook=Удалить вебхук settings.recent_deliveries=Недавние рассылки settings.hook_type=Тип hook'а -settings.add_slack_hook_desc=Добавить интеграцию с Slack в ваш репозиторий. +settings.add_slack_hook_desc=Добавить интеграцию с Slack в ваш проект. settings.slack_token=Slack токен settings.slack_domain=Домен settings.slack_channel=Канал settings.add_discord_hook_desc=Добавить уведомления о событиях через Discord. -settings.add_dingtalk_hook_desc=Добавить интеграцию с Dingtalk в ваш репозиторий. -settings.add_telegram_hook_desc=Добавить интеграцию с Telegram в ваш репозиторий. -settings.add_matrix_hook_desc=Добавить интеграцию Matrix в ваш репозиторий. -settings.add_msteams_hook_desc=Добавить интеграцию с Microsoft Teams в ваш репозиторий. -settings.add_feishu_hook_desc=Добавить интеграцию Feishu в ваш репозиторий. -settings.add_Wechat_hook_desc=Добавить интеграцию с Wechatwork в ваш репозиторий. +settings.add_dingtalk_hook_desc=Добавить интеграцию с Dingtalk в ваш проект. +settings.add_telegram_hook_desc=Добавить интеграцию с Telegram в ваш проект. +settings.add_matrix_hook_desc=Добавить интеграцию Matrix в ваш проект. +settings.add_msteams_hook_desc=Добавить интеграцию с Microsoft Teams в ваш проект. +settings.add_feishu_hook_desc=Добавить интеграцию Feishu в ваш проект. +settings.add_Wechat_hook_desc=Добавить интеграцию с Wechatwork в ваш проект. settings.deploy_keys=Ключи развертывания settings.add_deploy_key=Добавить ключ развертывания settings.deploy_key_desc=Ключи развёртывания доступны только для чтения. Это не то же самое что и SSH-ключи аккаунта. settings.is_writable=Разрешить запись -settings.is_writable_info=Может ли этот ключ быть использован для выполнения push в репозиторий? Ключи развёртывания всегда имеют доступ на pull. +settings.is_writable_info=Может ли этот ключ быть использован для выполнения push в проект? Ключи развёртывания всегда имеют доступ на pull. settings.no_deploy_keys=Вы не добавляли ключи развертывания. settings.title=Заголовок settings.deploy_key_content=Содержимое @@ -1957,7 +1957,7 @@ settings.protect_merge_whitelist_users=Пользователи с правом settings.protect_merge_whitelist_teams=Команды, члены которых обладают правом на слияние: settings.protect_check_status_contexts=Включить проверку статуса settings.protect_check_status_contexts_desc=Требуется пройти проверку состояния перед слиянием. Выберите, какие проверки состояния должны быть пройдены, прежде чем ветви можно будет объединить в ветвь, соответствующую этому правилу. Если этот параметр включен, коммиты сначала должны быть перемещены в другую ветвь, а затем объединены или перемещены непосредственно в ветвь, соответствующую этому правилу, после прохождения проверки состояния. Если контексты не выбраны, то последняя фиксация должна быть успешной независимо от контекста. -settings.protect_check_status_contexts_list=Проверки состояния за последнюю неделю для этого репозитория +settings.protect_check_status_contexts_list=Проверки состояния за последнюю неделю для этого проекта settings.protect_required_approvals=Необходимые одобрения: settings.protect_required_approvals_desc=Разрешить принятие запроса на слияние только с достаточным количеством положительных отзывов. settings.protect_approvals_whitelist_enabled=Ограничить утверждения белым списком пользователей или команд @@ -2019,7 +2019,7 @@ settings.unarchive.header=Разархивировать этот репозит settings.unarchive.text=Разархивация восстанавливает возможность совершать push в репозиторий, создавать новые коммиты, задачи и запросы на слияние. settings.unarchive.success=Репозиторий был успешно разархивирован. settings.unarchive.error=Ошибка при попытке разархивировать репозиторий. Смотрите логи для получения подробностей. -settings.update_avatar_success=Аватар репозитория обновлён. +settings.update_avatar_success=Аватар проекта обновлён. settings.lfs=LFS settings.lfs_filelist=Файлы LFS хранятся в этом репозитории settings.lfs_no_lfs_files=Нет файлов LFS в этом репозитории @@ -2041,7 +2041,7 @@ settings.lfs_force_unlock=Принудительная разблокировк settings.lfs_pointers.found=Найдено %d указатель(ей) блоков - присоединено %d, %d не привязано (%d отсутствует в хранилище) settings.lfs_pointers.sha=Blob SHA settings.lfs_pointers.oid=OID -settings.lfs_pointers.inRepo=В репозитории +settings.lfs_pointers.inRepo=В проекте settings.lfs_pointers.exists=Существуют в хранилище settings.lfs_pointers.accessible=Доступно для пользователя settings.lfs_pointers.associateAccessible=Связать доступные %d OID @@ -2197,7 +2197,7 @@ repo_updated=Обновлено people=Люди teams=Команды lower_members=Участники -lower_repositories=Репозитории +lower_repositories=Проекты create_new_team=Создание команды create_team=Создать команду org_desc=Описание @@ -2205,9 +2205,9 @@ team_name=Название команды team_desc=Описание team_name_helper=Названия команд должны быть короткими и запоминающимися. team_desc_helper=Что это за команда? -team_access_desc=Доступ к репозиторию +team_access_desc=Доступ к проекту team_permission_desc=Разрешение -team_unit_desc=Разрешить доступ к разделам репозитория +team_unit_desc=Разрешить доступ к разделам проекта team_unit_disabled=(Отключено) form.name_reserved=Наименование организации '%s' зарезервированно. @@ -2221,7 +2221,7 @@ settings.website=Сайт settings.location=Местоположение settings.locationcoordinate=Координаты settings.permission=Разрешения -settings.repoadminchangeteam=Администратор репозитория может добавлять и удалять права доступа для команд +settings.repoadminchangeteam=Администратор проекта может добавлять и удалять права доступа для команд settings.visibility=Видимость settings.visibility.public=Публичный settings.visibility.limited=Ограничено (Видно только для авторизованных пользователей) @@ -2262,12 +2262,12 @@ members.invite_now=Пригласите сейчас teams.join=Объединить teams.leave=Выйти teams.leave.detail=Покинуть %s? -teams.can_create_org_repo=Создать репозитории -teams.can_create_org_repo_helper=Участники могут создавать новые репозитории в организации. Создатель получит администраторский доступ к новому репозиторию. -teams.read_access_helper=Участники могут просматривать и клонировать командные репозитории. -teams.write_access_helper=Участники могут читать и выполнять push в командные репозитории. +teams.can_create_org_repo=Создать проекты +teams.can_create_org_repo_helper=Участники могут создавать новые проекты в организации. Создатель получит администраторский доступ к новому репозиторию. +teams.read_access_helper=Участники могут просматривать и клонировать командные проекты. +teams.write_access_helper=Участники могут читать и выполнять push в командные проекты. teams.admin_access=Доступ администратора -teams.admin_access_helper=Участники могут выполнять pull, push в командные репозитории и добавлять соавторов в команду. +teams.admin_access_helper=Участники могут выполнять pull, push в командные проекты и добавлять соавторов в команду. teams.no_desc=Эта группа не имеет описания teams.settings=Настройки teams.owners_permission_desc=Владельцы имеют полный доступ ко всем репозиториям и имеют права администратора организации. @@ -2278,33 +2278,33 @@ teams.add_team_member=Добавление члена группы разраб teams.delete_team_title=Удалить команду teams.delete_team_desc=Удаление команды отменяет доступ к репозиторию для её членов. Продолжить? teams.delete_team_success=Команда удалена. -teams.read_permission_desc=Эта команда предоставляет доступ на Чтение: члены могут просматривать и клонировать репозитории команды. -teams.write_permission_desc=Эта команда предоставляет доступ на Запись: члены могут получать и выполнять push команды в репозитории. +teams.read_permission_desc=Эта команда предоставляет доступ на Чтение: члены могут просматривать и клонировать проекты команды. +teams.write_permission_desc=Эта команда предоставляет доступ на Запись: члены могут получать и выполнять push команды в проекты. teams.admin_permission_desc=Эта команда дает административный доступ: участники могут читать, пушить и добавлять соавторов к ее репозиториям. -teams.create_repo_permission_desc=Кроме того, эта команда предоставляет право Создание репозитория: члены команды могут создавать новые репозитории в организации. -teams.repositories=Репозитории группы разработки -teams.search_repo_placeholder=Поиск репозитория… -teams.remove_all_repos_title=Удалить все репозитории команды -teams.remove_all_repos_desc=Удаляет все репозитории из команды. -teams.add_all_repos_title=Добавить все репозитории -teams.add_all_repos_desc=Добавит все репозитории организации в команду. +teams.create_repo_permission_desc=Кроме того, эта команда предоставляет право Создание проекта: члены команды могут создавать новые репозитории в организации. +teams.repositories=Проекты группы разработки +teams.search_repo_placeholder=Поиск проекта… +teams.remove_all_repos_title=Удалить все проекты команды +teams.remove_all_repos_desc=Удаляет все проекты из команды. +teams.add_all_repos_title=Добавить все проекты +teams.add_all_repos_desc=Добавит все проекты организации в команду. teams.add_nonexistent_repo=Вы добавляете в отсутствующий репозиторий, пожалуйста сначала его создайте. teams.add_duplicate_users=Пользователь уже состоит в команде. teams.repos.none=Для этой команды нет доступных репозиториев. teams.members.none=В этой команде нет участников. -teams.specific_repositories=Конкретные репозитории -teams.specific_repositories_helper=Участники будут иметь доступ только к репозиториям, явно добавленным в команду. Выбор этого не автоматически удалит репозитории, уже добавленные в Все репозитории. -teams.all_repositories=Все репозитории -teams.all_repositories_helper=Команда имеет доступ ко всем репозиториям. Выбрав его, добавит все существующие репозитории в команду. -teams.all_repositories_read_permission_desc=Эта команда предоставляет прочтено доступ к всем репозиториям: участники могут просматривать и клонировать репозитории. -teams.all_repositories_write_permission_desc=Эта команда предоставляет Написать доступ к всем репозиториям: участники могут читать и выполнять push в репозитории. -teams.all_repositories_admin_permission_desc=Эта команда предоставляет администратору доступ к всем репозиториям: участники могут читать, отправлять сообщения и добавлять соавторов в репозитории. +teams.specific_repositories=Конкретные проекты +teams.specific_repositories_helper=Участники будут иметь доступ только к проектам, явно добавленным в команду. Выбор этого не автоматически удалит репозитории, уже добавленные в Все репозитории. +teams.all_repositories=Все проекты +teams.all_repositories_helper=Команда имеет доступ ко всем проектам. Выбрав его, добавит все существующие проекты в команду. +teams.all_repositories_read_permission_desc=Эта команда предоставляет прочтено доступ к всем проектам: участники могут просматривать и клонировать репозитории. +teams.all_repositories_write_permission_desc=Эта команда предоставляет Написать доступ к всем проектам: участники могут читать и выполнять push в репозитории. +teams.all_repositories_admin_permission_desc=Эта команда предоставляет администратору доступ к всем проектам: участники могут читать, отправлять сообщения и добавлять соавторов в репозитории. [admin] dashboard=Панель users=Пользователи organizations=Организации -repositories=Репозитории +repositories=Проекты hooks=Веб-хуки authentication=Авторизация emails=Адреса эл. почты пользователей @@ -2397,7 +2397,7 @@ users.activated=Активирован users.admin=Администратор users.restricted=Ограничено users.2fa=Двухфакторная авторизация -users.repos=Репозитории +users.repos=Проекты users.created=Создано users.last_login=Последний вход users.never_login=Никогда не входил @@ -2410,7 +2410,7 @@ users.auth_login_name=Логин для авторизации users.password_helper=Оставьте пустым, чтобы оставить без изменений. users.update_profile_success=Профиль учётной записи обновлён успешно. users.edit_account=Изменение учетной записи -users.max_repo_creation=Максимальное количество репозиториев +users.max_repo_creation=Максимальное количество проектов users.max_repo_creation_desc=(Установите -1 для использования стандартного глобального значения предела) users.is_activated=Эта учетная запись активирована users.prohibit_login=Этой учетной записи запрещён вход в систему @@ -2418,7 +2418,7 @@ users.is_admin=У этой учетной записи есть права ад users.is_restricted=Ограничен users.allow_git_hook=Эта учётная запись имеет разрешение на создание Git hook'ов users.allow_git_hook_tooltip=Git Hooks выполняется как пользователь ОС с Gitea и будет иметь одинаковый уровень доступа к хосту. В результате пользователи с привилегией Git Hook могут получить доступ и модифицировать все репозитории Gitea, а также базу данных, используемую Gitea. Следовательно, они также могут получить привилегии администратора Gitea. -users.allow_import_local=Пользователь имеет право импортировать локальные репозитории +users.allow_import_local=Пользователь имеет право импортировать локальные проекты users.allow_create_organization=Эта учетная запись имеет разрешения на создание организаций users.update_profile=Обновить профиль учетной записи users.delete_account=Удалить эту учетную запись @@ -2458,9 +2458,9 @@ orgs.teams=Команды orgs.members=Участники orgs.new_orga=Новая организация -repos.repo_manage_panel=Управление репозиториями -repos.unadopted=Непринятые репозитории -repos.unadopted.no_more=Больше непринятых репозиториев не найдено +repos.repo_manage_panel=Управление проектами +repos.unadopted=Непринятые проекты +repos.unadopted.no_more=Больше непринятых проектов не найдено repos.owner=Владелец repos.name=Название repos.private=Личный @@ -2597,7 +2597,7 @@ config.disable_router_log=Отключение журнала маршрутиз config.run_user=Запуск от имени пользователя config.run_mode=Режим выполнения config.git_version=Версия Git -config.repo_root_path=Путь до папки репозиториев +config.repo_root_path=Путь до папки проектов config.lfs_root_path=Корневой путь LFS config.static_file_root_path=Путь до папки со статичными файлами config.log_file_root_path=Путь к журналу @@ -2797,15 +2797,15 @@ notices.inverse_selection=Инверсия выделения notices.delete_selected=Удалить выбранные notices.delete_all=Удалить все уведомления notices.type=Тип -notices.type_1=Репозиторий +notices.type_1=Проект notices.type_2=Задача notices.desc=Описание notices.op=Oп. notices.delete_success=Уведомления системы были удалены. [action] -create_repo=создал(а) репозиторий %s -rename_repo=переименовал(а) репозиторий из %[1]s на %[3]s +create_repo=создал(а) Проект %s +rename_repo=переименовал(а) Проект из %[1]s на %[3]s commit_repo=отправил(а) изменения в %[3]s в %[4]s create_issue=`открыл(а) задачу %[3]s#%[2]s` close_issue=`закрыл(а) задачу %[3]s#%[2]s` @@ -2816,7 +2816,7 @@ reopen_pull_request=`переоткрыл(а) запрос на слияние < comment_issue=`прокомментировал(а) задачу %[3]s#%[2]s` comment_pull=`прокомментировал(а) запрос на слияние %[3]s#%[2]s` merge_pull_request=`принял(а) запрос на слияние %[3]s#%[2]s` -transfer_repo=передал(а) репозиторий %s %s +transfer_repo=передал(а) Проект %s %s push_tag=создал(а) тег %[3]s в %[4]s delete_tag=удалил(а) тэг %[2]s из %[3]s delete_branch=удалил(а) ветку %[2]s из %[3]s -- 2.11.0 From 6def6d1b49e43a9008de76620c83112096125067 Mon Sep 17 00:00:00 2001 From: Gitea Date: Mon, 27 Jun 2022 23:17:57 +0300 Subject: [PATCH 15/39] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=20=D1=81=20=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82=D1=8B=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=D0=BC=D0=B8=201.?= =?UTF-8?q?=20=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=82=D0=BE=20=D1=87=D1=82=D0=BE=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B0=20=D0=BF=D1=80=D0=B8=D1=81=D1=83=D1=82=D1=81?= =?UTF-8?q?=D1=82=D0=B2=D1=83=D0=B5=D1=82=20=D0=B2=20=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=B5=20=D0=B8=D0=BB=D0=B8=20=D0=B2=D0=BE=D0=BE?= =?UTF-8?q?=D0=B1=D1=89=D0=B5=20=D0=B8=D0=B7=20=D1=8D=D1=82=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D1=8F=20#30=202.=20=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80=D1=8B=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0=20=D0=B2=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD?= =?UTF-8?q?=D0=B0=D1=85=20#24?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/web/repo/issue.go | 2 +- templates/repo/issue/issue_actions.tmpl | 89 ++++++++++ templates/repo/issue/issue_filters.tmpl | 90 ++++++++++ templates/repo/issue/list.tmpl | 204 +--------------------- templates/repo/issue/nav_search_and_new.tmpl | 23 +++ templates/repo/issue/treant_config.tmpl | 20 +++ templates/repo/issue/tree.tmpl | 243 ++------------------------- 7 files changed, 243 insertions(+), 428 deletions(-) create mode 100644 templates/repo/issue/issue_actions.tmpl create mode 100644 templates/repo/issue/issue_filters.tmpl create mode 100644 templates/repo/issue/nav_search_and_new.tmpl create mode 100644 templates/repo/issue/treant_config.tmpl diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 1bb9d9fc7f..8d1f4986d6 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -429,7 +429,7 @@ func IssuesTree(ctx *context.Context) { return } ctx.Data["Title"] = ctx.Tr("repo.issues_tree") - ctx.Data["PageIsIssuesTree"] = true + ctx.Data["PageIsIssueList"] = true ctx.Data["NewIssueChooseTemplate"] = len(ctx.IssueTemplatesFromDefaultBranch()) > 0 } diff --git a/templates/repo/issue/issue_actions.tmpl b/templates/repo/issue/issue_actions.tmpl new file mode 100644 index 0000000000..4e1f6bc978 --- /dev/null +++ b/templates/repo/issue/issue_actions.tmpl @@ -0,0 +1,89 @@ +
    +
    + {{template "repo/issue/openclose" .}} +
    + {{/* Ten wide does not cope well and makes the columns stack. + This seems to be related to jQuery's hide/show: in fact, switching + issue-actions and issue-filters and having this ten wide will show + this one correctly, but not the other one. */}} +
    + +
    +
    diff --git a/templates/repo/issue/issue_filters.tmpl b/templates/repo/issue/issue_filters.tmpl new file mode 100644 index 0000000000..a3296f2df5 --- /dev/null +++ b/templates/repo/issue/issue_filters.tmpl @@ -0,0 +1,90 @@ +
    +
    + {{template "repo/issue/openclose" .}} +
    +
    + +
    +
    diff --git a/templates/repo/issue/list.tmpl b/templates/repo/issue/list.tmpl index 63d746f570..9cf9c6f679 100644 --- a/templates/repo/issue/list.tmpl +++ b/templates/repo/issue/list.tmpl @@ -2,209 +2,11 @@
    {{template "repo/header" .}}
    -
    -
    - {{template "repo/issue/navbar" .}} -
    -
    - {{template "repo/issue/search" .}} -
    - {{if not .Repository.IsArchived}} -
    - {{if .PageIsIssueList}} - {{.i18n.Tr "repo.issues.new"}} - {{else}} - {{.i18n.Tr "repo.pulls.new"}} - {{end}} -
    - {{else}} - {{if not .PageIsIssueList}} - - {{end}} - {{end}} -
    + {{template "repo/issue/nav_search_and_new" .}}
    -
    -
    - {{template "repo/issue/openclose" .}} -
    -
    - -
    -
    -
    -
    - {{template "repo/issue/openclose" .}} -
    - {{/* Ten wide does not cope well and makes the columns stack. - This seems to be related to jQuery's hide/show: in fact, switching - issue-actions and issue-filters and having this ten wide will show - this one correctly, but not the other one. */}} -
    - -
    -
    {{template "shared/issuelist" mergeinto . "listType" "repo"}}
    diff --git a/templates/repo/issue/nav_search_and_new.tmpl b/templates/repo/issue/nav_search_and_new.tmpl new file mode 100644 index 0000000000..92f433284d --- /dev/null +++ b/templates/repo/issue/nav_search_and_new.tmpl @@ -0,0 +1,23 @@ +
    +
    + {{template "repo/issue/navbar" .}} +
    +
    + {{template "repo/issue/search" .}} +
    + {{if not .Repository.IsArchived}} +
    + {{if .PageIsIssueList}} + {{.i18n.Tr "repo.issues.new"}} + {{else}} + {{.i18n.Tr "repo.pulls.new"}} + {{end}} +
    + {{else}} + {{if not .PageIsIssueList}} + + {{end}} + {{end}} +
    diff --git a/templates/repo/issue/treant_config.tmpl b/templates/repo/issue/treant_config.tmpl new file mode 100644 index 0000000000..d6d3b04b55 --- /dev/null +++ b/templates/repo/issue/treant_config.tmpl @@ -0,0 +1,20 @@ + + + + + + diff --git a/templates/repo/issue/tree.tmpl b/templates/repo/issue/tree.tmpl index 8423795391..ef6f8d4a34 100644 --- a/templates/repo/issue/tree.tmpl +++ b/templates/repo/issue/tree.tmpl @@ -2,209 +2,11 @@
    {{template "repo/header" .}}
    -
    -
    - {{template "repo/issue/navbar" .}} -
    -
    - {{template "repo/issue/search" .}} -
    - {{if not .Repository.IsArchived}} -
    - {{if .PageIsIssuesTree}} - {{.i18n.Tr "repo.issues.new"}} - {{else}} - {{.i18n.Tr "repo.pulls.new"}} - {{end}} -
    - {{else}} - {{if not .PageIsIssuesTree}} - - {{end}} - {{end}} -
    + {{template "repo/issue/nav_search_and_new" .}}
    -
    -
    - {{template "repo/issue/openclose" .}} -
    -
    - -
    -
    -
    -
    - {{template "repo/issue/openclose" .}} -
    - {{/* Ten wide does not cope well and makes the columns stack. - This seems to be related to jQuery's hide/show: in fact, switching - issue-actions and issue-filters and having this ten wide will show - this one correctly, but not the other one. */}} -
    - -
    -
    + {{template "repo/issue/issue_filters" .}} + {{template "repo/issue/issue_actions" .}} + +
    + + +
    -- 2.11.0 From 052d2440bdb81068e55f2d4aecf8b395483047ff Mon Sep 17 00:00:00 2001 From: Artur Galyamov Date: Thu, 28 Jul 2022 19:04:59 +0500 Subject: [PATCH 32/39] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F=D0=BB=D0=B8?= =?UTF-8?q?=D1=81=D1=8C=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B1=D0=B5=D0=BB=D1=8B=20=D0=B2=D0=BD=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=D0=BB=D0=B5=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20#3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/forms/admin.go | 2 +- templates/admin/user/edit.tmpl | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/services/forms/admin.go b/services/forms/admin.go index 38dcf9f219..8a4aaaed50 100644 --- a/services/forms/admin.go +++ b/services/forms/admin.go @@ -41,7 +41,7 @@ type AdminEditUserForm struct { Email string `binding:"Required;Email;MaxSize(254)"` Password string `binding:"MaxSize(255)"` Website string `binding:"ValidUrl;MaxSize(255)"` - Description string + Description string `binding:"MaxSize(1024)"` Location string `binding:"MaxSize(50)"` LocationCoordinate string `binding:"MaxSize(255)"` MaxRepoCreation int diff --git a/templates/admin/user/edit.tmpl b/templates/admin/user/edit.tmpl index 531101a2a9..7487baf947 100644 --- a/templates/admin/user/edit.tmpl +++ b/templates/admin/user/edit.tmpl @@ -75,9 +75,7 @@
    - +
    -- 2.11.0 From 2b36ec27962fdc833892055d99878edd4ee509e2 Mon Sep 17 00:00:00 2001 From: Artur Galyamov Date: Thu, 28 Jul 2022 19:43:03 +0500 Subject: [PATCH 33/39] =?UTF-8?q?=D0=A3=D0=B2=D0=B5=D0=BB=D0=B8=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=20=D0=9E=20?= =?UTF-8?q?=D1=81=D0=B5=D0=B1=D0=B5=20#4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/user/user.go | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/models/user/user.go b/models/user/user.go index 9312a4e5b5..ac70c242b5 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -89,17 +89,17 @@ type User struct { // is to change his/her password after registration. MustChangePassword bool `xorm:"NOT NULL DEFAULT false"` - LoginType auth.Type - LoginSource int64 `xorm:"NOT NULL DEFAULT 0"` - LoginName string - Type UserType - Location string + LoginType auth.Type + LoginSource int64 `xorm:"NOT NULL DEFAULT 0"` + LoginName string + Type UserType + Location string LocationCoordinate string - Website string - Rands string `xorm:"VARCHAR(32)"` - Salt string `xorm:"VARCHAR(32)"` - Language string `xorm:"VARCHAR(5)"` - Description string + Website string + Rands string `xorm:"VARCHAR(32)"` + Salt string `xorm:"VARCHAR(32)"` + Language string `xorm:"VARCHAR(5)"` + Description string `xorm:"TEXT"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"` -- 2.11.0 From 05d6ec60713eec4d5dd19a6a14dd2a6bc2d094da Mon Sep 17 00:00:00 2001 From: Artur Galyamov Date: Wed, 3 Aug 2022 17:04:18 +0500 Subject: [PATCH 34/39] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B8=20LFS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- options/locale/locale_ru-RU.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/options/locale/locale_ru-RU.ini b/options/locale/locale_ru-RU.ini index 608673abd3..7a3a9bb10d 100644 --- a/options/locale/locale_ru-RU.ini +++ b/options/locale/locale_ru-RU.ini @@ -2022,7 +2022,7 @@ settings.unarchive.error=Ошибка при попытке разархивир settings.update_avatar_success=Аватар проекта обновлён. settings.lfs=LFS settings.lfs_filelist=Файлы LFS хранятся в этом репозитории -settings.lfs_no_lfs_files=Нет файлов LFS в этом репозитории +settings.lfs_no_lfs_files=Нет файлов Large file storage (LFS) в этом репозитории1 settings.lfs_findcommits=Найти коммиты settings.lfs_lfs_file_no_commits=Для этого LFS файла не найдено коммитов settings.lfs_noattribute=Этот путь не имеет блокируемого атрибута в ветке по умолчанию -- 2.11.0 From 950ac05db0f922bf9ee76f54f4e68c8ab009baef Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Wed, 3 Aug 2022 21:23:01 +0300 Subject: [PATCH 35/39] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?.=20=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=80=D1=82=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D0=B6=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=B1=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5=D0=B5=2010=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/web/map/umap.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/web/map/umap.go b/routers/web/map/umap.go index a91334cdc9..e8dc3203a0 100644 --- a/routers/web/map/umap.go +++ b/routers/web/map/umap.go @@ -102,7 +102,7 @@ func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions, ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled - pager := context.NewPagination(int(count), opts.PageSize, opts.Page, 5) + pager := context.NewPagination(int(count), 8 * 1024, opts.Page, 5) pager.SetDefaultParams(ctx) for paramKey, paramVal := range opts.ExtraParamStrings { pager.AddParamString(paramKey, paramVal) -- 2.11.0 From d87f41d080f22242287a491e6fd0bf20114f96b4 Mon Sep 17 00:00:00 2001 From: Artur Galyamov Date: Thu, 4 Aug 2022 12:41:50 +0500 Subject: [PATCH 36/39] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20caniuse-lite?= =?UTF-8?q?,=20=D0=B2=20=D1=82.=D1=87.=20=D0=BC=D0=B5=D1=88=D0=B0=D0=BB?= =?UTF-8?q?=D0=BE=20=D0=B2=D1=8B=D0=BA=D0=B0=D1=82=D1=8B=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8E=20#86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f8d921e21..a3ccc16807 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1711,6 +1711,8 @@ "version": "8.9.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "optional": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -1725,7 +1727,9 @@ "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "optional": true, + "peer": true }, "node_modules/ajv-keywords": { "version": "3.5.2", @@ -2119,13 +2123,19 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001301", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", - "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, "node_modules/chalk": { "version": "4.1.2", @@ -11189,14 +11199,13 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - }, + "requires": {}, "dependencies": { "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "version": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "optional": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -11207,7 +11216,9 @@ "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "optional": true, + "peer": true } } }, @@ -11497,9 +11508,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001301", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", - "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==" + "version": "1.0.30001373", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", + "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==" }, "chalk": { "version": "4.1.2", -- 2.11.0 From c03d07ed1ee0ddd0d52557409de32e6f05123308 Mon Sep 17 00:00:00 2001 From: Artur Galyamov Date: Fri, 5 Aug 2022 13:42:24 +0500 Subject: [PATCH 37/39] =?UTF-8?q?=D0=A0=D0=B5=D0=B3=D1=83=D0=BB=D1=8F?= =?UTF-8?q?=D1=80=D0=BD=D0=BE=D0=B5=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20js-=D0=BF=D0=B0=D0=BA=D0=B5=D1=82?= =?UTF-8?q?=D0=B0=20caniuse=20#86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index a3ccc16807..e7e1a78627 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2123,9 +2123,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001373", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", - "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "version": "1.0.30001374", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", + "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==", "funding": [ { "type": "opencollective", @@ -11508,9 +11508,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001373", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", - "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==" + "version": "1.0.30001374", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001374.tgz", + "integrity": "sha512-mWvzatRx3w+j5wx/mpFN5v5twlPrabG8NqX2c6e45LCpymdoGqNvRkRutFUqpRTXKFQFNQJasvK0YT7suW6/Hw==" }, "chalk": { "version": "4.1.2", -- 2.11.0 From a1f7db70d14bcf0f069ed53a334da722d31bd15c Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Fri, 5 Aug 2022 15:51:05 +0300 Subject: [PATCH 38/39] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D0=B8=20=D0=B2?= =?UTF-8?q?=D0=B8=D0=B4=D0=BD=D1=8B=20=D0=BD=D0=B0=20=D0=BA=D0=B0=D1=80?= =?UTF-8?q?=D1=82=D0=B5=20#77?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/web/map/umap.go | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/routers/web/map/umap.go b/routers/web/map/umap.go index e8dc3203a0..e53e84ae13 100644 --- a/routers/web/map/umap.go +++ b/routers/web/map/umap.go @@ -38,6 +38,7 @@ func isKeywordValid(keyword string) bool { // RenderUserSearch render user search page func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions, tplName base.TplName) { + opts.PageSize = 8 * 1024 // Get all users opts.Page = ctx.FormInt("page") if opts.Page <= 1 { opts.Page = 1 @@ -102,13 +103,6 @@ func RenderUserSearch(ctx *context.Context, opts *user_model.SearchUserOptions, ctx.Data["ShowUserEmail"] = setting.UI.ShowUserEmail ctx.Data["IsRepoIndexerEnabled"] = setting.Indexer.RepoIndexerEnabled - pager := context.NewPagination(int(count), 8 * 1024, opts.Page, 5) - pager.SetDefaultParams(ctx) - for paramKey, paramVal := range opts.ExtraParamStrings { - pager.AddParamString(paramKey, paramVal) - } - ctx.Data["Page"] = pager - ctx.HTML(http.StatusOK, tplName) } -- 2.11.0 From f9757ff9099f234d043033d2de263a5b6050adc0 Mon Sep 17 00:00:00 2001 From: Alexei Bezborodov Date: Fri, 5 Aug 2022 17:30:56 +0300 Subject: [PATCH 39/39] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D1=82=D0=B0=D1=80=D1=82=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0=20?= =?UTF-8?q?=D1=81=20"=D0=9A=D0=BE=D0=B4=D0=B0"=20=D0=BD=D0=B0=20"=D0=92?= =?UTF-8?q?=D0=B8=D0=BA=D0=B8"=20#35?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/web/repo/view.go | 10 ++++++++++ routers/web/web.go | 9 +++++---- templates/repo/header.tmpl | 2 +- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go index e98d94f7ca..da328ded45 100644 --- a/routers/web/repo/view.go +++ b/routers/web/repo/view.go @@ -697,6 +697,16 @@ func Home(ctx *context.Context) { return } + Wiki(ctx) +} + +// Code render repository page +func Code(ctx *context.Context) { + checkHomeCodeViewable(ctx) + if ctx.Written() { + return + } + renderCode(ctx) } diff --git a/routers/web/web.go b/routers/web/web.go index df09957b4a..aa946dd343 100644 --- a/routers/web/web.go +++ b/routers/web/web.go @@ -1042,11 +1042,11 @@ func RegisterRoutes(m *web.Route) { }, repo.MustBeNotEmpty, context.RepoRef(), reqRepoCodeReader) m.Group("/src", func() { - m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.Home) - m.Get("/tag/*", context.RepoRefByType(context.RepoRefTag), repo.Home) - m.Get("/commit/*", context.RepoRefByType(context.RepoRefCommit), repo.Home) + m.Get("/branch/*", context.RepoRefByType(context.RepoRefBranch), repo.Code) + m.Get("/tag/*", context.RepoRefByType(context.RepoRefTag), repo.Code) + m.Get("/commit/*", context.RepoRefByType(context.RepoRefCommit), repo.Code) // "/*" route is deprecated, and kept for backward compatibility - m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.Home) + m.Get("/*", context.RepoRefByType(context.RepoRefLegacy), repo.Code) }, repo.SetEditorconfigIfExists) m.Group("", func() { @@ -1067,6 +1067,7 @@ func RegisterRoutes(m *web.Route) { m.Group("/{username}", func() { m.Group("/{reponame}", func() { m.Get("", repo.SetEditorconfigIfExists, repo.Home) + m.Get("/code", repo.SetEditorconfigIfExists, repo.Code) }, ignSignIn, context.RepoAssignment, context.RepoRef(), context.UnitTypes()) m.Group("/{reponame}", func() { diff --git a/templates/repo/header.tmpl b/templates/repo/header.tmpl index 13c76de5aa..4948d90379 100644 --- a/templates/repo/header.tmpl +++ b/templates/repo/header.tmpl @@ -178,7 +178,7 @@ {{ end }} {{if .Permission.CanRead $.UnitTypeCode}} - + {{svg "octicon-code"}} {{.i18n.Tr "repo.code"}} {{end}} -- 2.11.0