Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/149tags/v1.21.12.1
@@ -95,3 +95,6 @@ prime/ | |||
# Make evidence files | |||
/.make_evidence | |||
/templates/home_bak.tmpl | |||
/==bak |
@@ -0,0 +1,178 @@ | |||
.bg-gray{ background-color:#F8F8F8!important;} | |||
.am-mb-0{ margin-bottom: 0 !important;} | |||
.am-mb-05{ margin-bottom: 0.5rem !important;} | |||
.am-mb-10{ margin-bottom: 1.0rem !important;} | |||
.am-mb-15{ margin-bottom: 1.5rem !important;} | |||
.am-mb-20{ margin-bottom: 2.0rem !important;} | |||
.am-mb-30{ margin-bottom: 3.0rem !important;} | |||
.am-mt-0{ margin-top: 0 !important;} | |||
.am-mt-05{ margin-top: 0.5rem !important;} | |||
.am-mt-10{ margin-top: 1.0rem !important;} | |||
.am-mt-15{ margin-top: 1.5rem !important;} | |||
.am-mt-20{ margin-top: 2.0rem !important;} | |||
.am-mt-30{ margin-top: 3.0rem !important;} | |||
.am-pb-0{ padding-bottom: 0 !important;} | |||
.am-pb-05{ padding-bottom: 0.5rem !important;} | |||
.am-pb-10{ padding-bottom: 1.0rem !important;} | |||
.am-pb-15{ padding-bottom: 1.5rem !important;} | |||
.am-pb-20{ padding-bottom: 2.0rem !important;} | |||
.am-pb-30{ padding-bottom: 3.0rem !important;} | |||
.am-pt-0{ padding-top: 0 !important;} | |||
.am-pt-05{ padding-top: 0.5rem !important;} | |||
.am-pt-10{ padding-top: 1.0rem !important;} | |||
.am-pt-15{ padding-top: 1.5rem !important;} | |||
.am-pt-20{ padding-top: 2.0rem !important;} | |||
.am-pt-30{ padding-top: 3.0rem !important;} | |||
.am-pl-30{ padding-left: 3.0rem !important;} | |||
.am-ml-30{ margin-left: 3.0rem !important;} | |||
.am-pr-30{ padding-right: 3.0rem !important;} | |||
.am-mr-30{ margin-right: 3.0rem !important;} | |||
.am-lh-18{ line-height: 1.8em;} | |||
.opacity5{ opacity:0.5;} | |||
.radius15{ border-radius:1.5rem !important; } | |||
.radius10{ border-radius:1.0rem !important; } | |||
.radius5{ border-radius:0.5rem !important; } | |||
.am-shadow-1{ | |||
-webkit-box-shadow: 0 1px 2px 0 rgba(34,36,38,.15); | |||
box-shadow: 0 1px 2px 0 rgba(34,36,38,.15); | |||
} | |||
.am-shadow-2{ | |||
-webkit-box-shadow: 0 2px 4px 0 rgba(34,36,38,.3); | |||
box-shadow: 0 2px 4px 0 rgba(34,36,38,.3); | |||
} | |||
.ui.secondary.hometop.segment{ | |||
background: #DFE9F0; | |||
padding-top: 0; | |||
border: none; | |||
margin-bottom: 90px; | |||
} | |||
.ui.secondary.hometop.segment #navbar{ | |||
z-index: 10; | |||
} | |||
.hometop .ui.secondary.menu .active.item{ | |||
color: #000; | |||
background:none; | |||
border-bottom: 1px solid #000; | |||
} | |||
.homebanner{ | |||
position: relative; | |||
padding: 100px 32px 80px; | |||
z-index: 9; | |||
} | |||
.homebanner .ui.header .sub.header{ | |||
color: #3291F8; | |||
} | |||
.bannerpic{ | |||
position: absolute; | |||
right: 50px; | |||
bottom: -64px; | |||
width: 560px; | |||
} | |||
.ui[class*="very padded"].segment.i-code{ | |||
padding-left: 6.0rem; | |||
} | |||
.i-code > .ui.blue.header{ | |||
color: #1678c2!important; | |||
} | |||
.i-code h2{ | |||
position: relative; | |||
} | |||
.i-code h2::before { | |||
content: ""; | |||
position: absolute; | |||
left: calc(-4.0rem + 6px); | |||
top: 0.8rem; | |||
width: 18px; | |||
height: 18px; | |||
border: 2px solid #505559; | |||
border-radius: 50%; | |||
background: #1b1c1d; | |||
z-index: 9; | |||
} | |||
.i-code h2.am-bw::before{ | |||
background: #FFF; | |||
} | |||
.i-code-pic{ | |||
position: relative; | |||
} | |||
.i-code-pic > img{ | |||
margin-bottom: -3.0rem; | |||
} | |||
.i-env .ui.cards>.card>.image{ | |||
background: none; | |||
} | |||
.i-env .ui.cards>.card>.content{ | |||
border-top: none; | |||
} | |||
.leftline01{ | |||
position: absolute; | |||
left: 3.0rem; | |||
top: 0; | |||
bottom: 0; | |||
border-left: 2px solid #505559; | |||
border-bottom: 2px solid #505559; | |||
border-radius: 0 0 0 2.0rem; | |||
width: 17.5rem; | |||
} | |||
.leftline02{ | |||
position: absolute; | |||
left: 20.5rem; | |||
top: calc(-5.0rem - 2px); | |||
border-top: 2px solid #505559; | |||
border-right: 2px solid #505559; | |||
border-radius: 0 2.0rem 0 0; | |||
width: 2.0rem; | |||
height: 6.0rem; | |||
} | |||
@media only screen and (max-width: 767px) { | |||
.am-mt-30{ margin-top: 1.5rem !important;} | |||
.ui.secondary.hometop.segment{ | |||
margin-bottom: 2.0rem; | |||
} | |||
.bannerpic, .i-code-pic{ | |||
display: none; | |||
} | |||
.i-code h2::before { | |||
left: calc(-5.0rem + 6px); | |||
} | |||
.i-code h2.am-bw::before{ | |||
left: calc(-4.0rem + 6px); | |||
} | |||
.leftline01{ | |||
width: calc(50% - 4.0rem); | |||
} | |||
.leftline02{ | |||
left: calc(50% - 1.0rem); | |||
top: calc(-3.5rem - 2px); | |||
} | |||
} | |||
@media only screen and (min-width: 768px) and (max-width: 991px) { | |||
.bannerpic, .i-code-pic{ | |||
display: none; | |||
} | |||
.i-code h2::before { | |||
left: calc(-5.0rem + 6px); | |||
} | |||
.i-code h2.am-bw::before{ | |||
left: calc(-4.0rem + 6px); | |||
} | |||
} | |||
@media only screen and (min-width: 992px) and (max-width: 1199px) { | |||
} | |||
@media only screen and (min-width: 1200px) and (max-width: 1919px) { | |||
} | |||
@media only screen and (min-width: 1920px) { | |||
} |
@@ -434,3 +434,38 @@ func GetDivergingCommits(repoPath string, baseBranch string, targetBranch string | |||
return DivergeObject{ahead, behind}, nil | |||
} | |||
type Contributor struct { | |||
CommitCnt int | |||
Committer string | |||
Email string | |||
} | |||
func GetContributors(repoPath string) ([]Contributor, error){ | |||
cmd := NewCommand("shortlog", "-sne", "--all") | |||
stdout, err := cmd.RunInDir(repoPath) | |||
if err != nil { | |||
return nil, err | |||
} | |||
stdout = strings.Trim(stdout, "\n") | |||
contributorRows := strings.Split(stdout, "\n") | |||
if len(contributorRows) > 0 { | |||
contributorsInfo := make([]Contributor, len(contributorRows)) | |||
for i := 0; i < len(contributorRows); i++ { | |||
var oneCount string = strings.Trim(contributorRows[i], " ") | |||
if strings.Index(oneCount, "\t") < 0 { | |||
continue | |||
} | |||
number := oneCount[0:strings.Index(oneCount, "\t")] | |||
commitCnt, _ := strconv.Atoi(number) | |||
committer := oneCount[strings.Index(oneCount, "\t")+1:strings.LastIndex(oneCount, " ")] | |||
committer = strings.Trim(committer, " ") | |||
email := oneCount[strings.Index(oneCount, "<")+1:strings.Index(oneCount, ">")] | |||
contributorsInfo[i] = Contributor{ | |||
commitCnt, committer, email, | |||
} | |||
} | |||
return contributorsInfo, nil | |||
} | |||
return nil, nil | |||
} |
@@ -7,6 +7,7 @@ package repo | |||
import ( | |||
"bytes" | |||
"code.gitea.io/gitea/modules/options" | |||
"encoding/base64" | |||
"fmt" | |||
gotemplate "html/template" | |||
@@ -567,9 +568,32 @@ func safeURL(address string) string { | |||
return u.String() | |||
} | |||
type ContributorInfo struct { | |||
UserInfo *models.User | |||
Email string // for contributor who is not a registered user | |||
} | |||
// Home render repository home page | |||
func Home(ctx *context.Context) { | |||
if len(ctx.Repo.Units) > 0 { | |||
//get repo contributors info | |||
contributors, err := git.GetContributors(ctx.Repo.Repository.RepoPath()) | |||
if err == nil && contributors != nil { | |||
var contributorInfos []*ContributorInfo | |||
for _, c := range contributors { | |||
user, err := models.GetUserByEmail(c.Email) | |||
if err == nil { | |||
contributorInfos = append(contributorInfos, &ContributorInfo{ | |||
user, c.Email, | |||
}) | |||
} else { | |||
contributorInfos = append(contributorInfos, &ContributorInfo{ | |||
nil, c.Email, | |||
}) | |||
} | |||
} | |||
ctx.Data["ContributorInfo"] = contributorInfos | |||
} | |||
if ctx.Repo.Repository.IsBeingCreated() { | |||
task, err := models.GetMigratingTask(ctx.Repo.Repository.ID) | |||
if err != nil { | |||
@@ -611,6 +635,39 @@ func Home(ctx *context.Context) { | |||
ctx.NotFound("Home", fmt.Errorf(ctx.Tr("units.error.no_unit_allowed_repo"))) | |||
} | |||
func renderLicense(ctx *context.Context) { | |||
entry, err := ctx.Repo.Commit.GetTreeEntryByPath("LICENSE") | |||
if err != nil { | |||
log.Error(err.Error()) | |||
return | |||
} | |||
blob := entry.Blob() | |||
dataRc, err := blob.DataAsync() | |||
if err != nil { | |||
log.Error("DataAsync", err) | |||
return | |||
} | |||
defer dataRc.Close() | |||
buf, err := ioutil.ReadAll(dataRc) | |||
if err != nil { | |||
log.Error("DataAsync", err) | |||
return | |||
} | |||
for _, f := range models.Licenses { | |||
license, err := options.License(f) | |||
if err != nil { | |||
log.Error("failed to get license content: %v, err:%v", f, err) | |||
continue | |||
} | |||
if bytes.Compare(buf,license) == 0 { | |||
log.Info("got matched license:%v",f) | |||
ctx.Data["LICENSE"] = f | |||
return | |||
} | |||
} | |||
log.Info("not found matched license,repo:%v",ctx.Repo.Repository.Name) | |||
} | |||
func renderLanguageStats(ctx *context.Context) { | |||
langs, err := ctx.Repo.Repository.GetTopLanguageStats(5) | |||
if err != nil { | |||
@@ -657,6 +714,8 @@ func renderCode(ctx *context.Context) { | |||
// Get Topics of this repo | |||
renderRepoTopics(ctx) | |||
// Get license of this repo | |||
renderLicense(ctx) | |||
if ctx.Written() { | |||
return | |||
} | |||
@@ -0,0 +1,210 @@ | |||
<!DOCTYPE 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}} {{if .Repository.Name}}{{.Repository.Name}} - {{end}}{{AppName}}</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) { | |||
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}}{{MetaAuthor}}{{end}}" /> | |||
<meta name="description" content="{{if .Repository}}{{.Repository.Name}}{{if .Repository.Description}} - {{.Repository.Description}}{{end}}{{else}}{{MetaDescription}}{{end}}" /> | |||
<meta name="keywords" content="{{MetaKeywords}}"> | |||
<meta name="referrer" content="no-referrer" /> | |||
<meta name="_csrf" content="{{.CsrfToken}}" /> | |||
{{if .IsSigned}} | |||
<meta name="_uid" content="{{.SignedUser.ID}}" /> | |||
{{end}} | |||
{{if .ContextUser}} | |||
<meta name="_context_uid" content="{{.ContextUser.ID}}" /> | |||
{{end}} | |||
{{if .SearchLimit}} | |||
<meta name="_search_limit" content="{{.SearchLimit}}" /> | |||
{{end}} | |||
{{if .GoGetImport}} | |||
<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 | |||
JavaScript code in this page. | |||
Copyright (c) 2016 The Gitea Authors | |||
Copyright (c) 2015 The Gogs Authors | |||
Permission is hereby granted, free of charge, to any person obtaining a copy | |||
of this software and associated documentation files (the "Software"), to deal | |||
in the Software without restriction, including without limitation the rights | |||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |||
copies of the Software, and to permit persons to whom the Software is | |||
furnished to do so, subject to the following conditions: | |||
The above copyright notice and this permission notice shall be included in | |||
all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | |||
THE SOFTWARE. | |||
--- | |||
Licensing information for additional javascript libraries can be found at: | |||
{{StaticUrlPrefix}}/vendor/librejs.html | |||
@licend The above is the entire license notice | |||
for the JavaScript code in this page. | |||
*/`}} | |||
</script> | |||
<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}}, | |||
NotificationSettings: { | |||
MinTimeout: {{NotificationSettings.MinTimeout}}, | |||
TimeoutStep: {{NotificationSettings.TimeoutStep}}, | |||
MaxTimeout: {{NotificationSettings.MaxTimeout}}, | |||
EventSourceUpdateTime: {{NotificationSettings.EventSourceUpdateTime}}, | |||
}, | |||
{{if .RequireTribute}} | |||
tributeValues: [ | |||
{{ range .Assignees }} | |||
{key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', | |||
name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.RelAvatarLink}}'}, | |||
{{ end }} | |||
], | |||
{{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"> | |||
<link rel="stylesheet" href="/css/git.openi.css"> | |||
{{if .RequireSimpleMDE}} | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/simplemde/simplemde.min.css"> | |||
{{end}} | |||
{{if .RequireTribute}} | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/tribute/tribute.css"> | |||
{{end}} | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/fomantic/semantic.min.css?v={{MD5 AppVer}}"> | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/css/index.css?v={{MD5 AppVer}}"> | |||
<noscript> | |||
<style> | |||
.dropdown:hover > .menu { display: block; } | |||
.ui.secondary.menu .dropdown.item > .menu { margin-top: 0; } | |||
</style> | |||
</noscript> | |||
{{if .RequireMinicolors}} | |||
<link rel="stylesheet" href="{{StaticUrlPrefix}}/vendor/plugins/jquery.minicolors/jquery.minicolors.css"> | |||
{{end}} | |||
<style class="list-search-style"></style> | |||
{{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}}" /> | |||
{{if .Owner.Description}} | |||
<meta property="og:description" content="{{.Owner.Description}}"> | |||
{{end}} | |||
{{else if .Repository}} | |||
{{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}}" /> | |||
{{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}} | |||
<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" .}} | |||
<script> | |||
var _hmt = _hmt || []; | |||
(function() { | |||
var hm = document.createElement("script"); | |||
hm.src = "https://hm.baidu.com/hm.js?7c4ef0a24be6109ab22e63c832ab21cf"; | |||
var s = document.getElementsByTagName("script")[0]; | |||
s.parentNode.insertBefore(hm, s); | |||
})(); | |||
</script> | |||
</head> | |||
<body> | |||
{{template "custom/body_outer_pre" .}} | |||
<div class="full height"> | |||
<noscript>{{.i18n.Tr "enable_javascript"}}</noscript> | |||
<div class="ui vertical masthead secondary hometop segment"> | |||
{{template "custom/body_inner_pre" .}} | |||
{{if not .PageIsInstall}} | |||
<div class="ui container"> | |||
<div class="ui top secondary stackable main menu following bar"> | |||
{{template "base/head_navbar_home" .}} | |||
</div><!-- end bar --> | |||
</div> | |||
{{end}} | |||
{{/* | |||
</div> | |||
</div> | |||
</body> | |||
</html> | |||
*/}} |
@@ -0,0 +1,161 @@ | |||
<div class="ui container" id="navbar"> | |||
<div class="item brand" style="justify-content: space-between;"> | |||
<a href="https://openi.org.cn/"> | |||
<img class="ui mini image" src="https://openi.org.cn/statics/openi-2021/img/logo-b.svg" style="height: 60px;"> | |||
</a> | |||
<div class="ui basic icon button mobile-only" id="navbar-expand-toggle"> | |||
<i class="sidebar icon"></i> | |||
</div> | |||
</div> | |||
{{if .IsSigned}} | |||
<a class="item {{if .PageIsDashboard}}active{{end}}" href="/dashboard">{{.i18n.Tr "index"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/OpenI">{{.i18n.Tr "custom.head.openi"}}</a> | |||
{{if not .UnitIssuesGlobalDisabled}} | |||
<a class="item {{if .PageIsIssues}}active{{end}}" href="{{AppSubUrl}}/issues">{{.i18n.Tr "issues"}}</a> | |||
{{end}} | |||
{{if not .UnitPullsGlobalDisabled}} | |||
<a class="item {{if .PageIsPulls}}active{{end}}" href="{{AppSubUrl}}/pulls">{{.i18n.Tr "pull_requests"}}</a> | |||
{{end}} | |||
{{if not (and .UnitIssuesGlobalDisabled .UnitPullsGlobalDisabled)}} | |||
{{if .ShowMilestonesDashboardPage}}<a class="item {{if .PageIsMilestonesDashboard}}active{{end}}" href="{{AppSubUrl}}/milestones">{{.i18n.Tr "milestones"}}</a>{{end}} | |||
{{end}} | |||
<div class="ui dropdown item"> | |||
{{.i18n.Tr "explore"}} | |||
<i class="dropdown icon"></i> | |||
<div class="menu"> | |||
<a class="item" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "custom.head.project"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/explore/datasets">{{.i18n.Tr "custom.head.dataset"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/explore/users">{{.i18n.Tr "explore.users"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/explore/organizations">{{.i18n.Tr "explore.organizations"}}</a> | |||
</div> | |||
</div> | |||
{{else if .IsLandingPageHome}} | |||
<a class="item {{if .PageIsHome}}active{{end}}" href="{{AppSubUrl}}/user/login?redirect_to={{.Link}}">{{.i18n.Tr "home"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/OpenI">{{.i18n.Tr "custom.head.openi"}}</a> | |||
<div class="ui dropdown item"> | |||
{{.i18n.Tr "explore"}} | |||
<i class="dropdown icon"></i> | |||
<div class="menu"> | |||
<a class="item" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "custom.head.project"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/explore/datasets">{{.i18n.Tr "datasets"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/explore/users">{{.i18n.Tr "explore.users"}}</a> | |||
<a class="item" href="{{AppSubUrl}}/explore/organizations">{{.i18n.Tr "explore.organizations"}}</a> | |||
</div> | |||
</div> | |||
{{else if .IsLandingPageExplore}} | |||
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/repos">{{.i18n.Tr "home"}}</a> | |||
{{else if .IsLandingPageOrganizations}} | |||
<a class="item {{if .PageIsExplore}}active{{end}}" href="{{AppSubUrl}}/explore/organizations">{{.i18n.Tr "home"}}</a> | |||
{{end}} | |||
{{template "custom/extra_links" .}} | |||
{{/* | |||
<div class="item"> | |||
<div class="ui icon input"> | |||
<input class="searchbox" type="text" placeholder="{{.i18n.Tr "search_project"}}"> | |||
<i class="search icon"></i> | |||
</div> | |||
</div> | |||
*/}} | |||
{{if .IsSigned}} | |||
<div class="right stackable menu"> | |||
<a href="{{AppSubUrl}}/notifications" class="item poping up" data-content='{{.i18n.Tr "notifications"}}' data-variation="tiny inverted"> | |||
<span class="text"> | |||
<span class="fitted">{{svg "octicon-bell" 16}}</span> | |||
<span class="sr-mobile-only">{{.i18n.Tr "notifications"}}</span> | |||
{{$notificationUnreadCount := 0}} | |||
{{if .NotificationUnreadCount}}{{$notificationUnreadCount = call .NotificationUnreadCount}}{{end}} | |||
<span class="ui red label {{if not $notificationUnreadCount}}hidden{{end}} notification_count"> | |||
{{$notificationUnreadCount}} | |||
</span> | |||
</span> | |||
</a> | |||
<div class="ui dropdown jump item poping up" data-content="{{.i18n.Tr "create_new"}}" data-variation="tiny inverted"> | |||
<span class="text"> | |||
<span class="fitted">{{svg "octicon-plus" 16}}</span> | |||
<span class="sr-mobile-only">{{.i18n.Tr "create_new"}}</span> | |||
<span class="fitted not-mobile">{{svg "octicon-triangle-down" 16}}</span> | |||
</span> | |||
<div class="menu"> | |||
<a class="item" href="{{AppSubUrl}}/repo/create"> | |||
<span class="fitted">{{svg "octicon-plus" 16}}</span> {{.i18n.Tr "new_repo"}} | |||
</a> | |||
<a class="item" href="{{AppSubUrl}}/repo/migrate"> | |||
<span class="fitted">{{svg "octicon-repo-clone" 16}}</span> {{.i18n.Tr "new_migrate"}} | |||
</a> | |||
{{if .SignedUser.CanCreateOrganization}} | |||
<a class="item" href="{{AppSubUrl}}/org/create"> | |||
<span class="fitted">{{svg "octicon-organization" 16}}</span> {{.i18n.Tr "new_org"}} | |||
</a> | |||
{{end}} | |||
</div><!-- end content create new menu --> | |||
</div><!-- end dropdown menu create new --> | |||
<div class="ui dropdown jump item poping up" tabindex="-1" data-content="{{.i18n.Tr "user_profile_and_more"}}" data-variation="tiny inverted"> | |||
<span class="text"> | |||
<img class="ui tiny avatar image" width="24" height="24" src="{{.SignedUser.RelAvatarLink}}"> | |||
<span class="sr-only">{{.i18n.Tr "user_profile_and_more"}}</span> | |||
<span class="mobile-only">{{.SignedUser.Name}}</span> | |||
<span class="fitted not-mobile" tabindex="-1">{{svg "octicon-triangle-down" 16}}</span> | |||
</span> | |||
<div class="menu user-menu" tabindex="-1"> | |||
<div class="ui header"> | |||
{{.i18n.Tr "signed_in_as"}} <strong>{{.SignedUser.Name}}</strong> | |||
</div> | |||
<div class="divider"></div> | |||
<a class="item" href="{{AppSubUrl}}/{{.SignedUser.Name}}"> | |||
{{svg "octicon-person" 16}} | |||
{{.i18n.Tr "your_profile"}}<!-- Your profile --> | |||
</a> | |||
<a class="item" href="{{AppSubUrl}}/{{.SignedUser.Name}}?tab=stars"> | |||
{{svg "octicon-star" 16}} | |||
{{.i18n.Tr "your_starred"}} | |||
</a> | |||
<a class="{{if .PageIsUserSettings}}active{{end}} item" href="{{AppSubUrl}}/user/settings"> | |||
{{svg "octicon-settings" 16}} | |||
{{.i18n.Tr "your_settings"}}<!-- Your settings --> | |||
</a> | |||
<!--a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io"> | |||
{{svg "octicon-question" 16}} | |||
{{.i18n.Tr "help"}}<!-- Help --> | |||
</a--> | |||
{{if .IsAdmin}} | |||
<div class="divider"></div> | |||
<a class="{{if .PageIsAdmin}}active{{end}} item" href="{{AppSubUrl}}/admin"> | |||
<i class="icon settings"></i> | |||
{{.i18n.Tr "admin_panel"}}<!-- Admin Panel --> | |||
</a> | |||
{{end}} | |||
<div class="divider"></div> | |||
<a class="item link-action" href data-url="{{AppSubUrl}}/user/logout" data-redirect="{{AppSubUrl}}/"> | |||
{{svg "octicon-sign-out" 16}} | |||
{{.i18n.Tr "sign_out"}}<!-- Sign Out --> | |||
</a> | |||
</div><!-- end content avatar menu --> | |||
</div><!-- end dropdown avatar menu --> | |||
</div><!-- end signed user right menu --> | |||
{{else}} | |||
<!--a class="item" target="_blank" rel="noopener noreferrer" href="https://docs.gitea.io">{{.i18n.Tr "help"}}</a--> | |||
<div class="right stackable menu"> | |||
{{if .ShowRegistrationButton}} | |||
<a class="item{{if .PageIsSignUp}} active{{end}}" href="{{AppSubUrl}}/user/sign_up"> | |||
{{svg "octicon-person" 16}} {{.i18n.Tr "register"}} | |||
</a> | |||
{{end}} | |||
<a class="item{{if .PageIsSignIn}} active{{end}}" rel="nofollow" href="{{AppSubUrl}}/user/login?redirect_to={{.Link}}"> | |||
{{svg "octicon-sign-in" 16}} {{.i18n.Tr "sign_in"}} | |||
</a> | |||
</div><!-- end anonymous right menu --> | |||
{{end}} | |||
</div> |
@@ -1,264 +1,208 @@ | |||
{{template "base/head" .}} | |||
{{template "base/head_home" .}} | |||
<div class="ui container homebanner"> | |||
<h1 class="ui header"> | |||
启智AI开发协作平台 | |||
<div class="sub header"> | |||
面向AI领域的一站式协同开发环境 | |||
</div> | |||
</h1> | |||
<p class="am-lh-18">免费私有代码仓库,免费计算资源,大容量数据存储,<br>多类型硬件环境(GPU、NPU),AI开发流水线(开发-调试-训练-迭代)</p> | |||
<a class="circular ui secondary button" href="{{AppSubUrl}}/user/sign_up">立即使用 <i class="right arrow icon"></i></a> | |||
<div class="bannerpic"><img class="ui fluid image" src="/img/gitopeni-index-01.svg"></div> | |||
</div> | |||
</div><!-- end segment --> | |||
<div class="home"> | |||
<script> | |||
var head = document.head || document.getElementsByTagName('head')[0]; | |||
var t = document.createElement('base'); //创建title元素 | |||
t.target = '_blank'; //设置标题内容 | |||
head.appendChild(t); | |||
<div class="explore repositories"> | |||
<div class="ui sticky container"> | |||
<div class="ui secondary pointing fluid five item menu" style="background-color: #FFF;"> | |||
<a class="item" href="#first">代码</a> | |||
<a class="item" href="#second">数据</a> | |||
<a class="item" href="#third">AI流水线</a> | |||
<a class="item" href="#fourth">协同开发</a> | |||
<a class="item" href="#fifth">云脑协同</a> | |||
</div> | |||
</div> | |||
document.addEventListener('DOMContentLoaded', function() { | |||
particleground(document.getElementById('particles'), { | |||
dotColor: 'rgba(0,176,240,0.2)', | |||
lineColor: 'rgba(68,114,196,0.1)' | |||
}); | |||
var intro = document.getElementById('intro'); | |||
if (intro) { | |||
intro.style.marginTop = -intro.offsetHeight / 2 + 'px'; | |||
} | |||
}, false); | |||
</script> | |||
<div id="index-project"> | |||
<div id="particles"></div> | |||
<div class="center aligned ui container inverted segment"> | |||
<!--内容宽度,默认1127px--> | |||
<h1 class="ui header section--header">启智社区 | |||
<p class="sub header">Open Intelligence,Open Source,Open Community,Open Ecosystem</p> | |||
</h1> | |||
<div class="ui six column grid prorow"> | |||
<div class="eight wide mobile four wide tablet four wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"><img src="https://www.openi.org.cn/statics/openi/images/index/openi-paddle.png" style=" height:20px;"></div> | |||
<div class="content ui grid"> | |||
<div class="header right aligned eight wide column" style=" border-right:2px solid #ffc000"> | |||
<span style="color: #5170ff;">OpenI</span> <b style="color:#FFF">DL</b> | |||
</div> | |||
<div class="header left aligned eight wide column"> | |||
<span style="color: #5170ff;">OpenI</span> <b style="color:#ffc000">RL</b> | |||
</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:百度 | |||
</div> | |||
</div> | |||
<div id="railContent"> | |||
<a name="first"></a> | |||
<div class="ui container am-mt-30 basic tab i-code active" style="position: relative;"> | |||
<div class="ui inverted very padded segment radius15 am-pl-30"> | |||
<div class="ui mobile reversed stackable grid am-pl-30"> | |||
<div class="six wide column"> | |||
<h2 class="ui huge blue header">代码管理</h2> | |||
<p class="am-lh-18">在这里为你和你的团队创建项目,基于Git工具,提交记录或者回滚代码修改。<br> | |||
不论是公开或者私有仓库,都可免费使用所有功能。<br> | |||
尽情将你喜欢的代码都放在这里,仓库数量、存储容量不受限</p> | |||
<a class="ui blue basic button am-mt-20" href="{{AppSubUrl}}/user/sign_up">立即使用</a> | |||
</div> | |||
<a class="flip" href="https://openi.org.cn/projects/paddle/"></a> | |||
</div> | |||
<div class="eight wide mobile three wide tablet three wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/openi-tianyuan.png" alt="Brain++·天元" style=" height:50px;"> | |||
</div> | |||
<div class="content"> | |||
<div class="header">Brain++·天元</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:旷视 | |||
</div> | |||
</div> | |||
<div class="ten wide column computer only i-code-pic am-pt-30"> | |||
<img class="ui fluid rounded image am-shadow-2 am-mt-10" src="/img/i-code-pic.jpg" style="position: absolute;"> | |||
</div> | |||
<a class="flip" href="https://openi.org.cn/projects/megengine/"></a> | |||
</div> | |||
<div class="eight wide mobile four wide tablet four wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="content ui grid"> | |||
<div class="header eight wide column" style=" border-right:2px solid #ffc000"> | |||
<div><span style="color: #5170ff;">OpenI</span> <b style="color:#FFF">天璇</b></div> | |||
</div> | |||
<div class="header eight wide column"> | |||
<div><span style="color: #5170ff;">OpenI</span> <b style="color:#FFF">天枢</b></div> | |||
</div> | |||
</div> | |||
<div class="am-mt-30 am-pt-30 am-pl-30"> | |||
<div class="am-pl-30 am-pb-30"> | |||
<h2 class="ui huge header am-bw">协作开发</h2> | |||
<p class="am-lh-18">鼓励通过创建合并请求(PR)的方式,更好的进行团队协作<br> | |||
代码评审让每一次的代码修改得以二次确认,提高代码质量<br> | |||
创建并指派任务(Issue),让每一个任务的进展有迹可循,规范管理<br> | |||
被合并的PR,可获得奖励积分;积分总额可以显示出你在项目中的贡献度,也许有一天会有人愿意为此付费<br> | |||
</p> | |||
</div> | |||
</div> | |||
<div class="leftline01"></div> | |||
</div> | |||
</div> | |||
<div class="eight wide column" style=" border-right:2px solid #ffc000; padding-top:0"> | |||
<div class="meta">AVS3 解码</div> | |||
</div> | |||
<div class="eight wide column" style="padding-top:0"> | |||
<div class="meta">AVS3 编码</div> | |||
</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:北大深研院、鹏城实验室、深圳市超高清创新中心 | |||
</div> | |||
</div> | |||
</div> | |||
<a class="flip" href="http://openi.org.cn/projects/uavs3e/"></a> | |||
</div> | |||
<div class="eight wide mobile three wide tablet three wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="content"> | |||
<div class="header" style=" padding-top:0.8em;padding-bottom:0.5em"><span style="color: #5170ff;">OpenI</span> <b style="color:#FFF">海参</b></div> | |||
<div class="meta">基于深度学习的视频智能编码</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:鹏城实验室、北大、武大、中科大、哈工大 | |||
</div> | |||
<a name="second"></a> | |||
<div class="ui basic tab active am-mt-30 bg-gray am-pt-30"> | |||
<div class="ui container i-data" style="position: relative;"> | |||
<div class="leftline02"></div> | |||
<div class="ui stackable grid"> | |||
<div class="nine wide column"> | |||
<img class="ui centered medium rounded large image" src="/img/gitopeni-index-02.svg"> | |||
<div class="i-code-pic" style="margin-top: -4.0rem;"> | |||
<img class="ui fluid rounded image am-shadow-2" src="/img/i-data-pic.jpg"> | |||
</div> | |||
</div> | |||
<a class="flip" href="https://openi.org.cn/projects/dlvc/"></a> | |||
</div> | |||
<div class="sixteen wide mobile two wide tablet two wide computer column"> | |||
<div class="ui card"> | |||
<div class="content"> | |||
<div class="header"><i class="ellipsis horizontal icon"></i></div> | |||
</div> | |||
<div class="seven wide column am-pt-30"> | |||
<h2 class="ui huge blue header">数据集管理</h2> | |||
<p class="am-lh-18"> | |||
数据是重要的生产要素,AI开发更是离不开数据;<br> | |||
- 数据与模型代码的协同,可在项目中上传关联的数据集;<br> | |||
- 数据存储免费,不限制文件大小;<br> | |||
- 数据可共享,标注清洗过的公开数据集,用户可设置为公有数据,供社区用户下载; | |||
</p> | |||
<div class="am-mt-30 am-pt-20"></div> | |||
<h2 class="ui huge header">使用数据集</h2> | |||
<p class="am-lh-18"> | |||
数据集可以直接用于训练或者推理任务中<br> | |||
创建任务时选择对应的数据集,启动任务执行环境(Docker)后,即可在Docker内访问到你的代码和数据,就像在你本地执行一样 | |||
</p> | |||
</div> | |||
<div class="flip flip-more"></div> | |||
</div> | |||
</div> | |||
<div class="ui divider" style="margin-top:2.0em; margin-bottom:2.0em;"></div> | |||
</div> | |||
<div class="ui six column grid prorow"> | |||
<div class="eight wide mobile four wide tablet four wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/openi-octopus.png" alt="启智章鱼" style=" height:50px;"> | |||
</div> | |||
<div class="content"> | |||
<div class="meta">新一代智能资源管理系统</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:鹏城实验室、北大 | |||
</div> | |||
</div> | |||
</div> | |||
<a class="flip flip-blue" href="http://openi.org.cn/projects/octopus/"></a> | |||
</div> | |||
<div class="eight wide mobile three wide tablet three wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/openi-shanhu.png" alt="OpenI珊瑚" style=" height:50px;"> | |||
</div> | |||
<div class="content"> | |||
<div class="meta">异构资源调度项目</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:华为 | |||
</div> | |||
</div> | |||
<a name="third"></a> | |||
<div class="ui basic tab active container am-mt-30 am-pt-30"> | |||
<h2 class="ui center aligned huge blue header am-pt-30"> | |||
AI流水线 | |||
<div class="sub header am-mt-10">提供集代码开发、数据管理、模型调试、推理和评测为一体的AI开发流水线</div> | |||
</h2> | |||
<div class="ui divider"></div> | |||
<div class="ui centered grid"> | |||
<div class="fourteen wide column"> | |||
<div class="ui two column grid"> | |||
<div class="column"> | |||
<div class="ui small header">调试任务:</div> | |||
<div class="ui bulleted list"> | |||
<div class="item">配置模型运行环境;</div> | |||
<div class="item">可在线编辑和调试模型代码,并将改动更新至代码仓库;</div> | |||
<div class="item">基于编辑好的脚本,开展模型评测任务;</div> | |||
</div> | |||
</div> | |||
<div class="column"> | |||
<div class="ui small header">作业任务:</div> | |||
<div class="ui bulleted list"> | |||
<div class="item">利用已配置好的模型运行环境;</div> | |||
<div class="item">基于编辑好的脚本,一键运行,开展模型训练或模型推理任务;</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="ui divider"></div> | |||
<img class="ui centered image" src="/img/develop.svg"> | |||
</div> | |||
<a name="fourth"></a> | |||
<div class="ui basic tab active container am-mt-30 am-pt-30 i-env"> | |||
<h2 class="ui center aligned huge blue header am-pt-30"> | |||
协同开发环境 | |||
<div class="sub header am-mt-10">启智AI协作开发平台与传统git平台最大的不同就在于提供了面向AI开发的协同开发环境</div> | |||
</h2> | |||
<div class="ui four stackable cards am-mt-20"> | |||
<div class="card"> | |||
<div class="image"> | |||
<img src="/img/i-pic-01.svg"> | |||
</div> | |||
<a class="flip flip-blue" href="http://openi.org.cn/projects/coral/"></a> | |||
</div> | |||
<div class="five wide mobile three wide tablet three wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/openi-trustie.png" alt="启智Trustie" style=" height:50px;"> | |||
</div> | |||
<div class="content"> | |||
<div class="meta">群体化协同创新环境</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:国防科大、北航、北大… | |||
</div> | |||
<div class="content"> | |||
<a class="ui centered header">开发要素统一管理</a> | |||
<div class="description"> | |||
平台提供了AI开发四大要素:模型代码、数据集、模型和执行环境的统一管理 | |||
</div> | |||
</div> | |||
<a class="flip flip-green" href="http://openi.org.cn/projects/forge/"></a> | |||
</div> | |||
<div class="five wide mobile three wide tablet three wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/huawei.png" alt="华为" style=" height:25px; margin-top:32px;"> | |||
</div> | |||
<div class="content"> | |||
<div class="meta">华为软开云</div> | |||
</div> | |||
<div class="card"> | |||
<div class="image"> | |||
<img src="/img/i-pic-02.svg"> | |||
</div> | |||
<a class="flip flip-green"></a> | |||
</div> | |||
<div class="six wide mobile three wide tablet three wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/openi-zhongheng.png" alt="OpenI 纵横" style=" height:50px;"> | |||
</div> | |||
<div class="content"> | |||
<div class="meta">数据协同环境</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:微众银行 | |||
</div> | |||
<div class="content"> | |||
<a class="ui centered header">数据协同与共享</a> | |||
<div class="description"> | |||
通过在项目中上传数据集,项目成员多人协作完成数据预处理;也可以通过将数据设置为公有数据集,与社区开发者共同建立更好的模型 | |||
</div> | |||
</div> | |||
<a class="flip flip-green" href="http://openi.org.cn/projects/zongheng/"></a> | |||
</div> | |||
</div> | |||
<div class="ui divider" style="margin-top:2.0em; margin-bottom:2.0em;"></div> | |||
<div class="ui six column grid prorow"> | |||
<div class="sixteen wide mobile six wide tablet six wide computer column ipros"> | |||
<div class="content ui grid"> | |||
<div class="header sixteen wide column"> | |||
<div class="ui centered card" style=" margin-top:0.5em; margin-bottom:0.5em;"> | |||
<div class="content"> | |||
<div class="header">鹏城云脑1、2</div> | |||
</div> | |||
</div> | |||
<a class="flip flip-green"></a> | |||
</div> | |||
<div class="header sixteen wide column"> | |||
<div class="ui centered card" style=" margin-top:0.5em; margin-bottom:0.5em;"> | |||
<div class="content"> | |||
<div class="header">北京、合肥、苏州…</div> | |||
</div> | |||
</div> | |||
<a class="flip flip-green"></a> | |||
</div> | |||
<div class="card"> | |||
<div class="image"> | |||
<img src="/img/i-pic-03.svg"> | |||
</div> | |||
</div> | |||
<div class="eight wide mobile two wide tablet four wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="content"> | |||
<div class="header" style=" padding-top:0.8em;padding-bottom:0.5em"><span style="color: #5170ff;">OpenI</span> <b style="color:#FFF">海藻</b></div> | |||
<div class="meta">可配置指令集和微架构的AI开源芯片</div> | |||
</div> | |||
<div class="extra content"> | |||
<div class="center floated author"> | |||
贡献者:北大、中科院、鹏城实验室 | |||
</div> | |||
<div class="content"> | |||
<a class="ui centered header">模型管理与共享</a> | |||
<div class="description"> | |||
将模型与代码版本建立关联,可以基于代码历史版本,使用不同的方式调整模型,并将结果保存下来;训练好的模型可以开放共享,让更多人的使用模型测试并提出反馈 | |||
</div> | |||
</div> | |||
<a class="flip flip-green" href="http://openi.org.cn/projects/varec/"></a> | |||
</div> | |||
<div class="eight wide mobile three wide tablet four wide computer column ipros"> | |||
<div class="ui card"> | |||
<div class="image"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/huaweicloud.png" alt="华为云" style=" height:50px; margin-top:32px;"> | |||
</div> | |||
<div class="card"> | |||
<div class="image"> | |||
<img src="/img/i-pic-04.svg"> | |||
</div> | |||
<a class="flip flip-green"></a> | |||
</div> | |||
<div class="sixteen wide mobile two wide tablet two wide computer column"> | |||
<div class="ui card"> | |||
<div class="content"> | |||
<div class="header"><i class="ellipsis horizontal icon"></i></div> | |||
<div class="content"> | |||
<a class="ui centered header">一次配置,多次使用</a> | |||
<div class="description"> | |||
提供执行环境共享,一次配置,多次使用,降低模型开发门槛,避免花费重复的时间配置复杂的环境 | |||
</div> | |||
</div> | |||
<div class="flip flip-more"></div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="ui stackable middle very relaxed page grid"> | |||
<div class="center column"> | |||
<h1 class="ui header section--header" style=" margin-top:1.0em">启智社区期待您的加入</h1> | |||
<p class="large" style="padding: 0 0 43px;"> | |||
OpenI社区旨在促进人工智能领域的开源开放协同创新,构建OpenI的技术链、创新链和生态链、推动人工智能产业健康快速发展及其在社会经济各领域的广泛应用。围绕重大产业创新,汇聚创新资源,促进众创共享,形成产业生态的目标,让"一体两翼"构想下的以技术专家为主体组成的多个工作组(标准工作组、知识产权工作组、投融资工作组、开源治理工作组等)、和以企业为主体的多个应用推进组(智能交通推进组、智能医疗推进组、智能金融推进组、智能教育推进组等)作为一个整体进行工作。以"完全开源、完全开放、完全免费、尊重创新"为准则,汇聚学术机构、商业实体、自然人或任何其他法人,共建共享开源软件、开源硬件和开源数据的超级社区;以众智、赛智、创智、有智等工作方法,努力建设成具有国际影响力的人工智能开源开放平台。 | |||
</p> | |||
<a class="ui blue button" href="mailto:secretariat@openi.org.cn?subject=申请贡献项目到OpenI&&body=贡献者自我介绍%3A%0D%0A申请理由%3A%0D%0A 项目地址%3A%0D%0A 联系方式%3A">申请贡献项目到OpenI</a> | |||
<a class="ui blue button" href="https://www.openi.org.cn/html/Club/2019/0228/17.html" style="padding-left:5.0rem;padding-right:5.0rem;">加入OpenI社区 <i class="arrow right icon"></i></a> | |||
<div style="margin-top:80px;"> | |||
<img src="https://www.openi.org.cn/statics/openi/images/index/mem-logos.png" alt="OpenI前期参与成员" style="width:100%; max-width:1200px;"> | |||
<a name="fifth"></a> | |||
<div class="ui basic tab active container am-mt-30 am-pt-30"> | |||
<div class="ui very padded black inverted segment radius15"> | |||
<div class="ui stackable grid"> | |||
<div class="six wide column"> | |||
<img class="ui centered large image" src="/img/i-yunnao.svg"> | |||
</div> | |||
<div class="ten wide column am-pt-30"> | |||
<h2 class="ui huge blue header">鹏城云脑开源协同</h2> | |||
<p class="am-lh-18"> | |||
平台已经与鹏城云脑打通,可以利用鹏城云脑的丰富算力资源,完成AI开发任务<br> | |||
鹏城云脑现有AI算力100P FLOPS@FP16(每秒十亿亿次半精度浮点计算),主要硬件基础设施由搭载英伟达Tesla V100 的GPU服务器和搭载鲲鹏、昇腾处理器的Atlas 900 AI集群构成<br> | |||
开发者可以根据使用需求,自由选择相应计算资源,可以测试模型在不同硬件环境下的适配能力、性能、稳定性等<br> | |||
如果您的模型需要更多的计算资源,也可以单独申请<br> | |||
</p> | |||
<a class="ui blue basic button am-mt-20" href="{{AppSubUrl}}/user/sign_up">马上使用</a> <a class="ui grey basic button am-mt-20" href="mailto:aiforge@openi.org.cn">单独申请</a> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="am-mt-30"></div> | |||
</div><!-- end railContent --> | |||
</div><!-- end explore --> | |||
<script> | |||
$('.menu .item') | |||
.tab(); | |||
$('.ui.sticky') | |||
.sticky({ | |||
context: '#railContent', | |||
observeChanges: true, | |||
}) | |||
.sticky('refresh'); | |||
</script> | |||
</div> | |||
{{template "base/footer" .}} |
@@ -1,13 +1,40 @@ | |||
{{template "base/head" .}} | |||
<style> | |||
.repository.file.list #repo-desc { | |||
font-size: 1.0em; | |||
margin-bottom: 1.0rem; | |||
} | |||
</style> | |||
<div class="repository file list"> | |||
{{template "repo/header" .}} | |||
<div class="ui container"> | |||
{{template "base/alert" .}} | |||
<div class="ui repo-description stackable grid"> | |||
<div id="repo-desc" class="ui twelve wide column"> | |||
{{if .Repository.DescriptionHTML}}<span class="description">{{.Repository.DescriptionHTML}}</span>{{else if .IsRepositoryAdmin}}<span class="no-description text-italic">{{.i18n.Tr "repo.no_desc"}}</span>{{end}} | |||
<a class="link" href="{{.Repository.Website}}">{{.Repository.Website}}</a> | |||
{{if and .Permission.IsAdmin (not .Repository.IsArchived)}} | |||
<div class="ui repo-topic-edit grid form segment error" id="topic_edit" style="display:none"> | |||
<div class="fourteen wide column"> | |||
<div class="field"> | |||
<div class="ui fluid multiple search selection dropdown"> | |||
<input type="hidden" name="topics" value="{{range $i, $v := .Topics}}{{.Name}}{{if lt (Add $i 1) (len $.Topics)}},{{end}}{{end}}"> | |||
{{range .Topics}} | |||
<div class="ui small label topic transition visible" data-value="{{.Name}}" style="display: inline-block !important; cursor: default;">{{.Name}}<i class="delete icon"></i></div> | |||
{{end}} | |||
<div class="text"></div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="two wide column"> | |||
<a class="ui button primary" href="javascript:;" id="save_topic" | |||
data-link="{{.RepoLink}}/topics">{{.i18n.Tr "repo.topic.done"}}</a> | |||
</div> | |||
</div> | |||
{{end}} | |||
<div class="hide" id="validate_prompt"> | |||
<span id="count_prompt">{{.i18n.Tr "repo.topic.count_prompt"}}</span> | |||
<span id="format_prompt">{{.i18n.Tr "repo.topic.format_prompt"}}</span> | |||
</div> | |||
<div class="ui repo-description stackable grid"> | |||
{{if .RepoSearchEnabled}} | |||
<div class="ui repo-search four wide column"> | |||
<form class="ui form ignore-dirty" action="{{.RepoLink}}/search" method="get"> | |||
@@ -23,33 +50,7 @@ | |||
</div> | |||
{{end}} | |||
</div> | |||
<div class="ui" id="repo-topics"> | |||
{{range .Topics}}<a class="ui repo-topic small label topic" href="{{AppSubUrl}}/explore/repos?q={{.Name}}&topic=1">{{.Name}}</a>{{end}} | |||
{{if and .Permission.IsAdmin (not .Repository.IsArchived)}}<a id="manage_topic">{{.i18n.Tr "repo.topic.manage_topics"}}</a>{{end}} | |||
</div> | |||
{{if and .Permission.IsAdmin (not .Repository.IsArchived)}} | |||
<div class="ui repo-topic-edit grid form segment error" id="topic_edit" style="display:none"> | |||
<div class="fourteen wide column"> | |||
<div class="field"> | |||
<div class="ui fluid multiple search selection dropdown"> | |||
<input type="hidden" name="topics" value="{{range $i, $v := .Topics}}{{.Name}}{{if lt (Add $i 1) (len $.Topics)}},{{end}}{{end}}"> | |||
{{range .Topics}} | |||
<div class="ui small label topic transition visible" data-value="{{.Name}}" style="display: inline-block !important; cursor: default;">{{.Name}}<i class="delete icon"></i></div> | |||
{{end}} | |||
<div class="text"></div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="two wide column"> | |||
<a class="ui button primary" href="javascript:;" id="save_topic" | |||
data-link="{{.RepoLink}}/topics">{{.i18n.Tr "repo.topic.done"}}</a> | |||
</div> | |||
</div> | |||
{{end}} | |||
<div class="hide" id="validate_prompt"> | |||
<span id="count_prompt">{{.i18n.Tr "repo.topic.count_prompt"}}</span> | |||
<span id="format_prompt">{{.i18n.Tr "repo.topic.format_prompt"}}</span> | |||
</div> | |||
{{if .Repository.IsArchived}} | |||
<div class="ui warning message"> | |||
{{.i18n.Tr "repo.archive.title"}} | |||
@@ -141,13 +142,73 @@ | |||
{{end}} | |||
</div> | |||
</div> | |||
{{if .IsViewFile}} | |||
{{template "repo/view_file" .}} | |||
{{else if .IsBlame}} | |||
{{template "repo/blame" .}} | |||
{{else}} | |||
{{template "repo/view_list" .}} | |||
{{end}} | |||
<div class="ui container"> | |||
<div class="ui mobile reversed stackable grid"> | |||
<div class="ui ten wide tablet twelve wide computer column"> | |||
{{if .IsViewFile}} | |||
{{template "repo/view_file" .}} | |||
{{else if .IsBlame}} | |||
{{template "repo/blame" .}} | |||
{{else}} | |||
{{template "repo/view_list" .}} | |||
{{end}} | |||
</div> | |||
<div class="ui six wide tablet four wide computer column"> | |||
<div id="repo-desc"> | |||
<h4 class="ui header">简介</h4> | |||
<p> | |||
{{if .Repository.DescriptionHTML}}<span class="description">{{.Repository.DescriptionHTML}}</span>{{else if .IsRepositoryAdmin}}<span class="no-description text-italic">{{.i18n.Tr "repo.no_desc"}}</span>{{end}} | |||
<a class="link" href="{{.Repository.Website}}">{{.Repository.Website}}</a> | |||
</p> | |||
</div> | |||
<p class="ui" id="repo-topics"> | |||
<i class="grey bookmark icon"></i> | |||
{{range .Topics}}<a class="ui repo-topic small label topic" href="{{AppSubUrl}}/explore/repos?q={{.Name}}&topic=1">{{.Name}}</a>{{end}} | |||
{{if and .Permission.IsAdmin (not .Repository.IsArchived)}}<a id="manage_topic">{{.i18n.Tr "repo.topic.manage_topics"}}</a>{{end}} | |||
</p> | |||
<p class="ui"> | |||
<i class="grey code icon"></i> | |||
{{range .LanguageStats}} | |||
{{.Language}} | |||
{{end}} | |||
</p> | |||
<p class="ui"> | |||
<i class="grey clone icon"></i> | |||
{{if .LICENSE}} | |||
{{.LICENSE}} | |||
{{end}} | |||
</p> | |||
<div class="ui divider"></div> | |||
<div> | |||
<h4 class="ui header"> | |||
<strong>贡献者</strong> | |||
<div class="ui right"> | |||
<a class="text grey" href="">全部 {{svg "octicon-chevron-right" 16}}</a> | |||
</div> | |||
</h4> | |||
<div class="ui members"> | |||
{{range .ContributorInfo}} | |||
{{/*<img class="ui avatar image" src="{{.UserInfo.RelAvatarLink}}" alt=""/> <a href="{{AppSubUrl}}/{{.UserInfo.Name}}">{{.UserInfo.Name}}</a>*/}} | |||
{{if .UserInfo}} | |||
<a href="{{AppSubUrl}}/{{.UserInfo.Name}}"><img class="ui avatar image" src="{{.UserInfo.RelAvatarLink}}" alt=""/></a> | |||
{{else if .Email}} | |||
<a href="mailto:{{.Email}}"><img class="ui avatar image" src="{{AvatarLink .Email}}" alt=""/></a> | |||
{{end}} | |||
{{end}} | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
{{template "base/footer" .}} |