From 943dc087229aa922503eab7e49f4c63667dbb632 Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Sat, 23 Oct 2021 22:47:38 +0800 Subject: [PATCH] Fix issue content history problems, improve UI (#17404) * Improve: make diff result better, make the HTML element fit the full height in the content history diff dialog * Bug fix: when edit the main issue, the poster is wrongly set to the issue poster --- models/issue.go | 4 ++-- models/issue_test.go | 1 + routers/web/repo/issue_content_history.go | 10 ++++++---- web_src/js/features/issue-content-history.js | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/models/issue.go b/models/issue.go index 823d82a765..a27bb1cc7d 100644 --- a/models/issue.go +++ b/models/issue.go @@ -804,7 +804,7 @@ func (issue *Issue) ChangeContent(doer *User, content string) (err error) { return fmt.Errorf("UpdateIssueCols: %v", err) } - if err = issues.SaveIssueContentHistory(db.GetEngine(ctx), issue.PosterID, issue.ID, 0, + if err = issues.SaveIssueContentHistory(db.GetEngine(ctx), doer.ID, issue.ID, 0, timeutil.TimeStampNow(), issue.Content, false); err != nil { return fmt.Errorf("SaveIssueContentHistory: %v", err) } @@ -979,7 +979,7 @@ func newIssue(e db.Engine, doer *User, opts NewIssueOptions) (err error) { return err } - if err = issues.SaveIssueContentHistory(e, opts.Issue.PosterID, opts.Issue.ID, 0, + if err = issues.SaveIssueContentHistory(e, doer.ID, opts.Issue.ID, 0, timeutil.TimeStampNow(), opts.Issue.Content, true); err != nil { return err } diff --git a/models/issue_test.go b/models/issue_test.go index d726a24344..8894d80201 100644 --- a/models/issue_test.go +++ b/models/issue_test.go @@ -357,6 +357,7 @@ func testInsertIssue(t *testing.T, title, content string, expectIndex int64) *Is issue := Issue{ RepoID: repo.ID, PosterID: user.ID, + Poster: user, Title: title, Content: content, } diff --git a/routers/web/repo/issue_content_history.go b/routers/web/repo/issue_content_history.go index c0e958203d..dc647b8809 100644 --- a/routers/web/repo/issue_content_history.go +++ b/routers/web/repo/issue_content_history.go @@ -88,12 +88,13 @@ func canSoftDeleteContentHistory(ctx *context.Context, issue *models.Issue, comm if ctx.Repo.IsOwner() { canSoftDelete = true } else if ctx.Repo.CanWrite(models.UnitTypeIssues) { - canSoftDelete = ctx.User.ID == history.PosterID if comment == nil { - canSoftDelete = canSoftDelete && (ctx.User.ID == issue.PosterID) + // the issue poster or the history poster can soft-delete + canSoftDelete = ctx.User.ID == issue.PosterID || ctx.User.ID == history.PosterID canSoftDelete = canSoftDelete && (history.IssueID == issue.ID) } else { - canSoftDelete = canSoftDelete && (ctx.User.ID == comment.PosterID) + // the comment poster or the history poster can soft-delete + canSoftDelete = ctx.User.ID == comment.PosterID || ctx.User.ID == history.PosterID canSoftDelete = canSoftDelete && (history.IssueID == issue.ID) canSoftDelete = canSoftDelete && (history.CommentID == comment.ID) } @@ -137,7 +138,8 @@ func GetContentHistoryDetail(ctx *context.Context) { // compare the current history revision with the previous one dmp := diffmatchpatch.New() - diff := dmp.DiffMain(prevHistoryContentText, history.ContentText, true) + // `checklines=false` makes better diff result + diff := dmp.DiffMain(prevHistoryContentText, history.ContentText, false) diff = dmp.DiffCleanupEfficiency(diff) // use chroma to render the diff html diff --git a/web_src/js/features/issue-content-history.js b/web_src/js/features/issue-content-history.js index 3b830f50f8..c71d3789d4 100644 --- a/web_src/js/features/issue-content-history.js +++ b/web_src/js/features/issue-content-history.js @@ -12,7 +12,7 @@ function showContentHistoryDetail(issueBaseUrl, commentId, historyId, itemTitleH if ($dialog.length) return; $dialog = $(` -