@@ -194,14 +194,16 @@ func (opts *FindTopicOptions) toConds() builder.Cond { | |||
// FindTopics retrieves the topics via FindTopicOptions | |||
func FindTopics(opts *FindTopicOptions) ([]*Topic, int64, error) { | |||
sess := db.GetEngine(db.DefaultContext).Select("topic.*").Where(opts.toConds()) | |||
orderBy := "topic.repo_count DESC" | |||
if opts.RepoID > 0 { | |||
sess.Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id") | |||
orderBy = "topic.name" // when render topics for a repo, it's better to sort them by name, to get consistent result | |||
} | |||
if opts.PageSize != 0 && opts.Page != 0 { | |||
sess = db.SetSessionPagination(sess, opts) | |||
} | |||
topics := make([]*Topic, 0, 10) | |||
total, err := sess.Desc("topic.repo_count").FindAndCount(&topics) | |||
total, err := sess.OrderBy(orderBy).FindAndCount(&topics) | |||
return topics, total, err | |||
} | |||
@@ -12,7 +12,6 @@ import ( | |||
repo_model "code.gitea.io/gitea/models/repo" | |||
user_model "code.gitea.io/gitea/models/user" | |||
"code.gitea.io/gitea/modules/base" | |||
"code.gitea.io/gitea/modules/charset" | |||
"code.gitea.io/gitea/modules/context" | |||
"code.gitea.io/gitea/modules/git" | |||
@@ -23,10 +22,6 @@ import ( | |||
"code.gitea.io/gitea/modules/util" | |||
) | |||
const ( | |||
tplBlame base.TplName = "repo/home" | |||
) | |||
type blameRow struct { | |||
RowNumber int | |||
Avatar gotemplate.HTML | |||
@@ -140,7 +135,7 @@ func RefBlame(ctx *context.Context) { | |||
renderBlame(ctx, blameParts, commitNames, previousCommits) | |||
ctx.HTML(http.StatusOK, tplBlame) | |||
ctx.HTML(http.StatusOK, tplRepoHome) | |||
} | |||
func processBlameParts(ctx *context.Context, blameParts []git.BlamePart) (map[string]*user_model.UserCommit, map[string]string) { |
@@ -41,6 +41,7 @@ export function initRepoTopicBar() { | |||
viewDiv.children('.topic').remove(); | |||
if (topics.length) { | |||
const topicArray = topics.split(','); | |||
topicArray.sort(); | |||
for (let i = 0; i < topicArray.length; i++) { | |||
const link = $('<a class="ui repo-topic large label topic"></a>'); | |||
link.attr('href', `${appSubUrl}/explore/repos?q=${encodeURIComponent(topicArray[i])}&topic=1`); | |||
@@ -57,12 +58,12 @@ export function initRepoTopicBar() { | |||
topicPrompts.formatPrompt = xhr.responseJSON.message; | |||
const {invalidTopics} = xhr.responseJSON; | |||
const topicLables = topicDropdown.children('a.ui.label'); | |||
const topicLabels = topicDropdown.children('a.ui.label'); | |||
for (const [index, value] of topics.split(',').entries()) { | |||
for (let i = 0; i < invalidTopics.length; i++) { | |||
if (invalidTopics[i] === value) { | |||
topicLables.eq(index).removeClass('green').addClass('red'); | |||
topicLabels.eq(index).removeClass('green').addClass('red'); | |||
} | |||
} | |||
} |