* Showing the list of labels of template files #7812 * Returning and logging errors when loading labels * Commenting public method * Change log level in case of error loading labels.master
@@ -132,6 +132,25 @@ func (label *Label) ForegroundColor() template.CSS { | |||||
return template.CSS("#000") | return template.CSS("#000") | ||||
} | } | ||||
func loadLabels(labelTemplate string) ([]string, error) { | |||||
list, err := GetLabelTemplateFile(labelTemplate) | |||||
if err != nil { | |||||
return nil, ErrIssueLabelTemplateLoad{labelTemplate, err} | |||||
} | |||||
labels := make([]string, len(list)) | |||||
for i := 0; i < len(list); i++ { | |||||
labels[i] = list[i][0] | |||||
} | |||||
return labels, nil | |||||
} | |||||
// LoadLabelsFormatted loads the labels' list of a template file as a string separated by comma | |||||
func LoadLabelsFormatted(labelTemplate string) (string, error) { | |||||
labels, err := loadLabels(labelTemplate) | |||||
return strings.Join(labels, ", "), err | |||||
} | |||||
func initalizeLabels(e Engine, repoID int64, labelTemplate string) error { | func initalizeLabels(e Engine, repoID int64, labelTemplate string) error { | ||||
list, err := GetLabelTemplateFile(labelTemplate) | list, err := GetLabelTemplateFile(labelTemplate) | ||||
if err != nil { | if err != nil { | ||||
@@ -64,8 +64,8 @@ var ( | |||||
// Readmes contains the readme files | // Readmes contains the readme files | ||||
Readmes []string | Readmes []string | ||||
// LabelTemplates contains the label template files | |||||
LabelTemplates []string | |||||
// LabelTemplates contains the label template files and the list of labels for each file | |||||
LabelTemplates map[string]string | |||||
// ItemsPerPage maximum items per page in forks, watchers and stars of a repo | // ItemsPerPage maximum items per page in forks, watchers and stars of a repo | ||||
ItemsPerPage = 40 | ItemsPerPage = 40 | ||||
@@ -100,11 +100,21 @@ func loadRepoConfig() { | |||||
Gitignores = typeFiles[0] | Gitignores = typeFiles[0] | ||||
Licenses = typeFiles[1] | Licenses = typeFiles[1] | ||||
Readmes = typeFiles[2] | Readmes = typeFiles[2] | ||||
LabelTemplates = typeFiles[3] | |||||
LabelTemplatesFiles := typeFiles[3] | |||||
sort.Strings(Gitignores) | sort.Strings(Gitignores) | ||||
sort.Strings(Licenses) | sort.Strings(Licenses) | ||||
sort.Strings(Readmes) | sort.Strings(Readmes) | ||||
sort.Strings(LabelTemplates) | |||||
sort.Strings(LabelTemplatesFiles) | |||||
// Load label templates | |||||
LabelTemplates = make(map[string]string) | |||||
for _, templateFile := range LabelTemplatesFiles { | |||||
labels, err := LoadLabelsFormatted(templateFile) | |||||
if err != nil { | |||||
log.Error("Failed to load labels: %v", err) | |||||
} | |||||
LabelTemplates[templateFile] = labels | |||||
} | |||||
// Filter out invalid names and promote preferred licenses. | // Filter out invalid names and promote preferred licenses. | ||||
sortedLicenses := make([]string, 0, len(Licenses)) | sortedLicenses := make([]string, 0, len(Licenses)) | ||||
@@ -109,8 +109,8 @@ | |||||
<div class="default text">{{.i18n.Tr "repo.issue_labels_helper"}}</div> | <div class="default text">{{.i18n.Tr "repo.issue_labels_helper"}}</div> | ||||
<div class="menu"> | <div class="menu"> | ||||
<div class="item" data-value="">{{.i18n.Tr "repo.issue_labels_helper"}}</div> | <div class="item" data-value="">{{.i18n.Tr "repo.issue_labels_helper"}}</div> | ||||
{{range .LabelTemplates}} | |||||
<div class="item" data-value="{{.}}">{{.}}</div> | |||||
{{range $template, $labels := .LabelTemplates}} | |||||
<div class="item" data-value="{{$template}}">{{$template}}<br/><i>({{$labels}})</i></div> | |||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
</div> | </div> | ||||
@@ -79,8 +79,8 @@ | |||||
<input type="hidden" name="template_name" value="Default"> | <input type="hidden" name="template_name" value="Default"> | ||||
<div class="default text">{{.i18n.Tr "repo.issues.label_templates.helper"}}</div> | <div class="default text">{{.i18n.Tr "repo.issues.label_templates.helper"}}</div> | ||||
<div class="menu"> | <div class="menu"> | ||||
{{range .LabelTemplates}} | |||||
<div class="item" data-value="{{.}}">{{.}}</div> | |||||
{{range $template, $labels := .LabelTemplates}} | |||||
<div class="item" data-value="{{$template}}">{{$template}}<br/><i>({{$labels}})</i></div> | |||||
{{end}} | {{end}} | ||||
</div> | </div> | ||||
</div> | </div> | ||||