@@ -5,23 +5,21 @@ | |||||
.repository .repo-header { | .repository .repo-header { | ||||
padding: 0.5rem 0; | padding: 0.5rem 0; | ||||
} | |||||
.repository .header-grid > * { | |||||
padding-top: 1rem; | |||||
padding-bottom: 0.5rem; | |||||
} | |||||
.repository .header-grid { | |||||
justify-content: flex-start; | |||||
align-items: flex-end; | align-items: flex-end; | ||||
align-items: last baseline; | align-items: last baseline; | ||||
} | } | ||||
.repository .mega-octicon { | |||||
margin-right: 0.5rem; | |||||
.repository .repo-header > * { | |||||
padding: 1rem 1rem 0.5rem 1rem; | |||||
} | } | ||||
.repository .header-grid .fork-flag { | |||||
.repository .repo-header .fork-flag { | |||||
margin-left: 0; | margin-left: 0; | ||||
} | } | ||||
.svg[class*=octicon] { | |||||
vertical-align: baseline; | |||||
} | |||||
/* These rules are copied here to pull them out of their nesting. */ | /* These rules are copied here to pull them out of their nesting. */ | ||||
.repo-description { | .repo-description { | ||||
display: flex; | display: flex; | ||||
@@ -81,3 +79,7 @@ details:not([open]) > summary.ui.top.attached.header { | |||||
.ui.left.attached.button { | .ui.left.attached.button { | ||||
margin-right: 1px; | margin-right: 1px; | ||||
} | } | ||||
.ui.labeled.button > .label { | |||||
padding: .78571429em 1.5em .78571429em; /* same padding as the button */ | |||||
} |
@@ -10,41 +10,30 @@ | |||||
{{template "custom/body_outer_post" .}} | {{template "custom/body_outer_post" .}} | ||||
<script src="{{AppSubUrl}}/vendor/plugins/jquery/jquery.min.js"></script> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/jquery.areyousure/jquery.are-you-sure.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/js/jquery.js?v={{MD5 AppVer}}"></script> | |||||
{{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
<script src="{{AppSubUrl}}/vendor/plugins/simplemde/simplemde.min.js"></script> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/codemirror/mode/meta.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/addon/mode/loadmode.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/meta.js"></script> | |||||
<script> | <script> | ||||
CodeMirror.modeURL = "{{AppSubUrl}}/vendor/plugins/codemirror/mode/%N/%N.js"; | |||||
CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js"; | |||||
</script> | </script> | ||||
{{end}} | {{end}} | ||||
{{if .RequireGitGraph}} | |||||
<!-- graph --> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/gitgraph/gitgraph.js"></script> | |||||
<script src="{{AppSubUrl}}/js/draw.js"></script> | |||||
{{end}} | |||||
<!-- Third-party libraries --> | <!-- Third-party libraries --> | ||||
{{if .RequireHighlightJS}} | |||||
<script src="{{AppSubUrl}}/vendor/plugins/highlight/highlight.pack.js"></script> | |||||
{{end}} | |||||
{{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
<script src="{{AppSubUrl}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script> | |||||
{{end}} | |||||
{{if .RequireDatetimepicker}} | |||||
<script src="{{AppSubUrl}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.js"></script> | |||||
{{end}} | |||||
{{if .RequireDropzone}} | |||||
<script src="{{AppSubUrl}}/vendor/plugins/dropzone/dropzone.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.min.js"></script> | |||||
{{end}} | {{end}} | ||||
{{if .RequireU2F}} | {{if .RequireU2F}} | ||||
<script src="{{AppSubUrl}}/vendor/plugins/u2f/index.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/u2f/index.js"></script> | |||||
{{end}} | |||||
{{if .EnableCaptcha}} | |||||
{{if eq .CaptchaType "recaptcha"}} | |||||
<script src='{{ URLJoin .RecaptchaURL "api.js"}}' async></script> | |||||
{{end}} | |||||
{{end}} | {{end}} | ||||
{{if .RequireTribute}} | {{if .RequireTribute}} | ||||
<script src="{{AppSubUrl}}/vendor/plugins/tribute/tribute.min.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js"></script> | |||||
<script> | <script> | ||||
var issuesTribute = new Tribute({ | var issuesTribute = new Tribute({ | ||||
values: [ | values: [ | ||||
@@ -56,14 +45,19 @@ | |||||
noMatchTemplate: function () { return null }, | noMatchTemplate: function () { return null }, | ||||
menuItemTemplate: function (item) { | menuItemTemplate: function (item) { | ||||
var user = item.original; | var user = item.original; | ||||
var itemStr = '<img src="' + user.avatar + '"/><span class="name">' + user.name + '</span>'; | |||||
var item = $('<div/>') | |||||
item.append($('<img/>', {'src': user.avatar})) | |||||
item.append($('<span/>', {'class': 'name'}).text(user.name)) | |||||
if (user.fullname && user.fullname != '') { | if (user.fullname && user.fullname != '') { | ||||
itemStr += '<span class="fullname">' + user.fullname + '</span>'; | |||||
item.append($('<span/>', {'class': 'fullname'}).text(user.fullname)) | |||||
} | } | ||||
return itemStr; | |||||
return item.html(); | |||||
} | } | ||||
}) | |||||
issuesTribute.attach(document.getElementById('content')) | |||||
}); | |||||
var content = document.getElementById('content'); | |||||
if (content != null) { | |||||
issuesTribute.attach(content); | |||||
} | |||||
</script> | </script> | ||||
<script> | <script> | ||||
var emojiTribute = new Tribute({ | var emojiTribute = new Tribute({ | ||||
@@ -87,31 +81,27 @@ | |||||
return item; | return item; | ||||
}, | }, | ||||
selectTemplate: function (item) { | selectTemplate: function (item) { | ||||
if (typeof item === 'undefinied') return null; | |||||
if (typeof item === 'undefined') return null; | |||||
return ':' + item.original + ':'; | return ':' + item.original + ':'; | ||||
}, | }, | ||||
menuItemTemplate: function (item) { | menuItemTemplate: function (item) { | ||||
return '<img class="emoji" src="{{AppSubUrl}}/vendor/plugins/emojify/images/' + item.original + '.png"/>' + item.original; | |||||
return '<img class="emoji" src="{{StaticUrlPrefix}}/vendor/plugins/emojify/images/' + item.original + '.png"/>' + item.original; | |||||
} | } | ||||
}] | }] | ||||
}); | }); | ||||
emojiTribute.attach(document.getElementById('content')) | |||||
</script> | |||||
{{end}} | |||||
<script src="{{AppSubUrl}}/vendor/plugins/emojify/emojify.min.js"></script> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/clipboard/clipboard.min.js"></script> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/vue/vue.min.js"></script> | |||||
<!-- JavaScript --> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/semantic/semantic.min.js"></script> | |||||
<script src="{{AppSubUrl}}/js/index.js?v={{MD5 AppVer}}"></script> | |||||
{{if .EnableHeatmap}} | |||||
<script src="{{AppSubUrl}}/vendor/plugins/moment/moment.min.js" charset="utf-8"></script> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/vue-calendar-heatmap/vue-calendar-heatmap.browser.js" charset="utf-8"></script> | |||||
<script type="text/javascript"> | |||||
initHeatmap('user-heatmap', '{{.HeatmapUser}}'); | |||||
var emojiInputs = document.querySelectorAll('.emoji-input'); | |||||
if (emojiInputs.length > 0) { | |||||
emojiTribute.attach(emojiInputs); | |||||
} | |||||
var content = document.getElementById('content'); | |||||
if (content != null) { | |||||
emojiTribute.attach(document.getElementById('content')); | |||||
} | |||||
</script> | </script> | ||||
{{end}} | {{end}} | ||||
<script src="{{StaticUrlPrefix}}/vendor/plugins/emojify/emojify.custom.js"></script> | |||||
<script src="{{StaticUrlPrefix}}/fomantic/semantic.min.js?v={{MD5 AppVer}}"></script> | |||||
<script src="{{StaticUrlPrefix}}/js/index.js?v={{MD5 AppVer}}"></script> | |||||
{{template "custom/footer" .}} | {{template "custom/footer" .}} | ||||
</body> | </body> | ||||
</html> | </html> |
@@ -1,31 +1,40 @@ | |||||
<!DOCTYPE html> | <!DOCTYPE html> | ||||
<html> | |||||
<html lang="{{.Language}}"> | |||||
<head data-suburl="{{AppSubUrl}}"> | <head data-suburl="{{AppSubUrl}}"> | ||||
<meta charset="utf-8"> | <meta charset="utf-8"> | ||||
<meta name="viewport" content="width=device-width, initial-scale=1"> | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
<meta http-equiv="x-ua-compatible" content="ie=edge"> | <meta http-equiv="x-ua-compatible" content="ie=edge"> | ||||
<title>{{if .Title}}{{.Title}} - {{end}}{{AppName}}</title> | |||||
<link rel="manifest" href="{{AppSubUrl}}/manifest.json"> | |||||
<title>{{if .Repository.Name}}{{.Repository.Name}}{{else}}{{if .Title}}{{.Title}} — {{end}}{{AppName}}{{end}}</title> | |||||
<link rel="manifest" href="{{AppSubUrl}}/manifest.json" crossorigin="use-credentials"> | |||||
{{if UseServiceWorker}} | |||||
<script> | |||||
if ('serviceWorker' in navigator) { | |||||
navigator.serviceWorker.register('{{AppSubUrl}}/serviceworker.js').then(function(registration) { | |||||
// Registration was successful | |||||
console.info('ServiceWorker registration successful with scope: ', registration.scope); | |||||
}, function(err) { | |||||
// registration failed :( | |||||
console.info('ServiceWorker registration failed: ', err); | |||||
}); | |||||
} | |||||
</script> | |||||
{{else}} | |||||
<script> | <script> | ||||
if ('serviceWorker' in navigator) { | if ('serviceWorker' in navigator) { | ||||
window.addEventListener('load', function() { | |||||
navigator.serviceWorker.register('{{AppSubUrl}}/serviceworker.js').then(function(registration) { | |||||
// Registration was successful | |||||
console.log('ServiceWorker registration successful with scope: ', registration.scope); | |||||
}, function(err) { | |||||
// registration failed :( | |||||
console.log('ServiceWorker registration failed: ', err); | |||||
}); | |||||
}); | |||||
navigator.serviceWorker.getRegistrations().then(function(registrations) { | |||||
registrations.forEach(function(registration) { | |||||
registration.unregister(); | |||||
console.info('ServiceWorker unregistered'); | |||||
}); | |||||
}); | |||||
} | } | ||||
</script> | </script> | ||||
{{end}} | |||||
<meta name="theme-color" content="{{ThemeColorMetaTag}}"> | <meta name="theme-color" content="{{ThemeColorMetaTag}}"> | ||||
<meta name="author" content="{{if .Repository}}{{.Owner.Name}}{{else}}{{end}}" /> | <meta name="author" content="{{if .Repository}}{{.Owner.Name}}{{else}}{{end}}" /> | ||||
<meta name="description" content="{{if .Repository}}{{.Repository.Name}}{{if .Repository.Description}} - {{.Repository.Description}}{{end}}{{else}}{{end}}" /> | <meta name="description" content="{{if .Repository}}{{.Repository.Name}}{{if .Repository.Description}} - {{.Repository.Description}}{{end}}{{else}}{{end}}" /> | ||||
<meta name="referrer" content="no-referrer" /> | <meta name="referrer" content="no-referrer" /> | ||||
<meta name="_csrf" content="{{.CsrfToken}}" /> | <meta name="_csrf" content="{{.CsrfToken}}" /> | ||||
<meta name="_suburl" content="{{AppSubUrl}}" /> | |||||
{{if .IsSigned}} | {{if .IsSigned}} | ||||
<meta name="_uid" content="{{.SignedUser.ID}}" /> | <meta name="_uid" content="{{.SignedUser.ID}}" /> | ||||
{{end}} | {{end}} | ||||
@@ -39,7 +48,6 @@ | |||||
<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}"> | <meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}"> | ||||
<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}"> | <meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}"> | ||||
{{end}} | {{end}} | ||||
<script> | <script> | ||||
{{SafeJS `/* | {{SafeJS `/* | ||||
@licstart The following is the entire license notice for the | @licstart The following is the entire license notice for the | ||||
@@ -67,35 +75,41 @@ | |||||
THE SOFTWARE. | THE SOFTWARE. | ||||
--- | --- | ||||
Licensing information for additional javascript libraries can be found at: | Licensing information for additional javascript libraries can be found at: | ||||
{{AppSubUrl}}/vendor/librejs.html | |||||
{{StaticUrlPrefix}}/vendor/librejs.html | |||||
@licend The above is the entire license notice | @licend The above is the entire license notice | ||||
for the JavaScript code in this page. | for the JavaScript code in this page. | ||||
*/`}} | */`}} | ||||
</script> | </script> | ||||
<link rel="shortcut icon" href="{{AppSubUrl}}/img/favicon.png" /> | |||||
<link rel="mask-icon" href="{{AppSubUrl}}/img/gitea-safari.svg" color="#609926"> | |||||
<link rel="preload" href="{{AppSubUrl}}/vendor/assets/font-awesome/css/font-awesome.min.css" as="style" onload="this.rel='stylesheet'"> | |||||
<noscript><link rel="stylesheet" href="{{AppSubUrl}}/vendor/assets/font-awesome/css/font-awesome.min.css"></noscript> | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/assets/octicons/octicons.min.css"> | |||||
<script> | |||||
window.config = { | |||||
AppSubUrl: '{{AppSubUrl}}', | |||||
StaticUrlPrefix: '{{StaticUrlPrefix}}', | |||||
csrf: '{{.CsrfToken}}', | |||||
HighlightJS: {{if .RequireHighlightJS}}true{{else}}false{{end}}, | |||||
Minicolors: {{if .RequireMinicolors}}true{{else}}false{{end}}, | |||||
SimpleMDE: {{if .RequireSimpleMDE}}true{{else}}false{{end}}, | |||||
Tribute: {{if .RequireTribute}}true{{else}}false{{end}}, | |||||
U2F: {{if .RequireU2F}}true{{else}}false{{end}}, | |||||
Heatmap: {{if .EnableHeatmap}}true{{else}}false{{end}}, | |||||
heatmapUser: {{if .HeatmapUser}}'{{.HeatmapUser}}'{{else}}null{{end}}, | |||||
}; | |||||
</script> | |||||
<link rel="shortcut icon" href="{{StaticUrlPrefix}}/img/favicon.png" /> | |||||
<link rel="mask-icon" href="{{StaticUrlPrefix}}/img/gitea-safari.svg" color="#609926"> | |||||
<link rel="fluid-icon" href="{{StaticUrlPrefix}}/img/gitea-lg.png" title="{{AppName}}"> | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/assets/font-awesome/css/font-awesome.min.css"> | |||||
<link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/icons.woff2" type="font/woff2" crossorigin="anonymous"> | |||||
<link rel="preload" as="font" href="{{StaticUrlPrefix}}/fomantic/themes/default/assets/fonts/outline-icons.woff2" type="font/woff2" crossorigin="anonymous"> | |||||
{{if .RequireSimpleMDE}} | {{if .RequireSimpleMDE}} | ||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/simplemde/simplemde.min.css"> | <link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/simplemde/simplemde.min.css"> | ||||
{{end}} | {{end}} | ||||
{{if .RequireGitGraph}} | |||||
<!-- graph --> | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/gitgraph/gitgraph.css"> | |||||
{{end}} | |||||
{{if .RequireTribute}} | {{if .RequireTribute}} | ||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/tribute/tribute.css"> | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||||
{{end}} | {{end}} | ||||
<!-- Stylesheet --> | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/semantic/semantic.min.css"> | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/css/index.css?v={{MD5 AppVer}}"> | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | |||||
<link rel="stylesheet" href="/custom-style.css"> | <link rel="stylesheet" href="/custom-style.css"> | ||||
<noscript> | <noscript> | ||||
<style> | <style> | ||||
@@ -103,44 +117,48 @@ | |||||
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; } | .ui.secondary.menu .dropdown.item > .menu { margin-top: 0; } | ||||
</style> | </style> | ||||
</noscript> | </noscript> | ||||
{{if .RequireHighlightJS}} | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/highlight/github.css"> | |||||
{{end}} | |||||
{{if .RequireMinicolors}} | {{if .RequireMinicolors}} | ||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||||
{{end}} | |||||
{{if .RequireDatetimepicker}} | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/jquery.datetimepicker/jquery.datetimepicker.css"> | |||||
{{end}} | |||||
{{if .RequireDropzone}} | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/dropzone/dropzone.css"> | |||||
{{end}} | |||||
{{if .EnableHeatmap}} | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/vue-calendar-heatmap/vue-calendar-heatmap.css"> | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||||
{{end}} | {{end}} | ||||
<style class="list-search-style"></style> | <style class="list-search-style"></style> | ||||
<script src="{{AppSubUrl}}/vendor/plugins/cssrelpreload/loadCSS.min.js"></script> | |||||
<script src="{{AppSubUrl}}/vendor/plugins/cssrelpreload/cssrelpreload.min.js"></script> | |||||
{{if .PageIsUserProfile}} | {{if .PageIsUserProfile}} | ||||
<meta property="og:title" content="{{.Owner.Name}}" /> | <meta property="og:title" content="{{.Owner.Name}}" /> | ||||
<meta property="og:type" content="profile" /> | <meta property="og:type" content="profile" /> | ||||
<meta property="og:image" content="{{.Owner.AvatarLink}}" /> | <meta property="og:image" content="{{.Owner.AvatarLink}}" /> | ||||
<meta property="og:url" content="{{.Owner.HTMLURL}}" /> | <meta property="og:url" content="{{.Owner.HTMLURL}}" /> | ||||
<meta property="og:site_name" content="{{AppName}}" /> | |||||
{{if .Owner.Description}} | |||||
<meta property="og:description" content="{{.Owner.Description}}"> | |||||
{{end}} | |||||
{{else if .Repository}} | {{else if .Repository}} | ||||
<meta property="og:title" content="{{.Repository.Name}}" /> | |||||
{{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}} | |||||
<meta property="og:type" content="object" /> | <meta property="og:type" content="object" /> | ||||
<meta property="og:image" content="{{.Repository.Owner.AvatarLink}}" /> | <meta property="og:image" content="{{.Repository.Owner.AvatarLink}}" /> | ||||
<meta property="og:url" content="{{.Repository.HTMLURL}}" /> | |||||
{{if .Repository.Description}} | |||||
<meta property="og:description" content="{{.Repository.Description}}" /> | |||||
{{end}} | |||||
<meta property="og:site_name" content="{{AppName}}" /> | |||||
{{else}} | |||||
<meta property="og:title" content="{{AppName}}"> | |||||
<meta property="og:type" content="website" /> | |||||
<meta property="og:image" content="{{StaticUrlPrefix}}/img/gitea-lg.png" /> | |||||
<meta property="og:url" content="{{AppUrl}}" /> | |||||
<meta property="og:description" content="{{MetaDescription}}"> | |||||
{{end}} | {{end}} | ||||
{{if ne DefaultTheme "gitea"}} | |||||
<link rel="stylesheet" href="{{AppSubUrl}}/css/theme-{{DefaultTheme}}.css"> | |||||
<meta property="og:site_name" content="{{AppName}}" /> | |||||
{{if .IsSigned }} | |||||
{{ if ne .SignedUser.Theme "gitea" }} | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{.SignedUser.Theme}}.css?v={{MD5 AppVer}}"> | |||||
{{end}} | |||||
{{else if ne DefaultTheme "gitea"}} | |||||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/theme-{{DefaultTheme}}.css?v={{MD5 AppVer}}"> | |||||
{{end}} | {{end}} | ||||
{{template "custom/header" .}} | {{template "custom/header" .}} | ||||
</head> | </head> | ||||
@@ -2,17 +2,29 @@ | |||||
{{range .Repos}} | {{range .Repos}} | ||||
<div class="item"> | <div class="item"> | ||||
<div class="ui header"> | <div class="ui header"> | ||||
<a class="name" href="{{.Link}}">{{if or $.PageIsExplore $.PageIsProfileStarList }}{{if .Owner}}{{.Owner.Name}} / {{end}}{{end}}{{.Name}}</a> | |||||
{{if .RelAvatarLink}} | |||||
<img class="ui avatar image" src="{{.RelAvatarLink}}"/> | |||||
{{end}} | |||||
<a class="name" href="{{.Link}}"> | |||||
{{if or $.PageIsExplore $.PageIsProfileStarList }}{{if .Owner}}{{.Owner.Name}} / {{end}}{{end}}{{.Name}} | |||||
{{if .IsArchived}}<i class="archive icon archived-icon"></i>{{end}} | |||||
</a> | |||||
{{if .IsPrivate}} | {{if .IsPrivate}} | ||||
<span class="text gold"><i class="octicon octicon-lock"></i></span> | |||||
<span class="middle text gold">{{svg "octicon-lock" 16}}</span> | |||||
{{else if .IsFork}} | {{else if .IsFork}} | ||||
<span><i class="octicon octicon-repo-forked"></i></span> | |||||
<span class="middle">{{svg "octicon-repo-forked" 16}}</span> | |||||
{{else if .IsMirror}} | {{else if .IsMirror}} | ||||
<span><i class="octicon octicon-repo-clone"></i></span> | |||||
<span class="middle">{{svg "octicon-repo-clone" 16}}</span> | |||||
{{else if .Owner}} | |||||
{{if .Owner.Visibility.IsPrivate}} | |||||
<span class="text gold">{{svg "octicon-lock" 16}}</span> | |||||
{{end}} | |||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
{{if .DescriptionHTML}}<p class="has-emoji">{{.DescriptionHTML}}</p>{{end}} | |||||
<p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSinceUnix .UpdatedUnix $.i18n.Lang}}</p> | |||||
<div class="description"> | |||||
{{if .DescriptionHTML}}<p class="has-emoji">{{.DescriptionHTML}}</p>{{end}} | |||||
<p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSinceUnix .UpdatedUnix $.i18n.Lang}}</p> | |||||
</div> | |||||
</div> | </div> | ||||
{{else}} | {{else}} | ||||
<div> | <div> | ||||
@@ -12,7 +12,26 @@ | |||||
<table class="ui very basic striped fixed table single line"> | <table class="ui very basic striped fixed table single line"> | ||||
<tbody> | <tbody> | ||||
<tr> | <tr> | ||||
<td>{{.DefaultBranch}}</td> | |||||
<td> | |||||
{{range .Branches}} | |||||
{{if eq .Name $.DefaultBranch}} | |||||
{{if .IsProtected}} | |||||
{{svg "octicon-shield-lock" 16}} | |||||
{{end}} | |||||
<a href="{{$.RepoLink}}/src/branch/{{$.DefaultBranch | EscapePound}}">{{$.DefaultBranch}}</a> | |||||
<p class="info">{{svg "octicon-git-commit" 16}}<a href="{{$.RepoLink}}/commit/{{.Commit.ID.String}}">{{ShortSha .Commit.ID.String}}</a> · <span class="commit-message">{{RenderCommitMessage .Commit.CommitMessage $.RepoLink $.Repository.ComposeMetas}}</span> · {{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Commit.Committer.When $.i18n.Lang}}</p> | |||||
{{end}} | |||||
{{end}} | |||||
</td> | |||||
<td class="right aligned overflow-visible"> | |||||
<div class="ui basic jump dropdown icon button poping up" data-content="{{$.i18n.Tr "repo.branch.download" ($.DefaultBranch)}}" data-variation="tiny inverted" data-position="top right"> | |||||
<i class="download icon"></i> | |||||
<div class="menu"> | |||||
<a class="item" href="{{$.RepoLink}}/archive/{{EscapePound $.DefaultBranch}}.zip">{{svg "octicon-file-zip" 16}} ZIP</a> | |||||
<a class="item" href="{{$.RepoLink}}/archive/{{EscapePound $.DefaultBranch}}.tar.gz">{{svg "octicon-file-zip" 16}} TAR.GZ</a> | |||||
</div> | |||||
</div> | |||||
</td> | |||||
</tr> | </tr> | ||||
</tbody> | </tbody> | ||||
</table> | </table> | ||||
@@ -24,38 +43,82 @@ | |||||
</h4> | </h4> | ||||
<div class="ui attached table segment"> | <div class="ui attached table segment"> | ||||
<table class="ui very basic striped fixed table single line"> | <table class="ui very basic striped fixed table single line"> | ||||
<thead> | |||||
<tr> | |||||
<th class="nine wide">{{.i18n.Tr "repo.branch.name"}}</th> | |||||
{{if and $.IsWriter (not $.IsMirror)}} | |||||
<th class="one wide right aligned">{{.i18n.Tr "repo.branch.delete_head"}}</th> | |||||
{{end}} | |||||
</tr> | |||||
</thead> | |||||
<tbody> | <tbody> | ||||
{{range $branch := .Branches}} | |||||
{{range .Branches}} | |||||
{{if ne .Name $.DefaultBranch}} | {{if ne .Name $.DefaultBranch}} | ||||
<tr> | <tr> | ||||
<td> | |||||
<td class="six wide"> | |||||
{{if .IsDeleted}} | {{if .IsDeleted}} | ||||
<s><a href="{{$.RepoLink}}/src/branch/{{.Name}}">{{.Name}}</a></s> | |||||
<p class="time">{{$.i18n.Tr "repo.branch.deleted_by" .DeletedBranch.DeletedBy.Name}} {{TimeSinceUnix .DeletedBranch.DeletedUnix $.i18n.Lang}}</p> | |||||
<s><a href="{{$.RepoLink}}/src/branch/{{.Name | EscapePound}}">{{.Name}}</a></s> | |||||
<p class="info">{{$.i18n.Tr "repo.branch.deleted_by" .DeletedBranch.DeletedBy.Name}} {{TimeSinceUnix .DeletedBranch.DeletedUnix $.i18n.Lang}}</p> | |||||
{{else}} | {{else}} | ||||
<a href="{{$.RepoLink}}/src/branch/{{.Name}}">{{.Name}}</a> | |||||
<p class="time">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Commit.Committer.When $.i18n.Lang}}</p> | |||||
</td> | |||||
{{end}} | |||||
{{if and $.IsWriter (not $.IsMirror)}} | |||||
<td class="right aligned"> | |||||
{{if .IsProtected}} | {{if .IsProtected}} | ||||
<i class="octicon octicon-shield"></i> | |||||
{{else if .IsDeleted}} | |||||
<a class="undo-button" href data-url="{{$.Link}}/restore?branch_id={{.DeletedBranch.ID | urlquery}}&name={{.DeletedBranch.Name | urlquery}}"><i class="octicon octicon-reply"></i></a> | |||||
{{else}} | |||||
<a class="delete-branch-button" href data-url="{{$.Link}}/delete?name={{.Name | urlquery}}" data-val="{{.Name}}"><i class="trash icon text red"></i></a> | |||||
{{svg "octicon-shield-lock" 16}} | |||||
{{end}} | {{end}} | ||||
</td> | |||||
<a href="{{$.RepoLink}}/src/branch/{{.Name | EscapePound}}">{{.Name}}</a> | |||||
<p class="info">{{svg "octicon-git-commit" 16}}<a href="{{$.RepoLink}}/commit/{{.Commit.ID.String}}">{{ShortSha .Commit.ID.String}}</a> · <span class="commit-message">{{RenderCommitMessage .Commit.CommitMessage $.RepoLink $.Repository.ComposeMetas}}</span> · {{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Commit.Committer.When $.i18n.Lang}}</p> | |||||
{{end}} | {{end}} | ||||
</td> | |||||
<td class="three wide ui"> | |||||
{{if not .IsDeleted}} | |||||
<div class="commit-divergence"> | |||||
<div class="bar-group"> | |||||
<div class="count count-behind">{{.CommitsBehind}}</div> | |||||
<div class="bar bar-behind" style="width: {{percentage .CommitsBehind .CommitsBehind .CommitsAhead}}%"></div> | |||||
</div> | |||||
<div class="bar-group"> | |||||
<div class="count count-ahead">{{.CommitsAhead}}</div> | |||||
<div class="bar bar-ahead" style="width: {{percentage .CommitsAhead .CommitsBehind .CommitsAhead}}%"></div> | |||||
</div> | |||||
</div> | |||||
{{end}} | |||||
</td> | |||||
<td class="three wide right aligned"> | |||||
{{if not .LatestPullRequest}} | |||||
{{if .IsIncluded}} | |||||
<a class="ui poping up orange small label" data-content="{{$.i18n.Tr "repo.branch.included_desc"}}" data-variation="tiny inverted" data-position="top right"> | |||||
{{svg "octicon-git-pull-request" 16}} {{$.i18n.Tr "repo.branch.included"}} | |||||
</a> | |||||
{{else if and (not .IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} | |||||
<a href="{{$.RepoLink}}/compare/{{$.DefaultBranch | EscapePound}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{$.Owner.Name}}:{{end}}{{.Name | EscapePound}}"> | |||||
<button id="new-pull-request" class="ui compact basic button">{{$.i18n.Tr "repo.pulls.compare_changes"}}</button> | |||||
</a> | |||||
{{end}} | |||||
{{else if and .LatestPullRequest.HasMerged .MergeMovedOn}} | |||||
{{if and (not .IsDeleted) $.AllowsPulls (gt .CommitsAhead 0)}} | |||||
<a href="{{$.RepoLink}}/compare/{{$.DefaultBranch | EscapePound}}...{{if ne $.Repository.Owner.Name $.Owner.Name}}{{$.Owner.Name}}:{{end}}{{.Name | EscapePound}}"> | |||||
<button id="new-pull-request" class="ui compact basic button">{{$.i18n.Tr "repo.pulls.compare_changes"}}</button> | |||||
</a> | |||||
{{end}} | |||||
{{else}} | |||||
<a href="{{.LatestPullRequest.Issue.HTMLURL}}">{{if not .LatestPullRequest.IsSameRepo}}{{.LatestPullRequest.BaseRepo.FullName}}{{end}}#{{.LatestPullRequest.Issue.Index}}</a> | |||||
{{if .LatestPullRequest.HasMerged}} | |||||
<a href="{{.LatestPullRequest.Issue.HTMLURL}}" class="ui text-label purple mini label">{{svg "octicon-git-merge" 16}} {{$.i18n.Tr "repo.pulls.merged"}}</a> | |||||
{{else if .LatestPullRequest.Issue.IsClosed}} | |||||
<a href="{{.LatestPullRequest.Issue.HTMLURL}}" class="ui text-label red mini label">{{svg "octicon-issue-closed" 16}} {{$.i18n.Tr "repo.issues.closed_title"}}</a> | |||||
{{else}} | |||||
<a href="{{.LatestPullRequest.Issue.HTMLURL}}" class="ui text-label green mini label">{{svg "octicon-issue-opened" 16}} {{$.i18n.Tr "repo.issues.open_title"}}</a> | |||||
{{end}} | |||||
{{end}} | |||||
</td> | |||||
<td class="two wide right aligned overflow-visible"> | |||||
{{if (not .IsDeleted)}} | |||||
<div class="ui basic jump dropdown icon button poping up" data-content="{{$.i18n.Tr "repo.branch.download" (.Name)}}" data-variation="tiny inverted" data-position="top right"> | |||||
<i class="download icon"></i> | |||||
<div class="menu"> | |||||
<a class="item" href="{{$.RepoLink}}/archive/{{EscapePound .Name}}.zip">{{svg "octicon-file-zip" 16}} ZIP</a> | |||||
<a class="item" href="{{$.RepoLink}}/archive/{{EscapePound .Name}}.tar.gz">{{svg "octicon-file-zip" 16}} TAR.GZ</a> | |||||
</div> | |||||
</div> | |||||
{{end}} | |||||
{{if and $.IsWriter (not $.IsMirror) (not $.Repository.IsArchived) (not .IsProtected)}} | |||||
{{if .IsDeleted}} | |||||
<a class="ui basic jump button icon poping up undo-button" href data-url="{{$.Link}}/restore?branch_id={{.DeletedBranch.ID | urlquery}}&name={{.DeletedBranch.Name | urlquery}}" data-content="{{$.i18n.Tr "repo.branch.restore" (.Name)}}" data-variation="tiny inverted" data-position="top right"><span class="text blue">{{svg "octicon-reply" 16}}</span></a> | |||||
{{else}} | |||||
<a class="ui basic jump button icon poping up delete-branch-button" href data-url="{{$.Link}}/delete?name={{.Name | urlquery}}" data-content="{{$.i18n.Tr "repo.branch.delete" (.Name)}}" data-variation="tiny inverted" data-position="top right" data-name="{{.Name}}"><i class="trash icon text red"></i></a> | |||||
{{end}} | |||||
{{end}} | |||||
</td> | |||||
</tr> | </tr> | ||||
{{end}} | {{end}} | ||||
{{end}} | {{end}} | ||||
@@ -69,7 +132,7 @@ | |||||
<div class="ui small basic delete modal"> | <div class="ui small basic delete modal"> | ||||
<div class="ui icon header"> | <div class="ui icon header"> | ||||
<i class="trash icon"></i> | <i class="trash icon"></i> | ||||
{{.i18n.Tr "repo.branch.delete_html"}} <span class="branch-name"></span> | |||||
{{.i18n.Tr "repo.branch.delete_html"}} <span class="name"></span> | |||||
</div> | </div> | ||||
<div class="content"> | <div class="content"> | ||||
<p>{{.i18n.Tr "repo.branch.delete_desc" | Str2html}}</p> | <p>{{.i18n.Tr "repo.branch.delete_desc" | Str2html}}</p> | ||||
@@ -2,7 +2,7 @@ | |||||
{{if and .PullRequestCtx.Allowed .IsViewBranch}} | {{if and .PullRequestCtx.Allowed .IsViewBranch}} | ||||
<div class=""> | <div class=""> | ||||
<a href="{{.BaseRepo.Link}}/compare/{{.BaseRepo.DefaultBranch | EscapePound}}...{{.Repository.Owner.Name}}:{{.BranchName | EscapePound}}"> | <a href="{{.BaseRepo.Link}}/compare/{{.BaseRepo.DefaultBranch | EscapePound}}...{{.Repository.Owner.Name}}:{{.BranchName | EscapePound}}"> | ||||
<button class="ui green tiny compact button"><i class="octicon octicon-git-compare"></i></button> | |||||
<button class="ui green tiny compact button">{{svg "octicon-git-compare" 16}}</button> | |||||
</a> | </a> | ||||
</div> | </div> | ||||
{{end}} | {{end}} | ||||
@@ -14,7 +14,7 @@ | |||||
<div class="ui basic {{if $showCommitCount}}labeled button{{else}}buttons{{end}}"> | <div class="ui basic {{if $showCommitCount}}labeled button{{else}}buttons{{end}}"> | ||||
<div class="ui basic button" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible"> | <div class="ui basic button" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible"> | ||||
<span class="text"> | <span class="text"> | ||||
<i class="octicon octicon-git-branch"></i> | |||||
{{svg "octicon-git-branch" 16}} | |||||
{{if .IsViewBranch}}{{.i18n.Tr "repo.branch"}}{{else}}{{.i18n.Tr "repo.tree"}}{{end}}: | {{if .IsViewBranch}}{{.i18n.Tr "repo.branch"}}{{else}}{{.i18n.Tr "repo.tree"}}{{end}}: | ||||
<strong>{{if .IsViewBranch}}{{.BranchName}}{{else}}{{ShortSha .BranchName}}{{end}}</strong> | <strong>{{if .IsViewBranch}}{{.BranchName}}{{else}}{{ShortSha .BranchName}}{{end}}</strong> | ||||
</span> | </span> | ||||
@@ -22,8 +22,8 @@ | |||||
</div> | </div> | ||||
{{if $showCommitCount}} | {{if $showCommitCount}} | ||||
<div class="ui basic label"> | <div class="ui basic label"> | ||||
<a href="{{.RepoLink}}/commits{{if .IsViewBranch}}/branch{{else if .IsViewTag}}/tag{{else if .IsViewCommit}}/commit{{end}}/{{EscapePound .BranchName}}"><i class="octicon octicon-history"></i> <b>{{.CommitsCount}}</b> {{.i18n.Tr (TrN .i18n.Lang .CommitsCount "repo.commit" "repo.commits") }}</a> | |||||
</div> | |||||
<a href="{{.RepoLink}}/commits{{if .IsViewBranch}}/branch{{else if .IsViewTag}}/tag{{else if .IsViewCommit}}/commit{{end}}/{{EscapePound .BranchName}}">{{svg "octicon-history" 16}} <b>{{.CommitsCount}}</b> {{.i18n.Tr (TrN .i18n.Lang .CommitsCount "repo.commit" "repo.commits") }}</a> | |||||
</div> | |||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
<div class="data" style="display: none" data-mode="{{if .IsViewTag}}tags{{else}}branches{{end}}"> | <div class="data" style="display: none" data-mode="{{if .IsViewTag}}tags{{else}}branches{{end}}"> | ||||
@@ -44,7 +44,7 @@ | |||||
<div class="two column row"> | <div class="two column row"> | ||||
<a class="reference column" href="#" @click="mode = 'branches'; focusSearchField()"> | <a class="reference column" href="#" @click="mode = 'branches'; focusSearchField()"> | ||||
<span class="text" :class="{black: mode == 'branches'}"> | <span class="text" :class="{black: mode == 'branches'}"> | ||||
<i class="octicon octicon-git-branch"></i> {{.i18n.Tr "repo.branches"}} | |||||
{{svg "octicon-git-branch" 16}} {{.i18n.Tr "repo.branches"}} | |||||
</span> | </span> | ||||
</a> | </a> | ||||
<a class="reference column" href="#" @click="mode = 'tags'; focusSearchField()"> | <a class="reference column" href="#" @click="mode = 'tags'; focusSearchField()"> | ||||
@@ -60,7 +60,7 @@ | |||||
<div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length"> | <div class="item" v-if="showCreateNewBranch" :class="{active: active == filteredItems.length}" :ref="'listItem' + filteredItems.length"> | ||||
<a href="#" @click="createNewBranch()"> | <a href="#" @click="createNewBranch()"> | ||||
<div> | <div> | ||||
<i class="octicon octicon-git-branch"></i> | |||||
{{svg "octicon-git-branch" 16}} | |||||
{{.i18n.Tr "repo.branch.create_branch" `${ searchTerm }` | Safe}} | {{.i18n.Tr "repo.branch.create_branch" `${ searchTerm }` | Safe}} | ||||
</div> | </div> | ||||
<div class="text small"> | <div class="text small"> | ||||
@@ -8,7 +8,7 @@ | |||||
<div class="fitted item"> | <div class="fitted item"> | ||||
<a href="{{.RepoLink}}/graph" class="ui basic small compact button"> | <a href="{{.RepoLink}}/graph" class="ui basic small compact button"> | ||||
<span class="text"> | <span class="text"> | ||||
<i class="octicon octicon-git-branch"></i> | |||||
{{svg "octicon-git-branch" 16}} | |||||
</span> | </span> | ||||
{{.i18n.Tr "repo.commit_graph"}} | {{.i18n.Tr "repo.commit_graph"}} | ||||
</a> | </a> | ||||
@@ -1,76 +1,116 @@ | |||||
<div class="header-wrapper"> | <div class="header-wrapper"> | ||||
{{with .Repository}} | {{with .Repository}} | ||||
<div class="ui container repo-header"> | |||||
<div class="ui stackable grid header-grid"> | |||||
<i class="mega-octicon octicon-{{if .IsPrivate}}lock{{else if .IsMirror}}repo-clone{{else if .IsFork}}repo-forked{{else}}repo{{end}}"></i> | |||||
<div class="ui huge breadcrumb"> | |||||
{{if .IsMirror}}<div class="fork-flag">{{$.i18n.Tr "repo.mirror_from"}} <a target="_blank" rel="noopener noreferrer" href="{{$.Mirror.Address}}">{{$.Mirror.Address}}</a></div>{{end}} | |||||
{{if .IsFork}}<div class="fork-flag">{{$.i18n.Tr "repo.forked_from"}} <a href="{{.BaseRepo.Link}}">{{SubStr .BaseRepo.RelLink 1 -1}}</a></div>{{end}} | |||||
<a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a> | |||||
<div class="divider"> / </div> | |||||
<a href="{{$.RepoLink}}">{{.Name}}</a> | |||||
</div> | |||||
<div class="ui repo-description"> | |||||
<div id="repo-desc"> | |||||
{{if .DescriptionHTML}}<span class="description has-emoji">{{.DescriptionHTML}}</span>{{end}} | |||||
<a class="link" href="{{.Website}}">{{.Website}}</a> | |||||
</div> | |||||
<div class="ui container"> | |||||
<div class="repo-header"> | |||||
<div class="ui huge breadcrumb repo-title"> | |||||
<!-- customised: first mirror/fork info, then the repo name --> | |||||
{{if .IsMirror}}<div class="fork-flag">{{$.i18n.Tr "repo.mirror_from"}} <a target="_blank" rel="noopener noreferrer" href="{{if .SanitizedOriginalURL}}{{.SanitizedOriginalURL}}{{else}}{{MirrorAddress $.Mirror}}{{end}}">{{if .SanitizedOriginalURL}}{{.SanitizedOriginalURL}}{{else}}{{MirrorAddress $.Mirror}}{{end}}</a></div>{{end}} | |||||
{{if .IsFork}}<div class="fork-flag">{{$.i18n.Tr "repo.forked_from"}} <a href="{{.BaseRepo.Link}}">{{SubStr .BaseRepo.RelLink 1 -1}}</a></div>{{end}} | |||||
{{if .IsGenerated}}<div class="fork-flag">{{$.i18n.Tr "repo.generated_from"}} <a href="{{.TemplateRepo.Link}}">{{SubStr .TemplateRepo.RelLink 1 -1}}</a></div>{{end}} | |||||
{{if .RelAvatarLink}} | |||||
<img class="ui avatar image" src="{{.RelAvatarLink}}"/> | |||||
{{else if .IsTemplate}} | |||||
{{if .IsPrivate}} | |||||
{{svg "octicon-repo-template-private" 32}} | |||||
{{else}} | |||||
{{svg "octicon-repo-template" 32}} | |||||
{{end}} | |||||
{{else}} | |||||
{{if .IsPrivate}} | |||||
{{svg "octicon-lock" 32}} | |||||
{{else if .IsMirror}} | |||||
{{svg "octicon-repo-clone" 32}} | |||||
{{else if .IsFork}} | |||||
{{svg "octicon-repo-forked" 32}} | |||||
{{else}} | |||||
{{svg "octicon-repo" 32}} | |||||
{{end}} | |||||
{{end}} | |||||
<a href="{{AppSubUrl}}/{{.Owner.Name}}">{{.Owner.Name}}</a> | |||||
<div class="divider"> / </div> | |||||
<a href="{{$.RepoLink}}">{{.Name}}</a> | |||||
{{if .RelAvatarLink}} | |||||
{{if .IsTemplate}} | |||||
{{if .IsPrivate}} | |||||
{{svg "octicon-repo-template-private" 32}} | |||||
{{else}} | |||||
{{svg "octicon-repo-template" 32}} | |||||
{{end}} | |||||
{{else}} | |||||
{{if .IsPrivate}} | |||||
{{svg "octicon-lock" 32}} | |||||
{{else if .IsMirror}} | |||||
{{svg "octicon-repo-clone" 32}} | |||||
{{else if .IsFork}} | |||||
{{svg "octicon-repo-forked" 32}} | |||||
{{else}} | |||||
{{svg "octicon-repo" 32}} | |||||
{{end}} | |||||
{{end}} | |||||
{{end}} | |||||
{{if .IsArchived}}<i class="archive icon archived-icon"></i>{{end}} | |||||
</div> | |||||
<div class="ui repo-description"> | |||||
<div id="repo-desc"> | |||||
{{if .DescriptionHTML}}<span class="description has-emoji">{{.DescriptionHTML}}</span>{{end}} | |||||
<a class="link" href="{{.Website}}">{{.Website}}</a> | |||||
</div> | </div> | ||||
</div> | |||||
</div><!-- end grid --> | </div><!-- end grid --> | ||||
</div><!-- end container --> | </div><!-- end container --> | ||||
{{end}} | {{end}} | ||||
{{if not .IsDiffCompare}} | |||||
<div class="ui tabs container"> | <div class="ui tabs container"> | ||||
<div class="ui tabular stackable menu navbar"> | |||||
{{if .Permission.CanRead $.UnitTypeCode}} | |||||
<a class="{{if .PageIsViewCode}}active{{end}} item" href="{{.RepoLink}}{{if (ne .BranchName .Repository.DefaultBranch)}}/src/{{.BranchNameSubURL | EscapePound}}{{end}}"> | |||||
<i class="octicon octicon-code"></i> {{.i18n.Tr "repo.code"}} | |||||
</a> | |||||
{{end}} | |||||
{{if .Permission.CanRead $.UnitTypeIssues}} | |||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues" rel="noopener noreferrer"> | |||||
<i class="octicon octicon-issue-opened"></i> {{.i18n.Tr "repo.issues"}} <span class="ui small label">{{.Repository.NumOpenIssues}}</span> | |||||
{{if not .Repository.IsBeingCreated}} | |||||
<div class="ui tabular stackable menu navbar"> | |||||
{{if .Permission.CanRead $.UnitTypeCode}} | |||||
<a class="{{if .PageIsViewCode}}active{{end}} item" href="{{.RepoLink}}{{if (ne .BranchName .Repository.DefaultBranch)}}/src/{{.BranchNameSubURL | EscapePound}}{{end}}"> | |||||
{{svg "octicon-code" 16}} {{.i18n.Tr "repo.code"}} | |||||
</a> | </a> | ||||
{{end}} | |||||
{{end}} | |||||
{{if .Permission.CanRead $.UnitTypeExternalTracker}} | |||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues" target="_blank"> | |||||
<i class="octicon octicon-issue-opened"></i> {{.i18n.Tr "repo.issues"}} </span> | |||||
</a> | |||||
{{end}} | |||||
{{if .Permission.CanRead $.UnitTypeIssues}} | |||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoLink}}/issues" rel="noopener noreferrer"> | |||||
{{svg "octicon-issue-opened" 16}} {{.i18n.Tr "repo.issues"}} <span class="ui small label">{{.Repository.NumOpenIssues}}</span> | |||||
</a> | |||||
{{end}} | |||||
{{if and .Repository.CanEnablePulls (.Permission.CanRead $.UnitTypePullRequests)}} | |||||
<a class="{{if .PageIsPullList}}active{{end}} item" href="{{.RepoLink}}/pulls"> | |||||
<i class="octicon octicon-git-pull-request"></i> {{.i18n.Tr "repo.pulls"}} <span class="ui small label">{{.Repository.NumOpenPulls}}</span> | |||||
</a> | |||||
{{end}} | |||||
{{if .Permission.CanRead $.UnitTypeExternalTracker}} | |||||
<a class="{{if .PageIsIssueList}}active{{end}} item" href="{{.RepoExternalIssuesLink}}" target="_blank"> | |||||
{{svg "octicon-issue-opened" 16}} {{.i18n.Tr "repo.issues"}} </span> | |||||
</a> | |||||
{{end}} | |||||
{{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsBareRepo) }} | |||||
<a class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases"> | |||||
<i class="octicon octicon-tag"></i> {{.i18n.Tr "repo.releases"}} <span class="ui small label">{{.Repository.NumReleases}}</span> | |||||
</a> | |||||
{{end}} | |||||
{{if and .Repository.CanEnablePulls (.Permission.CanRead $.UnitTypePullRequests)}} | |||||
<a class="{{if .PageIsPullList}}active{{end}} item" href="{{.RepoLink}}/pulls"> | |||||
{{svg "octicon-git-pull-request" 16}} {{.i18n.Tr "repo.pulls"}} <span class="ui small label">{{.Repository.NumOpenPulls}}</span> | |||||
</a> | |||||
{{end}} | |||||
{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsBareRepo)}} | |||||
<a class="{{if .PageIsActivity}}active{{end}} item" href="{{.RepoLink}}/activity"> | |||||
<i class="octicon octicon-pulse"></i> {{.i18n.Tr "repo.activity"}} | |||||
{{if and (.Permission.CanRead $.UnitTypeReleases) (not .IsEmptyRepo) }} | |||||
<a class="{{if .PageIsReleaseList}}active{{end}} item" href="{{.RepoLink}}/releases"> | |||||
{{svg "octicon-tag" 16}} {{.i18n.Tr "repo.releases"}} <span class="ui small label">{{.NumReleases}}</span> | |||||
</a> | </a> | ||||
{{end}} | |||||
{{template "custom/extra_tabs" .}} | |||||
{{end}} | |||||
{{if .Permission.IsAdmin}} | |||||
<div class="right menu"> | |||||
<a class="{{if .PageIsSettings}}active{{end}} item" href="{{.RepoLink}}/settings"> | |||||
<i class="octicon octicon-tools"></i> {{.i18n.Tr "repo.settings"}} | |||||
{{if and (.Permission.CanReadAny $.UnitTypePullRequests $.UnitTypeIssues $.UnitTypeReleases) (not .IsEmptyRepo)}} | |||||
<a class="{{if .PageIsActivity}}active{{end}} item" href="{{.RepoLink}}/activity"> | |||||
{{svg "octicon-pulse" 16}} {{.i18n.Tr "repo.activity"}} | |||||
</a> | </a> | ||||
</div> | |||||
{{end}} | |||||
</div> | |||||
{{end}} | |||||
{{template "custom/extra_tabs" .}} | |||||
{{if .Permission.IsAdmin}} | |||||
<div class="right menu"> | |||||
<a class="{{if .PageIsSettings}}active{{end}} item" href="{{.RepoLink}}/settings"> | |||||
{{svg "octicon-tools" 16}} {{.i18n.Tr "repo.settings"}} | |||||
</a> | |||||
</div> | |||||
{{end}} | |||||
</div> | |||||
{{end}} | |||||
</div> | </div> | ||||
<div class="ui tabs divider"></div> | <div class="ui tabs divider"></div> | ||||
{{else}} | |||||
<div class="ui divider"></div> | |||||
{{end}} | |||||
</div> | </div> |
@@ -69,6 +69,8 @@ | |||||
</div> | </div> | ||||
{{if .IsViewFile}} | {{if .IsViewFile}} | ||||
{{template "repo/view_file" .}} | {{template "repo/view_file" .}} | ||||
{{else if .IsBlame}} | |||||
{{template "repo/blame" .}} | |||||
{{else}} | {{else}} | ||||
{{template "repo/view_list" .}} | {{template "repo/view_list" .}} | ||||
{{end}} | {{end}} | ||||
@@ -1,50 +1,72 @@ | |||||
<div class="{{TabSizeClass .Editorconfig .FileName}} non-diff-file-content"> | <div class="{{TabSizeClass .Editorconfig .FileName}} non-diff-file-content"> | ||||
<h4 class="ui top attached header" id="{{if .ReadmeExist}}repo-readme{{else}}repo-read-file{{end}}"> | |||||
<div class="ui stackable grid"> | |||||
<div class="ten wide column"> | |||||
{{ $l := Subtract (len .TreeNames) 1}} | |||||
<span class="ui breadcrumb repo-path"><a class="section" href="{{.RepoLink}}/src/{{EscapePound .BranchNameSubURL}}">{{EllipsisString .Repository.Name 30}}</a>{{range $i, $v := .TreeNames}}<span class="divider">/</span>{{if ne $i $l}}{{ $p := index $.Paths $i}}<span class="section"><a href="{{EscapePound $.BranchLink}}/{{EscapePound $p}}">{{EllipsisString $v 30}}</a></span>{{end}}{{end}}</span> | |||||
{{if .ReadmeExist}} | |||||
<i class="book icon ui left"></i> | |||||
{{if .ReadmeInList}} | |||||
<strong>{{.FileName}}</strong> | |||||
{{else}} | |||||
<strong>{{.FileName}}</strong> <span class="text grey normal">{{FileSize .FileSize}}{{if .IsLFSFile}} ({{.i18n.Tr "repo.stored_lfs"}}){{end}}</span> | |||||
{{end}} | |||||
<h4 class="file-header ui top attached header"> | |||||
<div class="file-header-left"> | |||||
{{if .ReadmeInList}} | |||||
{{if .FileIsSymlink}} | |||||
<i class="icons"><i class="book icon"></i><i class="bottom left corner tiny inverted share icon"></i></i> | |||||
{{else}} | {{else}} | ||||
<i class="file text outline icon ui left"></i> | |||||
<strong>{{.FileName}}</strong> <span class="text grey normal">{{FileSize .FileSize}}{{if .IsLFSFile}} ({{.i18n.Tr "repo.stored_lfs"}}){{end}}</span> | |||||
<i class="book icon"></i> | |||||
{{end}} | {{end}} | ||||
</div> | |||||
<div class="six wide right aligned column"> | |||||
{{if not .ReadmeInList}} | |||||
<div class="ui right file-actions"> | |||||
<div class="ui buttons"> | |||||
{{if not .IsViewCommit}} | |||||
<a class="ui button" href="{{.RepoLink}}/src/commit/{{.CommitID}}/{{EscapePound .TreePath}}">{{.i18n.Tr "repo.file_permalink"}}</a> | |||||
{{end}} | |||||
<a class="ui button" href="{{.RepoLink}}/commits/{{EscapePound .BranchNameSubURL}}/{{EscapePound .TreePath}}">{{.i18n.Tr "repo.file_history"}}</a> | |||||
<a class="ui button" href="{{EscapePound $.RawFileLink}}">{{.i18n.Tr "repo.file_raw"}}</a> | |||||
<strong>{{.FileName}}</strong> | |||||
{{else}} | |||||
{{ $l := Subtract (len .TreeNames) 1}} | |||||
<span class="ui breadcrumb repo-path"><a class="section" href="{{.RepoLink}}/src/{{EscapePound .BranchNameSubURL}}">{{EllipsisString .Repository.Name 30}}</a>{{range $i, $v := .TreeNames}}<span class="divider">/</span>{{if ne $i $l}}{{ $p := index $.Paths $i}}<span class="section"><a href="{{EscapePound $.BranchLink}}/{{EscapePound $p}}">{{EllipsisString $v 30}}</a></span>{{end}}{{end}} <strong>{{.FileName}}</strong></span> | |||||
<div class="file-info text grey normal mono"> | |||||
{{if .FileIsSymlink}} | |||||
<div class="file-info-entry"> | |||||
{{.i18n.Tr "repo.symbolic_link"}} | |||||
</div> | </div> | ||||
{{if .Repository.CanEnableEditor}} | |||||
{{if .CanEditFile}} | |||||
<a href="{{.RepoLink}}/_edit/{{EscapePound .BranchName}}/{{EscapePound .TreePath}}"><i class="octicon octicon-pencil btn-octicon poping up" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted"></i></a> | |||||
{{else}} | |||||
<i class="octicon octicon-pencil btn-octicon poping up disabled" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted"></i> | |||||
{{end}} | |||||
{{if .CanDeleteFile}} | |||||
<a href="{{.RepoLink}}/_delete/{{EscapePound .BranchName}}/{{EscapePound .TreePath}}"><i class="octicon octicon-trashcan btn-octicon btn-octicon-danger poping up" data-content="{{.DeleteFileTooltip}}" data-position="bottom center" data-variation="tiny inverted"></i></a> | |||||
{{else}} | |||||
<i class="octicon octicon-trashcan btn-octicon poping up disabled" data-content="{{.DeleteFileTooltip}}" data-position="bottom center" data-variation="tiny inverted"></i> | |||||
{{end}} | |||||
{{end}} | |||||
</div> | |||||
{{end}} | |||||
{{if .NumLinesSet}} | |||||
<div class="file-info-entry"> | |||||
{{.NumLines}} {{.i18n.Tr (TrN .i18n.Lang .NumLines "repo.line" "repo.lines") }} | |||||
</div> | |||||
{{end}} | |||||
{{if .FileSize}} | |||||
<div class="file-info-entry"> | |||||
{{FileSize .FileSize}}{{if .IsLFSFile}} ({{.i18n.Tr "repo.stored_lfs"}}){{end}} | |||||
</div> | |||||
{{end}} | |||||
{{if .LFSLock}} | |||||
<div class="file-info-entry"> | |||||
<i class="fa fa-lock poping up disabled" data-content="{{.LFSLockHint}}" data-position="bottom center" data-variation="tiny inverted"></i> | |||||
<a href="{{AppSubUrl}}/{{.LFSLock.Owner.Name}}">{{.LFSLockOwner}}</a> | |||||
</div> | |||||
{{end}} | |||||
</div> | |||||
{{end}} | |||||
</div> | |||||
{{if not .ReadmeInList}} | |||||
<div class="file-header-right"> | |||||
<div class="ui right file-actions"> | |||||
<div class="ui buttons"> | |||||
<a class="ui button" href="{{EscapePound $.RawFileLink}}">{{.i18n.Tr "repo.file_raw"}}</a> | |||||
{{if not .IsViewCommit}} | |||||
<a class="ui button" href="{{.RepoLink}}/src/commit/{{.CommitID}}/{{EscapePound .TreePath}}">{{.i18n.Tr "repo.file_permalink"}}</a> | |||||
{{end}} | |||||
{{if .IsTextFile}} | |||||
<a class="ui button" href="{{.RepoLink}}/blame/{{EscapePound .BranchNameSubURL}}/{{EscapePound .TreePath}}">{{.i18n.Tr "repo.blame"}}</a> | |||||
{{end}} | |||||
<a class="ui button" href="{{.RepoLink}}/commits/{{EscapePound .BranchNameSubURL}}/{{EscapePound .TreePath}}">{{.i18n.Tr "repo.file_history"}}</a> | |||||
</div> | |||||
{{if .Repository.CanEnableEditor}} | |||||
{{if .CanEditFile}} | |||||
<a href="{{.RepoLink}}/_edit/{{EscapePound .BranchName}}/{{EscapePound .TreePath}}"><span class="btn-octicon poping up" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-pencil" 16}}</span></a> | |||||
{{else}} | |||||
<span class="btn-octicon poping up disabled" data-content="{{.EditFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-pencil" 16}}</span> | |||||
{{end}} | |||||
{{if .CanDeleteFile}} | |||||
<a href="{{.RepoLink}}/_delete/{{EscapePound .BranchName}}/{{EscapePound .TreePath}}"><span class="btn-octicon btn-octicon-danger poping up" data-content="{{.DeleteFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-trashcan" 16}}</span></a> | |||||
{{else}} | |||||
<span class="btn-octicon poping up disabled" data-content="{{.DeleteFileTooltip}}" data-position="bottom center" data-variation="tiny inverted">{{svg "octicon-trashcan" 16}}</span> | |||||
{{end}} | |||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
</div> | </div> | ||||
{{end}} | |||||
</h4> | </h4> | ||||
<div class="ui attached table unstackable segment"> | <div class="ui attached table unstackable segment"> | ||||
<div class="file-view {{if .IsMarkup}}markdown{{else if .IsRenderedHTML}}plain-text{{else if .IsTextFile}}code-view{{end}} has-emoji"> | |||||
<div class="file-view {{if .IsMarkup}}{{.MarkupType}} markdown{{else if .IsRenderedHTML}}plain-text{{else if .IsTextFile}}code-view{{end}} has-emoji"> | |||||
{{if .IsMarkup}} | {{if .IsMarkup}} | ||||
{{if .FileContent}}{{.FileContent | Safe}}{{end}} | {{if .FileContent}}{{.FileContent | Safe}}{{end}} | ||||
{{else if .IsRenderedHTML}} | {{else if .IsRenderedHTML}} | ||||
@@ -62,7 +84,7 @@ | |||||
<strong>{{.i18n.Tr "repo.audio_not_supported_in_browser"}}</strong> | <strong>{{.i18n.Tr "repo.audio_not_supported_in_browser"}}</strong> | ||||
</audio> | </audio> | ||||
{{else if .IsPDFFile}} | {{else if .IsPDFFile}} | ||||
<iframe width="100%" height="600px" src="{{AppSubUrl}}/vendor/plugins/pdfjs/web/viewer.html?file={{EscapePound $.RawFileLink}}"></iframe> | |||||
<iframe width="100%" height="600px" src="{{StaticUrlPrefix}}/vendor/plugins/pdfjs/web/viewer.html?file={{EscapePound $.RawFileLink}}"></iframe> | |||||
{{else}} | {{else}} | ||||
<a href="{{EscapePound $.RawFileLink}}" rel="nofollow" class="btn btn-gray btn-radius">{{.i18n.Tr "repo.file_view_raw"}}</a> | <a href="{{EscapePound $.RawFileLink}}" rel="nofollow" class="btn btn-gray btn-radius">{{.i18n.Tr "repo.file_view_raw"}}</a> | ||||
{{end}} | {{end}} | ||||
@@ -17,9 +17,10 @@ | |||||
<div class="ui right sub header"> | <div class="ui right sub header"> | ||||
Latest commit: | Latest commit: | ||||
{{template "repo/commit_status" .LatestCommitStatus}} | |||||
<a rel="nofollow" href="{{.RepoLink}}/commit/{{.LatestCommit.ID}}"> | <a rel="nofollow" href="{{.RepoLink}}/commit/{{.LatestCommit.ID}}"> | ||||
<span class="grey has-emoji"> | |||||
{{RenderCommitMessage .LatestCommit.Summary .RepoLink $.Repository.ComposeMetas}} | |||||
{{ $commitLink:= printf "%s/commit/%s" .RepoLink .LatestCommit.ID }} | |||||
<span class="grey has-emoji commit-summary" title="{{.LatestCommit.Summary}}"><span class="message-wrapper">{{RenderCommitMessageLinkSubject .LatestCommit.Message $.RepoLink $commitLink $.Repository.ComposeMetas}}</span> | |||||
{{if IsMultilineCommitMessage .LatestCommit.Message}} | {{if IsMultilineCommitMessage .LatestCommit.Message}} | ||||
<button class="basic compact mini ui icon button commit-button"><i class="ellipsis horizontal icon"></i></button> | <button class="basic compact mini ui icon button commit-button"><i class="ellipsis horizontal icon"></i></button> | ||||
<pre class="commit-body" style="display: none;">{{RenderCommitBody .LatestCommit.Message $.RepoLink $.Repository.ComposeMetas}}</pre> | <pre class="commit-body" style="display: none;">{{RenderCommitBody .LatestCommit.Message $.RepoLink $.Repository.ComposeMetas}}</pre> | ||||
@@ -33,11 +34,11 @@ | |||||
</div> | </div> | ||||
</h4> | </h4> | ||||
</summary> | </summary> | ||||
<table id="repo-files-table" class="ui fixed single line attached table"> | |||||
<table id="repo-files-table" class="ui single line attached table"> | |||||
<tbody> | <tbody> | ||||
{{if .HasParentPath}} | {{if .HasParentPath}} | ||||
<tr class="has-parent"> | <tr class="has-parent"> | ||||
<td colspan="2"><a href="{{EscapePound .BranchLink}}{{.ParentPath}}"><i class="octicon octicon-mail-reply"></i> ..</a></td> | |||||
<td colspan="2"><a href="{{EscapePound .BranchLink}}{{.ParentPath}}">{{svg "octicon-mail-reply" 16}} ..</a></td> | |||||
</tr> | </tr> | ||||
{{end}} | {{end}} | ||||
{{range $item := .Files}} | {{range $item := .Files}} | ||||
@@ -46,34 +47,38 @@ | |||||
<tr> | <tr> | ||||
{{if $entry.IsSubModule}} | {{if $entry.IsSubModule}} | ||||
<td> | <td> | ||||
<span class="octicon octicon-file-submodule"></span> | |||||
{{$refURL := $commit.RefURL AppUrl $.BranchLink}} | |||||
{{if $refURL}} | |||||
<a href="{{$refURL}}">{{$entry.Name}}</a> @ <a href="{{$refURL}}/commit/{{$commit.RefID}}">{{ShortSha $commit.RefID}}</a> | |||||
{{else}} | |||||
{{$entry.Name}} @ {{ShortSha $commit.RefID}} | |||||
{{end}} | |||||
<span class="truncate"> | |||||
{{svg "octicon-file-submodule" 16}} | |||||
{{$refURL := $commit.RefURL AppUrl $.BranchLink}} | |||||
{{if $refURL}} | |||||
<a href="{{$refURL}}">{{$entry.Name}}</a> @ <a href="{{$refURL}}/commit/{{$commit.RefID}}">{{ShortSha $commit.RefID}}</a> | |||||
{{else}} | |||||
{{$entry.Name}} @ {{ShortSha $commit.RefID}} | |||||
{{end}} | |||||
</span> | |||||
</td> | </td> | ||||
{{else}} | {{else}} | ||||
<td class="name"> | <td class="name"> | ||||
{{if $entry.IsDir}} | |||||
{{$subJumpablePathName := $entry.GetSubJumpablePathName}} | |||||
{{$subJumpablePath := SubJumpablePath $subJumpablePathName}} | |||||
<span class="octicon octicon-file-directory"></span> | |||||
<a href="{{EscapePound $.TreeLink}}/{{EscapePound $subJumpablePathName}}"> | |||||
{{if eq (len $subJumpablePath) 2}} | |||||
<span class="jumpable-path">{{index $subJumpablePath 0}}</span>{{index $subJumpablePath 1}} | |||||
{{else}} | |||||
{{index $subJumpablePath 0}} | |||||
{{end}} | |||||
</a> | |||||
{{else}} | |||||
<span class="octicon octicon-{{EntryIcon $entry}}"></span> | |||||
<a href="{{EscapePound $.TreeLink}}/{{EscapePound $entry.Name}}">{{$entry.Name}}</a> | |||||
{{end}} | |||||
<span class="truncate"> | |||||
{{if $entry.IsDir}} | |||||
{{$subJumpablePathName := $entry.GetSubJumpablePathName}} | |||||
{{$subJumpablePath := SubJumpablePath $subJumpablePathName}} | |||||
{{svg "octicon-file-directory" 16}} | |||||
<a href="{{EscapePound $.TreeLink}}/{{EscapePound $subJumpablePathName}}" title="{{$subJumpablePathName}}"> | |||||
{{if eq (len $subJumpablePath) 2}} | |||||
<span class="jumpable-path">{{index $subJumpablePath 0}}</span>{{index $subJumpablePath 1}} | |||||
{{else}} | |||||
{{index $subJumpablePath 0}} | |||||
{{end}} | |||||
</a> | |||||
{{else}} | |||||
{{svg (printf "octicon-%s" (EntryIcon $entry)) 16}} | |||||
<a href="{{EscapePound $.TreeLink}}/{{EscapePound $entry.Name}}">{{$entry.Name}}</a> | |||||
{{end}} | |||||
</span> | |||||
</td> | </td> | ||||
{{end}} | {{end}} | ||||
<td class="text grey right age">{{TimeSince $commit.Committer.When $.Lang}}</td> | |||||
<td class="text right age">{{TimeSince $commit.Committer.When $.Lang}}</td> | |||||
</tr> | </tr> | ||||
{{end}} | {{end}} | ||||
</tbody> | </tbody> | ||||
@@ -14,11 +14,22 @@ | |||||
{{if and .OrderedOAuth2Names .OAuth2Providers}} | {{if and .OrderedOAuth2Names .OAuth2Providers}} | ||||
<div class="oauth center"> | <div class="oauth center"> | ||||
<div id="oauth2-login-loader" class="ui disabled centered loader"></div> | |||||
<div> | <div> | ||||
{{range $key := .OrderedOAuth2Names}} | |||||
{{$provider := index $.OAuth2Providers $key}} | |||||
<a href="{{AppSubUrl}}/user/oauth2/{{$key}}"><img style="width: 80px; height: auto; margin: 20px;" alt="{{$provider.DisplayName}}{{if eq $provider.Name "openidConnect"}} ({{$key}}){{end}}" title="{{$provider.DisplayName}}{{if eq $provider.Name "openidConnect"}} ({{$key}}){{end}}" class="{{$provider.Name}}" src="{{AppSubUrl}}{{$provider.Image}}"></a> | |||||
{{end}} | |||||
<div id="oauth2-login-navigator"> | |||||
{{range $key := .OrderedOAuth2Names}} | |||||
{{$provider := index $.OAuth2Providers $key}} | |||||
<a href="{{AppSubUrl}}/user/oauth2/{{$key}}"> | |||||
<img | |||||
style="width: 80px; height: auto; margin: 20px;" | |||||
alt="{{$provider.DisplayName}}{{if eq $provider.Name "openidConnect"}} ({{$key}}){{end}}" | |||||
title="{{$provider.DisplayName}}{{if eq $provider.Name "openidConnect"}} ({{$key}}){{end}}" | |||||
class="{{$provider.Name}}" | |||||
src="{{AppSubUrl}}{{$provider.Image}}" | |||||
onclick="window.onOAuthLoginClick()" | |||||
></a> | |||||
{{end}} | |||||
</div> | |||||
</div> | </div> | ||||
<p>Please log in with one of these identity providers.</p> | <p>Please log in with one of these identity providers.</p> | ||||
<p style="font-style: italic;">(apologies for limiting your choice of identity provider; it's a compromise for the time being. When will <a href="https://openid.net/">OpenID</a>, <a href="https://webid.info/">WebID</a>, <a href="https://en.wikipedia.org/wiki/BrowserID">BrowserID</a> or whatever vendor-neutral solution finally be adopted widely?)</p> | <p style="font-style: italic;">(apologies for limiting your choice of identity provider; it's a compromise for the time being. When will <a href="https://openid.net/">OpenID</a>, <a href="https://webid.info/">WebID</a>, <a href="https://en.wikipedia.org/wiki/BrowserID">BrowserID</a> or whatever vendor-neutral solution finally be adopted widely?)</p> | ||||
@@ -30,10 +41,12 @@ | |||||
<label for="user_name">{{.i18n.Tr "home.uname_holder"}}</label> | <label for="user_name">{{.i18n.Tr "home.uname_holder"}}</label> | ||||
<input id="user_name" name="user_name" value="{{.user_name}}" autofocus required> | <input id="user_name" name="user_name" value="{{.user_name}}" autofocus required> | ||||
</div> | </div> | ||||
{{if or (not .DisablePassword) .LinkAccountMode}} | |||||
<div class="required inline field {{if and (.Err_Password) (or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn))}}error{{end}}"> | <div class="required inline field {{if and (.Err_Password) (or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn))}}error{{end}}"> | ||||
<label for="password">{{.i18n.Tr "password"}}</label> | <label for="password">{{.i18n.Tr "password"}}</label> | ||||
<input id="password" name="password" type="password" value="{{.password}}" autocomplete="off" required> | <input id="password" name="password" type="password" value="{{.password}}" autocomplete="off" required> | ||||
</div> | </div> | ||||
{{end}} | |||||
{{if not .LinkAccountMode}} | {{if not .LinkAccountMode}} | ||||
<div class="inline field"> | <div class="inline field"> | ||||
<label></label> | <label></label> | ||||
@@ -1,126 +0,0 @@ | |||||
{{template "base/head" .}} | |||||
<div class="dashboard feeds"> | |||||
{{template "user/dashboard/navbar" .}} | |||||
<div class="ui container"> | |||||
{{template "base/alert" .}} | |||||
<div class="ui mobile reversed stackable grid"> | |||||
<div class="ten wide column"> | |||||
{{if .EnableHeatmap}} | |||||
<div id="user-heatmap" style="padding-right: 40px"> | |||||
<activity-heatmap :locale="locale" :suburl="suburl" :user="heatmapUser"> | |||||
<div slot="loading"> | |||||
<div class="ui active centered inline indeterminate text loader" id="loading-heatmap">{{.i18n.Tr "user.heatmap.loading"}}</div> | |||||
</div> | |||||
</activity-heatmap> | |||||
</div> | |||||
<div class="ui divider"></div> | |||||
{{end}} | |||||
{{template "user/dashboard/feeds" .}} | |||||
</div> | |||||
<div id="app" class="six wide column"> | |||||
<repo-search | |||||
:search-limit="searchLimit" | |||||
:suburl="suburl" | |||||
:uid="uid" | |||||
:more-repos-link="'{{.ContextUser.HomeLink}}'" | |||||
{{if not .ContextUser.IsOrganization}} | |||||
:organizations="[ | |||||
{{range .ContextUser.Orgs}} | |||||
{name: '{{.Name}}', num_repos: '{{.NumRepos}}'}, | |||||
{{end}} | |||||
]" | |||||
:is-organization="false" | |||||
:organizations-total-count="{{.ContextUser.GetOrganizationCount}}" | |||||
:can-create-organization="{{.SignedUser.CanCreateOrganization}}" | |||||
{{end}} | |||||
inline-template | |||||
v-cloak | |||||
> | |||||
<div> | |||||
<div v-if="!isOrganization" class="ui two item tabable menu"> | |||||
<a :class="{item: true, active: tab === 'repos'}" @click="changeTab('repos')">{{.i18n.Tr "repository"}}</a> | |||||
<a :class="{item: true, active: tab === 'organizations'}" @click="changeTab('organizations')">{{.i18n.Tr "organization"}}</a> | |||||
</div> | |||||
<div v-show="tab === 'repos'" class="ui tab active list dashboard-repos"> | |||||
<h4 class="ui top attached header"> | |||||
{{.i18n.Tr "home.my_repos"}} <span class="ui grey label">${reposTotalCount}</span> | |||||
<div class="ui right"> | |||||
<a class="poping up" :href="suburl + '/repo/create'" data-content="{{.i18n.Tr "new_repo"}}" data-variation="tiny inverted" data-position="left center"> | |||||
<i class="plus icon"></i> | |||||
<span class="sr-only">{{.i18n.Tr "new_repo"}}</span> | |||||
</a> | |||||
</div> | |||||
</h4> | |||||
<div class="ui attached secondary segment repos-search"> | |||||
<div class="ui fluid icon input" :class="{loading: isLoading}"> | |||||
<input @input="searchRepos(reposFilter)" v-model="searchQuery" ref="search" placeholder="{{.i18n.Tr "home.search_repos"}}"> | |||||
<i class="search icon"></i> | |||||
</div> | |||||
<div class="ui secondary tiny pointing borderless menu center aligned grid repos-filter"> | |||||
<a class="item" :class="{active: reposFilter === 'all'}" @click="changeReposFilter('all')"> | |||||
{{.i18n.Tr "all"}} | |||||
<div v-show="reposFilter === 'all'" class="ui circular mini grey label">${repoTypeCount}</div> | |||||
</a> | |||||
<a class="item" :class="{active: reposFilter === 'sources'}" @click="changeReposFilter('sources')"> | |||||
{{.i18n.Tr "sources"}} | |||||
<div v-show="reposFilter === 'sources'" class="ui circular mini grey label">${repoTypeCount}</div> | |||||
</a> | |||||
<a class="item" :class="{active: reposFilter === 'forks'}" @click="changeReposFilter('forks')"> | |||||
{{.i18n.Tr "forks"}} | |||||
<div v-show="reposFilter === 'forks'" class="ui circular mini grey label">${repoTypeCount}</div> | |||||
</a> | |||||
<a class="item" :class="{active: reposFilter === 'mirrors'}" @click="changeReposFilter('mirrors')"> | |||||
{{.i18n.Tr "mirrors"}} | |||||
<div v-show="reposFilter === 'mirrors'" class="ui circular mini grey label">${repoTypeCount}</div> | |||||
</a> | |||||
<a class="item" :class="{active: reposFilter === 'collaborative'}" @click="changeReposFilter('collaborative')"> | |||||
{{.i18n.Tr "collaborative"}} | |||||
<div v-show="reposFilter === 'collaborative'" class="ui circular mini grey label">${repoTypeCount}</div> | |||||
</a> | |||||
</div> | |||||
</div> | |||||
<div class="ui attached table segment"> | |||||
<ul class="repo-owner-name-list"> | |||||
<li v-for="repo in repos" :class="{'private': repo.private}" v-show="showRepo(repo, reposFilter)"> | |||||
<a :href="suburl + '/' + repo.full_name"> | |||||
<i :class="repoClass(repo)"></i> | |||||
<strong class="text truncate item-name">${repo.full_name}</strong> | |||||
</a> | |||||
</li> | |||||
<li v-if="showMoreReposLink"> | |||||
<a :href="moreReposLink">{{.i18n.Tr "home.show_more_repos"}}</a> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
</div> | |||||
<div v-if="!isOrganization" v-show="tab === 'organizations'" class="ui tab active list"> | |||||
<h4 class="ui top attached header"> | |||||
{{.i18n.Tr "home.my_orgs"}} <span class="ui grey label">${organizationsTotalCount}</span> | |||||
<div v-if="canCreateOrganization" class="ui right"> | |||||
<a class="poping up" :href="suburl + '/org/create'" data-content="{{.i18n.Tr "new_org"}}" data-variation="tiny inverted" data-position="left center"> | |||||
<i class="plus icon"></i> | |||||
<span class="sr-only">{{.i18n.Tr "new_org"}}</span> | |||||
</a> | |||||
</div> | |||||
</h4> | |||||
<div class="ui attached table segment"> | |||||
<ul class="repo-owner-name-list"> | |||||
<li v-for="org in organizations"> | |||||
<a :href="suburl + '/' + org.name"> | |||||
<i class="octicon octicon-organization"></i> | |||||
<strong class="text truncate item-name">${org.name}</strong> | |||||
<span class="ui right text light grey"> | |||||
${org.num_repos} <i class="octicon octicon-repo rear"></i> | |||||
</span> | |||||
</a> | |||||
</li> | |||||
</ul> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</repo-search> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
{{template "base/footer" .}} |
@@ -5,10 +5,10 @@ | |||||
<div class="ui eleven wide centered column"> | <div class="ui eleven wide centered column"> | ||||
<div class="ui secondary stackable pointing menu"> | <div class="ui secondary stackable pointing menu"> | ||||
<a class='{{if ne .TabName "activity"}}active{{end}} item' href="{{.Owner.HomeLink}}"> | <a class='{{if ne .TabName "activity"}}active{{end}} item' href="{{.Owner.HomeLink}}"> | ||||
<i class="octicon octicon-repo"></i> {{.i18n.Tr "user.repositories"}} | |||||
{{svg "octicon-repo" 16}} {{.i18n.Tr "user.repositories"}} | |||||
</a> | </a> | ||||
<a class='{{if eq .TabName "activity"}}active{{end}} item' href="{{.Owner.HomeLink}}?tab=activity"> | <a class='{{if eq .TabName "activity"}}active{{end}} item' href="{{.Owner.HomeLink}}?tab=activity"> | ||||
<i class="octicon octicon-rss"></i> Recent Activity | |||||
{{svg "octicon-rss" 16}} Recent Activity | |||||
</a> | </a> | ||||
</div> | </div> | ||||