Browse Source

Merge branch 'master' of github.com:gogits/gogs

Unknown 11 years ago
parent
commit
5c3054c3b7

+ 3 - 0
models/repo.go

@@ -307,6 +307,9 @@ func DeleteRepository(userId, repoId int64, userName string) (err error) {
 	}
 
 	session := orm.NewSession()
+	if err = session.Begin(); err != nil {
+		return err
+	}
 	if _, err = session.Delete(&Repository{Id: repoId}); err != nil {
 		session.Rollback()
 		return err

+ 0 - 7
modules/auth/repo.go

@@ -17,7 +17,6 @@ import (
 )
 
 type CreateRepoForm struct {
-	UserId      int64  `form:"userId"`
 	RepoName    string `form:"repo" binding:"Required;AlphaDash"`
 	Visibility  string `form:"visibility"`
 	Description string `form:"desc" binding:"MaxSize(100)"`
@@ -52,9 +51,3 @@ func (f *CreateRepoForm) Validate(errors *binding.Errors, req *http.Request, con
 
 	validate(errors, data, f)
 }
-
-type DeleteRepoForm struct {
-	UserId   int64  `form:"userId" binding:"Required"`
-	UserName string `form:"userName" binding:"Required"`
-	RepoId   int64  `form:"repoId" binding:"Required"`
-}

+ 6 - 6
public/css/gogs.css

@@ -51,7 +51,6 @@ html, body {
 .gogs-masthead {
     background-color: #428bca;
     box-shadow: inset 0 -2px 5px rgba(0, 0, 0, .1);
-    padding: 0 16px;
     margin: 0;
 }
 
@@ -133,6 +132,11 @@ html, body {
     padding: 5px 0;
     margin-left: 10px;
     height: 28px;
+    float: right;
+}
+
+#gogs-nav-signin{
+    float: right;
 }
 
 #gogs-nav-out .fa {
@@ -349,10 +353,6 @@ html, body {
 
 /* #gogs-feed */
 
-#gogs-feed-left {
-    padding-left: 0;
-}
-
 #gogs-feed-right .repo-panel .panel-heading .btn {
     margin-top: -4px;
 }
@@ -635,7 +635,7 @@ html, body {
 }
 
 #footer .footer-wrap {
-    padding: 20px 0;
+    padding: 20px 15px;
 }
 
 #footer a {

+ 24 - 11
public/js/app.js

@@ -43,7 +43,15 @@ var Gogits = {
     Gogits.initTabs = function () {
         var $tabs = $('[data-init=tabs]');
         $tabs.find("li:eq(0) a").tab("show");
+    };
+
+    // render markdown
+    Gogits.renderMarkdown = function () {
+        var $pre = $('.markdown').find('pre > code').parent();
+        $pre.addClass("prettyprint");
+        prettyPrint();
     }
+
 })(jQuery);
 
 // ajax utils
@@ -70,6 +78,7 @@ function initCore() {
     Gogits.initTooltips();
     Gogits.initTabs();
     Gogits.initModals();
+    Gogits.renderMarkdown();
 }
 
 function initRegister() {
@@ -98,14 +107,14 @@ function initRegister() {
     });
 }
 
