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">
2024-03-23 22:22:15 +01:00
<div id="repo-desc" class="tw-text-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">
2024-03-15 00:24:59 +01:00
<div class="ui small action input {{ if .CodeIndexerUnavailable }} disabled left icon {{ end }} " {{ if .CodeIndexerUnavailable }} data-tooltip-content=" {{ ctx .Locale .Tr "search.code_search_unavailable" }} " {{ end }} >
<input name="q" value=" {{ .Keyword }} " {{ if .CodeIndexerUnavailable }} disabled {{ end }} placeholder=" {{ ctx .Locale .Tr "search.code_kind" }} ">
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 }}
2024-03-15 00:24:59 +01:00
{{ template "shared/search/button" dict "Disabled" .CodeIndexerUnavailable }}
2017-10-27 08:10:54 +02:00
</div>
</div>
</form>
</div>
{{ end }}
</div>
2024-03-22 20:51:29 +01:00
<div class="tw-flex tw-items-center tw-flex-wrap gt-gap-2" id="repo-topics">
2023-07-08 20:12:30 +02:00
{{ range .Topics }} <a class="ui repo-topic large label topic gt-m-0" href=" {{ AppSubUrl }} /explore/repos?q= {{ .Name }} &topic=1"> {{ .Name }} </a> {{ end }}
2024-03-23 22:22:15 +01:00
{{ if and .Permission .IsAdmin ( not .Repository .IsArchived ) }} <button id="manage_topic" class="btn interact-fg tw-text-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 ) }}
2024-03-22 14:45:10 +01:00
<div class="ui form gt-hidden tw-flex tw-flex-col gt-mt-4" id="topic_edit">
<div class="field tw-flex-1 gt-mb-2">
<div class="ui fluid multiple search selection dropdown tw-flex-wrap" 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 * / }}
2024-03-22 14:45:10 +01:00
<a class="ui label transition visible tw-cursor-default tw-inline-block" data-value=" {{ .Name }} "> {{ .Name }} {{ svg "octicon-x" 1 6 "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 }}
2024-03-04 04:33:20 +01:00
<div class="ui warning message tw-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 }}
2024-02-22 18:02:33 +01:00
{{ ctx .Locale .Tr "repo.archive.title_date" ( DateTime "long" .Repository .ArchivedUnix ) }}
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">
2024-03-22 20:51:29 +01:00
<div class="tw-flex tw-items-center tw-flex-wrap 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" 1 4 "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 3 0 }} </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 3 0 }} </span>
{{ - else - }}
{{ $ p : = in dex $ .Paths $ i }} <span class="section"><a href=" {{ $ .BranchLink }} / {{ PathEscapeSegments $ p }} " title=" {{ $ v }} "> {{ StringUtils .EllipsisString $ v 3 0 }} </a></span>
{{ - end - }}
{{ - end - }}
</span>
2022-08-08 01:15:11 +02:00
{{ end }}
2017-12-31 01:47:52 +01:00
</div>
2024-03-22 20:51:29 +01:00
<div class="tw-flex tw-items-center">
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 }}
2024-03-17 13:40:42 +01:00
<div class="clone-panel ui action tiny input">
2022-08-12 07:16:05 +02:00
{{ template "repo/clone_buttons" . }}
2024-03-17 13:40:42 +01:00
<button class="ui small 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" 1 6 "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" 1 6 "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" 1 6 "gt-mr-3" }} {{ ctx .Locale .Tr "repo.download_bundle" }} </a>
2024-02-25 01:13:04 +01:00
{{ end }}
{{ if .CitiationExist }}
<a class="item" id="cite-repo-button"> {{ svg "octicon-cross-reference" 1 6 "gt-mr-3" }} {{ ctx .Locale .Tr "repo.cite_this_repo" }} </a>
2022-08-12 07:16:05 +02:00
{{ end }}
2024-02-24 14:12:17 +01:00
{{ range .OpenWithEditorApps }}
<a class="item js-clone-url-editor" data-href-template=" {{ .OpenURL }} "> {{ .IconHTML }} {{ ctx .Locale .Tr "repo.open_with_editor" .DisplayName }} </a>
{{ end }}
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" 1 6 "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" . }}