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" .}} | |||