Added company search

This commit is contained in:
Eduard Urbach 2018-03-17 22:09:17 +01:00
parent 4da0e19443
commit ab9d18cdbc
7 changed files with 85 additions and 15 deletions

View File

@ -2,8 +2,9 @@ component ExploreAnime(animeList []*arn.Anime, year string, status string, typ s
ExploreFilters(year, status, typ, "filterAnime") ExploreFilters(year, status, typ, "filterAnime")
.corner-buttons-hide-on-mobile .corner-buttons-hide-on-mobile
button.action(data-trigger="click", data-action="hideAddedAnime", title="Hide anime in my collection") if user != nil
RawIcon("eye-slash") button.action(data-trigger="click", data-action="hideAddedAnime", title="Hide anime in my collection")
RawIcon("eye-slash")
a.button.ajax(href="/genres", title="View genres") a.button.ajax(href="/genres", title="View genres")
RawIcon("clone") RawIcon("clone")

View File

@ -2,8 +2,9 @@ component Genre(genre string, animes []*arn.Anime, user *arn.User)
h1(title=toString(len(animes)) + " anime")= strings.Title(genre) h1(title=toString(len(animes)) + " anime")= strings.Title(genre)
.corner-buttons-hide-on-mobile .corner-buttons-hide-on-mobile
button.action(data-trigger="click", data-action="hideAddedAnime", title="Hide anime in my collection") if user != nil
RawIcon("eye-slash") button.action(data-trigger="click", data-action="hideAddedAnime", title="Hide anime in my collection")
RawIcon("eye-slash")
a.button.ajax(href="/genres", title="View genres") a.button.ajax(href="/genres", title="View genres")
RawIcon("clone") RawIcon("clone")

View File

@ -211,6 +211,7 @@ func Configure(app *aero.Application) {
l.Page("/forum-search/*term", search.Forum) l.Page("/forum-search/*term", search.Forum)
l.Page("/soundtrack-search/*term", search.SoundTracks) l.Page("/soundtrack-search/*term", search.SoundTracks)
l.Page("/user-search/*term", search.Users) l.Page("/user-search/*term", search.Users)
l.Page("/company-search/*term", search.Companies)
// Shop // Shop
l.Page("/support", support.Get) l.Page("/support", support.Get)

View File

@ -10,25 +10,38 @@ import (
"github.com/animenotifier/notify.moe/components" "github.com/animenotifier/notify.moe/components"
) )
const maxUsers = 25 const (
const maxAnime = 25 maxUsers = 25
const maxPosts = 2 maxAnime = 25
const maxThreads = 2 maxPosts = 2
const maxSoundTracks = 4 maxThreads = 2
const maxCharacters = 22 maxSoundTracks = 3
maxCharacters = 22
maxCompanies = 3
)
// Get search page. // Get search page.
func Get(ctx *aero.Context) string { func Get(ctx *aero.Context) string {
term := ctx.Get("term") term := ctx.Get("term")
term = strings.TrimPrefix(term, "/") term = strings.TrimPrefix(term, "/")
users, animes, posts, threads, tracks, characters := arn.Search(term, maxUsers, maxAnime, maxPosts, maxThreads, maxSoundTracks, maxCharacters) users, animes, posts, threads, tracks, characters, companies := arn.Search(
return ctx.HTML(components.SearchResults(term, users, animes, posts, threads, tracks, characters)) term,
maxUsers,
maxAnime,
maxPosts,
maxThreads,
maxSoundTracks,
maxCharacters,
maxCompanies,
)
return ctx.HTML(components.SearchResults(term, users, animes, posts, threads, tracks, characters, companies, nil))
} }
// GetEmptySearch renders the search page with no contents. // GetEmptySearch renders the search page with no contents.
func GetEmptySearch(ctx *aero.Context) string { func GetEmptySearch(ctx *aero.Context) string {
return ctx.HTML(components.SearchResults("", nil, nil, nil, nil, nil, nil)) return ctx.HTML(components.SearchResults("", nil, nil, nil, nil, nil, nil, nil, nil))
} }
// Anime search. // Anime search.
@ -83,3 +96,12 @@ func Users(ctx *aero.Context) string {
users := arn.SearchUsers(term, maxUsers) users := arn.SearchUsers(term, maxUsers)
return ctx.HTML(components.UserSearchResults(users)) return ctx.HTML(components.UserSearchResults(users))
} }
// Companies search.
func Companies(ctx *aero.Context) string {
term := ctx.Get("term")
term = strings.TrimPrefix(term, "/")
companies := arn.SearchCompanies(term, maxCompanies)
return ctx.HTML(components.CompanySearchResults(companies))
}

View File

