]> source.dussan.org Git - gitea.git/commitdiff
Fix #348
authorUnknwon <joe2010xtmf@163.com>
Fri, 5 Sep 2014 21:28:09 +0000 (17:28 -0400)
committerUnknwon <joe2010xtmf@163.com>
Fri, 5 Sep 2014 21:28:09 +0000 (17:28 -0400)
13 files changed:
README.md
README_ZH.md
cmd/web.go
conf/locale/locale_en-US.ini
conf/locale/locale_zh-CN.ini
gogs.go
models/repo.go
routers/home.go
templates/.VERSION
templates/explore/nav.tmpl [new file with mode: 0644]
templates/explore/repos.tmpl [new file with mode: 0644]
templates/org/settings/options.tmpl
templates/status/404.tmpl

index ddb8367e9f7ae1eb51f9d9984f8f7e8210da5957..689b0df4fa9ba0c204f910b4738f7e62d1462569 100644 (file)
--- a/README.md
+++ b/README.md
@@ -59,7 +59,7 @@ There are 5 ways to install Gogs:
 - [Install from binary](http://gogs.io/docs/installation/install_from_binary.md): **STRONGLY RECOMMENDED**
 - [Install from source](http://gogs.io/docs/installation/install_from_source.md)
 - [Install from packages](http://gogs.io/docs/installation/install_from_packages.md)
-- [Ship with Docker](https://github.com/gogits/gogs/tree/master/dockerfiles)
+- [Ship with Docker](https://github.com/gogits/gogs/tree/master/docker)
 - [Install with Vagrant](https://github.com/geerlingguy/ansible-vagrant-examples/tree/master/gogs)
 
 ## Acknowledgments
@@ -70,7 +70,6 @@ There are 5 ways to install Gogs:
 - Usage and modification from [beego](http://beego.me) modules.
 - Thanks [lavachen](http://www.lavachen.cn/) and [Rocker](http://weibo.com/rocker1989) for designing Logo.
 - Thanks [gobuild.io](http://gobuild.io) for providing binary compile and download service.
-- Thanks [Docker China](http://www.dockboard.org/) for providing [dockerfiles](https://github.com/gogits/gogs/tree/master/dockerfiles).
 
 ## Contributors
 
index de982baf37cc0c952d43f9f6458174020f042f3a..401c8186c8fe49978911aa932d50f1a8d9674cfd 100644 (file)
@@ -50,7 +50,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
 - [二进制安装](http://gogs.io/docs/installation/install_from_binary.md): **强烈推荐**
 - [源码安装](http://gogs.io/docs/installation/install_from_source.md)
 - [包管理安装](http://gogs.io/docs/installation/install_from_packages.md)
-- [采用 Docker 部署](https://github.com/gogits/gogs/tree/master/dockerfiles)
+- [采用 Docker 部署](https://github.com/gogits/gogs/tree/master/docker)
 - [通过 Vagrant 安装](https://github.com/geerlingguy/ansible-vagrant-examples/tree/master/gogs)
 
 ## 特别鸣谢
@@ -61,7 +61,6 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
 - [martini](http://martini.codegangsta.io/) 的路由与中间件机制。
 - 感谢 [gobuild.io](http://gobuild.io) 提供二进制编译与下载服务。
 - 感谢 [lavachen](http://www.lavachen.cn/) 和 [Rocker](http://weibo.com/rocker1989) 设计的 Logo。
-- 感谢 [Docker 中文社区](http://www.dockboard.org/) 提供的 [dockerfiles](https://github.com/gogits/gogs/tree/master/dockerfiles)。
 
 ## 贡献成员
 
index 57164683ac1cc9d2b590c225e11714448951c375..cad1db336b22a656ab71b75f27050e4625e63951 100644 (file)
@@ -124,6 +124,7 @@ func runWeb(*cli.Context) {
 
        // Routers.
        m.Get("/", ignSignIn, routers.Home)
+       m.Get("/explore", routers.Explore)
        m.Get("/install", bindIgnErr(auth.InstallForm{}), routers.Install)
        m.Post("/install", bindIgnErr(auth.InstallForm{}), routers.InstallPost)
        m.Group("", func(r *macaron.Router) {
index 946d5604614f230bc3c3ae12abe89feb9b9a9d34..e8329933a432ea4ebdab4168c43a646608504ae1 100644 (file)
@@ -47,6 +47,9 @@ collaborative_repos = Collaborative Repositories
 my_orgs = My Organizations
 my_mirrors = My Mirrors
 
+[explore]
+repos = Repositories
+
 [auth]
 create_new_account = Create New Account
 register_hepler_msg = Already have an account? Sign in now!
index 55d22f23eec24798d9eb32c096ed326461e2c56d..a61a54ceb2037f43fcd52e68ca7c7e2192df7783 100644 (file)
@@ -47,6 +47,9 @@ collaborative_repos = 参与协作的仓库
 my_orgs = 我的组织
 my_mirrors = 我的镜像
 
+[explore]
+repos = 探索仓库
+
 [auth]
 create_new_account = 创建帐户
 register_hepler_msg = 已经注册?立即登录!
diff --git a/gogs.go b/gogs.go
index a11601907829acf31439c690229b49ef15b95163..1c012d409832bbe710b33c1f9e6b7fab5227e663 100644 (file)
--- a/gogs.go
+++ b/gogs.go
@@ -17,7 +17,7 @@ import (
        "github.com/gogits/gogs/modules/setting"
 )
 
-const APP_VER = "0.4.9.0902 Beta"
+const APP_VER = "0.4.9.0905 Beta"
 
 func init() {
        runtime.GOMAXPROCS(runtime.NumCPU())
index 23d44a6b808ae5054cacd79e529b428232fe4dd5..341e7e47a1f023a96470e8936237d12c2783e627 100644 (file)
@@ -972,8 +972,8 @@ func GetRepositories(uid int64, private bool) ([]*Repository, error) {
 }
 
 // GetRecentUpdatedRepositories returns the list of repositories that are recently updated.
-func GetRecentUpdatedRepositories() (repos []*Repository, err error) {
-       err = x.Where("is_private=?", false).Limit(5).Desc("updated").Find(&repos)
+func GetRecentUpdatedRepositories(num int) (repos []*Repository, err error) {
+       err = x.Where("is_private=?", false).Limit(num).Desc("updated").Find(&repos)
        return repos, err
 }
 
index 5ea3e2a0277bbac4f6ac6e8ec0a9bdf2f3760c97..36a4f50fd20978b92c080216a81d1e3b87d1ee98 100644 (file)
@@ -5,6 +5,9 @@
 package routers
 
 import (
+       "fmt"
+
+       "github.com/gogits/gogs/models"
        "github.com/gogits/gogs/modules/base"
        "github.com/gogits/gogs/modules/middleware"
        "github.com/gogits/gogs/modules/setting"
@@ -12,7 +15,8 @@ import (
 )
 
 const (
-       HOME base.TplName = "home"
+       HOME          base.TplName = "home"
+       EXPLORE_REPOS base.TplName = "explore/repos"
 )
 
 func Home(ctx *middleware.Context) {
@@ -42,6 +46,26 @@ func Home(ctx *middleware.Context) {
        ctx.HTML(200, HOME)
 }
 
+func Explore(ctx *middleware.Context) {
+       ctx.Data["Title"] = ctx.Tr("explore")
+       ctx.Data["PageIsExploreRepositories"] = true
+
+       repos, err := models.GetRecentUpdatedRepositories(20)
+       if err != nil {
+               ctx.Handle(500, "GetRecentUpdatedRepositories", err)
+               return
+       }
+       for _, repo := range repos {
+               if err = repo.GetOwner(); err != nil {
+                       ctx.Handle(500, "GetOwner", fmt.Errorf("%d: %v", repo.Id, err))
+                       return
+               }
+       }
+       ctx.Data["Repos"] = repos
+
+       ctx.HTML(200, EXPLORE_REPOS)
+}
+
 func NotFound(ctx *middleware.Context) {
        ctx.Data["Title"] = "Page Not Found"
        ctx.Handle(404, "home.NotFound", nil)
index 5f3c51819119e1b055d1e77e3c2a4b3203c95adb..6e361299ef67b849885187712c92ac7dd7059b59 100644 (file)
@@ -1 +1 @@
-0.4.9.0902 Beta
\ No newline at end of file
+0.4.9.0905 Beta
\ No newline at end of file
diff --git a/templates/explore/nav.tmpl b/templates/explore/nav.tmpl
new file mode 100644 (file)
index 0000000..1310bcc
--- /dev/null
@@ -0,0 +1,8 @@
+<div id="setting-menu" class="grid-1-5 panel panel-radius left">
+    <p class="panel-header"><strong>{{.i18n.Tr "explore"}}</strong></p>
+    <div class="panel-body">
+        <ul class="menu menu-vertical switching-list grid-1-5 left">
+            <li {{if .PageIsExploreRepositories}}class="current"{{end}}><a href="/explore">{{.i18n.Tr "explore.repos"}}</a></li>
+        </ul>
+    </div>
+</div>
\ No newline at end of file
diff --git a/templates/explore/repos.tmpl b/templates/explore/repos.tmpl
new file mode 100644 (file)
index 0000000..a1e3d40
--- /dev/null
@@ -0,0 +1,25 @@
+{{template "ng/base/head" .}}
+{{template "ng/base/header" .}}
+<div id="setting-wrapper" class="main-wrapper">
+    <div id="org-setting" class="container clear">
+           {{template "explore/nav" .}}
+        <div class="grid-4-5 left">
+            <div class="setting-content">
+               <div id="org-repo-list">
+                                       {{range .Repos}}
+                                       <div class="org-repo-item">
+                                   <ul class="org-repo-status right">
+                                       <li><i class="octicon octicon-star"></i> {{.NumStars}}</li>
+                                       <li><i class="octicon octicon-git-branch"></i> {{.NumForks}}</li>
+                                   </ul>
+                                               <h2><a href="/{{.Owner.Name}}/{{.Name}}">{{.Name}}</a></h2>
+                                               <p class="org-repo-description">{{.Description}}</p>
+                                               <p class="org-repo-updated">{{$.i18n.Tr "org.repo_updated"}} {{TimeSince .Updated $.i18n.Lang}}</p>
+                                       </div>
+                                       {{end}}
+               </div>
+                       </div>
+        </div>
+    </div>
+</div>
+{{template "ng/base/footer" .}}
\ No newline at end of file
index ae225a9ca4d248f4d14643d4bc76e0135e3c3fdf..14ea1b349d11989dd31fe74f0671cf8999f6e6d3 100644 (file)
@@ -3,54 +3,54 @@
 {{template "org/base/header" .}}
 <div id="setting-wrapper" class="main-wrapper">
     <div id="org-setting" class="container clear">
-               {{template "org/settings/nav" .}}
-               <div class="grid-4-5 left">
-                   <div class="setting-content">
-                       {{template "ng/base/alert" .}}
-                       <div id="setting-content">
-                           <div id="user-profile-setting-content" class="panel panel-radius">
-                               <div class="panel-header">
-                                       <strong>{{.i18n.Tr "org.settings.options"}}</strong>
-                               </div>
-                               <form class="form form-align panel-body" id="org-setting-form" action="/org/{{.Org.LowerName}}/settings" method="post">
-                                   {{.CsrfTokenHtml}}
-                                       <input type="hidden" name="action" value="update">
-                                   <div class="field">
-                                       <label class="req" for="orgname">{{.i18n.Tr "username"}}</label>
-                                       <input class="ipt ipt-large ipt-radius {{if .Err_UserName}}ipt-error{{end}}" id="orgname" name="uname" value="{{.Org.Name}}" data-orgname="{{.Org.Name}}" required />
-                                   </div>
-                                   <div class="field">
-                                       <label for="full-name">{{.i18n.Tr "org.settings.full_name"}}</label>
-                                       <input class="ipt ipt-large ipt-radius {{if .Err_FullName}}ipt-error{{end}}" id="full-name" name="fullname" value="{{.Org.FullName}}" />
-                                   </div>
-                                   <div class="field">
-                                       <label class="req" for="email">{{.i18n.Tr "email"}}</label>
-                                       <input class="ipt ipt-large ipt-radius {{if .Err_Email}}ipt-error{{end}}" id="email" name="email" type="email" value="{{.Org.Email}}" required />
-                                   </div>
-                                                   <div class="field clear">
-                                                       <label class="left" for="desc">{{.i18n.Tr "org.org_desc"}}</label>
-                                                       <textarea class="ipt ipt-large ipt-radius {{if .Err_Description}}ipt-error{{end}}" id="desc" name="desc">{{.Org.Description}}</textarea>
-                                                   </div>
-                                   <div class="field">
-                                       <label for="website">{{.i18n.Tr "org.settings.website"}}</label>
-                                       <input class="ipt ipt-large ipt-radius {{if .Err_Website}}ipt-error{{end}}" id="website" name="website" type="url" value="{{.Org.Website}}" />
-                                   </div>
-                                   <div class="field">
-                                       <label for="location">{{.i18n.Tr "org.settings.location"}}</label>
-                                       <input class="ipt ipt-large ipt-radius {{if .Err_Location}}ipt-error{{end}}" id="location" name="location" type="text" value="{{.Org.Location}}" />
-                                   </div>
-                                   <div class="field">
-                                       <label for="gravatar-email">Gravatar {{.i18n.Tr "email"}}</label>
-                                       <input class="ipt ipt-large ipt-radius {{if .Err_Avatar}}ipt-error{{end}}" id="gravatar-email" name="avatar" type="text" value="{{.Org.AvatarEmail}}" />
-                                   </div>
-                                   <div class="field">
-                                       <span class="form-label"></span>
-                                       <button class="btn btn-green btn-large btn-radius">{{.i18n.Tr "org.settings.update_settings"}}</button>
-                                   </div>
-                               </form>
-                           </div>
-                       </div>
-                   </div>
+        {{template "org/settings/nav" .}}
+        <div class="grid-4-5 left">
+            <div class="setting-content">
+                {{template "ng/base/alert" .}}
+                <div id="setting-content">
+                    <div id="user-profile-setting-content" class="panel panel-radius">
+                        <div class="panel-header">
+                               <strong>{{.i18n.Tr "org.settings.options"}}</strong>
+                        </div>
+                        <form class="form form-align panel-body" id="org-setting-form" action="/org/{{.Org.LowerName}}/settings" method="post">
+                            {{.CsrfTokenHtml}}
+                                       <input type="hidden" name="action" value="update">
+                            <div class="field">
+                                <label class="req" for="orgname">{{.i18n.Tr "username"}}</label>
+                                <input class="ipt ipt-large ipt-radius {{if .Err_UserName}}ipt-error{{end}}" id="orgname" name="uname" value="{{.Org.Name}}" data-orgname="{{.Org.Name}}" required />
+                            </div>
+                            <div class="field">
+                                <label for="full-name">{{.i18n.Tr "org.settings.full_name"}}</label>
+                                <input class="ipt ipt-large ipt-radius {{if .Err_FullName}}ipt-error{{end}}" id="full-name" name="fullname" value="{{.Org.FullName}}" />
+                            </div>
+                            <div class="field">
+                                <label class="req" for="email">{{.i18n.Tr "email"}}</label>
+                                <input class="ipt ipt-large ipt-radius {{if .Err_Email}}ipt-error{{end}}" id="email" name="email" type="email" value="{{.Org.Email}}" required />
+                            </div>
+                                           <div class="field clear">
+                                               <label class="left" for="desc">{{.i18n.Tr "org.org_desc"}}</label>
+                                               <textarea class="ipt ipt-large ipt-radius {{if .Err_Description}}ipt-error{{end}}" id="desc" name="desc">{{.Org.Description}}</textarea>
+                                           </div>
+                            <div class="field">
+                                <label for="website">{{.i18n.Tr "org.settings.website"}}</label>
+                                <input class="ipt ipt-large ipt-radius {{if .Err_Website}}ipt-error{{end}}" id="website" name="website" type="url" value="{{.Org.Website}}" />
+                            </div>
+                            <div class="field">
+                                <label for="location">{{.i18n.Tr "org.settings.location"}}</label>
+                                <input class="ipt ipt-large ipt-radius {{if .Err_Location}}ipt-error{{end}}" id="location" name="location" type="text" value="{{.Org.Location}}" />
+                            </div>
+                            <div class="field">
+                                <label for="gravatar-email">Gravatar {{.i18n.Tr "email"}}</label>
+                                <input class="ipt ipt-large ipt-radius {{if .Err_Avatar}}ipt-error{{end}}" id="gravatar-email" name="avatar" type="text" value="{{.Org.AvatarEmail}}" />
+                            </div>
+                            <div class="field">
+                                <span class="form-label"></span>
+                                <button class="btn btn-green btn-large btn-radius">{{.i18n.Tr "org.settings.update_settings"}}</button>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
            </div>
        </div>
 </div>
index 2d04b55917a75ca04b516390eb2081b370416966..e024715ed2cbcdf17e9359c202d79752dc23ad81 100644 (file)
@@ -1,11 +1,11 @@
 {{template "ng/base/head" .}}
 {{template "ng/base/header" .}}
-<div id="body" class="container text-center">
+<div class="container text-center">
     <p style="margin-top: 100px"><img src="/img/404.png" alt="404"/></p>
     <hr/>
     <br>
     <p>Application Version: {{AppVer}}</p>
     <p>If you think this is an error, please open an issue on <a href="https://github.com/gogits/gogs/issues/new">GitHub</a>.</p>
-    <h3>We're currently working on 0.5 beta version, many pages may be missing at this time. Sorry for confusion!</h3>
+    <!-- <p>We're currently working on 0.5 beta version, many pages may be missing at this time. Sorry for confusion!</p> -->
 </div>
 {{template "ng/base/footer" .}}