-function initUserSetting(){
+function initUserSetting() {
     $('#gogs-ssh-keys .delete').confirmation({
         singleton: true,
-        onConfirm: function(e, $this){
-            Gogits.ajaxDelete("",{"id":$this.data("del")},function(json){
-                if(json.ok){
+        onConfirm: function (e, $this) {
+            Gogits.ajaxDelete("", {"id": $this.data("del")}, function (json) {
+                if (json.ok) {
                     window.location.reload();
-                }else{
+                } else {
                     alert(json.err);
                 }
             });
@@ -113,11 +122,15 @@ function initUserSetting(){
     });
 }
 
-;(function($){
-    // on Dom Ready
-    $(function(){
-        var $pre = $('.markdown').find('pre > code').parent();
-        $pre.addClass("prettyprint");
-        prettyPrint();
+(function ($) {
+    $(function () {
+        initCore();
+        var body = $("#gogs-body");
+        if (body.data("page") == "user-signup") {
+            initRegister();
+        }
+        if (body.data("page") == "user") {
+            initUserSetting();
+        }
     });
 })(jQuery);

+ 20 - 34
routers/repo/repo.go

@@ -20,49 +20,35 @@ func Create(ctx *middleware.Context, form auth.CreateRepoForm) {
 		return
 	}
 
-	if ctx.HasError() {
-		ctx.Render.HTML(200, "repo/create", ctx.Data)
+	if _, err := models.CreateRepository(ctx.User,
+		form.RepoName, form.Description, form.Language, form.License,
+		form.Visibility == "private", form.InitReadme == "on"); err == nil {
+		ctx.Render.Redirect("/"+ctx.User.Name+"/"+form.RepoName, 302)
 		return
-	}
-
-	// TODO: access check
-
-	user, err := models.GetUserById(form.UserId)
-	if err != nil {
-		if err.Error() == models.ErrUserNotExist.Error() {
-			ctx.RenderWithErr("User does not exist", "repo/create", &form)
-			return
-		}
-	}
-
-	if err == nil {
-		if _, err = models.CreateRepository(user,
-			form.RepoName, form.Description, form.Language, form.License,
-			form.Visibility == "private", form.InitReadme == "on"); err == nil {
-			ctx.Render.Redirect("/"+user.Name+"/"+form.RepoName, 302)
-			return
-		}
-	}
-
-	if err.Error() == models.ErrRepoAlreadyExist.Error() {
+	} else if err == models.ErrRepoAlreadyExist {
 		ctx.RenderWithErr("Repository name has already been used", "repo/create", &form)
 		return
 	}
-
-	ctx.Handle(200, "repo.Create", err)
 }
 
-func Delete(ctx *middleware.Context, form auth.DeleteRepoForm) {
-	ctx.Data["Title"] = "Delete repository"
-
-	if ctx.Req.Method == "GET" {
-		ctx.Render.HTML(200, "repo/delete", ctx.Data)
+func SettingPost(ctx *middleware.Context) {
+	if !ctx.Repo.IsOwner {
+		ctx.Render.Error(404)
 		return
 	}
 
-	if err := models.DeleteRepository(form.UserId, form.RepoId, form.UserName); err != nil {
-		ctx.Handle(200, "repo.Delete", err)
-		return
+	switch ctx.Query("action") {
+	case "delete":
+		if len(ctx.Repo.Repository.Name) == 0 || ctx.Repo.Repository.Name != ctx.Query("repository") {
+			ctx.Data["ErrorMsg"] = "Please make sure you entered repository name is correct."
+			ctx.Render.HTML(200, "repo/setting", ctx.Data)
+			return
+		}
+
+		if err := models.DeleteRepository(ctx.User.Id, ctx.Repo.Repository.Id, ctx.User.LowerName); err != nil {
+			ctx.Handle(200, "repo.Delete", err)
+			return
+		}
 	}
 
 	ctx.Render.Redirect("/", 302)

+ 2 - 1
routers/repo/single.go

@@ -78,7 +78,8 @@ func Single(ctx *middleware.Context, params martini.Params) {
 }
 
 func Setting(ctx *middleware.Context, params martini.Params) {
-	if !ctx.Repo.IsValid {
+	if !ctx.Repo.IsOwner {
+		ctx.Render.Error(404)
 		return
 	}
 

+ 7 - 14
templates/base/footer.tmpl

@@ -1,19 +1,12 @@
-<script>
-    $(function(){
-        initCore();{{if .PageIsSignUp}}
-        initRegister();{{end}}{{if .PageIsUserSetting}}
-        initUserSetting();{{end}}
-    });
-</script>
-	<div class="wrapper-push"></div>
+<div class="wrapper-push"></div>
 </div>
 <footer id="footer">
-	<div class="container footer-wrap">
-		<p>
-			© 2014 Gogs · ver {{AppVer}} · <i class="fa fa-github"></i><a target="_blank" href="https://github.com/gogits/gogs">GitHub</a>
-		</p>
-		<p class="desc"></p>
-	</div>
+    <div class="container footer-wrap">
+        <p>© 2014 Gogs · ver {{AppVer}} ·
+            <i class="fa fa-github"></i><a target="_blank" href="https://github.com/gogits/gogs">GitHub</a>
+        </p>
+        <p class="desc"></p>
+    </div>
 </footer>
 </body>
 </html>

+ 0 - 12
templates/repo/delete.tmpl

@@ -1,12 +0,0 @@
-{{template "base/head" .}}
-{{template "base/navbar" .}}
-<div class="container">
-	<form action="/repo/delete" method="post" class="form-horizontal">
-		<div class="form-group">
-		    <div class="col-md-offset-4 col-md-3">
-		    	<button type="submit" class="btn btn-danger">Delete repository</button>
-		    </div>
-		</div>
-	</form>
-</div>
-{{template "base/footer" .}}

+ 49 - 19
templates/repo/setting.tmpl

@@ -4,30 +4,60 @@
 {{template "repo/toolbar" .}}
 <div id="gogs-body" class="container">
     <div id="gogs-user-setting-nav" class="col-md-3">
-        <h4>Repository Settings</h4>
         <ul class="list-group" data-init="tabs">
-            <li class="list-group-item"><a href="#options" data-toggle="tab">Options</a></li>
-            <!--<li class="list-group-item" data-toggle="tab"><a href="#">Collaborators</a></li>
-            <li class="list-group-item" data-toggle="tab"><a href="#">Notifications</a></li>-->
-            <li class="list-group-item"><a href="#delete" data-toggle="tab">Delete</a></li>
+            <li class="list-group-item active"><a href="/{{.Owner.Name}}/{{.Repository.Name}}/settings">Options</a></li>
+            <!--<li class="list-group-item"><a href="#">Collaborators</a></li>
+            <li class="list-group-item"><a href="#">Notifications</a></li>-->
         </ul>
     </div>
-    <div id="gogs-repo-setting-container" class="col-md-9 tab-content">
-        <div id="options" class="tab-pane">
-            <h4>Repository Options</h4>
+    <div id="gogs-repo-setting-container" class="col-md-9">
+        {{if .ErrorMsg}}<p class="alert alert-danger">{{.ErrorMsg}}</p>{{end}}
+        <div class="panel panel-default">
+            <div class="panel-heading">
+                Repository Options
+            </div>
+            <div class="panel-body">
+                
+            </div>
         </div>
-        <div id="delete" class="tab-pane">
-            <h4>Delete Repository</h4>
-            <p class="alert alert-warning">Unexpected bad things will happen if you don't read this!</p>
-            <p>This action <strong>CANNOT</strong> be undone. This will delete the repository, wiki, issues, and comments permanently. </p>
+        <div class="panel panel-warning">
+            <div class="panel-heading">
+                Danger Zone
+            </div>
+            <div class="panel-body">
+                <button type="button" class="btn btn-default pull-right" href="#delete-repository-modal" data-toggle="modal">
+                    Delete this repository
+                </button>
+                <dd>
+                    <dt>Delete this repository.</dt>
+                    <dl>Once you delete a repository, there is no going back. Please be certain.</dl>
+                </dd>
 
-            <form action="/repo/delete" method="post">
-                <input type="hidden" name="userId" value="{{.Owner.Id}}"/>
-                <input type="hidden" name="userName" value="{{.Owner.Name}}"/>
-                <input type="hidden" name="repoId" value="{{.Repository.Id}}"/>
-                <hr/>
-                <button class="btn btn-danger btn-lg">I understand the consequences, delete this repository</button>
-            </form>
+                <div class="modal fade" id="delete-repository-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+                    <div class="modal-dialog">
+                        <form action="/{{.Owner.Name}}/{{.Repository.Name}}/settings" method="post" class="modal-content">
+                            <input type="hidden" name="action" value="delete">
+
+                            <div class="modal-header">
+                                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                                <h4 class="modal-title" id="myModalLabel">Delete repository</h4>
+                            </div>
+
+                            <div class="modal-body">
+                                <div class="form-group">
+                                    <label>Please enter your repository name "<strong class="text-danger">{{.Repository.Name}}</strong>"</label>
+                                    <input name="repository" class="form-control" type="text" placeholder="Type your repository name" required="required">
+                                </div>
+                            </div>
+
+                            <div class="modal-footer">
+                                <button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
+                                <button class="btn btn-danger btn-lg">I understand the consequences, delete this repository</button>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
         </div>
     </div>
 </div>

+ 1 - 1
templates/user/dashboard.tmpl

@@ -11,7 +11,7 @@
         <h3>News Feed</h3>
     </div>
 </div>
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     {{if .HasInfo}}<div class="alert alert-info">{{.InfoMsg}}</div>{{end}}
     <div id="gogs-feed-left" class="col-md-8">
         <ul class="list-unstyled activity-list">

+ 1 - 1
templates/user/delete.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     <div id="gogs-user-setting-nav" class="col-md-3">
         <h4>Account Setting</h4>
         <ul class="list-group">

+ 1 - 1
templates/user/notification.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     <div id="gogs-user-setting-nav" class="col-md-3">
         <h4>Account Setting</h4>
         <ul class="list-group">

+ 1 - 1
templates/user/password.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     <div id="gogs-user-setting-nav" class="col-md-3">
         <h4>Account Setting</h4>
         <ul class="list-group">

+ 1 - 1
templates/user/profile.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     <div id="gogs-user-profile" class="col-md-3">
         <div class="profile-avatar text-center">
             <a href="{{.Owner.HomeLink}}" class="center-block" data-toggle="tooltip" data-placement="bottom" title="Change Avatar">

+ 1 - 1
templates/user/publickey.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     <div id="gogs-user-setting-nav" class="col-md-3">
         <h4>Account Setting</h4>
         <ul class="list-group">

+ 1 - 1
templates/user/security.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     <div id="gogs-user-setting-nav" class="col-md-3">
         <h4>Account Setting</h4>
         <ul class="list-group">

+ 1 - 1
templates/user/setting.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div id="gogs-body" class="container">
+<div id="gogs-body" class="container" data-page="user">
     <div id="gogs-user-setting-nav" class="col-md-3">
         <h4>Account Setting</h4>
         <ul class="list-group">

+ 1 - 1
templates/user/signin.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div class="container" id="gogs-body">
+<div class="container" id="gogs-body" data-page="user-signin">
     <form action="/user/login" method="post" class="form-horizontal gogs-card" id="gogs-login-card">
         <h3>Log in</h3>
         <div class="alert alert-danger form-error{{if .HasError}}{{else}} hidden{{end}}">{{.ErrorMsg}}</div>

+ 1 - 1
templates/user/signup.tmpl

@@ -1,6 +1,6 @@
 {{template "base/head" .}}
 {{template "base/navbar" .}}
-<div class="container" id="gogs-body">
+<div class="container" id="gogs-body" data-page="user-signup">
 	<form action="/user/sign_up" method="post" class="form-horizontal gogs-card" id="gogs-login-card">
         <h3>Sign Up</h3>
 	    <div class="alert alert-danger form-error{{if .HasError}}{{else}} hidden{{end}}">{{.ErrorMsg}}</div>

+ 3 - 2
web.go

@@ -68,11 +68,12 @@ func runWeb(*cli.Context) {
 	m.Get("/user/:username", middleware.SignInRequire(false), user.Profile)
 
 	m.Any("/repo/create", middleware.SignInRequire(true), binding.BindIgnErr(auth.CreateRepoForm{}), repo.Create)
-	m.Any("/repo/delete", middleware.SignInRequire(true), binding.Bind(auth.DeleteRepoForm{}), repo.Delete)
 
 	m.Get("/help", routers.Help)
 
-	m.Get("/:username/:reponame/settings", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Setting)
+	m.Post("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.SettingPost)
+	m.Get("/:username/:reponame/settings", middleware.SignInRequire(true), middleware.RepoAssignment(true), repo.Setting)
+
 	m.Get("/:username/:reponame/commits", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Commits)
 	m.Get("/:username/:reponame/issues", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Issues)
 	m.Get("/:username/:reponame/pulls", middleware.SignInRequire(false), middleware.RepoAssignment(true), repo.Pulls)