You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

view_file.tmpl 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <div class="{{TabSizeClass .Editorconfig .FileName}} non-diff-file-content">
  2. {{- if .FileError}}
  3. <div class="ui error message">
  4. <div class="text left gt-whitespace-pre">{{.FileError}}</div>
  5. </div>
  6. {{end}}
  7. {{- if .FileWarning}}
  8. <div class="ui warning message">
  9. <div class="text left gt-whitespace-pre">{{.FileWarning}}</div>
  10. </div>
  11. {{end}}
  12. <h4 class="file-header ui top attached header gt-df gt-ac gt-sb gt-fw">
  13. <div class="file-header-left gt-df gt-ac gt-py-3 gt-pr-4">
  14. {{if .ReadmeInList}}
  15. {{svg "octicon-book" 16 "gt-mr-3"}}
  16. <strong>{{.FileName}}</strong>
  17. {{else}}
  18. {{template "repo/file_info" .}}
  19. {{end}}
  20. </div>
  21. <div class="file-header-right file-actions gt-df gt-ac gt-fw">
  22. {{if .HasSourceRenderedToggle}}
  23. <div class="ui compact icon buttons two-toggle-buttons">
  24. <a href="{{$.Link}}?display=source" class="ui mini basic button {{if .IsDisplayingSource}}active{{end}}" data-tooltip-content="{{.locale.Tr "repo.file_view_source"}}">{{svg "octicon-code" 15}}</a>
  25. <a href="{{$.Link}}" class="ui mini basic button {{if .IsDisplayingRendered}}active{{end}}" data-tooltip-content="{{.locale.Tr "repo.file_view_rendered"}}">{{svg "octicon-file" 15}}</a>
  26. </div>
  27. {{end}}
  28. {{if not .ReadmeInList}}
  29. <div class="ui buttons gt-mr-2">
  30. <a class="ui mini basic button" href="{{$.RawFileLink}}">{{.locale.Tr "repo.file_raw"}}</a>
  31. {{if not .IsViewCommit}}
  32. <a class="ui mini basic button" href="{{.RepoLink}}/src/commit/{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.file_permalink"}}</a>
  33. {{end}}
  34. {{if .IsRepresentableAsText}}
  35. <a class="ui mini basic button" href="{{.RepoLink}}/blame/{{.BranchNameSubURL}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.blame"}}</a>
  36. {{end}}
  37. <a class="ui mini basic button" href="{{.RepoLink}}/commits/{{.BranchNameSubURL}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.file_history"}}</a>
  38. {{if .EscapeStatus.Escaped}}
  39. <button class="ui mini basic button unescape-button gt-hidden">{{.locale.Tr "repo.unescape_control_characters"}}</button>
  40. <button class="ui mini basic button escape-button">{{.locale.Tr "repo.escape_control_characters"}}</button>
  41. {{end}}
  42. </div>
  43. <a download href="{{$.RawFileLink}}"><span class="btn-octicon" data-tooltip-content="{{.locale.Tr "repo.download_file"}}">{{svg "octicon-download"}}</span></a>
  44. <a id="copy-content" class="btn-octicon {{if not .CanCopyContent}} disabled{{end}}"{{if or .IsImageFile (and .HasSourceRenderedToggle (not .IsDisplayingSource))}} data-link="{{$.RawFileLink}}"{{end}} data-tooltip-content="{{if .CanCopyContent}}{{.locale.Tr "copy_content"}}{{else}}{{.locale.Tr "copy_type_unsupported"}}{{end}}">{{svg "octicon-copy" 14}}</a>
  45. {{if .EnableFeed}}
  46. <a class="btn-octicon" href="{{$.FeedURL}}/rss/{{$.BranchNameSubURL}}/{{PathEscapeSegments .TreePath}}">{{svg "octicon-rss" 14}}</a>
  47. {{end}}
  48. {{if .Repository.CanEnableEditor}}
  49. {{if .CanEditFile}}
  50. <a href="{{.RepoLink}}/_edit/{{PathEscapeSegments .BranchName}}/{{PathEscapeSegments .TreePath}}"><span class="btn-octicon" data-tooltip-content="{{.EditFileTooltip}}">{{svg "octicon-pencil"}}</span></a>
  51. {{else}}
  52. <span class="btn-octicon disabled" data-tooltip-content="{{.EditFileTooltip}}">{{svg "octicon-pencil"}}</span>
  53. {{end}}
  54. {{if .CanDeleteFile}}
  55. <a href="{{.RepoLink}}/_delete/{{PathEscapeSegments .BranchName}}/{{PathEscapeSegments .TreePath}}"><span class="btn-octicon btn-octicon-danger" data-tooltip-content="{{.DeleteFileTooltip}}">{{svg "octicon-trash"}}</span></a>
  56. {{else}}
  57. <span class="btn-octicon disabled" data-tooltip-content="{{.DeleteFileTooltip}}">{{svg "octicon-trash"}}</span>
  58. {{end}}
  59. {{end}}
  60. {{else if .EscapeStatus.Escaped}}
  61. <button class="ui mini basic button unescape-button gt-mr-2 gt-hidden">{{.locale.Tr "repo.unescape_control_characters"}}</button>
  62. <button class="ui mini basic button escape-button gt-mr-2">{{.locale.Tr "repo.escape_control_characters"}}</button>
  63. {{end}}
  64. </div>
  65. </h4>
  66. <div class="ui attached table unstackable segment">
  67. {{if not (or .IsMarkup .IsRenderedHTML)}}
  68. {{template "repo/unicode_escape_prompt" dict "EscapeStatus" .EscapeStatus "root" $}}
  69. {{end}}
  70. <div class="file-view{{if .IsMarkup}} markup {{.MarkupType}}{{else if .IsPlainText}} plain-text{{else if .IsTextSource}} code-view{{end}}">
  71. {{if .IsMarkup}}
  72. {{if .FileContent}}{{.FileContent | Safe}}{{end}}
  73. {{else if .IsPlainText}}
  74. <pre>{{if .FileContent}}{{.FileContent | Safe}}{{end}}</pre>
  75. {{else if not .IsTextSource}}
  76. <div class="view-raw">
  77. {{if .IsImageFile}}
  78. <img src="{{$.RawFileLink}}">
  79. {{else if .IsVideoFile}}
  80. <video controls src="{{$.RawFileLink}}">
  81. <strong>{{.locale.Tr "repo.video_not_supported_in_browser"}}</strong>
  82. </video>
  83. {{else if .IsAudioFile}}
  84. <audio controls src="{{$.RawFileLink}}">
  85. <strong>{{.locale.Tr "repo.audio_not_supported_in_browser"}}</strong>
  86. </audio>
  87. {{else if .IsPDFFile}}
  88. <div class="pdf-content is-loading" data-src="{{$.RawFileLink}}" data-fallback-button-text="{{.locale.Tr "repo.diff.view_file"}}"></div>
  89. {{else}}
  90. <a href="{{$.RawFileLink}}" rel="nofollow" class="btn btn-gray btn-radius">{{.locale.Tr "repo.file_view_raw"}}</a>
  91. {{end}}
  92. </div>
  93. {{else if .FileSize}}
  94. {{if .IsFileTooLarge}}
  95. <table>
  96. <tbody>
  97. <tr>
  98. <td><strong>{{.locale.Tr "repo.file_too_large"}}</strong></td>
  99. </tr>
  100. </tbody>
  101. </table>
  102. {{else}}
  103. <table>
  104. <tbody>
  105. {{range $idx, $code := .FileContent}}
  106. {{$line := Eval $idx "+" 1}}
  107. <tr>
  108. <td id="L{{$line}}" class="lines-num"><span id="L{{$line}}" data-line-number="{{$line}}"></span></td>
  109. {{if $.EscapeStatus.Escaped}}
  110. <td class="lines-escape">{{if (index $.LineEscapeStatus $idx).Escaped}}<button class="toggle-escape-button btn interact-bg" 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}}"></button>{{end}}</td>
  111. {{end}}
  112. <td rel="L{{$line}}" class="lines-code chroma"><code class="code-inner">{{$code | Safe}}</code></td>
  113. </tr>
  114. {{end}}
  115. </tbody>
  116. </table>
  117. <div class="code-line-menu ui vertical pointing menu tippy-target">
  118. {{if $.Permission.CanRead $.UnitTypeIssues}}
  119. <a class="item ref-in-new-issue" data-url-issue-new="{{.RepoLink}}/issues/new" data-url-param-body-link="{{.Repository.Link}}/src/commit/{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}" rel="nofollow noindex">{{.locale.Tr "repo.issues.context.reference_issue"}}</a>
  120. {{end}}
  121. <a class="item view_git_blame" href="{{.Repository.Link}}/blame/commit/{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.view_git_blame"}}</a>
  122. <a class="item copy-line-permalink" data-url="{{.Repository.Link}}/src/commit/{{PathEscape .CommitID}}/{{PathEscapeSegments .TreePath}}">{{.locale.Tr "repo.file_copy_permalink"}}</a>
  123. </div>
  124. {{end}}
  125. {{end}}
  126. </div>
  127. </div>
  128. </div>