2014-04-10 20:20:58 +02:00
<!DOCTYPE html>
2022-02-08 04:02:30 +01:00
< html lang = " {{ .i18n.Lang }} " class = "theme- {{ .SignedUser.Theme }} " >
2021-10-15 04:35:26 +02:00
< head >
2017-01-25 16:15:25 +01:00
< meta charset = "utf-8" >
2017-12-31 01:47:52 +01:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2021-10-21 09:37:43 +02:00
< title > {{ if .Title }}{{ .Title | RenderEmojiPlain }} - {{ end }} {{ if .Repository.Name }}{{ .Repository.Name }} - {{ end }}{{ AppName }} </ title >
2020-12-23 20:09:54 +01:00
< link rel = "manifest" href = "data: {{ .ManifestData }} " />
2017-01-25 16:15:25 +01:00
< meta name = "theme-color" content = " {{ ThemeColorMetaTag }} " >
2020-12-03 13:53:21 +01:00
< meta name = "default-theme" content = " {{ DefaultTheme }} " />
2017-04-01 03:03:01 +02:00
< meta name = "author" content = " {{ if .Repository }}{{ .Owner.Name }}{{ else }}{{ MetaAuthor }}{{ end }} " />
< meta name = "description" content = " {{ if .Repository }}{{ .Repository.Name }}{{ if .Repository.Description }} - {{ .Repository.Description }}{{ end }}{{ else }}{{ MetaDescription }}{{ end }} " />
< meta name = "keywords" content = " {{ MetaKeywords }} " >
2015-07-21 05:19:56 +02:00
< meta name = "referrer" content = "no-referrer" / >
2017-01-25 16:15:25 +01:00
{{ if .GoGetImport }}
2022-03-29 05:21:30 +02:00
< meta name = "go-import" content = " {{ .GoGetImport }} git {{ .RepoCloneLink.HTTPS }} " >
2017-01-25 16:15:25 +01:00
< meta name = "go-source" content = " {{ .GoGetImport }} _ {{ .GoDocDirectory }} {{ .GoDocFile }} " >
2022-03-13 17:40:47 +01:00
{{ end }}
{{ if .FeedURL }}
< link rel = "alternate" type = "application/atom+xml" title = "" href = " {{ .FeedURL }} .atom" >
< link rel = "alternate" type = "application/rss+xml" title = "" href = " {{ .FeedURL }} .rss" >
2017-01-25 16:15:25 +01:00
{{ end }}
2017-08-23 16:58:05 +02:00
< script >
2021-10-12 20:11:35 +02:00
<!-- /* eslint - disable */ -->
2020-01-28 22:57:20 +01:00
window.config = {
2021-10-21 09:37:43 +02:00
appVer: '{{ AppVer }} ',
appSubUrl: '{{ AppSubUrl }} ',
assetUrlPrefix: '{{ AssetUrlPrefix }} ',
runModeIsProd: {{ .RunModeIsProd }} ,
customEmojis: {{ CustomEmojis }} ,
useServiceWorker: {{ UseServiceWorker }} ,
csrfToken: '{{ .CsrfToken }} ',
pageData: {{ .PageData }} ,
requireTribute: {{ .RequireTribute }} ,
notificationSettings: {{ NotificationSettings }} , {{/*a map provided by NewFuncMap in helper.go*/}}
enableTimeTracking: {{ EnableTimetracking }} ,
2020-12-21 16:39:28 +01:00
{{ if .RequireTribute }}
2020-08-06 01:18:21 +02:00
tributeValues: Array.from(new Map([
{{ range .Participants }}
['{{ .Name }} ', {key: '{{ .Name }} {{ .FullName }} ', value: '{{ .Name }} ',
Avatar refactor, move avatar code from `models` to `models.avatars`, remove duplicated code (#17123)
Why this refactor
The goal is to move most files from `models` package to `models.xxx` package. Many models depend on avatar model, so just move this first.
And the existing logic is not clear, there are too many function like `AvatarLink`, `RelAvatarLink`, `SizedRelAvatarLink`, `SizedAvatarLink`, `MakeFinalAvatarURL`, `HashedAvatarLink`, etc. This refactor make everything clear:
* user.AvatarLink()
* user.AvatarLinkWithSize(size)
* avatars.GenerateEmailAvatarFastLink(email, size)
* avatars.GenerateEmailAvatarFinalLink(email, size)
And many duplicated code are deleted in route handler, the handler and the model share the same avatar logic now.
2021-10-06 01:25:46 +02:00
name: '{{ .Name }} ', fullname: '{{ .FullName }} ', avatar: '{{ .AvatarLink }} '}],
2020-08-06 01:18:21 +02:00
{{ end }}
2020-04-28 20:05:39 +02:00
{{ range .Assignees }}
2020-08-06 01:18:21 +02:00
['{{ .Name }} ', {key: '{{ .Name }} {{ .FullName }} ', value: '{{ .Name }} ',
Avatar refactor, move avatar code from `models` to `models.avatars`, remove duplicated code (#17123)
Why this refactor
The goal is to move most files from `models` package to `models.xxx` package. Many models depend on avatar model, so just move this first.
And the existing logic is not clear, there are too many function like `AvatarLink`, `RelAvatarLink`, `SizedRelAvatarLink`, `SizedAvatarLink`, `MakeFinalAvatarURL`, `HashedAvatarLink`, etc. This refactor make everything clear:
* user.AvatarLink()
* user.AvatarLinkWithSize(size)
* avatars.GenerateEmailAvatarFastLink(email, size)
* avatars.GenerateEmailAvatarFinalLink(email, size)
And many duplicated code are deleted in route handler, the handler and the model share the same avatar logic now.
2021-10-06 01:25:46 +02:00
name: '{{ .Name }} ', fullname: '{{ .FullName }} ', avatar: '{{ .AvatarLink }} '}],
2020-04-28 20:05:39 +02:00
{{ end }}
2020-12-21 16:39:28 +01:00
{{ range .MentionableTeams }}
2021-04-11 05:46:37 +02:00
['{{ $.MentionableTeamsOrg }} /{{ .Name }} ', {key: '{{ $.MentionableTeamsOrg }} /{{ .Name }} ', value: '{{ $.MentionableTeamsOrg }} /{{ .Name }} ',
2020-12-22 22:28:03 +01:00
name: '{{ $.MentionableTeamsOrg }} /{{ .Name }} ', avatar: '{{ $.MentionableTeamsOrgAvatar }} '}],
2020-12-21 16:39:28 +01:00
{{ end }}
2020-08-06 01:18:21 +02:00
]).values()),
2020-04-28 20:05:39 +02:00
{{ end }}
2021-10-21 09:37:43 +02:00
mermaidMaxSourceCharacters: {{ MermaidMaxSourceCharacters }} ,
2022-01-10 10:32:37 +01:00
{{/* this global i18n object should only contain general texts. for specialized texts, it should be provided inside the related modules by: (1) API response (2) HTML data-attribute (3) PageData */}}
2021-11-16 09:16:05 +01:00
i18n: {
copy_success: '{{ .i18n.Tr "copy_success" }} ',
copy_error: '{{ .i18n.Tr "copy_error" }} ',
2021-12-28 14:28:27 +01:00
error_occurred: '{{ .i18n.Tr "error.occurred" }} ',
network_error: '{{ .i18n.Tr "error.network_error" }} ',
},
2020-01-28 22:57:20 +01:00
};
2021-12-01 08:50:01 +01:00
{{/* in case some pages don't render the pageData, we make sure it is an object to prevent null access */}}
window.config.pageData = window.config.pageData || {};
2020-01-28 22:57:20 +01:00
< / script >
2021-05-08 16:27:25 +02:00
< link rel = "icon" href = " {{ AssetUrlPrefix }} /img/logo.svg" type = "image/svg+xml" >
< link rel = "alternate icon" href = " {{ AssetUrlPrefix }} /img/favicon.png" type = "image/png" >
< link rel = "stylesheet" href = " {{ AssetUrlPrefix }} /css/index.css?v= {{ MD5 AppVer }} " >
2017-09-19 01:03:01 +02:00
< noscript >
< style >
.dropdown:hover > .menu { display: block; }
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; }
< / style >
< / noscript >
2017-02-11 13:57:33 +01:00
{{ if .PageIsUserProfile }}
2022-03-25 19:15:13 +01:00
< meta property = "og:title" content = " {{ .Owner.DisplayName }} " />
2017-02-11 13:57:33 +01:00
< meta property = "og:type" content = "profile" / >
< meta property = "og:image" content = " {{ .Owner.AvatarLink }} " />
< meta property = "og:url" content = " {{ .Owner.HTMLURL }} " />
2019-10-23 19:54:13 +02:00
{{ if .Owner.Description }}
< meta property = "og:description" content = " {{ .Owner.Description }} " >
{{ end }}
2017-02-11 13:57:33 +01:00
{{ else if .Repository }}
2019-10-23 19:54:13 +02:00
{{ if .Issue }}
< meta property = "og:title" content = " {{ .Issue.Title }} " />
< meta property = "og:url" content = " {{ .Issue.HTMLURL }} " />
{{ if .Issue.Content }}
< meta property = "og:description" content = " {{ .Issue.Content }} " />
{{ end }}
{{ else }}
< meta property = "og:title" content = " {{ .Repository.Name }} " />
< meta property = "og:url" content = " {{ .Repository.HTMLURL }} " />
{{ if .Repository.Description }}
< meta property = "og:description" content = " {{ .Repository.Description }} " />
{{ end }}
{{ end }}
2017-02-11 13:57:33 +01:00
< meta property = "og:type" content = "object" / >
2020-08-24 21:46:56 +02:00
{{ if .Repository.AvatarLink }}
< meta property = "og:image" content = " {{ .Repository.AvatarLink }} " />
{{ else }}
< meta property = "og:image" content = " {{ .Repository.Owner.AvatarLink }} " />
{{ end }}
2017-02-11 13:57:33 +01:00
{{ else }}
< meta property = "og:title" content = " {{ AppName }} " >
< meta property = "og:type" content = "website" / >
2021-05-08 16:27:25 +02:00
< meta property = "og:image" content = " {{ AssetUrlPrefix }} /img/logo.png" />
2017-02-11 13:57:33 +01:00
< meta property = "og:url" content = " {{ AppUrl }} " />
2017-04-01 03:03:01 +02:00
< meta property = "og:description" content = " {{ MetaDescription }} " >
2017-02-11 13:57:33 +01:00
{{ end }}
2019-10-23 19:54:13 +02:00
< meta property = "og:site_name" content = " {{ AppName }} " />
2019-01-09 18:22:57 +01:00
{{ if .IsSigned }}
{{ if ne .SignedUser.Theme "gitea" }}
2021-11-16 19:18:25 +01:00
< link rel = "stylesheet" href = " {{ AssetUrlPrefix }} /css/theme- {{ .SignedUser.Theme | PathEscape }} .css?v= {{ MD5 AppVer }} " >
2019-01-09 18:22:57 +01:00
{{ end }}
{{ else if ne DefaultTheme "gitea" }}
2021-11-16 19:18:25 +01:00
< link rel = "stylesheet" href = " {{ AssetUrlPrefix }} /css/theme- {{ DefaultTheme | PathEscape }} .css?v= {{ MD5 AppVer }} " >
2018-07-05 23:25:04 +02:00
{{ end }}
2017-12-03 01:26:06 +01:00
{{ template "custom/header" . }}
2015-03-07 21:12:13 +01:00
< / head >
< body >
2018-01-02 11:32:41 +01:00
{{ template "custom/body_outer_pre" . }}
2015-03-07 21:12:13 +01:00
< div class = "full height" >
2017-09-19 01:03:01 +02:00
< noscript > {{ .i18n.Tr "enable_javascript" }} </ noscript >
2015-08-10 16:38:21 +02:00
2018-01-02 11:32:41 +01:00
{{ template "custom/body_inner_pre" . }}
2015-07-07 19:09:03 +02:00
{{ if not .PageIsInstall }}
2017-12-31 01:47:52 +01:00
< div class = "ui top secondary stackable main menu following bar light" >
2018-09-07 04:59:06 +02:00
{{ template "base/head_navbar" . }}
2015-12-07 23:30:52 +01:00
< / div > <!-- end bar -->
2015-07-07 19:09:03 +02:00
{{ end }}
2021-10-12 20:11:35 +02:00
{{ if false }}
{{/* to make html structure "likely" complete to prevent IDE warnings */}}
2015-12-07 23:30:52 +01:00
< / div >
< / body >
< / html >
2021-10-12 20:11:35 +02:00
{{ end }}