2015-11-14 10:34:01 +01:00
{{ template "base/head" . }}
2023-02-01 23:56:10 +01:00
< div role = "main" aria-label = " {{ .Title }} " class = "page-content repository file list {{ if .IsBlame }} blame {{ end }} " >
2015-12-07 23:30:52 +01:00
{{ template "repo/header" . }}
2020-06-25 20:58:12 +02:00
< div class = "ui container {{ if .IsBlame }} fluid padded {{ end }} " >
2016-08-25 06:35:03 +02:00
{{ template "base/alert" . }}
2023-07-08 05:19:00 +02:00
{{ template "repo/code/recently_pushed_new_branches" . }}
2022-10-13 10:31:10 +02:00
{{ if and ( not .HideRepoInfo ) ( not .IsBlame ) }}
2023-11-08 00:52:08 +01:00
< div class = "ui repo-description gt-word-break" >
2023-08-31 07:01:01 +02:00
< div id = "repo-desc" class = "gt-font-16" >
2022-08-25 23:55:52 +02:00
{{ $description := .Repository.DescriptionHTML $.Context }}
2023-09-25 10:56:50 +02:00
{{ if $description }} < span class = "description" > {{ $description | RenderCodeBlock }} </ span > {{ else if .IsRepositoryAdmin }} < span class = "no-description text-italic" > {{ ctx .Locale.Tr "repo.no_desc" }} </ span > {{ end }}
2017-10-27 08:10:54 +02:00
< a class = "link" href = " {{ .Repository.Website }} " > {{ .Repository.Website }} </ a >
< / div >
{{ if .RepoSearchEnabled }}
< div class = "ui repo-search" >
2018-03-23 15:10:42 +01:00
< form class = "ui form ignore-dirty" action = " {{ .RepoLink }} /search" method = "get" >
2017-10-27 08:10:54 +02:00
< div class = "field" >
2023-09-25 10:56:50 +02:00
< div class = "ui small action input {{ if .CodeIndexerUnavailable }} disabled left icon {{ end }} " {{ if .CodeIndexerUnavailable }} data-tooltip-content = " {{ ctx .Locale.Tr "repo.search.code_search_unavailable" }} " {{ end }} >
< input name = "q" value = " {{ .Keyword }} " {{ if .CodeIndexerUnavailable }} disabled {{ end }} placeholder = " {{ ctx .Locale.Tr "repo.search.search_repo" }} " >
2022-08-25 23:55:52 +02:00
{{ if .CodeIndexerUnavailable }}
2023-08-26 01:35:10 +02:00
< i class = "icon" > {{ svg "octicon-alert" }} </ i >
2022-01-27 09:30:51 +01:00
{{ end }}
2023-04-30 05:33:25 +02:00
< button class = "ui small icon button" {{ if .CodeIndexerUnavailable }} disabled {{ end }} type = "submit" >
2020-10-30 19:54:58 +01:00
{{ svg "octicon-search" }}
2017-10-27 08:10:54 +02:00
< / button >
< / div >
< / div >
< / form >
< / div >
{{ end }}
< / div >
2023-07-08 20:12:30 +02:00
< div class = "gt-df gt-ac gt-fw gt-gap-2" id = "repo-topics" >
{{ range .Topics }} < a class = "ui repo-topic large label topic gt-m-0" href = " {{ AppSubUrl }} /explore/repos?q= {{ .Name }} &topic=1" > {{ .Name }} </ a > {{ end }}
2023-09-25 10:56:50 +02:00
{{ if and .Permission.IsAdmin ( not .Repository.IsArchived ) }} < button id = "manage_topic" class = "btn interact-fg gt-font-12" > {{ ctx .Locale.Tr "repo.topic.manage_topics" }} </ button > {{ end }}
2018-04-11 04:51:44 +02:00
< / div >
2022-10-13 10:31:10 +02:00
{{ end }}
2019-01-24 11:22:27 +01:00
{{ if and .Permission.IsAdmin ( not .Repository.IsArchived ) }}
2023-11-06 10:23:50 +01:00
< div class = "ui form gt-hidden gt-df gt-fc gt-mt-4" id = "topic_edit" >
< div class = "field gt-f1 gt-mb-2" >
< div class = "ui fluid multiple search selection dropdown gt-fw" data-text-count-prompt = " {{ ctx .Locale.Tr "repo.topic.count_prompt" }} " data-text-format-prompt = " {{ ctx .Locale.Tr "repo.topic.format_prompt" }} " >
Use a general Eval function for expressions in templates. (#23927)
One of the proposals in #23328
This PR introduces a simple expression calculator
(templates/eval/eval.go), it can do basic expression calculations.
Many untested template helper functions like `Mul` `Add` can be replaced
by this new approach.
Then these `Add` / `Mul` / `percentage` / `Subtract` / `DiffStatsWidth`
could all use this `Eval`.
And it provides enhancements for Golang templates, and improves
readability.
Some examples:
----
* Before: `{{Add (Mul $glyph.Row 12) 12}}`
* After: `{{Eval $glyph.Row "*" 12 "+" 12}}`
----
* Before: `{{if lt (Add $i 1) (len $.Topics)}}`
* After: `{{if Eval $i "+" 1 "<" (len $.Topics)}}`
## FAQ
### Why not use an existing expression package?
We need a highly customized expression engine:
* do the calculation on the fly, without pre-compiling
* deal with int/int64/float64 types, to make the result could be used in
Golang template.
* make the syntax could be used in the Golang template directly
* do not introduce too much complex or strange syntax, we just need a
simple calculator.
* it needs to strictly follow Golang template's behavior, for example,
Golang template treats all non-zero values as truth, but many 3rd
packages don't do so.
### What's the benefit?
* Developers don't need to add more `Add`/`Mul`/`Sub`-like functions,
they were getting more and more.
Now, only one `Eval` is enough for all cases.
* The new code reads better than old `{{Add (Mul $glyph.Row 12) 12}}`,
the old one isn't familiar to most procedural programming developers
(eg, the Golang expression syntax).
* The `Eval` is fully covered by tests, many old `Add`/`Mul`-like
functions were never tested.
### The performance?
It doesn't use `reflect`, it doesn't need to parse or compile when used
in Golang template, the performance is as fast as native Go template.
### Is it too complex? Could it be unstable?
The expression calculator program is a common homework for computer
science students, and it's widely used as a teaching and practicing
purpose for developers. The algorithm is pretty well-known.
The behavior can be clearly defined, it is stable.
2023-04-07 15:25:49 +02:00
< input type = "hidden" name = "topics" value = " {{ range $i , $v := .Topics }}{{ .Name }}{{ if Eval $i "+" 1 "<" ( len $.Topics ) }} , {{ end }}{{ end }} " >
Fine tune more downdrop settings, use SVG for labels, improve Repo Topic Edit form (#23626)
Although it seems that some different purposes are mixed in this PR,
however, they are all related, and can be tested together, so I put them
together to save everyone's time.
Diff: `+79 −84`, everything becomes much better.
### Improve the dropdown settings.
Move all fomantic-init related code into our `fomantic.js`
Fine-tune some dropdown global settings, see the comments.
Also help to fix the first problem in #23625 , cc: @yp05327
The "language" menu has been simplified, and it works with small-height
window better.
### Use SVG instead of `<i class="delete icon">`
It's also done by `$.fn.dropdown.settings.templates.label` , cc:
@silverwind
### Remove incorrect `tabable` CSS class
It doesn't have CSS styles, and it was only in Vue. So it's totally
unnecessary, remove it by the way.
### Improve the Repo Topic Edit form
* Simplify the code
* Add a "Cancel" button
* Align elements
Before:
<details>
![image](https://user-images.githubusercontent.com/2114189/223325782-f09532de-0c38-4742-ba86-ed35cc9a858d.png)
</details>
After:
![image](https://user-images.githubusercontent.com/2114189/226796347-207feb0a-b3cd-4820-8a3e-01930bab1069.png)
2023-03-26 13:31:26 +02:00
{{ range .Topics }}
{{/* keey the same layout as Fomantic UI generated labels */}}
2023-05-29 16:10:06 +02:00
< a class = "ui label transition visible gt-cursor-default gt-dib" data-value = " {{ .Name }} " > {{ .Name }}{{ svg "octicon-x" 16 "delete icon" }} </ a >
Fine tune more downdrop settings, use SVG for labels, improve Repo Topic Edit form (#23626)
Although it seems that some different purposes are mixed in this PR,
however, they are all related, and can be tested together, so I put them
together to save everyone's time.
Diff: `+79 −84`, everything becomes much better.
### Improve the dropdown settings.
Move all fomantic-init related code into our `fomantic.js`
Fine-tune some dropdown global settings, see the comments.
Also help to fix the first problem in #23625 , cc: @yp05327
The "language" menu has been simplified, and it works with small-height
window better.
### Use SVG instead of `<i class="delete icon">`
It's also done by `$.fn.dropdown.settings.templates.label` , cc:
@silverwind
### Remove incorrect `tabable` CSS class
It doesn't have CSS styles, and it was only in Vue. So it's totally
unnecessary, remove it by the way.
### Improve the Repo Topic Edit form
* Simplify the code
* Add a "Cancel" button
* Align elements
Before:
<details>
![image](https://user-images.githubusercontent.com/2114189/223325782-f09532de-0c38-4742-ba86-ed35cc9a858d.png)
</details>
After:
![image](https://user-images.githubusercontent.com/2114189/226796347-207feb0a-b3cd-4820-8a3e-01930bab1069.png)
2023-03-26 13:31:26 +02:00
{{ end }}
< div class = "text" > < / div >
2018-04-11 04:51:44 +02:00
< / div >
< / div >
Fine tune more downdrop settings, use SVG for labels, improve Repo Topic Edit form (#23626)
Although it seems that some different purposes are mixed in this PR,
however, they are all related, and can be tested together, so I put them
together to save everyone's time.
Diff: `+79 −84`, everything becomes much better.
### Improve the dropdown settings.
Move all fomantic-init related code into our `fomantic.js`
Fine-tune some dropdown global settings, see the comments.
Also help to fix the first problem in #23625 , cc: @yp05327
The "language" menu has been simplified, and it works with small-height
window better.
### Use SVG instead of `<i class="delete icon">`
It's also done by `$.fn.dropdown.settings.templates.label` , cc:
@silverwind
### Remove incorrect `tabable` CSS class
It doesn't have CSS styles, and it was only in Vue. So it's totally
unnecessary, remove it by the way.
### Improve the Repo Topic Edit form
* Simplify the code
* Add a "Cancel" button
* Align elements
Before:
<details>
![image](https://user-images.githubusercontent.com/2114189/223325782-f09532de-0c38-4742-ba86-ed35cc9a858d.png)
</details>
After:
![image](https://user-images.githubusercontent.com/2114189/226796347-207feb0a-b3cd-4820-8a3e-01930bab1069.png)
2023-03-26 13:31:26 +02:00
< div >
2023-09-25 10:56:50 +02:00
< button class = "ui basic button" id = "cancel_topic_edit" > {{ ctx .Locale.Tr "cancel" }} </ button >
< button class = "ui primary button" id = "save_topic" data-link = " {{ .RepoLink }} /topics" > {{ ctx .Locale.Tr "save" }} </ button >
2018-04-11 04:51:44 +02:00
< / div >
< / div >
{{ end }}
2019-01-23 19:58:38 +01:00
{{ if .Repository.IsArchived }}
2023-07-08 12:57:17 +02:00
< div class = "ui warning message gt-text-center" >
2023-04-26 16:46:26 +02:00
{{ if .Repository.ArchivedUnix.IsZero }}
2023-09-25 10:56:50 +02:00
{{ ctx .Locale.Tr "repo.archive.title" }}
2023-04-26 16:46:26 +02:00
{{ else }}
2023-09-25 10:56:50 +02:00
{{ ctx .Locale.Tr "repo.archive.title_date" ( DateTime "long" .Repository.ArchivedUnix ) | Safe }}
2023-04-26 16:46:26 +02:00
{{ end }}
2019-01-23 19:58:38 +01:00
< / div >
{{ end }}
2017-10-26 02:49:16 +02:00
{{ template "repo/sub_menu" . }}
2023-06-15 17:12:08 +02:00
< div class = "repo-button-row" >
2023-03-10 04:14:45 +01:00
< div class = "gt-df gt-ac gt-fw gt-gap-y-3" >
2023-05-03 23:58:59 +02:00
{{ template "repo/branch_dropdown" dict "root" . "ContainerClasses" "gt-mr-2" }}
2023-05-22 09:57:00 +02:00
{{ if and .CanCompareOrPull .IsViewBranch ( not .Repository.IsArchived ) }}
2023-04-29 14:02:29 +02:00
{{ $cmpBranch := "" }}
{{ if ne .Repository.ID .BaseRepo.ID }}
{{ $cmpBranch = printf "%s/%s:" ( .Repository.OwnerName | PathEscape ) ( .Repository.Name | PathEscape ) }}
{{ end }}
2023-09-16 05:51:54 +02:00
{{ $cmpBranch = print $cmpBranch ( .BranchName | PathEscapeSegments ) }}
2023-04-29 14:02:29 +02:00
{{ $compareLink := printf "%s/compare/%s...%s" .BaseRepo.Link ( .BaseRepo.DefaultBranch | PathEscapeSegments ) $cmpBranch }}
< a id = "new-pull-request" role = "button" class = "ui compact basic button" href = " {{ $compareLink }} "
2023-09-25 14:42:40 +02:00
data-tooltip-content="{{ if .PullRequestCtx.Allowed }}{{ ctx .Locale.Tr "repo.pulls.compare_changes" }}{{ else }}{{ ctx .Locale.Tr "action.compare_branch" }}{{ end }} ">
2023-04-26 04:53:44 +02:00
{{ svg "octicon-git-pull-request" }}
2023-04-25 16:08:29 +02:00
< / a >
{{ end }}
2023-05-22 09:57:00 +02:00
<!-- Show go to file and breadcrumbs if not on home page -->
{{ $n := len .TreeNames }}
{{ $l := Eval $n "-" 1 }}
2022-08-08 01:15:11 +02:00
{{ if eq $n 0 }}
2023-09-25 10:56:50 +02:00
< a href = " {{ .Repository.Link }} /find/ {{ .BranchNameSubURL }} " class = "ui compact basic button" > {{ ctx .Locale.Tr "repo.find_file.go_to_file" }} </ a >
2022-09-06 09:01:58 +02:00
{{ end }}
2023-04-19 15:40:42 +02:00
2023-07-07 15:36:14 +02:00
{{ if and .CanWriteCode .IsViewBranch ( not .Repository.IsMirror ) ( not .Repository.IsArchived ) ( not .IsViewFile ) }}
2023-06-15 17:12:08 +02:00
< button class = "ui dropdown basic compact jump button gt-mr-2" {{ if not .Repository.CanEnableEditor }} disabled {{ end }} >
2023-09-25 10:56:50 +02:00
{{ ctx .Locale.Tr "repo.editor.add_file" }}
2023-06-15 17:12:08 +02:00
{{ svg "octicon-triangle-down" 14 "dropdown icon" }}
2022-09-06 09:01:58 +02:00
< div class = "menu" >
2023-04-19 15:40:42 +02:00
< a class = "item" href = " {{ .RepoLink }} /_new/ {{ .BranchName | PathEscapeSegments }} / {{ .TreePath | PathEscapeSegments }} " >
2023-09-25 10:56:50 +02:00
{{ ctx .Locale.Tr "repo.editor.new_file" }}
2023-04-19 15:40:42 +02:00
< / a >
{{ if .RepositoryUploadEnabled }}
< a class = "item" href = " {{ .RepoLink }} /_upload/ {{ .BranchName | PathEscapeSegments }} / {{ .TreePath | PathEscapeSegments }} " >
2023-09-25 10:56:50 +02:00
{{ ctx .Locale.Tr "repo.editor.upload_file" }}
2023-04-19 15:40:42 +02:00
< / a >
2022-09-06 09:01:58 +02:00
{{ end }}
2023-04-19 15:40:42 +02:00
< a class = "item" href = " {{ .RepoLink }} /_diffpatch/ {{ .BranchName | PathEscapeSegments }} / {{ .TreePath | PathEscapeSegments }} " >
2023-09-25 10:56:50 +02:00
{{ ctx .Locale.Tr "repo.editor.patch" }}
2023-04-19 15:40:42 +02:00
< / a >
2022-09-06 09:01:58 +02:00
< / div >
< / button >
{{ end }}
2023-04-19 15:40:42 +02:00
2023-03-10 04:14:45 +01:00
{{ if and ( eq $n 0 ) ( .Repository.IsTemplate ) }}
< a role = "button" class = "ui primary compact button" href = " {{ AppSubUrl }} /repo/create?template_id= {{ .Repository.ID }} " >
2023-09-25 10:56:50 +02:00
{{ ctx .Locale.Tr "repo.use_template" }}
2023-03-10 04:14:45 +01:00
< / a >
{{ end }}
2022-09-06 09:01:58 +02:00
{{ if ne $n 0 }}
2023-05-01 17:40:02 +02:00
< span class = "breadcrumb repo-path gt-ml-2" >
2023-04-29 14:02:29 +02:00
< a class = "section" href = " {{ .RepoLink }} /src/ {{ .BranchNameSubURL }} " title = " {{ .Repository.Name }} " > {{ StringUtils .EllipsisString .Repository.Name 30 }} </ a >
{{- range $i , $v := .TreeNames -}}
2023-08-16 02:08:23 +02:00
< span class = "breadcrumb-divider" > /< / span >
2023-04-29 14:02:29 +02:00
{{- if eq $i $l -}}
< span class = "active section" title = " {{ $v }} " > {{ StringUtils .EllipsisString $v 30 }} </ span >
{{- else -}}
{{ $p := index $.Paths $i }} < span class = "section" >< a href = " {{ $.BranchLink }} / {{ PathEscapeSegments $p }} " title = " {{ $v }} " > {{ StringUtils .EllipsisString $v 30 }} </ a ></ span >
{{- end -}}
{{- end -}}
< / span >
2022-08-08 01:15:11 +02:00
{{ end }}
2017-12-31 01:47:52 +01:00
< / div >
2023-02-13 18:59:59 +01:00
< div class = "gt-df gt-ac" >
2017-08-14 00:49:38 +02:00
<!-- Only show clone panel in repository home page -->
2016-08-11 14:48:08 +02:00
{{ if eq $n 0 }}
2017-08-14 00:49:38 +02:00
< div class = "ui action tiny input" id = "clone-panel" >
2022-08-12 07:16:05 +02:00
{{ template "repo/clone_buttons" . }}
2023-09-25 10:56:50 +02:00
< button id = "more-btn" class = "ui basic small compact jump dropdown icon button" data-tooltip-content = " {{ ctx .Locale.Tr "repo.more_operations" }} " >
2022-11-11 18:02:50 +01:00
{{ svg "octicon-kebab-horizontal" }}
2015-12-07 23:30:52 +01:00
< div class = "menu" >
2022-08-12 07:16:05 +02:00
{{ if not $.DisableDownloadSourceArchives }}
2023-09-25 10:56:50 +02:00
< a class = "item archive-link" href = " {{ $.RepoLink }} /archive/ {{ PathEscapeSegments $.RefName }} .zip" rel = "nofollow" > {{ svg "octicon-file-zip" 16 "gt-mr-3" }}{{ ctx .Locale.Tr "repo.download_zip" }} </ a >
< a class = "item archive-link" href = " {{ $.RepoLink }} /archive/ {{ PathEscapeSegments $.RefName }} .tar.gz" rel = "nofollow" > {{ svg "octicon-file-zip" 16 "gt-mr-3" }}{{ ctx .Locale.Tr "repo.download_tar" }} </ a >
< a class = "item archive-link" href = " {{ $.RepoLink }} /archive/ {{ PathEscapeSegments $.RefName }} .bundle" rel = "nofollow" > {{ svg "octicon-package" 16 "gt-mr-3" }}{{ ctx .Locale.Tr "repo.download_bundle" }} </ a >
2022-11-11 18:02:50 +01:00
{{ if .CitiationExist }}
2023-09-25 10:56:50 +02:00
< a class = "item" id = "cite-repo-button" > {{ svg "octicon-cross-reference" 16 "gt-mr-3" }}{{ ctx .Locale.Tr "repo.cite_this_repo" }} </ a >
2022-11-11 18:02:50 +01:00
{{ end }}
2022-08-12 07:16:05 +02:00
{{ end }}
2023-09-25 10:56:50 +02:00
< a class = "item js-clone-url-vsc" href = "vscode://vscode.git/clone?url= {{ .CloneButtonOriginLink.HTTPS }} " > {{ svg "gitea-vscode" 16 "gt-mr-3" }}{{ ctx .Locale.Tr "repo.clone_in_vsc" }} </ a >
2015-12-07 23:30:52 +01:00
< / div >
2021-04-13 02:10:57 +02:00
< / button >
2022-09-21 13:51:10 +02:00
{{ template "repo/clone_script" . }} {{/* the script will update `.js-clone-url` and related elements */}}
2015-12-07 23:30:52 +01:00
< / div >
2022-11-11 18:02:50 +01:00
{{ template "repo/cite/cite_modal" . }}
2016-08-11 14:48:08 +02:00
{{ end }}
2022-08-25 23:55:52 +02:00
{{ if and ( ne $n 0 ) ( not .IsViewFile ) ( not .IsBlame ) }}
2022-08-09 12:32:41 +02:00
< a class = "ui button" href = " {{ .RepoLink }} /commits/ {{ .BranchNameSubURL }} / {{ .TreePath | PathEscapeSegments }} " >
2023-09-25 10:56:50 +02:00
{{ svg "octicon-history" 16 "gt-mr-3" }}{{ ctx .Locale.Tr "repo.file_history" }}
2022-08-09 12:32:41 +02:00
< / a >
{{ end }}
2016-08-11 14:48:08 +02:00
< / div >
2015-12-07 23:30:52 +01:00
< / div >
2016-08-30 11:08:38 +02:00
{{ if .IsViewFile }}
2015-12-07 23:30:52 +01:00
{{ template "repo/view_file" . }}
2019-04-20 04:47:00 +02:00
{{ else if .IsBlame }}
{{ template "repo/blame" . }}
2015-12-07 23:30:52 +01:00
{{ else }}
{{ template "repo/view_list" . }}
{{ end }}
< / div >
2014-07-26 06:24:27 +02:00
< / div >
2015-12-07 23:30:52 +01:00
{{ template "base/footer" . }}