2023-10-25 05:09:18 +02:00
{{ $ showFileTree : = ( and ( not .DiffNotAvailable ) ( gt .Diff .NumFiles 1 ) ) }}
2023-07-06 17:33:04 +02:00
<div>
2023-09-28 18:00:26 +08:00
<div class="diff-detail-box diff-box">
2023-07-06 17:33:04 +02:00
<div class="gt-df gt-ac gt-fw">
2023-10-25 05:09:18 +02:00
{{ if $ showFileTree }}
2023-11-17 19:35:51 +01:00
<button class="diff-toggle-file-tree-button not-mobile btn interact-fg" data-show-text=" {{ ctx .Locale .Tr "repo.diff.show_file_tree" }} " data-hide-text=" {{ ctx .Locale .Tr "repo.diff.hide_file_tree" }} ">
2022-10-14 11:43:25 +02:00
{{ / * the icon meaning is reversed here , "octicon-sidebar-collapse" means show the file tree * / }}
2023-03-30 14:06:10 +02:00
{{ svg "octicon-sidebar-collapse" 2 0 "icon gt-hidden" }}
{{ svg "octicon-sidebar-expand" 2 0 "icon gt-hidden" }}
</button>
<script>
2023-06-02 11:39:01 -04:00
// Default to true if unset
const diffTreeVisible = localStorage?.getItem('diff_file_tree_visible') !== 'false';
2023-03-30 14:06:10 +02:00
const diffTreeBtn = document.querySelector('.diff-toggle-file-tree-button');
const diffTreeIcon = `.octicon-sidebar-$ { diffTreeVisible ? 'expand' : 'collapse'}`;
diffTreeBtn.querySelector(diffTreeIcon).classList.remove('gt-hidden');
diffTreeBtn.setAttribute('data-tooltip-content', diffTreeBtn.getAttribute(diffTreeVisible ? 'data-hide-text' : 'data-show-text'));
</script>
2023-10-25 05:09:18 +02:00
{{ end }}
{{ if not .DiffNotAvailable }}
2023-06-01 12:47:28 +02:00
<div class="diff-detail-stats gt-df gt-ac gt-fw">
2023-09-25 10:56:50 +02:00
{{ svg "octicon-diff" 1 6 "gt-mr-2" }} {{ ctx .Locale .Tr "repo.diff.stats_desc" .Diff .NumFiles .Diff .TotalAddition .Diff .TotalDeletion | Str2html }}
2022-10-14 11:43:25 +02:00
</div>
2023-07-06 17:33:04 +02:00
{{ end }}
2015-12-07 23:30:52 +01:00
</div>
2023-08-24 23:46:30 +08:00
<div class="diff-detail-actions">
2023-07-06 17:33:04 +02:00
{{ if and .PageIsPullFiles $ .SignedUserID ( not .IsArchived ) ( not .DiffNotAvailable ) }}
2023-11-16 04:58:53 +01:00
<div class="not-mobile gt-df gt-ac gt-fc gt-whitespace-nowrap gt-mr-2">
2023-09-25 10:56:50 +02:00
<label for="viewed-files-summary" id="viewed-files-summary-label" data-text-changed-template=" {{ ctx .Locale .Tr "repo.pulls.viewed_files_label" }} ">
{{ ctx .Locale .Tr "repo.pulls.viewed_files_label" .Diff .NumViewedFiles .Diff .NumFiles }}
2023-07-06 17:33:04 +02:00
</label>
<progress id="viewed-files-summary" value=" {{ .Diff .NumViewedFiles }} " max=" {{ .Diff .NumFiles }} "></progress>
</div>
{{ end }}
{{ template "repo/diff/whitespace_dropdown" . }}
{{ template "repo/diff/options_dropdown" . }}
2023-07-28 21:18:12 +02:00
{{ if .PageIsPullFiles }}
2023-09-25 10:56:50 +02:00
<div id="diff-commit-select" data-issuelink=" {{ $ .Issue .Link }} " data-queryparams="?style= {{ if $ .IsSplitStyle }} split {{ else }} unified {{ end }} &whitespace= {{ $ .WhitespaceBehavior }} &show-outdated= {{ $ .ShowOutdatedComments }} " data-filter_changes_by_commit=" {{ ctx .Locale .Tr "repo.pulls.filter_changes_by_commit" }} ">
2023-07-28 21:18:12 +02:00
{{ / *
the following will be replaced by vue component
but this avoids any loading artifacts till the vue component is initialized
*/}}
<div class="ui jump dropdown basic button custom">
{{ svg "octicon-git-commit" }}
</div>
</div>
{{ end }}
2023-07-06 17:33:04 +02:00
{{ if and .PageIsPullFiles $ .SignedUserID ( not .IsArchived ) }}
{{ template "repo/diff/new_review" . }}
{{ end }}
</div>
</div>
{{ if not .DiffNotAvailable }}
2023-07-28 21:18:12 +02:00
{{ if and .IsShowingOnlySingleCommit .PageIsPullFiles }}
<div class="ui info message">
2023-11-06 00:39:32 +01:00
<div> {{ ctx .Locale .Tr "repo.pulls.showing_only_single_commit" ( ShortSha .AfterCommitID ) }} - <a href=" {{ $ .Issue .Link }} /files?style= {{ if $ .IsSplitStyle }} split {{ else }} unified {{ end }} &whitespace= {{ $ .WhitespaceBehavior }} &show-outdated= {{ $ .ShowOutdatedComments }} "> {{ ctx .Locale .Tr "repo.pulls.show_all_commits" }} </a></div>
2023-07-28 21:18:12 +02:00
</div>
{{ else if and ( not .IsShowingAllCommits ) .PageIsPullFiles }}
<div class="ui info message">
2023-09-25 20:42:40 +08:00
<div> {{ ctx .Locale .Tr "repo.pulls.showing_specified_commit_range" ( ShortSha .BeforeCommitID ) ( ShortSha .AfterCommitID ) }} - <a href=" {{ $ .Issue .Link }} /files?style= {{ if $ .IsSplitStyle }} split {{ else }} unified {{ end }} &whitespace= {{ $ .WhitespaceBehavior }} &show-outdated= {{ $ .ShowOutdatedComments }} "> {{ ctx .Locale .Tr "repo.pulls.show_all_commits" }} </a></div>
2023-07-28 21:18:12 +02:00
</div>
{{ end }}
2023-05-30 18:53:15 +08:00
<script id="diff-data-script" type="module">
2023-06-25 02:46:30 +02:00
const diffDataFiles = [ {{ range $ i , $ file : = .Diff .Files }} { Name:" {{ $ file .Name }} ",NameHash:" {{ $ file .NameHash }} ",Type: {{ $ file .Type }} ,IsBin: {{ $ file .IsBin }} ,Addition: {{ $ file .Addition }} ,Deletion: {{ $ file .Deletion }} ,IsViewed: {{ $ file .IsViewed }}} , {{ end }} ];
2023-05-30 18:53:15 +08:00
const diffData = {
isIncomplete: {{ .Diff .IsIncomplete }} ,
2023-09-25 10:56:50 +02:00
tooManyFilesMessage: " {{ ctx .Locale .Tr "repo.diff.too_many_files" }} ",
binaryFileMessage: " {{ ctx .Locale .Tr "repo.diff.bin" }} ",
showMoreMessage: " {{ ctx .Locale .Tr "repo.diff.show_more" }} ",
statisticsMessage: " {{ ctx .Locale .Tr "repo.diff.stats_desc_file" }} ",
2023-05-30 18:53:15 +08:00
linkLoadMore: " {{ $ .Link }} ?skip-to= {{ .Diff .End }} &file-only=true",
};
// for first time loading, the diffFileInfo is a plain object
// after the Vue component is mounted, the diffFileInfo is a reactive object
// keep in mind that this script block would be executed many times when loading more files, by "loadMoreFiles"
let diffFileInfo = window.config.pageData.diffFileInfo || {
files:[],
fileTreeIsVisible: false,
fileListIsVisible: false,
isLoadingNewData: false,
selectedItem: '',
};
diffFileInfo = Object.assign(diffFileInfo, diffData);
diffFileInfo.files.push(...diffDataFiles);
window.config.pageData.diffFileInfo = diffFileInfo;
</script>
2022-10-01 16:26:38 +02:00
<div id="diff-file-list"></div>
2023-07-06 17:33:04 +02:00
{{ end }}
<div id="diff-container">
2023-10-25 05:09:18 +02:00
{{ if $ showFileTree }}
2023-11-17 19:35:51 +01:00
<div id="diff-file-tree" class="gt-hidden not-mobile"></div>
2023-07-06 17:33:04 +02:00
<script>
if (diffTreeVisible) document.getElementById('diff-file-tree').classList.remove('gt-hidden');
</script>
2023-10-25 05:09:18 +02:00
{{ end }}
{{ if .DiffNotAvailable }}
<h4> {{ ctx .Locale .Tr "repo.diff.data_not_available" }} </h4>
{{ else }}
2023-07-06 17:33:04 +02:00
<div id="diff-file-boxes" class="sixteen wide column">
{{ range $ i , $ file : = .Diff .Files }}
{{ / * notice : the in dex of Diff .Files should not be used for element ID , because the in dex will be restarted from 0 when doing load-more for PRs with a lot of files * / }}
{{ $ blobBase : = call $ .GetBlobByPathForCommit $ .BeforeCommit $ file .OldName }}
{{ $ blobHead : = call $ .GetBlobByPathForCommit $ .HeadCommit $ file .Name }}
2023-10-11 14:34:21 +02:00
{{ $ sniffedTypeBase : = call $ .GetSniffedTypeForBlob $ blobBase }}
{{ $ sniffedTypeHead : = call $ .GetSniffedTypeForBlob $ blobHead }}
{{ $ isImage : = or ( call $ .IsSniffedTypeAnImage $ sniffedTypeBase ) ( call $ .IsSniffedTypeAnImage $ sniffedTypeHead ) }}
2023-07-06 17:33:04 +02:00
{{ $ isCsv : = ( call $ .IsCsvFile $ file ) }}
{{ $ showFileViewToggle : = or $ isImage ( and ( not $ file .IsIncomplete ) $ isCsv ) }}
{{ $ isExpandable : = or ( gt $ file .Addition 0 ) ( gt $ file .Deletion 0 ) $ file .IsBin }}
2023-07-28 21:18:12 +02:00
{{ $ isReviewFile : = and $ .IsSigned $ .PageIsPullFiles ( not $ .IsArchived ) $ .IsShowingAllCommits }}
2023-07-28 22:42:44 +05:30
<div class="diff-file-box diff-box file-content {{ TabSizeClass $ .Editorconfig $ file .Name }} gt-mt-0" id="diff- {{ $ file .NameHash }} " data-old-filename=" {{ $ file .OldName }} " data-new-filename=" {{ $ file .Name }} " {{ if or ( $ file .ShouldBeHidden ) ( not $ isExpandable ) }} data-folded="true" {{ end }} >
2023-07-06 17:33:04 +02:00
<h4 class="diff-file-header sticky-2nd-row ui top attached normal header gt-df gt-ac gt-sb gt-fw">
<div class="diff-file-name gt-df gt-ac gt-gap-2 gt-fw">
<button class="fold-file btn interact-bg gt-p-2 {{ if not $ isExpandable }} gt-invisible {{ end }} ">
{{ if $ file .ShouldBeHidden }}
{{ svg "octicon-chevron-right" 1 8 }}
{{ else }}
{{ svg "octicon-chevron-down" 1 8 }}
2022-09-27 07:22:19 +02:00
{{ end }}
2023-07-06 17:33:04 +02:00
</button>
<div class="gt-font-semibold gt-df gt-ac gt-mono">
{{ if $ file .IsBin }}
<span class="gt-ml-1 gt-mr-3">
2023-09-25 10:56:50 +02:00
{{ ctx .Locale .Tr "repo.diff.bin" }}
2023-07-06 17:33:04 +02:00
</span>
2021-06-05 14:32:19 +02:00
{{ else }}
2023-07-06 17:33:04 +02:00
{{ template "repo/diff/stats" dict "file" . "root" $ }}
2021-06-05 14:32:19 +02:00
{{ end }}
2022-09-27 07:22:19 +02:00
</div>
2023-09-25 10:56:50 +02:00
<span class="file gt-mono"><a class="muted file-link" title=" {{ if $ file .IsRenamed }} {{ $ file .OldName }} → {{ end }} {{ $ file .Name }} " href="#diff- {{ $ file .NameHash }} "> {{ if $ file .IsRenamed }} {{ $ file .OldName }} → {{ end }} {{ $ file .Name }} </a> {{ if .IsLFSFile }} ( {{ ctx .Locale .Tr "repo.stored_lfs" }} ) {{ end }} </span>
2023-07-06 17:33:04 +02:00
<button class="btn interact-fg gt-p-3" data-clipboard-text=" {{ $ file .Name }} "> {{ svg "octicon-copy" 1 4 }} </button>
{{ if $ file .IsGenerated }}
2023-09-25 10:56:50 +02:00
<span class="ui label"> {{ ctx .Locale .Tr "repo.diff.generated" }} </span>
2023-07-06 17:33:04 +02:00
{{ end }}
{{ if $ file .IsVendored }}
2023-09-25 10:56:50 +02:00
<span class="ui label"> {{ ctx .Locale .Tr "repo.diff.vendored" }} </span>
2023-07-06 17:33:04 +02:00
{{ end }}
{{ if and $ file .Mode $ file .OldMode }}
2023-09-25 10:56:50 +02:00
{{ $ old : = ctx .Locale .Tr ( $ file .ModeTranslationKey $ file .OldMode ) }}
{{ $ new : = ctx .Locale .Tr ( $ file .ModeTranslationKey $ file .Mode ) }}
<span class="gt-ml-4 gt-mono"> {{ ctx .Locale .Tr "git.filemode.changed_filemode" $ old $ new }} </span>
2023-07-06 17:33:04 +02:00
{{ else if $ file .Mode }}
2023-09-25 10:56:50 +02:00
<span class="gt-ml-4 gt-mono"> {{ ctx .Locale .Tr ( $ file .ModeTranslationKey $ file .Mode ) }} </span>
2023-07-06 17:33:04 +02:00
{{ end }}
</div>
<div class="diff-file-header-actions gt-df gt-ac gt-gap-2 gt-fw">
2022-09-27 07:22:19 +02:00
{{ if $ showFileViewToggle }}
2023-07-06 17:33:04 +02:00
<div class="ui compact icon buttons">
2023-09-25 10:56:50 +02:00
<button class="ui tiny basic button file-view-toggle" data-toggle-selector="#diff-source- {{ $ file .NameHash }} " data-tooltip-content=" {{ ctx .Locale .Tr "repo.file_view_source" }} "> {{ svg "octicon-code" }} </button>
<button class="ui tiny basic button file-view-toggle active" data-toggle-selector="#diff-rendered- {{ $ file .NameHash }} " data-tooltip-content=" {{ ctx .Locale .Tr "repo.file_view_rendered" }} "> {{ svg "octicon-file" }} </button>
2023-07-06 17:33:04 +02:00
</div>
{{ end }}
{{ if $ file .IsProtected }}
2023-09-25 10:56:50 +02:00
<span class="ui basic label"> {{ ctx .Locale .Tr "repo.diff.protected" }} </span>
2023-07-06 17:33:04 +02:00
{{ end }}
{{ if and $ isReviewFile $ file .HasChangedSinceLastReview }}
2023-09-25 10:56:50 +02:00
<span class="changed-since-last-review unselectable not-mobile"> {{ ctx .Locale .Tr "repo.pulls.has_changed_since_last_review" }} </span>
2023-07-06 17:33:04 +02:00
{{ end }}
{{ if not ( or $ file .IsIncomplete $ file .IsBin $ file .IsSubmodule ) }}
2023-09-25 10:56:50 +02:00
<button class="ui basic tiny button unescape-button not-mobile"> {{ ctx .Locale .Tr "repo.unescape_control_characters" }} </button>
<button class="ui basic tiny button escape-button gt-hidden"> {{ ctx .Locale .Tr "repo.escape_control_characters" }} </button>
2023-07-06 17:33:04 +02:00
{{ end }}
{{ if and ( not $ file .IsSubmodule ) ( not $ .PageIsWiki ) }}
{{ if $ file .IsDeleted }}
2023-09-25 10:56:50 +02:00
<a class="ui basic tiny button" rel="nofollow" href=" {{ $ .BeforeSourcePath }} / {{ PathEscapeSegments .Name }} "> {{ ctx .Locale .Tr "repo.diff.view_file" }} </a>
2023-07-06 17:33:04 +02:00
{{ else }}
2023-09-25 10:56:50 +02:00
<a class="ui basic tiny button" rel="nofollow" href=" {{ $ .SourcePath }} / {{ PathEscapeSegments .Name }} "> {{ ctx .Locale .Tr "repo.diff.view_file" }} </a>
2023-07-06 17:33:04 +02:00
{{ end }}
{{ end }}
{{ if $ isReviewFile }}
<label data-link=" {{ $ .Issue .Link }} /viewed-files" data-headcommit=" {{ $ .AfterCommitID }} " class="viewed-file-form unselectable {{ if $ file .IsViewed }} viewed-file-checked-form {{ end }} ">
2023-09-25 10:56:50 +02:00
<input type="checkbox" name=" {{ $ file .GetDiffFileName }} " autocomplete="off" {{ if $ file .IsViewed }} checked {{ end }} > {{ ctx .Locale .Tr "repo.pulls.has_viewed_file" }}
2023-07-06 17:33:04 +02:00
</label>
{{ end }}
</div>
</h4>
2023-07-28 21:18:12 +02:00
<div class="diff-file-body ui attached unstackable table segment" {{ if and $ file .IsViewed $ .IsShowingAllCommits }} data-folded="true" {{ end }} >
2023-07-06 17:33:04 +02:00
<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 }} gt-hidden {{ end }} ">
{{ if or $ file .IsIncomplete $ file .IsBin }}
<div class="diff-file-body binary" style="padding: 5px 10px;">
{{ if $ file .IsIncomplete }}
{{ if $ file .IsIncompleteLineTooLong }}
2023-09-25 10:56:50 +02:00
{{ ctx .Locale .Tr "repo.diff.file_suppressed_line_too_long" }}
2022-09-27 07:22:19 +02:00
{{ else }}
2023-09-25 10:56:50 +02:00
{{ ctx .Locale .Tr "repo.diff.file_suppressed" }}
<a class="ui basic tiny button diff-load-button" data-href=" {{ $ .Link }} ?file-only=true&files= {{ $ file .Name }} &files= {{ $ file .OldName }} "> {{ ctx .Locale .Tr "repo.diff.load" }} </a>
2022-09-27 07:22:19 +02:00
{{ end }}
2023-07-06 17:33:04 +02:00
{{ else }}
2023-09-25 10:56:50 +02:00
{{ ctx .Locale .Tr "repo.diff.bin_not_shown" }}
2023-07-06 17:33:04 +02:00
{{ end }}
2022-09-27 07:22:19 +02:00
</div>
2023-07-06 17:33:04 +02:00
{{ else }}
<table class="chroma" data-new-comment-url=" {{ $ .Issue .Link }} /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>
2022-09-27 07:22:19 +02:00
{{ end }}
2020-10-31 23:15:11 +01:00
</div>
2023-07-06 17:33:04 +02:00
{{ if $ showFileViewToggle }}
{{ / * for image or CSV , it can have a horizontal scroll bar , there won ' t be review comment context menu ( position absolute ) which would be clipped by "overflow" * / }}
<div id="diff-rendered- {{ $ file .NameHash }} " class="file-body file-code {{ if $ .IsSplitStyle }} code-diff-split {{ else }} code-diff-unified {{ end }} gt-overflow-x-scroll">
2024-01-12 20:28:01 +08:00
<table class="chroma gt-w-full">
2023-07-06 17:33:04 +02:00
{{ if $ isImage }}
2023-10-11 14:34:21 +02:00
{{ template "repo/diff/image_diff" dict "file" . "root" $ "blobBase" $ blobBase "blobHead" $ blobHead "sniffedTypeBase" $ sniffedTypeBase "sniffedTypeHead" $ sniffedTypeHead }}
2023-07-06 17:33:04 +02:00
{{ else }}
2023-10-11 14:34:21 +02:00
{{ template "repo/diff/csv_diff" dict "file" . "root" $ "blobBase" $ blobBase "blobHead" $ blobHead "sniffedTypeBase" $ sniffedTypeBase "sniffedTypeHead" $ sniffedTypeHead }}
2023-07-06 17:33:04 +02:00
{{ end }}
</table>
</div>
{{ end }}
2022-09-27 07:22:19 +02:00
</div>
2023-07-06 17:33:04 +02:00
</div>
{{ end }}
2016-06-29 12:11:00 -03:00
2023-07-06 17:33:04 +02:00
{{ if .Diff .IsIncomplete }}
<div class="diff-file-box diff-box file-content gt-mt-3" id="diff-incomplete">
<h4 class="ui top attached normal header gt-df gt-ac gt-sb">
2023-09-25 10:56:50 +02:00
{{ ctx .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"> {{ ctx .Locale .Tr "repo.diff.show_more" }} </a>
2023-07-06 17:33:04 +02:00
</h4>
2019-10-21 09:51:24 +02:00
</div>
2023-07-06 17:33:04 +02:00
{{ end }}
</div>
2021-01-08 22:49:55 +01:00
{{ end }}
2023-07-06 17:33:04 +02:00
</div>
2018-08-06 07:43:22 +03:00
2023-07-06 17:33:04 +02:00
{{ if and ( not $ .Repository .IsArchived ) ( not .DiffNotAvailable ) }}
<template id="issue-comment-editor-template">
<div class="ui comment form">
{{ template "shared/combomarkdowneditor" ( dict
"MarkdownPreviewUrl" (print $.Repository.Link "/markup")
"MarkdownPreviewContext" $.RepoLink
"TextareaName" "content"
"DropzoneParentContainer" ".ui.form"
)}}
<div class="text right edit buttons">
2023-11-03 15:40:48 +01:00
<button class="ui cancel button"> {{ ctx .Locale .Tr "repo.issues.cancel" }} </button>
<button class="ui primary save button"> {{ ctx .Locale .Tr "repo.issues.save" }} </button>
2023-07-06 17:33:04 +02:00
</div>
</div>
</template>
{{ end }}
{{ if ( not .DiffNotAvailable ) }}
2021-01-21 14:51:17 +01:00
{{ template "repo/issue/view_content/reference_issue_dialog" . }}
2023-07-06 17:33:04 +02:00
{{ end }}
</div>