mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 16:40:24 +08:00 
			
		
		
		
	Merge pull request #299 from nuss-justin/issue/216
Fix #216. Change milestones, labels and assigne without reloading the page
This commit is contained in:
		@@ -19,6 +19,7 @@ var (
 | 
				
			|||||||
	ErrIssueNotExist     = errors.New("Issue does not exist")
 | 
						ErrIssueNotExist     = errors.New("Issue does not exist")
 | 
				
			||||||
	ErrLabelNotExist     = errors.New("Label does not exist")
 | 
						ErrLabelNotExist     = errors.New("Label does not exist")
 | 
				
			||||||
	ErrMilestoneNotExist = errors.New("Milestone does not exist")
 | 
						ErrMilestoneNotExist = errors.New("Milestone does not exist")
 | 
				
			||||||
 | 
						ErrWrongIssueCounter = errors.New("Invalid number of issues for this milestone")
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Issue represents an issue or pull request of repository.
 | 
					// Issue represents an issue or pull request of repository.
 | 
				
			||||||
@@ -713,6 +714,11 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) {
 | 
				
			|||||||
		if issue.IsClosed {
 | 
							if issue.IsClosed {
 | 
				
			||||||
			m.NumClosedIssues++
 | 
								m.NumClosedIssues++
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if m.NumIssues == 0 {
 | 
				
			||||||
 | 
								return ErrWrongIssueCounter
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		m.Completeness = m.NumClosedIssues * 100 / m.NumIssues
 | 
							m.Completeness = m.NumClosedIssues * 100 / m.NumIssues
 | 
				
			||||||
		if _, err = sess.Id(m.Id).Update(m); err != nil {
 | 
							if _, err = sess.Id(m.Id).Update(m); err != nil {
 | 
				
			||||||
			sess.Rollback()
 | 
								sess.Rollback()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -577,15 +577,28 @@ function initIssue() {
 | 
				
			|||||||
        if (is_issue_bar) {
 | 
					        if (is_issue_bar) {
 | 
				
			||||||
            var assignee = $a.data("assigned");
 | 
					            var assignee = $a.data("assigned");
 | 
				
			||||||
            if (uid != assignee) {
 | 
					            if (uid != assignee) {
 | 
				
			||||||
 | 
					                var text = $(this).text();
 | 
				
			||||||
 | 
					                var img = $("img", this).attr("src");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $.post($a.data("ajax"), {
 | 
					                $.post($a.data("ajax"), {
 | 
				
			||||||
                    issue: $('#issue').data("id"),
 | 
					                    issue: $('#issue').data("id"),
 | 
				
			||||||
                    assigneeid: uid
 | 
					                    assigneeid: uid
 | 
				
			||||||
                }, function (json) {
 | 
					                }, function (json) {
 | 
				
			||||||
                    if (json.ok) {
 | 
					                    if (json.ok) {
 | 
				
			||||||
                        window.location.reload();
 | 
					                        //window.location.reload();
 | 
				
			||||||
 | 
					                        $a.data("assigned", uid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (uid > 0) {    
 | 
				
			||||||
 | 
					                            $('.clear-assignee').toggleShow();
 | 
				
			||||||
 | 
					                            $(".assignee > p").html('<img src="' + img + '"><strong>' + text + '</strong>');
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                            $('.clear-assignee').toggleHide();
 | 
				
			||||||
 | 
					                            $(".assignee > p").text("No one assigned");
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                })
 | 
					                })
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        $('#assignee').val(uid);
 | 
					        $('#assignee').val(uid);
 | 
				
			||||||
@@ -611,24 +624,31 @@ function initIssue() {
 | 
				
			|||||||
        $('.clear-milestone').toggleShow();
 | 
					        $('.clear-milestone').toggleShow();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    $('.milestone', '#issue').on('click', 'li.milestone-item', function () {
 | 
					    $('.milestone', '#issue').on('click', 'li.milestone-item', function () {
 | 
				
			||||||
        var id = $(this).data("id");
 | 
					        var id = $(this).data("id");    
 | 
				
			||||||
        if (is_issue_bar) {
 | 
					        if (is_issue_bar) {
 | 
				
			||||||
            var m = $m.data("milestone");
 | 
					            var m = $m.data("milestone");
 | 
				
			||||||
            if (id != m) {
 | 
					            if (id != m) {
 | 
				
			||||||
 | 
					                var text = $(this).text();
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
                $.post($m.data("ajax"), {
 | 
					                $.post($m.data("ajax"), {
 | 
				
			||||||
                    issue: $('#issue').data("id"),
 | 
					                    issue: $('#issue').data("id"),
 | 
				
			||||||
                    milestone: id
 | 
					                    milestone: id
 | 
				
			||||||
                }, function (json) {
 | 
					                }, function (json) {
 | 
				
			||||||
                    if (json.ok) {
 | 
					                    if (json.ok) {
 | 
				
			||||||
                        window.location.reload();
 | 
					                        //window.location.reload();
 | 
				
			||||||
                        if (id > 0) {
 | 
					                        $m.data("milestone", id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                        if (id > 0) {    
 | 
				
			||||||
                            $('.clear-milestone').toggleShow();
 | 
					                            $('.clear-milestone').toggleShow();
 | 
				
			||||||
 | 
					                            $(".milestone > .name").html('<a href="' + location.pathname + '?milestone=' + id + '"><strong>' + text + '</strong></a>');
 | 
				
			||||||
                        } else {
 | 
					                        } else {
 | 
				
			||||||
                            $('.clear-milestone').toggleHide();
 | 
					                            $('.clear-milestone').toggleHide();
 | 
				
			||||||
 | 
					                            $(".milestone > .name").text("No milestone");
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                })
 | 
					                });
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        $('#milestone-id').val(id);
 | 
					        $('#milestone-id').val(id);
 | 
				
			||||||
@@ -708,13 +728,38 @@ function initIssue() {
 | 
				
			|||||||
        var color = $item.find('.color').data('color');
 | 
					        var color = $item.find('.color').data('color');
 | 
				
			||||||
        $item.css('background-color', color);
 | 
					        $item.css('background-color', color);
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    $('.issue-bar .labels .dropdown-menu').on('click', 'li', function (e) {
 | 
					    $('.issue-bar .labels .dropdown-menu').on('click', 'li', function (e) {
 | 
				
			||||||
        var url = $('.issue-bar .labels').data("ajax");
 | 
					        var $labels = $('.issue-bar .labels');
 | 
				
			||||||
 | 
					        var url = $labels.data("ajax");
 | 
				
			||||||
        var id = $(this).data('id');
 | 
					        var id = $(this).data('id');
 | 
				
			||||||
        var check = $(this).hasClass("checked");
 | 
					        var check = $(this).hasClass("checked");
 | 
				
			||||||
 | 
					        var item = this;
 | 
				
			||||||
        $.post(url, {id: id, action: check ? 'detach' : "attach", issue: $('#issue').data('id')}, function (json) {
 | 
					        $.post(url, {id: id, action: check ? 'detach' : "attach", issue: $('#issue').data('id')}, function (json) {
 | 
				
			||||||
            if (json.ok) {
 | 
					            if (json.ok) {
 | 
				
			||||||
                window.location.reload();
 | 
					                if (check) {
 | 
				
			||||||
 | 
					                    $("span.check.pull-left", item).remove();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    $(item).removeClass("checked");
 | 
				
			||||||
 | 
					                    $(item).addClass("no-checked");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    $("#label-" + id, $labels).remove();
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    $(item).prepend('<span class="check pull-left"><i class="fa fa-check"></i></span>');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    $(item).removeClass("no-checked");
 | 
				
			||||||
 | 
					                    $(item).addClass("checked");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    var $l = $("<p></p>");
 | 
				
			||||||
 | 
					                    var c = $("span.color", item).css("background-color");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    $l.attr("id", "label-" + id);
 | 
				
			||||||
 | 
					                    $l.attr("class", "label-item label-white");
 | 
				
			||||||
 | 
					                    $l.css("background-color", c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    $l.append("<strong>" + $(item).text() + "</strong>");
 | 
				
			||||||
 | 
					                    $labels.append($l);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        e.stopPropagation();
 | 
					        e.stopPropagation();
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user