Improved search

This commit is contained in:
Eduard Urbach 2017-07-02 17:51:17 +02:00
parent 464a6ec26b
commit 326c4161aa
7 changed files with 43 additions and 14 deletions

View File

@ -36,7 +36,9 @@ func updateAnimeIndex() {
animeSearchIndex.TextToID[strings.ToLower(anime.Title.English)] = anime.ID
}
if anime.Title.Japanese != "" {
// Make sure we only include Japanese titles that actually contain unicode letters
// because otherwise they might overlap with the English titles.
if anime.Title.Japanese != "" && arn.ContainsUnicodeLetters(anime.Title.Japanese) {
animeSearchIndex.TextToID[strings.ToLower(anime.Title.Japanese)] = anime.ID
}

View File

@ -11,7 +11,7 @@ import (
func TestRoutes(t *testing.T) {
app := configure(aero.New())
for _, examples := range tests {
for _, examples := range routeTests {
for _, example := range examples {
request, err := http.NewRequest("GET", example, nil)

View File

@ -6,12 +6,12 @@ import (
"github.com/animenotifier/notify.moe/components"
)
const maxUsers = 9 * 7
const maxAnime = 9 * 7
const maxUsers = 9 * 4
const maxAnime = 9 * 4
// Get search page.
func Get(ctx *aero.Context) string {
term := ctx.Get("term")
term := ctx.Query("q")
userResults, animeResults := arn.Search(term, maxUsers, maxAnime)
return ctx.HTML(components.SearchResults(userResults, animeResults))

View File

@ -7,7 +7,8 @@ component SearchResults(users []*arn.User, animeResults []*arn.Anime)
p No users found.
else
each user in users
Avatar(user)
.mountable(data-mountable-type="user")
Avatar(user)
//- a.ajax(href=user.Link())= user.Nick
.widget
@ -17,5 +18,5 @@ component SearchResults(users []*arn.User, animeResults []*arn.Anime)
p No anime found.
else
each anime in animeResults
a.profile-watching-list-item.ajax(href=anime.Link(), title=anime.Title.Canonical)
a.profile-watching-list-item.mountable.ajax(href=anime.Link(), title=anime.Title.Canonical, data-mountable-type="anime")
img.anime-cover-image.anime-search-result(src=anime.Image.Tiny, alt=anime.Title.Canonical)

View File

@ -18,10 +18,26 @@ func init() {
newURI := "/user/"
userName := requestURI[2:]
ctx.SetURI(newURI + userName)
} else if strings.HasPrefix(requestURI, plusRouteAjax) {
return
}
if strings.HasPrefix(requestURI, plusRouteAjax) {
newURI := "/_/user/"
userName := requestURI[4:]
ctx.SetURI(newURI + userName)
return
}
if strings.HasPrefix(requestURI, "/search/") {
searchTerm := requestURI[len("/search/"):]
ctx.Request.URL.RawQuery = "q=" + searchTerm
ctx.SetURI("/search")
}
if strings.HasPrefix(requestURI, "/_/search/") {
searchTerm := requestURI[len("/_/search/"):]
ctx.Request.URL.RawQuery = "q=" + searchTerm
ctx.SetURI("/_/search")
}
})
}

View File

@ -145,10 +145,10 @@ export function search(arn: AnimeNotifier, search: HTMLInputElement, e: Keyboard
let term = search.value
if(!window.location.pathname.startsWith("/search/")) {
history.pushState("search", null, "/search/" + term)
} else {
if(window.location.pathname.startsWith("/search/")) {
history.replaceState("search", null, "/search/" + term)
} else {
history.pushState("search", null, "/search/" + term)
}
if(!term || term.length < 2) {
@ -165,7 +165,7 @@ export function search(arn: AnimeNotifier, search: HTMLInputElement, e: Keyboard
arn.app.content.appendChild(results)
}
arn.app.get("/_/search/" + encodeURI(term))
arn.app.get("/_/search/" + term)
.then(html => {
if(!search.value) {
return

View File

@ -199,13 +199,23 @@ export class AnimeNotifier {
}
modifyDelayed(className: string, func: (element: HTMLElement) => void) {
let mountableTypes = {
general: 0
}
const delay = 20
const maxDelay = 500
const maxDelay = 1000
let time = 0
for(let element of findAll(className)) {
time += delay
let type = element.dataset.mountableType || "general"
if(type in mountableTypes) {
time = mountableTypes[element.dataset.mountableType] += delay
} else {
time = mountableTypes[element.dataset.mountableType] = 0
}
if(time > maxDelay) {
func(element)