diff options
author | sebastian-sauer <sauer.sebastian@gmail.com> | 2022-09-27 07:22:19 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-27 13:22:19 +0800 |
commit | 31f934c1d8005cdd87c47ce104d00c0efaec374b (patch) | |
tree | a71a387a73fd9a5506e539ad491982dd0a6e0756 /templates | |
parent | 525751243efbaed86d6992ca6c7a7e4be229841b (diff) | |
download | gitea-31f934c1d8005cdd87c47ce104d00c0efaec374b.tar.gz gitea-31f934c1d8005cdd87c47ce104d00c0efaec374b.zip |
Add filetree on left of diff view (#21012)
This PR adds a filetree to the left side of the files/diff view.
Initially the filetree will not be shown and may be shown via a new
"Show file tree" button.
Showing and hiding is using the same icon as github. Folders are
collapsible. On small devices (max-width 991 PX) the file tree will be
hidden.
Close #18192
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'templates')
-rw-r--r-- | templates/repo/commit_page.tmpl | 2 | ||||
-rw-r--r-- | templates/repo/diff/box.tmpl | 269 | ||||
-rw-r--r-- | templates/repo/diff/compare.tmpl | 2 | ||||
-rw-r--r-- | templates/repo/diff/options_dropdown.tmpl | 2 | ||||
-rw-r--r-- | templates/repo/pulls/files.tmpl | 2 |
5 files changed, 144 insertions, 133 deletions
diff --git a/templates/repo/commit_page.tmpl b/templates/repo/commit_page.tmpl index 8ece768832..da37aaa9b3 100644 --- a/templates/repo/commit_page.tmpl +++ b/templates/repo/commit_page.tmpl @@ -1,7 +1,7 @@ {{template "base/head" .}} <div class="page-content repository diff"> {{template "repo/header" .}} - <div class="ui container {{if .IsSplitStyle}}fluid padded{{end}}"> + <div class="ui container fluid padded"> {{$class := ""}} {{if .Commit.Signature}} {{$class = (printf "%s%s" $class " isSigned")}} diff --git a/templates/repo/diff/box.tmpl b/templates/repo/diff/box.tmpl index 51769eb953..4624a53ba3 100644 --- a/templates/repo/diff/box.tmpl +++ b/templates/repo/diff/box.tmpl @@ -14,6 +14,11 @@ {{else}} <div> <div class="diff-detail-box diff-box sticky df sb ac fw"> + <a class="diff-toggle-file-tree-button"> + {{/* the icon meaning is reversed here, "octicon-sidebar-collapse" means show the file tree */}} + {{svg "octicon-sidebar-collapse" 16 "icon hide"}} + {{svg "octicon-sidebar-expand" 16 "icon"}} + </a> <div class="diff-detail-stats df ac"> {{svg "octicon-diff" 16 "mr-2"}}{{.locale.Tr "repo.diff.stats_desc" .Diff.NumFiles .Diff.TotalAddition .Diff.TotalDeletion | Str2html}} </div> @@ -31,145 +36,151 @@ {{end}} </div> </div> - <ol class="diff-detail-box diff-stats m-0 hide" id="diff-files"> - {{range .Diff.Files}} - <li> - <div class="bold df ac pull-right"> - {{if .IsBin}} - <span class="ml-1 mr-3"> - {{$.locale.Tr "repo.diff.bin"}} - </span> - {{else}} - {{template "repo/diff/stats" dict "file" . "root" $}} - {{end}} - </div> - <!-- todo finish all file status, now modify, add, delete and rename --> - <span class="status {{DiffTypeToStr .GetType}} tooltip" data-content="{{DiffTypeToStr .GetType}}" data-position="right center"> </span> - <a class="file mono" href="#diff-{{.NameHash}}">{{.Name}}</a> - </li> - {{end}} - {{if .Diff.IsIncomplete}} - <li id="diff-too-many-files-stats" class="pt-2"> - <span class="file df ac sb">{{$.locale.Tr "repo.diff.too_many_files"}} - <a class="ui basic tiny button" id="diff-show-more-files-stats" data-href="{{$.Link}}?skip-to={{.Diff.End}}&file-only=true">{{.locale.Tr "repo.diff.show_more"}}</a> - </span> - </li> - {{end}} - </ol> - <div id="diff-file-boxes"> - {{range $file := .Diff.Files}} - {{/*notice: the index of Diff.Files should not be used for element ID, because the index will be restarted from 0 when doing load-more for PRs with a lot of files*/}} - {{$blobBase := call $.GetBlobByPathForCommit $.BaseCommit $file.OldName}} - {{$blobHead := call $.GetBlobByPathForCommit $.HeadCommit $file.Name}} - {{$isImage := or (call $.IsBlobAnImage $blobBase) (call $.IsBlobAnImage $blobHead)}} - {{$isCsv := (call $.IsCsvFile $file)}} - {{$showFileViewToggle := or $isImage (and (not $file.IsIncomplete) $isCsv)}} - <div class="diff-file-box diff-box file-content {{TabSizeClass $.Editorconfig $file.Name}} mt-3" id="diff-{{$file.NameHash}}" data-old-filename="{{$file.OldName}}" data-new-filename="{{$file.Name}}" {{if $file.ShouldBeHidden}}data-folded="true"{{end}}> - <h4 class="diff-file-header sticky-2nd-row ui top attached normal header df ac sb"> - <div class="df ac"> - <a role="button" class="fold-file muted mr-2"> - {{if $file.ShouldBeHidden}} - {{svg "octicon-chevron-right" 18}} - {{else}} - {{svg "octicon-chevron-down" 18}} - {{end}} - </a> - <div class="bold df ac"> - {{if $file.IsBin}} - <span class="ml-1 mr-3"> - {{$.locale.Tr "repo.diff.bin"}} - </span> - {{else}} - {{template "repo/diff/stats" dict "file" . "root" $}} - {{end}} - </div> - <span class="file mono"><a class="muted" href="#diff-{{$file.NameHash}}">{{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}}</a>{{if .IsLFSFile}} ({{$.locale.Tr "repo.stored_lfs"}}){{end}}</span> - {{if $file.IsGenerated}} - <span class="ui label ml-3">{{$.locale.Tr "repo.diff.generated"}}</span> - {{end}} - {{if $file.IsVendored}} - <span class="ui label ml-3">{{$.locale.Tr "repo.diff.vendored"}}</span> - {{end}} - </div> - <div class="diff-file-header-actions df ac"> - {{if $showFileViewToggle}} - <div class="ui compact icon buttons"> - <span class="ui tiny basic button tooltip file-view-toggle" data-toggle-selector="#diff-source-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_source"}}" data-position="bottom center">{{svg "octicon-code"}}</span> - <span class="ui tiny basic button tooltip file-view-toggle active" data-toggle-selector="#diff-rendered-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_rendered"}}" data-position="bottom center">{{svg "octicon-file"}}</span> - </div> - {{end}} - {{if $file.IsProtected}} - <span class="ui basic label">{{$.locale.Tr "repo.diff.protected"}}</span> - {{end}} - {{if not (or $file.IsIncomplete $file.IsBin $file.IsSubmodule)}} - <a class="ui basic tiny button unescape-button">{{$.locale.Tr "repo.unescape_control_characters"}}</a> - <a class="ui basic tiny button escape-button" style="display: none;">{{$.locale.Tr "repo.escape_control_characters"}}</a> - {{end}} - {{if and (not $file.IsSubmodule) (not $.PageIsWiki)}} - {{if $file.IsDeleted}} - <a class="ui basic tiny button" rel="nofollow" href="{{$.BeforeSourcePath}}/{{PathEscapeSegments .Name}}">{{$.locale.Tr "repo.diff.view_file"}}</a> - {{else}} - <a class="ui basic tiny button" rel="nofollow" href="{{$.SourcePath}}/{{PathEscapeSegments .Name}}">{{$.locale.Tr "repo.diff.view_file"}}</a> - {{end}} - {{end}} - {{if and $.IsSigned $.PageIsPullFiles (not $.IsArchived)}} - {{if $file.HasChangedSinceLastReview}} - <span class="changed-since-last-review unselectable">{{$.locale.Tr "repo.pulls.has_changed_since_last_review"}}</span> - {{end}} - <label data-link="{{$.Issue.Link}}/viewed-files" data-headcommit="{{$.PullHeadCommitID}}" class="viewed-file-form unselectable{{if $file.IsViewed}} viewed-file-checked-form{{end}}"> - <input type="checkbox" name="{{$file.GetDiffFileName}}" autocomplete="off"{{if $file.IsViewed}} checked{{end}}> {{$.locale.Tr "repo.pulls.has_viewed_file"}} - </label> - {{end}} - </div> - </h4> - <div class="diff-file-body ui attached unstackable table segment" {{if $file.IsViewed}}data-folded="true"{{end}}> - <div id="diff-source-{{$file.NameHash}}" class="file-body file-code unicode-escaped code-diff{{if $.IsSplitStyle}} code-diff-split{{else}} code-diff-unified{{end}}{{if $showFileViewToggle}} hide{{end}}"> - {{if or $file.IsIncomplete $file.IsBin}} - <div class="diff-file-body binary" style="padding: 5px 10px;"> - {{if $file.IsIncomplete}} - {{if $file.IsIncompleteLineTooLong}} - {{$.locale.Tr "repo.diff.file_suppressed_line_too_long"}} + <script id="diff-data-script"> + (() => { + const diffData = { + files: [{{range $i, $file := .Diff.Files}}{Name:"{{$file.Name}}",NameHash:"{{$file.NameHash}}",Type:{{$file.Type}},IsBin:{{$file.IsBin}},Addition:{{$file.Addition}},Deletion:{{$file.Deletion}}},{{end}}], + isIncomplete: {{.Diff.IsIncomplete}}, + tooManyFilesMessage: "{{$.locale.Tr "repo.diff.too_many_files"}}", + binaryFileMessage: "{{$.locale.Tr "repo.diff.bin"}}", + showMoreMessage: "{{.locale.Tr "repo.diff.show_more"}}", + statisticsMessage: "{{.locale.Tr "repo.diff.stats_desc_file"}}", + fileTreeIsVisible: false, + fileListIsVisible: false, + isLoadingNewData: false, + diffEnd: {{.Diff.End}}, + link: "{{$.Link}}" + }; + if(window.config.pageData.diffFileInfo) { + // Page is already loaded - add the data to our existing data + window.config.pageData.diffFileInfo.files.push(...diffData.files); + window.config.pageData.diffFileInfo.isIncomplete = diffData.isIncomplete; + window.config.pageData.diffFileInfo.diffEnd = diffData.diffEnd; + window.config.pageData.diffFileInfo.link = diffData.link; + } else { + // new load of page - populate initial data + window.config.pageData.diffFileInfo = diffData; + } + })(); + </script> + <div id="diff-file-list-container"></div> + <div id="diff-container"> + <div id="diff-file-tree-container"></div> + <div id="diff-file-boxes" class="sixteen wide column"> + {{range $i, $file := .Diff.Files}} + {{/*notice: the index of Diff.Files should not be used for element ID, because the index will be restarted from 0 when doing load-more for PRs with a lot of files*/}} + {{$blobBase := call $.GetBlobByPathForCommit $.BaseCommit $file.OldName}} + {{$blobHead := call $.GetBlobByPathForCommit $.HeadCommit $file.Name}} + {{$isImage := or (call $.IsBlobAnImage $blobBase) (call $.IsBlobAnImage $blobHead)}} + {{$isCsv := (call $.IsCsvFile $file)}} + {{$showFileViewToggle := or $isImage (and (not $file.IsIncomplete) $isCsv)}} + <div class="diff-file-box diff-box file-content {{TabSizeClass $.Editorconfig $file.Name}} mt-3" id="diff-{{$file.NameHash}}" data-old-filename="{{$file.OldName}}" data-new-filename="{{$file.Name}}" {{if $file.ShouldBeHidden}}data-folded="true"{{end}}> + <h4 class="diff-file-header sticky-2nd-row ui top attached normal header df ac sb"> + <div class="df ac"> + <a role="button" class="fold-file muted mr-2"> + {{if $file.ShouldBeHidden}} + {{svg "octicon-chevron-right" 18}} {{else}} - {{$.locale.Tr "repo.diff.file_suppressed"}} - <a class="ui basic tiny button diff-show-more-button" data-href="{{$.Link}}?file-only=true&files={{$file.Name}}&files={{$file.OldName}}">{{$.locale.Tr "repo.diff.load"}}</a> + {{svg "octicon-chevron-down" 18}} {{end}} - {{else}} - {{$.locale.Tr "repo.diff.bin_not_shown"}} + </a> + <div class="bold df ac"> + {{if $file.IsBin}} + <span class="ml-1 mr-3"> + {{$.locale.Tr "repo.diff.bin"}} + </span> + {{else}} + {{template "repo/diff/stats" dict "file" . "root" $}} + {{end}} + </div> + <span class="file mono"><a class="muted" href="#diff-{{$file.NameHash}}">{{if $file.IsRenamed}}{{$file.OldName}} → {{end}}{{$file.Name}}</a>{{if .IsLFSFile}} ({{$.locale.Tr "repo.stored_lfs"}}){{end}}</span> + {{if $file.IsGenerated}} + <span class="ui label ml-3">{{$.locale.Tr "repo.diff.generated"}}</span> + {{end}} + {{if $file.IsVendored}} + <span class="ui label ml-3">{{$.locale.Tr "repo.diff.vendored"}}</span> {{end}} </div> - {{else}} - <table class="chroma" data-new-comment-url="{{$.Issue.HTMLURL}}/files/reviews/new_comment" data-path="{{$file.Name}}"> - {{if $.IsSplitStyle}} - {{template "repo/diff/section_split" dict "file" . "root" $}} - {{else}} - {{template "repo/diff/section_unified" dict "file" . "root" $}} + <div class="diff-file-header-actions df ac"> + {{if $showFileViewToggle}} + <div class="ui compact icon buttons"> + <span class="ui tiny basic button tooltip file-view-toggle" data-toggle-selector="#diff-source-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_source"}}" data-position="bottom center">{{svg "octicon-code"}}</span> + <span class="ui tiny basic button tooltip file-view-toggle active" data-toggle-selector="#diff-rendered-{{$file.NameHash}}" data-content="{{$.locale.Tr "repo.file_view_rendered"}}" data-position="bottom center">{{svg "octicon-file"}}</span> + </div> {{end}} - </table> - {{end}} - </div> - {{if $showFileViewToggle}} - <div id="diff-rendered-{{$file.NameHash}}" class="file-body file-code {{if $.IsSplitStyle}} code-diff-split{{else}} code-diff-unified{{end}}"> - <table class="chroma w-100"> - {{if $isImage}} - {{template "repo/diff/image_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}} + {{if $file.IsProtected}} + <span class="ui basic label">{{$.locale.Tr "repo.diff.protected"}}</span> + {{end}} + {{if not (or $file.IsIncomplete $file.IsBin $file.IsSubmodule)}} + <a class="ui basic tiny button unescape-button">{{$.locale.Tr "repo.unescape_control_characters"}}</a> + <a class="ui basic tiny button escape-button" style="display: none;">{{$.locale.Tr "repo.escape_control_characters"}}</a> + {{end}} + {{if and (not $file.IsSubmodule) (not $.PageIsWiki)}} + {{if $file.IsDeleted}} + <a class="ui basic tiny button" rel="nofollow" href="{{$.BeforeSourcePath}}/{{PathEscapeSegments .Name}}">{{$.locale.Tr "repo.diff.view_file"}}</a> + {{else}} + <a class="ui basic tiny button" rel="nofollow" href="{{$.SourcePath}}/{{PathEscapeSegments .Name}}">{{$.locale.Tr "repo.diff.view_file"}}</a> + {{end}} + {{end}} + {{if and $.IsSigned $.PageIsPullFiles (not $.IsArchived)}} + {{if $file.HasChangedSinceLastReview}} + <span class="changed-since-last-review unselectable">{{$.locale.Tr "repo.pulls.has_changed_since_last_review"}}</span> + {{end}} + <label data-link="{{$.Issue.Link}}/viewed-files" data-headcommit="{{$.PullHeadCommitID}}" class="viewed-file-form unselectable{{if $file.IsViewed}} viewed-file-checked-form{{end}}"> + <input type="checkbox" name="{{$file.GetDiffFileName}}" autocomplete="off"{{if $file.IsViewed}} checked{{end}}> {{$.locale.Tr "repo.pulls.has_viewed_file"}} + </label> + {{end}} + </div> + </h4> + <div class="diff-file-body ui attached unstackable table segment" {{if $file.IsViewed}}data-folded="true"{{end}}> + <div id="diff-source-{{$file.NameHash}}" class="file-body file-code unicode-escaped code-diff{{if $.IsSplitStyle}} code-diff-split{{else}} code-diff-unified{{end}}{{if $showFileViewToggle}} hide{{end}}"> + {{if or $file.IsIncomplete $file.IsBin}} + <div class="diff-file-body binary" style="padding: 5px 10px;"> + {{if $file.IsIncomplete}} + {{if $file.IsIncompleteLineTooLong}} + {{$.locale.Tr "repo.diff.file_suppressed_line_too_long"}} + {{else}} + {{$.locale.Tr "repo.diff.file_suppressed"}} + <a class="ui basic tiny button diff-show-more-button" data-href="{{$.Link}}?file-only=true&files={{$file.Name}}&files={{$file.OldName}}">{{$.locale.Tr "repo.diff.load"}}</a> + {{end}} + {{else}} + {{$.locale.Tr "repo.diff.bin_not_shown"}} + {{end}} + </div> {{else}} - {{template "repo/diff/csv_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}} + <table class="chroma" data-new-comment-url="{{$.Issue.HTMLURL}}/files/reviews/new_comment" data-path="{{$file.Name}}"> + {{if $.IsSplitStyle}} + {{template "repo/diff/section_split" dict "file" . "root" $}} + {{else}} + {{template "repo/diff/section_unified" dict "file" . "root" $}} + {{end}} + </table> {{end}} - </table> + </div> + {{if $showFileViewToggle}} + <div id="diff-rendered-{{$file.NameHash}}" class="file-body file-code {{if $.IsSplitStyle}} code-diff-split{{else}} code-diff-unified{{end}}"> + <table class="chroma w-100"> + {{if $isImage}} + {{template "repo/diff/image_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}} + {{else}} + {{template "repo/diff/csv_diff" dict "file" . "root" $ "blobBase" $blobBase "blobHead" $blobHead}} + {{end}} + </table> + </div> + {{end}} </div> - {{end}} - </div> - </div> - {{end}} + </div> + {{end}} - {{if .Diff.IsIncomplete}} - <div class="diff-file-box diff-box file-content mt-3" id="diff-incomplete"> - <h4 class="ui top attached normal header df ac sb"> - {{$.locale.Tr "repo.diff.too_many_files"}} - <a class="ui basic tiny button" id="diff-show-more-files" data-href="{{$.Link}}?skip-to={{.Diff.End}}&file-only=true">{{.locale.Tr "repo.diff.show_more"}}</a> - </h4> + {{if .Diff.IsIncomplete}} + <div class="diff-file-box diff-box file-content mt-3" id="diff-incomplete"> + <h4 class="ui top attached normal header df ac sb"> + {{$.locale.Tr "repo.diff.too_many_files"}} + <a class="ui basic tiny button" id="diff-show-more-files" data-href="{{$.Link}}?skip-to={{.Diff.End}}&file-only=true">{{.locale.Tr "repo.diff.show_more"}}</a> + </h4> + </div> + {{end}} </div> - {{end}} </div> {{if not $.Repository.IsArchived}} diff --git a/templates/repo/diff/compare.tmpl b/templates/repo/diff/compare.tmpl index 029e7717a4..e0e6837203 100644 --- a/templates/repo/diff/compare.tmpl +++ b/templates/repo/diff/compare.tmpl @@ -1,7 +1,7 @@ {{template "base/head" .}} <div class="page-content repository diff {{if .PageIsComparePull}}compare pull{{end}}"> {{template "repo/header" .}} - <div class="ui container {{if .IsSplitStyle}}fluid padded{{end}}"> + <div class="ui container fluid padded"> <h2 class="ui header"> {{if and $.PageIsComparePull $.IsSigned (not .Repository.IsArchived)}} diff --git a/templates/repo/diff/options_dropdown.tmpl b/templates/repo/diff/options_dropdown.tmpl index 18fa100dcf..2cb5abcb36 100644 --- a/templates/repo/diff/options_dropdown.tmpl +++ b/templates/repo/diff/options_dropdown.tmpl @@ -1,7 +1,7 @@ <div class="ui dropdown tiny basic button icon-button tooltip" data-content="{{.locale.Tr "repo.diff.options_button"}}"> {{svg "octicon-kebab-horizontal"}} <div class="menu"> - <a class="item tiny basic toggle button" data-target="#diff-files">{{.locale.Tr "repo.diff.show_diff_stats"}}</a> + <a class="item tiny basic toggle button" id="show-file-list-btn">{{.locale.Tr "repo.diff.show_diff_stats"}}</a> {{if .Issue.Index}} <a class="item" href="{{$.RepoLink}}/pulls/{{.Issue.Index}}.patch" download="{{.Issue.Index}}.patch">{{.locale.Tr "repo.diff.download_patch"}}</a> <a class="item" href="{{$.RepoLink}}/pulls/{{.Issue.Index}}.diff" download="{{.Issue.Index}}.diff">{{.locale.Tr "repo.diff.download_diff"}}</a> diff --git a/templates/repo/pulls/files.tmpl b/templates/repo/pulls/files.tmpl index 9b24000002..7b72f7f815 100644 --- a/templates/repo/pulls/files.tmpl +++ b/templates/repo/pulls/files.tmpl @@ -5,7 +5,7 @@ <div class="page-content repository view issue pull files diff"> {{template "repo/header" .}} - <div class="ui container {{if .IsSplitStyle}}fluid padded{{end}}"> + <div class="ui container fluid padded"> <div class="navbar"> {{template "repo/issue/navbar" .}} <div class="ui right"> |