@ -1,4 +1,4 @@
component SearchResults(term string, users []*arn.User, animes []*arn.Anime, posts []*arn.Post, threads []*arn.Thread, tracks []*arn.SoundTrack, characters []*arn.Character) component SearchResults(term string, users []*arn.User, animes []*arn.Anime, posts []*arn.Post, threads []*arn.Thread, tracks []*arn.SoundTrack, characters []*arn.Character, companies []*arn.Company, quotes []*arn.Quote)
h1.page-title= "Search: " + term h1.page-title= "Search: " + term
.search .search
@ -34,6 +34,22 @@ component SearchResults(term string, users []*arn.User, animes []*arn.Anime, pos
#soundtrack-search-results #soundtrack-search-results
SoundTrackSearchResults(tracks) SoundTrackSearchResults(tracks)
//- .widget
//- h3.widget-title
//- Icon("quote-left")
//- span Quotes
//- #quote-search-results
//- QuoteSearchResults(quotes)
.widget
h3.widget-title
Icon("building")
span Companies
#company-search-results
CompanySearchResults(companies)
.widget .widget
h3.widget-title h3.widget-title
Icon("user") Icon("user")
@ -89,6 +105,25 @@ component SoundTrackSearchResults(tracks []*arn.SoundTrack)
each track in tracks each track in tracks
li.mountable(data-mountable-type="track") li.mountable(data-mountable-type="track")
a.ajax(href=track.Link())= track.Title a.ajax(href=track.Link())= track.Title
span.soundtrack-search-anime= " - " + track.MainAnime().Title.Canonical
component CompanySearchResults(companies []*arn.Company)
if len(companies) == 0
p.no-search-results.mountable No companies found.
else
ul.company-search
each company in companies
li.mountable(data-mountable-type="company")
a.ajax(href=company.Link())= company.Name.English
component QuoteSearchResults(quotes []*arn.Quote)
if len(quotes) == 0
p.no-search-results.mountable No quotes found.
else
ul.quote-search
each quote in quotes
li.mountable(data-mountable-type="quote")
a.ajax(href=quote.Link())= quote.Text.English
component UserSearchResults(users []*arn.User) component UserSearchResults(users []*arn.User)
if len(users) == 0 if len(users) == 0

View File

@ -37,6 +37,9 @@
margin-bottom 1rem margin-bottom 1rem
opacity 0.8 opacity 0.8
.soundtrack-search-anime
opacity 0.35
.no-search-results .no-search-results
text-align left text-align left
padding-bottom typography-margin padding-bottom typography-margin

View File

@ -8,7 +8,8 @@ var correctResponseRendered = {
"character": false, "character": false,
"forum": false, "forum": false,
"soundtrack": false, "soundtrack": false,
"user": false "user": false,
"company": false
} }
// Containers for all the search results // Containers for all the search results
@ -17,6 +18,7 @@ var characterSearchResults: HTMLElement
var forumSearchResults: HTMLElement var forumSearchResults: HTMLElement
var soundtrackSearchResults: HTMLElement var soundtrackSearchResults: HTMLElement
var userSearchResults: HTMLElement var userSearchResults: HTMLElement
var companySearchResults: HTMLElement
// Search // Search
export async function search(arn: AnimeNotifier, search: HTMLInputElement, e: KeyboardEvent) { export async function search(arn: AnimeNotifier, search: HTMLInputElement, e: KeyboardEvent) {
@ -68,6 +70,7 @@ export async function search(arn: AnimeNotifier, search: HTMLInputElement, e: Ke
forumSearchResults = document.getElementById("forum-search-results") forumSearchResults = document.getElementById("forum-search-results")
soundtrackSearchResults = document.getElementById("soundtrack-search-results") soundtrackSearchResults = document.getElementById("soundtrack-search-results")
userSearchResults = document.getElementById("user-search-results") userSearchResults = document.getElementById("user-search-results")
companySearchResults = document.getElementById("company-search-results")
} }
if(!term || term.length < 1) { if(!term || term.length < 1) {
@ -100,6 +103,10 @@ export async function search(arn: AnimeNotifier, search: HTMLInputElement, e: Ke
fetch("/_/user-search/" + term, fetchOptions) fetch("/_/user-search/" + term, fetchOptions)
.then(showResponseInElement(arn, url, "user", userSearchResults)) .then(showResponseInElement(arn, url, "user", userSearchResults))
.catch(console.error) .catch(console.error)
fetch("/_/company-search/" + term, fetchOptions)
.then(showResponseInElement(arn, url, "company", companySearchResults))
.catch(console.error)
} catch(err) { } catch(err) {
console.error(err) console.error(err)
} finally { } finally {