Added functioning search
This commit is contained in:
@ -1,19 +0,0 @@
|
||||
.popular-title
|
||||
text-align center
|
||||
|
||||
.popular-anime-list
|
||||
display flex
|
||||
flex-flow row wrap
|
||||
justify-content center
|
||||
|
||||
.popular-anime
|
||||
padding 0.5em
|
||||
display block
|
||||
|
||||
.popular-anime-image
|
||||
width 100px !important
|
||||
height 141px !important
|
||||
border-radius 3px
|
||||
object-fit cover
|
||||
default-transition
|
||||
shadow-up
|
@ -1,29 +1,97 @@
|
||||
package search
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/aerogo/aero"
|
||||
"github.com/animenotifier/arn"
|
||||
"github.com/animenotifier/notify.moe/components"
|
||||
)
|
||||
|
||||
const maxUsers = 18
|
||||
const maxAnime = 18
|
||||
|
||||
type AnimeID = string
|
||||
type UserID = string
|
||||
|
||||
var animeSearchIndex = make(map[string]AnimeID)
|
||||
var userSearchIndex = make(map[string]UserID)
|
||||
|
||||
func init() {
|
||||
updateSearchIndex()
|
||||
}
|
||||
|
||||
func updateSearchIndex() {
|
||||
updateAnimeIndex()
|
||||
updateUserIndex()
|
||||
}
|
||||
|
||||
func updateAnimeIndex() {
|
||||
// Anime
|
||||
animeStream, err := arn.AllAnime()
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for anime := range animeStream {
|
||||
animeSearchIndex[strings.ToLower(anime.Title.Canonical)] = anime.ID
|
||||
}
|
||||
}
|
||||
|
||||
func updateUserIndex() {
|
||||
// Users
|
||||
userStream, err := arn.AllUsers()
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for user := range userStream {
|
||||
userSearchIndex[strings.ToLower(user.Nick)] = user.ID
|
||||
}
|
||||
}
|
||||
|
||||
// Get search page.
|
||||
func Get(ctx *aero.Context) string {
|
||||
// titleCount := 0
|
||||
// animeCount := 0
|
||||
term := strings.ToLower(ctx.Get("term"))
|
||||
|
||||
// // let info: any = await bluebird.props({
|
||||
// // popular: arn.db.get('Cache', 'popularAnime'),
|
||||
// // stats: arn.db.get('Cache', 'animeStats')
|
||||
// // })
|
||||
var users []*arn.User
|
||||
var animeResults []*arn.Anime
|
||||
|
||||
// // return response.render({
|
||||
// // user,
|
||||
// // popularAnime: info.popular.anime,
|
||||
// // animeCount: info.stats.animeCount,
|
||||
// // titleCount: info.stats.titleCount,
|
||||
// // anime: null
|
||||
// // })
|
||||
aero.Parallel(func() {
|
||||
for name, id := range userSearchIndex {
|
||||
if strings.Index(name, term) != -1 {
|
||||
user, err := arn.GetUser(id)
|
||||
|
||||
// popular, _ := arn.GetPopularCache()
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// return ctx.HTML(components.Search(popular.Anime, titleCount, animeCount))
|
||||
return ctx.HTML("Coming soon.")
|
||||
users = append(users, user)
|
||||
|
||||
if len(users) >= maxUsers {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}, func() {
|
||||
for title, id := range animeSearchIndex {
|
||||
if strings.Index(title, term) != -1 {
|
||||
anime, err := arn.GetAnime(id)
|
||||
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
|
||||
animeResults = append(animeResults, anime)
|
||||
|
||||
if len(animeResults) >= maxAnime {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
return ctx.HTML(components.Search(users, animeResults))
|
||||
}
|
||||
|
@ -1,16 +1,21 @@
|
||||
component Search(popularAnime []*arn.Anime, titleCount int, animeCount int)
|
||||
h2 Anime
|
||||
|
||||
#search-container
|
||||
input#search(type="text", placeholder="Search...", onkeyup="$.searchAnime();", onfocus="this.select();", disabled="disabled", data-count=titleCount, data-anime-count=animeCount)
|
||||
|
||||
#search-results-container
|
||||
#search-results
|
||||
|
||||
if popularAnime != nil
|
||||
h3.popular-title Popular
|
||||
|
||||
.popular-anime-list
|
||||
each anime in popularAnime
|
||||
a.popular-anime.ajax(href="/anime/" + toString(anime.ID), title=anime.Title.Romaji + " (" + arn.Plural(anime.Watching(), "user") + " watching)")
|
||||
img.anime-image.popular-anime-image(src=anime.Image, alt=anime.Title.Romaji)
|
||||
component Search(users []*arn.User, animeResults []*arn.Anime)
|
||||
.widgets
|
||||
.widget
|
||||
h3 Users
|
||||
.user-avatars.user-search
|
||||
if len(users) == 0
|
||||
p No users found.
|
||||
else
|
||||
each user in users
|
||||
Avatar(user)
|
||||
//- a.ajax(href=user.Link())= user.Nick
|
||||
|
||||
.widget
|
||||
h3 Anime
|
||||
.profile-watching-list.anime-search
|
||||
if len(animeResults) == 0
|
||||
p No anime found.
|
||||
else
|
||||
each anime in animeResults
|
||||
a.profile-watching-list-item.ajax(href=anime.Link(), title=anime.Title.Canonical)
|
||||
img.anime-cover-image.anime-search-result(src=anime.Image.Tiny, alt=anime.Title.Canonical)
|
@ -1,7 +1,2 @@
|
||||
// #search-container
|
||||
// horizontal
|
||||
// justify-content center
|
||||
|
||||
// #search
|
||||
// width 100%
|
||||
// max-width 560px
|
||||
.anime-search-result
|
||||
width 55px !important
|
Reference in New Issue
Block a user