aboutsummaryrefslogtreecommitdiffstats
path: root/templates/repo/view_file.tmpl
blob: a76700a7263fdd5c4d68055064b524474ec1fc77 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<div class="{{TabSizeClass .Editorconfig .FileName}} non-diff-file-content">
	<h4 class="file-header ui top attached header df ac sb">
		<div class="file-header-left df ac pr-4">
			{{if .ReadmeInList}}
				{{svg "octicon-book" 16 "mr-3"}}
				<strong>{{.FileName}}</strong>
			{{else}}
				<div class="file-info text grey normal mono">
					{{if .FileIsSymlink}}
						<div class="file-info-entry">
							{{.locale.Tr "repo.symbolic_link"}}
						</div>
					{{end}}
					{{if .NumLinesSet}}
						<div class="file-info-entry">
							{{.NumLines}} {{.locale.TrN .NumLines "repo.line" "repo.lines"}}
						</div>
					{{end}}
					{{if .FileSize}}
						<div class="file-info-entry">
							{{FileSize .FileSize}}{{if .IsLFSFile}} ({{.locale.Tr "repo.stored_lfs"}}){{end}}
						</div>
					{{end}}
					{{if .LFSLock}}
						<div class="file-info-entry ui tooltip" data-content="{{.LFSLockHint}}">
							{{svg "octicon-lock" 16 "mr-2"}}
							<a href="{{.LFSLockOwnerHomeLink}}">{{.LFSLockOwner}}</a>
						</div>
					{{end}}
				</div>
			{{end}}
		</div>
		<div class="file-header-right file-actions df ac">
			{{if .HasSourceRenderedToggle}}
				<div class="ui compact icon buttons two-toggle-buttons">
					<a href="{{$.Link}}?display=source" class="ui mini basic button tooltip {{if .IsDisplayingSource}}active{{end}}" data-content="{{.locale.Tr "repo.file_view_source"}}" data-position="bottom center">{{svg "octicon-code" 15}}</a>
					<a href="{{$.Link}}" class="ui mini basic button tooltip {{if .IsDisplayingRendered}}active{{end}}" data-content="{{.locale.Tr "repo.file_view_rendered"}}" data-position="bottom center">{{svg "octicon-file" 15}}</a>
				</div>
			{{end}}
			{{if not .ReadmeInList}}
				<div class="ui buttons mr-2">
					<a class="ui mini basic button" href="{{$.RawFileLink}}">{{.locale.Tr "repo.file_raw"}}</a>
					{{if not .IsViewCommit}}
						<a class="ui mini basic button" href="{{.RepoLink}}/src/commit/{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.file_permalink"}}</a>
					{{end}}
					{{if .IsRepresentableAsText}}
						<a class="ui mini basic button" href="{{.RepoLink}}/blame/{{.BranchNameSubURL}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.blame"}}</a>
					{{end}}
					<a class="ui mini basic button" href="{{.RepoLink}}/commits/{{.BranchNameSubURL}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.file_history"}}</a>
					{{if .EscapeStatus.Escaped}}
						<a class="ui mini basic button unescape-button" style="display: none;">{{.locale.Tr "repo.unescape_control_characters"}}</a>
						<a class="ui mini basic button escape-button">{{.locale.Tr "repo.escape_control_characters"}}</a>
					{{end}}
				</div>
				<a download href="{{$.RawFileLink}}"><span class="btn-octicon tooltip" data-content="{{.locale.Tr "repo.download_file"}}" data-position="bottom center">{{svg "octicon-download"}}</span></a>
				{{if .Repository.CanEnableEditor}}
					{{if .CanEditFile}}
						<a href="{{.RepoLink}}/_edit/{{PathEscapeSegments .BranchName}}/{{PathEscapeSegments .TreePath}}"><span class="btn-octicon tooltip" data-content="{{.EditFileTooltip}}" data-position="bottom center">{{svg "octicon-pencil"}}</span></a>
					{{else}}
						<span class="btn-octicon tooltip disabled" data-content="{{.EditFileTooltip}}" data-position="bottom center">{{svg "octicon-pencil"}}</span>
					{{end}}
					{{if .CanDeleteFile}}
						<a href="{{.RepoLink}}/_delete/{{PathEscapeSegments .BranchName}}/{{PathEscapeSegments .TreePath}}"><span class="btn-octicon btn-octicon-danger tooltip"  data-content="{{.DeleteFileTooltip}}" data-position="bottom center">{{svg "octicon-trash"}}</span></a>
					{{else}}
						<span class="btn-octicon tooltip disabled" data-content="{{.DeleteFileTooltip}}" data-position="bottom center">{{svg "octicon-trash"}}</span>
					{{end}}
				{{end}}
			{{else if .EscapeStatus.Escaped}}
				<a class="ui mini basic button unescape-button mr-2" style="display: none;">{{.locale.Tr "repo.unescape_control_characters"}}</a>
				<a class="ui mini basic button escape-button mr-2">{{.locale.Tr "repo.escape_control_characters"}}</a>
			{{end}}
		</div>
	</h4>
	<div class="ui attached table unstackable segment">
		{{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
		<div class="file-view{{if .IsMarkup}} markup {{.MarkupType}}{{else if .IsRenderedHTML}} plain-text{{else if .IsTextSource}} code-view{{end}}">
			{{if .IsMarkup}}
				{{if .FileContent}}{{.FileContent | Safe}}{{end}}
			{{else if .IsRenderedHTML}}
				<pre>{{if .FileContent}}{{.FileContent | Str2html}}{{end}}</pre>
			{{else if not .IsTextSource}}
				<div class="view-raw ui center">
					{{if .IsImageFile}}
						<img src="{{$.RawFileLink}}">
					{{else if .IsVideoFile}}
						<video controls src="{{$.RawFileLink}}">
							<strong>{{.locale.Tr "repo.video_not_supported_in_browser"}}</strong>
						</video>
					{{else if .IsAudioFile}}
						<audio controls src="{{$.RawFileLink}}">
							<strong>{{.locale.Tr "repo.audio_not_supported_in_browser"}}</strong>
						</audio>
					{{else if .IsPDFFile}}
						<iframe width="100%" height="600px" src="{{AssetUrlPrefix}}/vendor/plugins/pdfjs/web/viewer.html?file={{$.RawFileLink}}"></iframe>
					{{else}}
						<a href="{{$.RawFileLink}}" rel="nofollow" class="btn btn-gray btn-radius">{{.locale.Tr "repo.file_view_raw"}}</a>
					{{end}}
				</div>
			{{else if .FileSize}}
				{{if .IsFileTooLarge}}
				<table>
					<tbody>
						<tr>
							<td><strong>{{.locale.Tr "repo.file_too_large"}}</strong></td>
						</tr>
					</tbody>
				</table>
				{{else}}
				<table>
					<tbody>
						{{range $idx, $code := .FileContent}}
						{{$line := Add $idx 1}}
						<tr>
							<td id="L{{$line}}" class="lines-num"><span id="L{{$line}}" data-line-number="{{$line}}"></span></td>
							{{if $.EscapeStatus.Escaped}}
								<td class="lines-escape">{{if (index $.LineEscapeStatus $idx).Escaped}}<a href="" class="toggle-escape-button" title="{{if (index $.LineEscapeStatus $idx).HasInvisible}}{{$.locale.Tr "repo.invisible_runes_line"}} {{end}}{{if (index $.LineEscapeStatus $idx).HasAmbiguous}}{{$.locale.Tr "repo.ambiguous_runes_line"}}{{end}}"></a>{{end}}</td>
							{{end}}
							<td rel="L{{$line}}" class="lines-code chroma"><code class="code-inner">{{$code | Safe}}</code></td>
						</tr>
						{{end}}
					</tbody>
				</table>
				<div class="code-line-menu ui vertical pointing menu tippy-target">
					{{if $.Permission.CanRead $.UnitTypeIssues}}
						<a class="item ref-in-new-issue" href="{{.RepoLink}}/issues/new?body={{.Repository.HTMLURL}}{{printf "/src/commit/" }}{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}" rel="nofollow noindex">{{.locale.Tr "repo.issues.context.reference_issue"}}</a>
					{{end}}
					<a class="item view_git_blame" href="{{.Repository.HTMLURL}}/blame/commit/{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.view_git_blame"}}</a>
					<a class="item copy-line-permalink" data-url="{{.Repository.HTMLURL}}/src/commit/{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.file_copy_permalink"}}</a>
				</div>
				{{end}}
			{{end}}
		</div>
	</div>
</div>