diff options
Diffstat (limited to 'routers/web')
-rw-r--r-- | routers/web/org/org_labels.go | 2 | ||||
-rw-r--r-- | routers/web/repo/issue.go | 18 | ||||
-rw-r--r-- | routers/web/repo/issue_label.go | 18 |
3 files changed, 32 insertions, 6 deletions
diff --git a/routers/web/org/org_labels.go b/routers/web/org/org_labels.go index 1c910a93a5..e96627762b 100644 --- a/routers/web/org/org_labels.go +++ b/routers/web/org/org_labels.go @@ -45,6 +45,7 @@ func NewLabel(ctx *context.Context) { l := &issues_model.Label{ OrgID: ctx.Org.Organization.ID, Name: form.Title, + Exclusive: form.Exclusive, Description: form.Description, Color: form.Color, } @@ -70,6 +71,7 @@ func UpdateLabel(ctx *context.Context) { } l.Name = form.Title + l.Exclusive = form.Exclusive l.Description = form.Description l.Color = form.Color if err := issues_model.UpdateLabel(l); err != nil { diff --git a/routers/web/repo/issue.go b/routers/web/repo/issue.go index 62565af50f..05ba26a70c 100644 --- a/routers/web/repo/issue.go +++ b/routers/web/repo/issue.go @@ -332,8 +332,24 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti labels = append(labels, orgLabels...) } + // Get the exclusive scope for every label ID + labelExclusiveScopes := make([]string, 0, len(labelIDs)) + for _, labelID := range labelIDs { + foundExclusiveScope := false + for _, label := range labels { + if label.ID == labelID || label.ID == -labelID { + labelExclusiveScopes = append(labelExclusiveScopes, label.ExclusiveScope()) + foundExclusiveScope = true + break + } + } + if !foundExclusiveScope { + labelExclusiveScopes = append(labelExclusiveScopes, "") + } + } + for _, l := range labels { - l.LoadSelectedLabelsAfterClick(labelIDs) + l.LoadSelectedLabelsAfterClick(labelIDs, labelExclusiveScopes) } ctx.Data["Labels"] = labels ctx.Data["NumLabels"] = len(labels) diff --git a/routers/web/repo/issue_label.go b/routers/web/repo/issue_label.go index 66e8920bd9..d4fece9f01 100644 --- a/routers/web/repo/issue_label.go +++ b/routers/web/repo/issue_label.go @@ -113,6 +113,7 @@ func NewLabel(ctx *context.Context) { l := &issues_model.Label{ RepoID: ctx.Repo.Repository.ID, Name: form.Title, + Exclusive: form.Exclusive, Description: form.Description, Color: form.Color, } @@ -138,6 +139,7 @@ func UpdateLabel(ctx *context.Context) { } l.Name = form.Title + l.Exclusive = form.Exclusive l.Description = form.Description l.Color = form.Color if err := issues_model.UpdateLabel(l); err != nil { @@ -175,7 +177,7 @@ func UpdateIssueLabel(ctx *context.Context) { return } } - case "attach", "detach", "toggle": + case "attach", "detach", "toggle", "toggle-alt": label, err := issues_model.GetLabelByID(ctx, ctx.FormInt64("id")) if err != nil { if issues_model.IsErrRepoLabelNotExist(err) { @@ -189,12 +191,18 @@ func UpdateIssueLabel(ctx *context.Context) { if action == "toggle" { // detach if any issues already have label, otherwise attach action = "attach" - for _, issue := range issues { - if issues_model.HasIssueLabel(ctx, issue.ID, label.ID) { - action = "detach" - break + if label.ExclusiveScope() == "" { + for _, issue := range issues { + if issues_model.HasIssueLabel(ctx, issue.ID, label.ID) { + action = "detach" + break + } } } + } else if action == "toggle-alt" { + // always detach with alt key pressed, to be able to remove + // scoped labels + action = "detach" } if action == "attach" { |