2015-09-01 19:07:02 -04:00
{{ if .DiffNotAvailable }}
2023-05-09 13:21:03 +08:00
<div>
<div class="diff-detail-box diff-box sticky">
2018-08-14 19:49:33 +02:00
<div class="ui right">
2021-02-13 05:35:43 +01:00
{{ template "repo/diff/whitespace_dropdown" . }}
2019-10-15 12:44:36 +02:00
{{ template "repo/diff/options_dropdown" . }}
2019-01-23 19:58:38 +01:00
{{ if and .PageIsPullFiles $ .SignedUserID ( not .IsArchived ) }}
2018-08-14 19:49:33 +02:00
{{ template "repo/diff/new_review" . }}
{{ end }}
</div>
</div>
</div>
2022-06-27 22:58:46 +02:00
<h4> {{ .locale .Tr "repo.diff.data_not_available" }} </h4>
2015-09-01 19:07:02 -04:00
{{ else }}
2019-10-21 09:51:24 +02:00
<div>
2023-02-13 17:59:59 +00:00
<div class="diff-detail-box diff-box sticky gt-df gt-sb gt-ac gt-fw">
<div class="gt-df gt-ac gt-fw">
2023-03-30 14:06:10 +02:00
<button class="diff-toggle-file-tree-button gt-df gt-ac" data-show-text=" {{ .locale .Tr "repo.diff.show_file_tree" }} " data-hide-text=" {{ .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>
const diffTreeVisible = localStorage?.getItem('diff_file_tree_visible') === 'true';
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-02-13 17:59:59 +00:00
<div class="diff-detail-stats gt-df gt-ac gt-ml-3">
{{ svg "octicon-diff" 1 6 "gt-mr-2" }} {{ .locale .Tr "repo.diff.stats_desc" .Diff .NumFiles .Diff .TotalAddition .Diff .TotalDeletion | Str2html }}
2022-10-14 11:43:25 +02:00
</div>
2020-10-31 13:17:32 +01:00
</div>
2023-03-17 18:24:00 +01:00
<div class="diff-detail-actions gt-df gt-ac">
2022-05-07 20:28:10 +02:00
{{ if and .PageIsPullFiles $ .SignedUserID ( not .IsArchived ) }}
2023-02-13 17:59:59 +00:00
<progress id="viewed-files-summary" class="gt-mr-2" value=" {{ .Diff .NumViewedFiles }} " max=" {{ .Diff .NumFiles }} "></progress>
2023-02-21 21:36:53 +08:00
<label for="viewed-files-summary" id="viewed-files-summary-label" class="gt-mr-3 gt-f1" data-text-changed-template=" {{ .locale .Tr "repo.pulls.viewed_files_label" }} ">
2022-06-27 22:58:46 +02:00
{{ .locale .Tr "repo.pulls.viewed_files_label" .Diff .NumViewedFiles .Diff .NumFiles }}
2022-05-07 20:28:10 +02:00
</label>
{{ end }}
2021-02-13 05:35:43 +01:00
{{ template "repo/diff/whitespace_dropdown" . }}
2019-10-15 12:44:36 +02:00
{{ template "repo/diff/options_dropdown" . }}
2019-01-23 19:58:38 +01:00
{{ if and .PageIsPullFiles $ .SignedUserID ( not .IsArchived ) }}
2018-08-06 07:43:22 +03:00
{{ template "repo/diff/new_review" . }}
{{ end }}
2015-12-07 23:30:52 +01:00
</div>
</div>
2023-05-30 18:53:15 +08:00
<script id="diff-data-script" type="module">
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 }}} , {{ end }} ];
const diffData = {
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" }} ",
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>
2022-09-27 07:22:19 +02:00
<div id="diff-container">
2023-02-19 12:06:14 +08:00
<div id="diff-file-tree" class="gt-hidden"></div>
2023-03-30 14:06:10 +02:00
<script>
if (diffTreeVisible) document.getElementById('diff-file-tree').classList.remove('gt-hidden');
</script>
2022-09-27 07:22:19 +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 * / }}
2023-02-19 20:56:07 -07:00
{{ $ blobBase : = call $ .GetBlobByPathForCommit $ .BeforeCommit $ file .OldName }}
2022-09-27 07:22:19 +02:00
{{ $ 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 ) }}
2023-02-02 13:39:55 +08:00
{{ $ isExpandable : = or ( gt $ file .Addition 0 ) ( gt $ file .Deletion 0 ) $ file .IsBin }}
2023-02-13 17:59:59 +00:00
<div class="diff-file-box diff-box file-content {{ TabSizeClass $ .Editorconfig $ file .Name }} gt-mt-3" id="diff- {{ $ file .NameHash }} " data-old-filename=" {{ $ file .OldName }} " data-new-filename=" {{ $ file .Name }} " {{ if or ( $ file .ShouldBeHidden ) ( not $ isExpandable ) }} data-folded="true" {{ end }} >
<h4 class="diff-file-header sticky-2nd-row ui top attached normal header gt-df gt-ac gt-sb">
2023-03-06 23:44:04 +08:00
<div class="diff-file-name gt-df gt-ac gt-mr-3">
2023-05-21 22:47:41 +02:00
<button class="fold-file ui button button-ghost gt-p-0 gt-mr-3 {{ if not $ isExpandable }} gt-invisible {{ end }} ">
2023-02-02 13:39:55 +08:00
{{ if $ file .ShouldBeHidden }}
{{ svg "octicon-chevron-right" 1 8 }}
{{ else }}
{{ svg "octicon-chevron-down" 1 8 }}
{{ end }}
2023-05-21 22:47:41 +02:00
</button>
2023-05-22 01:37:32 +02:00
<div class="gt-font-semibold gt-df gt-ac gt-mono">
2022-09-27 07:22:19 +02:00
{{ if $ file .IsBin }}
2023-02-13 17:59:59 +00:00
<span class="gt-ml-1 gt-mr-3">
2022-09-27 07:22:19 +02:00
{{ $ .locale .Tr "repo.diff.bin" }}
</span>
{{ else }}
{{ template "repo/diff/stats" dict "file" . "root" $ }}
{{ end }}
</div>
2023-03-06 23:44:04 +08: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 }} ( {{ $ .locale .Tr "repo.stored_lfs" }} ) {{ end }} </span>
2022-09-27 07:22:19 +02:00
{{ if $ file .IsGenerated }}
2023-02-13 17:59:59 +00:00
<span class="ui label gt-ml-3"> {{ $ .locale .Tr "repo.diff.generated" }} </span>
2022-09-27 07:22:19 +02:00
{{ end }}
{{ if $ file .IsVendored }}
2023-02-13 17:59:59 +00:00
<span class="ui label gt-ml-3"> {{ $ .locale .Tr "repo.diff.vendored" }} </span>
2021-10-15 17:05:33 +01:00
{{ end }}
2023-05-29 20:56:08 +03:00
{{ if and $ file .Mode $ file .OldMode }}
<span class="gt-ml-4 gt-mono"> {{ $ file .OldMode }} → {{ $ file .Mode }} </span>
{{ else if $ file .Mode }}
<span class="gt-ml-4 gt-mono"> {{ $ file .Mode }} </span>
{{ end }}
2021-10-15 17:05:33 +01:00
</div>
2023-02-13 17:59:59 +00:00
<div class="diff-file-header-actions gt-df gt-ac">
2022-09-27 07:22:19 +02:00
{{ if $ showFileViewToggle }}
<div class="ui compact icon buttons">
2023-03-24 18:35:38 +08:00
<button class="ui tiny basic button file-view-toggle" data-toggle-selector="#diff-source- {{ $ file .NameHash }} " data-tooltip-content=" {{ $ .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=" {{ $ .locale .Tr "repo.file_view_rendered" }} "> {{ svg "octicon-file" }} </button>
2022-09-27 07:22:19 +02:00
</div>
2021-10-15 17:05:33 +01:00
{{ end }}
2022-09-27 07:22:19 +02:00
{{ if $ file .IsProtected }}
<span class="ui basic label"> {{ $ .locale .Tr "repo.diff.protected" }} </span>
{{ end }}
{{ if not ( or $ file .IsIncomplete $ file .IsBin $ file .IsSubmodule ) }}
2023-05-21 22:47:41 +02:00
<button class="ui basic tiny button unescape-button"> {{ $ .locale .Tr "repo.unescape_control_characters" }} </button>
<button class="ui basic tiny button escape-button gt-hidden"> {{ $ .locale .Tr "repo.escape_control_characters" }} </button>
2022-09-27 07:22:19 +02:00
{{ 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 }} >
2023-02-19 12:06:14 +08: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 }} ">
2022-09-27 07:22:19 +02:00
{{ 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" }}
2023-01-13 05:50:32 +00:00
<a class="ui basic tiny button diff-load-button" data-href=" {{ $ .Link }} ?file-only=true&files= {{ $ file .Name }} &files= {{ $ file .OldName }} "> {{ $ .locale .Tr "repo.diff.load" }} </a>
2022-09-27 07:22:19 +02:00
{{ end }}
{{ else }}
{{ $ .locale .Tr "repo.diff.bin_not_shown" }}
{{ end }}
</div>
2021-06-05 14:32:19 +02:00
{{ else }}
2023-02-07 02:09:18 +08:00
<table class="chroma" data-new-comment-url=" {{ $ .Issue .Link }} /files/reviews/new_comment" data-path=" {{ $ file .Name }} ">
2022-09-27 07:22:19 +02:00
{{ if $ .IsSplitStyle }}
{{ template "repo/diff/section_split" dict "file" . "root" $ }}
{{ else }}
{{ template "repo/diff/section_unified" dict "file" . "root" $ }}
{{ end }}
</table>
2021-06-05 14:32:19 +02:00
{{ end }}
2022-09-27 07:22:19 +02:00
</div>
{{ if $ showFileViewToggle }}
2023-03-17 02:25:04 +08:00
{{ / * 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">
2023-02-13 17:59:59 +00:00
<table class="chroma gt-w-100">
2022-09-27 07:22:19 +02:00
{{ 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 }}
2020-10-31 23:15:11 +01:00
</div>
2022-09-27 07:22:19 +02:00
</div>
{{ end }}
2016-06-29 12:11:00 -03:00
2022-09-27 07:22:19 +02:00
{{ if .Diff .IsIncomplete }}
2023-02-13 17:59:59 +00:00
<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">
2022-09-27 07:22:19 +02:00
{{ $ .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 }}
2021-10-15 17:05:33 +01:00
</div>
</div>
2016-06-29 12:11:00 -03:00
2019-10-21 09:51:24 +02:00
{{ if not $ .Repository .IsArchived }}
2023-04-03 18:06:57 +08:00
<template id="issue-comment-editor-template">
2021-01-08 22:49:55 +01:00
<div class="ui comment form">
2023-04-03 18:06:57 +08:00
{{ template "shared/combomarkdowneditor" ( dict
"locale" $.locale
"MarkdownPreviewUrl" (print $.Repository.Link "/markup")
"MarkdownPreviewContext" $.RepoLink
"TextareaName" "content"
"DropzoneParentContainer" ".ui.form"
)}}
2021-01-08 22:49:55 +01:00
<div class="text right edit buttons">
2023-03-14 04:34:09 +01:00
<button class="ui basic primary cancel button" tabindex="3"> {{ .locale .Tr "repo.issues.cancel" }} </button>
<button class="ui green save button" tabindex="2"> {{ .locale .Tr "repo.issues.save" }} </button>
2019-10-21 09:51:24 +02:00
</div>
2021-01-08 22:49:55 +01:00
</div>
2023-04-03 18:06:57 +08:00
</template>
2021-01-08 22:49:55 +01:00
{{ end }}
2018-08-06 07:43:22 +03:00
2021-01-21 14:51:17 +01:00
{{ template "repo/issue/view_content/reference_issue_dialog" . }}
2019-10-21 09:51:24 +02:00
</div>
2015-09-01 19:07:02 -04:00
{{ end }}