@@ -5,23 +5,21 @@ | |||
.repository .repo-header { | |||
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: 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; | |||
} | |||
.svg[class*=octicon] { | |||
vertical-align: baseline; | |||
} | |||
/* These rules are copied here to pull them out of their nesting. */ | |||
.repo-description { | |||
display: flex; | |||
@@ -81,3 +79,7 @@ details:not([open]) > summary.ui.top.attached.header { | |||
.ui.left.attached.button { | |||
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" .}} | |||
<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}} | |||
<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> | |||
CodeMirror.modeURL = "{{AppSubUrl}}/vendor/plugins/codemirror/mode/%N/%N.js"; | |||
CodeMirror.modeURL = "{{StaticUrlPrefix}}/vendor/plugins/codemirror/mode/%N/%N.js"; | |||
</script> | |||
{{end}} | |||
{{if .RequireGitGraph}} | |||
<!-- graph --> | |||
<script src="{{AppSubUrl}}/vendor/plugins/gitgraph/gitgraph.js"></script> | |||
<script src="{{AppSubUrl}}/js/draw.js"></script> | |||
{{end}} | |||
<!-- Third-party libraries --> | |||
{{if .RequireHighlightJS}} | |||
<script src="{{AppSubUrl}}/vendor/plugins/highlight/highlight.pack.js"></script> | |||
{{end}} | |||
{{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}} | |||
{{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}} | |||
{{if .RequireTribute}} | |||
<script src="{{AppSubUrl}}/vendor/plugins/tribute/tribute.min.js"></script> | |||
<script src="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.min.js"></script> | |||
<script> | |||
var issuesTribute = new Tribute({ | |||
values: [ | |||
@@ -56,14 +45,19 @@ | |||
noMatchTemplate: function () { return null }, | |||
menuItemTemplate: function (item) { | |||
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 != '') { | |||
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> | |||
var emojiTribute = new Tribute({ | |||
@@ -87,31 +81,27 @@ | |||
return item; | |||
}, | |||
selectTemplate: function (item) { | |||
if (typeof item === 'undefinied') return null; | |||
if (typeof item === 'undefined') return null; | |||
return ':' + item.original + ':'; | |||
}, | |||
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> | |||
{{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" .}} | |||
</body> | |||
</html> |
@@ -1,31 +1,40 @@ | |||
<!DOCTYPE html> | |||
<html> | |||
<html lang="{{.Language}}"> | |||
<head data-suburl="{{AppSubUrl}}"> | |||
<meta charset="utf-8"> | |||
<meta name="viewport" content="width=device-width, initial-scale=1"> | |||
<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> | |||
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> | |||
{{end}} | |||
<meta name="theme-color" content="{{ThemeColorMetaTag}}"> | |||
<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="referrer" content="no-referrer" /> | |||
<meta name="_csrf" content="{{.CsrfToken}}" /> | |||
<meta name="_suburl" content="{{AppSubUrl}}" /> | |||
{{if .IsSigned}} | |||
<meta name="_uid" content="{{.SignedUser.ID}}" /> | |||
{{end}} | |||
@@ -39,7 +48,6 @@ | |||
<meta name="go-import" content="{{.GoGetImport}} git {{.CloneLink.HTTPS}}"> | |||
<meta name="go-source" content="{{.GoGetImport}} _ {{.GoDocDirectory}} {{.GoDocFile}}"> | |||
{{end}} | |||
<script> | |||
{{SafeJS `/* | |||
@licstart The following is the entire license notice for the | |||
@@ -67,35 +75,41 @@ | |||
THE SOFTWARE. | |||
--- | |||
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 | |||
for the JavaScript code in this page. | |||
*/`}} | |||
</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}} | |||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/simplemde/simplemde.min.css"> | |||
{{end}} | |||
{{if .RequireGitGraph}} | |||
<!-- graph --> | |||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/gitgraph/gitgraph.css"> | |||
{{end}} | |||
{{if .RequireTribute}} | |||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/tribute/tribute.css"> | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||
{{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"> | |||
<noscript> | |||
<style> | |||
@@ -103,44 +117,48 @@ | |||
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; } | |||
</style> | |||
</noscript> | |||
{{if .RequireHighlightJS}} | |||
<link rel="stylesheet" href="{{AppSubUrl}}/vendor/plugins/highlight/github.css"> | |||
{{end}} | |||
{{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}} | |||
<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}} | |||
<meta property="og:title" content="{{.Owner.Name}}" /> | |||
<meta property="og:type" content="profile" /> | |||
<meta property="og:image" content="{{.Owner.AvatarLink}}" /> | |||
<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}} | |||
<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: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}} | |||
{{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}} | |||
{{template "custom/header" .}} | |||
</head> | |||
@@ -2,17 +2,29 @@ | |||
{{range .Repos}} | |||
<div class="item"> | |||
<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}} | |||
<span class="text gold"><i class="octicon octicon-lock"></i></span> | |||
<span class="middle text gold">{{svg "octicon-lock" 16}}</span> | |||
{{else if .IsFork}} | |||
<span><i class="octicon octicon-repo-forked"></i></span> | |||
<span class="middle">{{svg "octicon-repo-forked" 16}}</span> | |||
{{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}} | |||
</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> | |||
{{else}} | |||
<div> | |||
@@ -12,7 +12,26 @@ | |||
<table class="ui very basic striped fixed table single line"> | |||
<tbody> | |||
<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> | |||
</tbody> | |||
</table> | |||
@@ -24,38 +43,82 @@ | |||
</h4> | |||
<div class="ui attached table segment"> | |||
<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> | |||
{{range $branch := .Branches}} | |||
{{range .Branches}} | |||
{{if ne .Name $.DefaultBranch}} | |||
<tr> | |||
<td> | |||
<td class="six wide"> | |||
{{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}} | |||
<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}} | |||
<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}} | |||
</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}} | |||
</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> | |||
{{end}} | |||
{{end}} | |||
@@ -69,7 +132,7 @@ | |||
<div class="ui small basic delete modal"> | |||
<div class="ui icon header"> | |||
<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 class="content"> | |||
<p>{{.i18n.Tr "repo.branch.delete_desc" | Str2html}}</p> | |||
@@ -2,7 +2,7 @@ | |||
{{if and .PullRequestCtx.Allowed .IsViewBranch}} | |||
<div class=""> | |||
<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> | |||
</div> | |||
{{end}} | |||
@@ -14,7 +14,7 @@ | |||
<div class="ui basic {{if $showCommitCount}}labeled button{{else}}buttons{{end}}"> | |||
<div class="ui basic button" @click="menuVisible = !menuVisible" @keyup.enter="menuVisible = !menuVisible"> | |||
<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}}: | |||
<strong>{{if .IsViewBranch}}{{.BranchName}}{{else}}{{ShortSha .BranchName}}{{end}}</strong> | |||
</span> | |||
@@ -22,8 +22,8 @@ | |||
</div> | |||
{{if $showCommitCount}} | |||
<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}} | |||
</div> | |||
<div class="data" style="display: none" data-mode="{{if .IsViewTag}}tags{{else}}branches{{end}}"> | |||
@@ -44,7 +44,7 @@ | |||
<div class="two column row"> | |||
<a class="reference column" href="#" @click="mode = 'branches'; focusSearchField()"> | |||
<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> | |||
</a> | |||
<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"> | |||
<a href="#" @click="createNewBranch()"> | |||
<div> | |||
<i class="octicon octicon-git-branch"></i> | |||
{{svg "octicon-git-branch" 16}} | |||
{{.i18n.Tr "repo.branch.create_branch" `${ searchTerm }` | Safe}} | |||
</div> | |||
<div class="text small"> | |||
@@ -8,7 +8,7 @@ | |||
<div class="fitted item"> | |||
<a href="{{.RepoLink}}/graph" class="ui basic small compact button"> | |||
<span class="text"> | |||
<i class="octicon octicon-git-branch"></i> | |||
{{svg "octicon-git-branch" 16}} | |||
</span> | |||
{{.i18n.Tr "repo.commit_graph"}} | |||
</a> | |||
@@ -1,76 +1,116 @@ | |||
<div class="header-wrapper"> | |||
{{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><!-- end grid --> | |||
</div><!-- end container --> | |||
{{end}} | |||
{{if not .IsDiffCompare}} | |||
<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> | |||
{{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> | |||
{{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> | |||
</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 class="ui tabs divider"></div> | |||
{{else}} | |||
<div class="ui divider"></div> | |||
{{end}} | |||
</div> |
@@ -69,6 +69,8 @@ | |||
</div> | |||
{{if .IsViewFile}} | |||
{{template "repo/view_file" .}} | |||
{{else if .IsBlame}} | |||
{{template "repo/blame" .}} | |||
{{else}} | |||
{{template "repo/view_list" .}} | |||
{{end}} | |||
@@ -1,50 +1,72 @@ | |||
<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}} | |||
<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}} | |||
</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> | |||
{{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}} | |||
</div> | |||
</div> | |||
{{end}} | |||
</h4> | |||
<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 .FileContent}}{{.FileContent | Safe}}{{end}} | |||
{{else if .IsRenderedHTML}} | |||
@@ -62,7 +84,7 @@ | |||
<strong>{{.i18n.Tr "repo.audio_not_supported_in_browser"}}</strong> | |||
</audio> | |||
{{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}} | |||
<a href="{{EscapePound $.RawFileLink}}" rel="nofollow" class="btn btn-gray btn-radius">{{.i18n.Tr "repo.file_view_raw"}}</a> | |||
{{end}} | |||
@@ -17,9 +17,10 @@ | |||
<div class="ui right sub header"> | |||
Latest commit: | |||
{{template "repo/commit_status" .LatestCommitStatus}} | |||
<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}} | |||
<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> | |||
@@ -33,11 +34,11 @@ | |||
</div> | |||
</h4> | |||
</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> | |||
{{if .HasParentPath}} | |||
<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> | |||
{{end}} | |||
{{range $item := .Files}} | |||
@@ -46,34 +47,38 @@ | |||
<tr> | |||
{{if $entry.IsSubModule}} | |||
<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> | |||
{{else}} | |||
<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> | |||
{{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> | |||
{{end}} | |||
</tbody> | |||
@@ -14,11 +14,22 @@ | |||
{{if and .OrderedOAuth2Names .OAuth2Providers}} | |||
<div class="oauth center"> | |||
<div id="oauth2-login-loader" class="ui disabled centered loader"></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> | |||
<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> | |||
@@ -30,10 +41,12 @@ | |||
<label for="user_name">{{.i18n.Tr "home.uname_holder"}}</label> | |||
<input id="user_name" name="user_name" value="{{.user_name}}" autofocus required> | |||
</div> | |||
{{if or (not .DisablePassword) .LinkAccountMode}} | |||
<div class="required inline field {{if and (.Err_Password) (or (not .LinkAccountMode) (and .LinkAccountMode .LinkAccountModeSignIn))}}error{{end}}"> | |||
<label for="password">{{.i18n.Tr "password"}}</label> | |||
<input id="password" name="password" type="password" value="{{.password}}" autocomplete="off" required> | |||
</div> | |||
{{end}} | |||
{{if not .LinkAccountMode}} | |||
<div class="inline field"> | |||
<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 secondary stackable pointing menu"> | |||
<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 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> | |||
</div> | |||