finish create issue with milestone
This commit is contained in:
		
							parent
							
								
									922f3f3062
								
							
						
					
					
						commit
						09a1b2a1f5
					
				| @ -368,10 +368,14 @@ commits.newer = Newer | ||||
| 
 | ||||
| issues.new = New Issue | ||||
| issues.new.labels = Labels | ||||
| issues.new.no_label = No Label | ||||
| issues.new.clear_labels = Clear labels | ||||
| issues.new.milestone = Milestone | ||||
| issues.new.no_milestone = No Milestone | ||||
| issues.new.clear_milestone = Clear milestone | ||||
| issues.new.open_milestone = Open Milestones | ||||
| issues.new.closed_milestone = Closed Milestones | ||||
| issues.new.assignee = Assignee | ||||
| issues.new.no_label = No Label | ||||
| issues.create = Create Issue | ||||
| issues.new_label = New Label | ||||
| issues.new_label_placeholder = Label name... | ||||
|  | ||||
| @ -268,6 +268,7 @@ func (err ErrLabelNotExist) Error() string { | ||||
| 
 | ||||
| type ErrMilestoneNotExist struct { | ||||
| 	ID     int64 | ||||
| 	RepoID int64 | ||||
| } | ||||
| 
 | ||||
| func IsErrMilestoneNotExist(err error) bool { | ||||
| @ -276,5 +277,5 @@ func IsErrMilestoneNotExist(err error) bool { | ||||
| } | ||||
| 
 | ||||
| func (err ErrMilestoneNotExist) Error() string { | ||||
| 	return fmt.Sprintf("milestone does not exist [id: %d]", err.ID) | ||||
| 	return fmt.Sprintf("milestone does not exist [id: %d, repo_id: %d]", err.ID, err.RepoID) | ||||
| } | ||||
|  | ||||
| @ -164,16 +164,13 @@ func NewIssue(issue *Issue, labelIDs []int64) (err error) { | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if err = sess.Commit(); err != nil { | ||||
| 	if issue.MilestoneID > 0 { | ||||
| 		if err = changeMilestoneAssign(sess, 0, issue); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 	if issue.MilestoneID > 0 { | ||||
| 		// FIXES(280): Update milestone counter.
 | ||||
| 		return ChangeMilestoneAssign(0, issue.MilestoneID, issue) | ||||
| 	} | ||||
| 
 | ||||
| 	return | ||||
| 	return sess.Commit() | ||||
| } | ||||
| 
 | ||||
| // GetIssueByRef returns an Issue specified by a GFM reference.
 | ||||
| @ -497,15 +494,14 @@ func GetUserIssueStats(uid int64, filterMode int) *IssueStats { | ||||
| 	return stats | ||||
| } | ||||
| 
 | ||||
| func updateIssue(e Engine, issue *Issue) error { | ||||
| 	_, err := e.Id(issue.ID).AllCols().Update(issue) | ||||
| 	return err | ||||
| } | ||||
| 
 | ||||
| // UpdateIssue updates information of issue.
 | ||||
| func UpdateIssue(issue *Issue) error { | ||||
| 	_, err := x.Id(issue.ID).AllCols().Update(issue) | ||||
| 
 | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return err | ||||
| 	return updateIssue(x, issue) | ||||
| } | ||||
| 
 | ||||
| // UpdateIssueUserByStatus updates issue-user pairs by issue status.
 | ||||
| @ -712,7 +708,7 @@ func NewIssueLabel(issueID, labelID int64) error { | ||||
| 
 | ||||
| func getIssueLabels(e Engine, issueID int64) ([]*IssueLabel, error) { | ||||
| 	issueLabels := make([]*IssueLabel, 0, 10) | ||||
| 	return issueLabels, e.Where("issue_id=?", issueID).Find(&issueLabels) | ||||
| 	return issueLabels, e.Where("issue_id=?", issueID).Asc("label_id").Find(&issueLabels) | ||||
| } | ||||
| 
 | ||||
| // GetIssueLabels returns all issue-label relations of given issue by ID.
 | ||||
| @ -802,14 +798,30 @@ func NewMilestone(m *Milestone) (err error) { | ||||
| 	return sess.Commit() | ||||
| } | ||||
| 
 | ||||
| // GetMilestoneByID returns the milestone of given ID.
 | ||||
| func GetMilestoneByID(id int64) (*Milestone, error) { | ||||
| func getMilestoneByID(e Engine, id int64) (*Milestone, error) { | ||||
| 	m := &Milestone{ID: id} | ||||
| 	has, err := x.Get(m) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} else if !has { | ||||
| 		return nil, ErrMilestoneNotExist{id} | ||||
| 		return nil, ErrMilestoneNotExist{id, 0} | ||||
| 	} | ||||
| 	return m, nil | ||||
| } | ||||
| 
 | ||||
| // GetMilestoneByID returns the milestone of given ID.
 | ||||
| func GetMilestoneByID(id int64) (*Milestone, error) { | ||||
| 	return getMilestoneByID(x, id) | ||||
| } | ||||
| 
 | ||||
| // GetRepoMilestoneByID returns the milestone of given ID and repository.
 | ||||
| func GetRepoMilestoneByID(repoID, milestoneID int64) (*Milestone, error) { | ||||
| 	m := &Milestone{ID: milestoneID, RepoID: repoID} | ||||
| 	has, err := x.Get(m) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} else if !has { | ||||
| 		return nil, ErrMilestoneNotExist{milestoneID, repoID} | ||||
| 	} | ||||
| 	return m, nil | ||||
| } | ||||
| @ -915,16 +927,9 @@ func ChangeMilestoneIssueStats(issue *Issue) error { | ||||
| 	return UpdateMilestone(m) | ||||
| } | ||||
| 
 | ||||
| // ChangeMilestoneAssign changes assignment of milestone for issue.
 | ||||
| func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { | ||||
| 	sess := x.NewSession() | ||||
| 	defer sess.Close() | ||||
| 	if err = sess.Begin(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| func changeMilestoneAssign(e *xorm.Session, oldMid int64, issue *Issue) error { | ||||
| 	if oldMid > 0 { | ||||
| 		m, err := GetMilestoneByID(oldMid) | ||||
| 		m, err := getMilestoneByID(e, oldMid) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| @ -934,20 +939,15 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { | ||||
| 			m.NumClosedIssues-- | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err = sess.Id(m.ID).AllCols().Update(m); err != nil { | ||||
| 			sess.Rollback() | ||||
| 		if err = updateMilestone(e, m); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 
 | ||||
| 		rawSql := "UPDATE `issue_user` SET milestone_id = 0 WHERE issue_id = ?" | ||||
| 		if _, err = sess.Exec(rawSql, issue.ID); err != nil { | ||||
| 			sess.Rollback() | ||||
| 		} else if _, err = e.Exec("UPDATE `issue_user` SET milestone_id=0 WHERE issue_id=?", issue.ID); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if mid > 0 { | ||||
| 		m, err := GetMilestoneByID(mid) | ||||
| 	if issue.MilestoneID > 0 { | ||||
| 		m, err := GetMilestoneByID(issue.MilestoneID) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| @ -961,17 +961,27 @@ func ChangeMilestoneAssign(oldMid, mid int64, issue *Issue) (err error) { | ||||
| 			return ErrWrongIssueCounter | ||||
| 		} | ||||
| 
 | ||||
| 		if _, err = sess.Id(m.ID).AllCols().Update(m); err != nil { | ||||
| 			sess.Rollback() | ||||
| 		if err = updateMilestone(e, m); err != nil { | ||||
| 			return err | ||||
| 		} else if _, err = e.Exec("UPDATE `issue_user` SET milestone_id=? WHERE issue_id=?", m.ID, issue.ID); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| // ChangeMilestoneAssign changes assignment of milestone for issue.
 | ||||
| func ChangeMilestoneAssign(oldMid int64, issue *Issue) (err error) { | ||||
| 	sess := x.NewSession() | ||||
| 	defer sess.Close() | ||||
| 	if err = sess.Begin(); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 		rawSql := "UPDATE `issue_user` SET milestone_id = ? WHERE issue_id = ?" | ||||
| 		if _, err = sess.Exec(rawSql, m.ID, issue.ID); err != nil { | ||||
| 			sess.Rollback() | ||||
| 	if err = changeMilestoneAssign(sess, oldMid, issue); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	} | ||||
| 
 | ||||
| 	return sess.Commit() | ||||
| } | ||||
|  | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										2
									
								
								public/css/gogs.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								public/css/gogs.min.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -2,6 +2,94 @@ | ||||
| 
 | ||||
| var csrf; | ||||
| 
 | ||||
| function initCommentForm() { | ||||
|     if ($('.comment.form').length == 0) { | ||||
|         return | ||||
|     } | ||||
| 
 | ||||
|     var $form = $('.comment.form'); | ||||
|     $form.find('.tabular.menu .item').tab(); | ||||
|     $form.find('.tabular.menu .item[data-tab="preview"]').click(function () { | ||||
|         var $this = $(this); | ||||
|         $.post($this.data('url'), { | ||||
|                 "_csrf": csrf, | ||||
|                 "mode": "gfm", | ||||
|                 "context": $this.data('context'), | ||||
|                 "text": $form.find('.tab.segment[data-tab="write"] textarea').val() | ||||
|             }, | ||||
|             function (data) { | ||||
|                 $form.find('.tab.segment[data-tab="preview"]').html(data); | ||||
|             } | ||||
|         ); | ||||
|     }); | ||||
| 
 | ||||
|     // Labels
 | ||||
|     var $list = $('.ui.labels.list'); | ||||
|     var $no_select = $list.find('.no-select'); | ||||
|     $('.select-label .menu .item:not(.no-select)').click(function () { | ||||
|         if ($(this).hasClass('checked')) { | ||||
|             $(this).removeClass('checked') | ||||
|             $(this).find('.octicon').removeClass('octicon-check') | ||||
|         } else { | ||||
|             $(this).addClass('checked') | ||||
|             $(this).find('.octicon').addClass('octicon-check') | ||||
|         } | ||||
| 
 | ||||
|         var label_ids = ""; | ||||
|         $(this).parent().find('.item').each(function () { | ||||
|             if ($(this).hasClass('checked')) { | ||||
|                 label_ids += $(this).data('id') + ","; | ||||
|                 $($(this).data('id-selector')).removeClass('hide'); | ||||
|             } else { | ||||
|                 $($(this).data('id-selector')).addClass('hide'); | ||||
|             } | ||||
|         }); | ||||
|         if (label_ids.length == 0) { | ||||
|             $no_select.removeClass('hide'); | ||||
|         } else { | ||||
|             $no_select.addClass('hide'); | ||||
|         } | ||||
|         $($(this).parent().data('id')).val(label_ids); | ||||
|         return false; | ||||
|     }); | ||||
|     $('.select-label .menu .no-select.item').click(function () { | ||||
|         $(this).parent().find('.item').each(function () { | ||||
|             $(this).removeClass('checked'); | ||||
|             $(this).find('.octicon').removeClass('octicon-check'); | ||||
|         }); | ||||
| 
 | ||||
|         $list.find('.item').each(function () { | ||||
|             $(this).addClass('hide'); | ||||
|         }); | ||||
|         $no_select.removeClass('hide'); | ||||
|         $($(this).parent().data('id')).val(''); | ||||
|     }); | ||||
| 
 | ||||
|     var $milestone_menu = $('.select-milestone .menu'); | ||||
|     var $milestone_list = $('.ui.select-milestone.list') | ||||
|     // Milestones
 | ||||
|     $milestone_menu.find('.item:not(.no-select)').click(function () { | ||||
|         $(this).parent().find('.item').each(function () { | ||||
|             $(this).removeClass('selected active') | ||||
|         }); | ||||
| 
 | ||||
|         $(this).addClass('selected active'); | ||||
|         $milestone_list.find('.selected').html('<a class="item" href=' + $(this).data('href') + '>' + | ||||
|             $(this).text() + '</a>'); | ||||
|         $('.ui.select-milestone.list .no-select').addClass('hide'); | ||||
|         $('#milestone_id').val($(this).data('id')); | ||||
|     }); | ||||
|     $milestone_menu.find('.no-select.item').click(function () { | ||||
|         $(this).parent().find('.item:not(.no-select)').each(function () { | ||||
|             $(this).removeClass('selected active') | ||||
|         }); | ||||
| 
 | ||||
|         $milestone_list.find('.selected').html(''); | ||||
|         $milestone_list.find('.no-select').removeClass('hide'); | ||||
|         $('#milestone_id').val(''); | ||||
|     }); | ||||
| } | ||||
| 
 | ||||
| function initInstall() { | ||||
|     if ($('.install').length == 0) { | ||||
|         return; | ||||
| @ -133,66 +221,6 @@ $(document).ready(function () { | ||||
|     }); | ||||
|     $('.poping.up').popup(); | ||||
| 
 | ||||
|     // Comment form
 | ||||
|     if ($('.comment.form').length > 0) { | ||||
|         var $form = $(this); | ||||
|         $form.find('.tabular.menu .item').tab(); | ||||
|         $form.find('.tabular.menu .item[data-tab="preview"]').click(function () { | ||||
|             var $this = $(this); | ||||
|             $.post($this.data('url'), { | ||||
|                     "_csrf": csrf, | ||||
|                     "mode": "gfm", | ||||
|                     "context": $this.data('context'), | ||||
|                     "text": $form.find('.tab.segment[data-tab="write"] textarea').val() | ||||
|                 }, | ||||
|                 function (data) { | ||||
|                     $form.find('.tab.segment[data-tab="preview"]').html(data); | ||||
|                 } | ||||
|             ); | ||||
|         }); | ||||
| 
 | ||||
|         // Labels
 | ||||
|         var $list = $('.ui.labels.list'); | ||||
|         var $no_select = $list.find('.no-select'); | ||||
|         $('.select-label .item:not(.no-select)').click(function () { | ||||
|             if ($(this).hasClass('checked')) { | ||||
|                 $(this).removeClass('checked') | ||||
|                 $(this).find('.octicon').removeClass('octicon-check') | ||||
|             } else { | ||||
|                 $(this).addClass('checked') | ||||
|                 $(this).find('.octicon').addClass('octicon-check') | ||||
|             } | ||||
| 
 | ||||
|             var label_ids = ""; | ||||
|             $(this).parent().find('.item').each(function () { | ||||
|                 if ($(this).hasClass('checked')) { | ||||
|                     label_ids += $(this).data('id') + ","; | ||||
|                     $($(this).data('id-selector')).removeClass('hide'); | ||||
|                 } else { | ||||
|                     $($(this).data('id-selector')).addClass('hide'); | ||||
|                 } | ||||
|             }); | ||||
|             if (label_ids.length == 0) { | ||||
|                 $no_select.removeClass('hide'); | ||||
|             } else { | ||||
|                 $no_select.addClass('hide'); | ||||
|             } | ||||
|             $($(this).parent().data('id')).val(label_ids); | ||||
|             return false; | ||||
|         }); | ||||
|         $('.select-label .no-select.item').click(function () { | ||||
|             $(this).parent().find('.item').each(function () { | ||||
|                 $(this).removeClass('checked'); | ||||
|                 $(this).find('.octicon').removeClass('octicon-check'); | ||||
|             }); | ||||
| 
 | ||||
|             $list.find('.item').each(function () { | ||||
|                 $(this).addClass('hide'); | ||||
|             }); | ||||
|             $no_select.removeClass('hide'); | ||||
|             $($(this).parent().data('id')).val(''); | ||||
|         }); | ||||
|     } | ||||
| 
 | ||||
|     // Helpers.
 | ||||
|     $('.delete-button').click(function () { | ||||
| @ -211,6 +239,7 @@ $(document).ready(function () { | ||||
|         return false; | ||||
|     }); | ||||
| 
 | ||||
|     initCommentForm(); | ||||
|     initInstall(); | ||||
|     initRepository(); | ||||
| }); | ||||
| @ -102,7 +102,7 @@ footer { | ||||
| } | ||||
| 
 | ||||
| .hide { | ||||
| 	display: none!important; | ||||
| 	display: none; | ||||
| } | ||||
| .center { | ||||
| 	text-align: center; | ||||
|  | ||||
| @ -29,7 +29,15 @@ | ||||
| 			font-weight: bold; | ||||
| 		} | ||||
| 	} | ||||
| 	.metas .ui.list { | ||||
| 	.metas { | ||||
| 		.menu { | ||||
| 			max-height: 300px; | ||||
| 	    overflow-x: auto; | ||||
| 		} | ||||
| 		.ui.list { | ||||
| 			.hide { | ||||
| 				display: none!important; | ||||
| 			} | ||||
| 			.label.color { | ||||
| 				padding: 0 8px; | ||||
| 				margin-right: 5px; | ||||
| @ -45,6 +53,7 @@ | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	.filter.menu { | ||||
| 		.label.color { | ||||
| 			margin-left: 15px; | ||||
|  | ||||
| @ -190,19 +190,21 @@ func NewIssue(ctx *middleware.Context) { | ||||
| 			ctx.Handle(500, "GetLabelsByRepoID: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 		ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false) | ||||
| 		if err != nil { | ||||
| 			ctx.Handle(500, "GetMilestones: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.Data["ClosedMilestones"], err = models.GetMilestones(repo.ID, -1, true) | ||||
| 		if err != nil { | ||||
| 			ctx.Handle(500, "GetMilestones: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 
 | ||||
| 	// // Get all milestones.
 | ||||
| 	// ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false)
 | ||||
| 	// if err != nil {
 | ||||
| 	// 	ctx.Handle(500, "GetMilestones.1: %v", err)
 | ||||
| 	// 	return
 | ||||
| 	// }
 | ||||
| 	// ctx.Data["ClosedMilestones"], err = models.GetMilestones(repo.ID, -1, true)
 | ||||
| 	// if err != nil {
 | ||||
| 	// 	ctx.Handle(500, "GetMilestones.2: %v", err)
 | ||||
| 	// 	return
 | ||||
| 	// }
 | ||||
| 		// ctx.Data["AssigneeID"] = 0
 | ||||
| 		// ctx.Data["Assignees"], err = repo.GetCollaborators()
 | ||||
| 	} | ||||
| 
 | ||||
| 	// us, err := repo.GetCollaborators()
 | ||||
| 	// if err != nil {
 | ||||
| @ -224,6 +226,7 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) { | ||||
| 	var ( | ||||
| 		repo        = ctx.Repo.Repository | ||||
| 		labelIDs    []int64 | ||||
| 		milestoneID int64 | ||||
| 	) | ||||
| 	if ctx.User.IsAdmin { | ||||
| 		// Check labels.
 | ||||
| @ -244,6 +247,25 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) { | ||||
| 		ctx.Data["HasSelectedLabel"] = hasSelected | ||||
| 		ctx.Data["label_ids"] = form.LabelIDs | ||||
| 		ctx.Data["Labels"] = labels | ||||
| 
 | ||||
| 		// Check milestone.
 | ||||
| 		milestoneID = form.MilestoneID | ||||
| 		ctx.Data["OpenMilestones"], err = models.GetMilestones(repo.ID, -1, false) | ||||
| 		if err != nil { | ||||
| 			ctx.Handle(500, "GetMilestones: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.Data["ClosedMilestones"], err = models.GetMilestones(repo.ID, -1, true) | ||||
| 		if err != nil { | ||||
| 			ctx.Handle(500, "GetMilestones: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.Data["Milestone"], err = models.GetRepoMilestoneByID(repo.ID, milestoneID) | ||||
| 		if err != nil { | ||||
| 			ctx.Handle(500, "GetRepoMilestoneByID: %v", err) | ||||
| 			return | ||||
| 		} | ||||
| 		ctx.Data["milestone_id"] = milestoneID | ||||
| 	} | ||||
| 
 | ||||
| 	if ctx.HasError() { | ||||
| @ -256,7 +278,7 @@ func NewIssuePost(ctx *middleware.Context, form auth.CreateIssueForm) { | ||||
| 		Index:       int64(repo.NumIssues) + 1, | ||||
| 		Name:        form.Title, | ||||
| 		PosterID:    ctx.User.Id, | ||||
| 		// MilestoneID: form.MilestoneID,
 | ||||
| 		MilestoneID: milestoneID, | ||||
| 		// AssigneeID:  form.AssigneeID,
 | ||||
| 		Content: form.Content, | ||||
| 	} | ||||
| @ -683,7 +705,7 @@ func UpdateIssueMilestone(ctx *middleware.Context) { | ||||
| 
 | ||||
| 	// Not check for invalid milestone id and give responsibility to owners.
 | ||||
| 	issue.MilestoneID = mid | ||||
| 	if err = models.ChangeMilestoneAssign(oldMid, mid, issue); err != nil { | ||||
| 	if err = models.ChangeMilestoneAssign(oldMid, issue); err != nil { | ||||
| 		ctx.Handle(500, "issue.UpdateIssueMilestone(ChangeMilestoneAssign)", err) | ||||
| 		return | ||||
| 	} else if err = models.UpdateIssue(issue); err != nil { | ||||
|  | ||||
| @ -38,16 +38,16 @@ | ||||
| 	</div> | ||||
| 
 | ||||
| 	{{if .IsRepositoryAdmin}} | ||||
| 	<input id="label_ids" name="label_ids" type="hidden" value="{{.label_ids}}"> | ||||
| 	<div class="four wide column"> | ||||
| 		<div class="ui segment metas"> | ||||
| 			<input id="label_ids" name="label_ids" type="hidden" value="{{.label_ids}}"> | ||||
| 			<div class="ui {{if not .Labels}}disabled{{end}} jump select-label dropdown"> | ||||
| 				<span class="text"> | ||||
| 					<strong>{{.i18n.Tr "repo.issues.new.labels"}}</strong> | ||||
| 					<span class="octicon octicon-gear"></span> | ||||
| 				</span> | ||||
|         <div class="filter menu" data-id="#label_ids"> | ||||
|         	<a class="no-select item" href="#">{{.i18n.Tr "repo.issues.new.clear_labels"}}</a> | ||||
|         	<div class="no-select item">{{.i18n.Tr "repo.issues.new.clear_labels"}}</div> | ||||
|         	{{range .Labels}} | ||||
|         	<a class="{{if .IsChecked}}checked{{end}} item" href="#" data-id="{{.ID}}" data-id-selector="#label_{{.ID}}"><span class="octicon {{if .IsChecked}}octicon-check{{end}}"></span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name}}</a> | ||||
|           {{end}} | ||||
| @ -59,32 +59,59 @@ | ||||
|       	<a class="{{if not .IsChecked}}hide{{end}} item" id="label_{{.ID}}" href="{{$.RepoLink}}/issues?labels={{.ID}}"><span class="label color" style="background-color: {{.Color}}"></span> <span class="text">{{.Name}}</span></a> | ||||
|         {{end}} | ||||
| 			</div> | ||||
| 			<!-- <div class="ui divider"></div> | ||||
| 			<div class="ui {{if .Labels}}disabled{{end}} dropdown jump item"> | ||||
| 
 | ||||
| 			<div class="ui divider"></div> | ||||
| 
 | ||||
| 			<input id="milestone_id" name="milestone_id" type="hidden" value="{{.milestone_id}}"> | ||||
| 			<div class="ui {{if not (or .OpenMilestones .ClosedMilestones)}}disabled{{end}} jump select-milestone dropdown"> | ||||
| 				<span class="text"> | ||||
| 					<strong>{{.i18n.Tr "repo.issues.new.milestone"}}</strong> | ||||
| 					<span class="octicon octicon-gear"></span> | ||||
| 				</span> | ||||
|         <div class="menu"> | ||||
|         	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_label_no_select"}}</a> | ||||
|         	{{range .Labels}} | ||||
|         	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}"><span class="octicon {{if .IsChecked}}octicon-check{{end}}"></span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name}}</a> | ||||
|         	<div class="no-select item">{{.i18n.Tr "repo.issues.new.clear_milestone"}}</div> | ||||
|         	{{if .OpenMilestones}} | ||||
|         	<div class="divider"></div> | ||||
|         	<div class="header"> | ||||
|     	      <i class="octicon octicon-milestone"></i> | ||||
|     	      {{.i18n.Tr "repo.issues.new.open_milestone"}} | ||||
|     	    </div> | ||||
|         	{{range .OpenMilestones}} | ||||
|         	<div class="item" data-id="{{.ID}}" data-href="{{$.RepoLink}}/issues?milestone={{.ID}}"> {{.Name}}</div> | ||||
|           {{end}} | ||||
|     	    {{end}} | ||||
|     	    {{if .ClosedMilestones}} | ||||
|         	<div class="divider"></div> | ||||
|         	<div class="header"> | ||||
|     	      <i class="octicon octicon-milestone"></i> | ||||
|     	      {{.i18n.Tr "repo.issues.new.closed_milestone"}} | ||||
|     	    </div> | ||||
|         	{{range .ClosedMilestones}} | ||||
|         	<a class="item" data-id="{{.ID}}" data-href="{{$.RepoLink}}/issues?milestone={{.ID}}"> {{.Name}}</a> | ||||
|           {{end}} | ||||
|         	{{end}} | ||||
| 				</div> | ||||
| 			</div> | ||||
| 			<div class="ui list"> | ||||
| 				<span class="item">filter_label_no_select</span> | ||||
| 			<div class="ui select-milestone list"> | ||||
| 				<span class="no-select item {{if .Milestone}}hide{{end}}">{{.i18n.Tr "repo.issues.new.no_milestone"}}</span> | ||||
| 				<div class="selected"> | ||||
| 					{{if .Milestone}} | ||||
| 					<a class="item" href="{{.RepoLink}}/issues?milestone={{.Milestone.ID}}"> {{.Milestone.Name}}</a> | ||||
| 					{{end}} | ||||
| 				</div> | ||||
| 			<div class="ui divider"></div> | ||||
| 			<div class="ui {{if .Labels}}disabled{{end}} dropdown jump item"> | ||||
| 			</div> | ||||
| 
 | ||||
| 			<!-- <div class="ui divider"></div> | ||||
| 
 | ||||
| 			<div class="ui {{if not .Assignees}}disabled{{end}} dropdown jump item"> | ||||
| 				<span class="text"> | ||||
| 					<strong>{{.i18n.Tr "repo.issues.new.assignee"}}</strong> | ||||
| 					<span class="octicon octicon-gear"></span> | ||||
| 				</span> | ||||
|         <div class="menu"> | ||||
|         	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&milestone={{$.MilestoneID}}">{{.i18n.Tr "repo.issues.filter_label_no_select"}}</a> | ||||
|         	{{range .Labels}} | ||||
|         	<a class="item" href="{{$.RepoLink}}/issues?type={{$.ViewType}}&state={{$.State}}&labels={{.ID}}&milestone={{$.MilestoneID}}"><span class="octicon {{if .IsChecked}}octicon-check{{end}}"></span><span class="label color" style="background-color: {{.Color}}"></span> {{.Name}}</a> | ||||
|         	<div class="item">{{.i18n.Tr "repo.issues.new.clear_assignee"}}</a> | ||||
|         	{{range .Assignees}} | ||||
|         	<a class="item" href="#"><span class="octicon {{if eq .ID $.AssigneeID}}octicon-check{{end}}"></span> {{.Name}}</a> | ||||
|           {{end}} | ||||
| 				</div> | ||||
| 			</div> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user