Added lyrics display
This commit is contained in:
parent
16d0e17aa5
commit
06c09bc1ff
@ -10,8 +10,6 @@ import (
|
|||||||
"github.com/animenotifier/notify.moe/utils"
|
"github.com/animenotifier/notify.moe/utils"
|
||||||
)
|
)
|
||||||
|
|
||||||
const maxDescriptionLength = 170
|
|
||||||
|
|
||||||
// Get renders a company page.
|
// Get renders a company page.
|
||||||
func Get(ctx *aero.Context) string {
|
func Get(ctx *aero.Context) string {
|
||||||
user := utils.GetUser(ctx)
|
user := utils.GetUser(ctx)
|
||||||
@ -22,11 +20,7 @@ func Get(ctx *aero.Context) string {
|
|||||||
return ctx.Error(http.StatusNotFound, "Company not found", err)
|
return ctx.Error(http.StatusNotFound, "Company not found", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
description := company.Description
|
description := utils.CutLongDescription(company.Description)
|
||||||
|
|
||||||
if len(description) > maxDescriptionLength {
|
|
||||||
description = description[:maxDescriptionLength-3] + "..."
|
|
||||||
}
|
|
||||||
|
|
||||||
openGraph := &arn.OpenGraph{
|
openGraph := &arn.OpenGraph{
|
||||||
Tags: map[string]string{
|
Tags: map[string]string{
|
||||||
|
@ -175,6 +175,7 @@ func Configure(app *aero.Application) {
|
|||||||
l.Page("/soundtracks/tag/:tag", soundtracks.FilterByTag)
|
l.Page("/soundtracks/tag/:tag", soundtracks.FilterByTag)
|
||||||
l.Page("/soundtracks/tag/:tag/from/:index", soundtracks.FilterByTag)
|
l.Page("/soundtracks/tag/:tag/from/:index", soundtracks.FilterByTag)
|
||||||
l.Page("/soundtrack/:id", soundtrack.Get)
|
l.Page("/soundtrack/:id", soundtrack.Get)
|
||||||
|
l.Page("/soundtrack/:id/lyrics", soundtrack.Lyrics)
|
||||||
l.Page("/soundtrack/:id/edit", soundtrack.Edit)
|
l.Page("/soundtrack/:id/edit", soundtrack.Edit)
|
||||||
l.Page("/soundtrack/:id/history", soundtrack.History)
|
l.Page("/soundtrack/:id/history", soundtrack.History)
|
||||||
|
|
||||||
|
34
pages/soundtrack/lyrics.go
Normal file
34
pages/soundtrack/lyrics.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package soundtrack
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/aerogo/aero"
|
||||||
|
"github.com/animenotifier/arn"
|
||||||
|
"github.com/animenotifier/notify.moe/components"
|
||||||
|
"github.com/animenotifier/notify.moe/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Lyrics of a soundtrack.
|
||||||
|
func Lyrics(ctx *aero.Context) string {
|
||||||
|
id := ctx.Get("id")
|
||||||
|
track, err := arn.GetSoundTrack(id)
|
||||||
|
user := utils.GetUser(ctx)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return ctx.Error(http.StatusNotFound, "Track not found", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
openGraph := getOpenGraph(ctx, track)
|
||||||
|
|
||||||
|
if track.Lyrics.Native != "" {
|
||||||
|
openGraph.Tags["og:description"] = utils.CutLongDescription(track.Lyrics.Native)
|
||||||
|
}
|
||||||
|
|
||||||
|
if track.Lyrics.Romaji != "" {
|
||||||
|
openGraph.Tags["og:description"] = utils.CutLongDescription(track.Lyrics.Romaji)
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Data = openGraph
|
||||||
|
return ctx.HTML(components.SoundTrackLyricsPage(track, user))
|
||||||
|
}
|
28
pages/soundtrack/lyrics.pixy
Normal file
28
pages/soundtrack/lyrics.pixy
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
component SoundTrackLyricsPage(track *arn.SoundTrack, user *arn.User)
|
||||||
|
SoundTrackTabs(track, user)
|
||||||
|
|
||||||
|
.soundtrack-full-page
|
||||||
|
if track.Title.ByUser(user) == ""
|
||||||
|
h1.mountable untitled
|
||||||
|
else
|
||||||
|
h1.mountable= track.Title.ByUser(user)
|
||||||
|
|
||||||
|
.widget-form
|
||||||
|
if !track.HasLyrics()
|
||||||
|
p.no-data.mountable No lyrics available for this track.
|
||||||
|
else
|
||||||
|
if track.Lyrics.Romaji != ""
|
||||||
|
.widget
|
||||||
|
h3.widget-title.mountable Romaji
|
||||||
|
RenderLyrics(track.Lyrics.Romaji)
|
||||||
|
|
||||||
|
if track.Lyrics.Native != ""
|
||||||
|
.widget
|
||||||
|
h3.widget-title.mountable Native
|
||||||
|
RenderLyrics(track.Lyrics.Native)
|
||||||
|
|
||||||
|
component RenderLyrics(text string)
|
||||||
|
each paragraph in strings.Split(text, "\n\n")
|
||||||
|
p.lyrics-paragraph.mountable
|
||||||
|
each line in strings.Split(paragraph, "\n")
|
||||||
|
span.lyrics-line= line
|
2
pages/soundtrack/lyrics.scarlet
Normal file
2
pages/soundtrack/lyrics.scarlet
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
.lyrics-line
|
||||||
|
display block
|
@ -20,6 +20,20 @@ func Get(ctx *aero.Context) string {
|
|||||||
return ctx.Error(http.StatusNotFound, "Track not found", err)
|
return ctx.Error(http.StatusNotFound, "Track not found", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ctx.Data = getOpenGraph(ctx, track)
|
||||||
|
return ctx.HTML(components.SoundTrackPage(track, user))
|
||||||
|
}
|
||||||
|
|
||||||
|
func getOpenGraph(ctx *aero.Context, track *arn.SoundTrack) *arn.OpenGraph {
|
||||||
|
openGraph := &arn.OpenGraph{
|
||||||
|
Tags: map[string]string{
|
||||||
|
"og:title": track.Title.ByUser(nil),
|
||||||
|
"og:url": "https://" + ctx.App.Config.Domain + track.Link(),
|
||||||
|
"og:site_name": ctx.App.Config.Domain,
|
||||||
|
"og:type": "music.song",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
descriptionTags := []string{}
|
descriptionTags := []string{}
|
||||||
|
|
||||||
for _, tag := range track.Tags {
|
for _, tag := range track.Tags {
|
||||||
@ -30,15 +44,6 @@ func Get(ctx *aero.Context) string {
|
|||||||
descriptionTags = append(descriptionTags, tag)
|
descriptionTags = append(descriptionTags, tag)
|
||||||
}
|
}
|
||||||
|
|
||||||
openGraph := &arn.OpenGraph{
|
|
||||||
Tags: map[string]string{
|
|
||||||
"og:title": track.Title.ByUser(user),
|
|
||||||
"og:url": "https://" + ctx.App.Config.Domain + track.Link(),
|
|
||||||
"og:site_name": ctx.App.Config.Domain,
|
|
||||||
"og:type": "music.song",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
if track.MainAnime() != nil {
|
if track.MainAnime() != nil {
|
||||||
openGraph.Tags["og:image"] = track.MainAnime().ImageLink("large")
|
openGraph.Tags["og:image"] = track.MainAnime().ImageLink("large")
|
||||||
openGraph.Tags["og:description"] = track.MainAnime().Title.Canonical + " (" + strings.Join(descriptionTags, ", ") + ")"
|
openGraph.Tags["og:description"] = track.MainAnime().Title.Canonical + " (" + strings.Join(descriptionTags, ", ") + ")"
|
||||||
@ -56,7 +61,5 @@ func Get(ctx *aero.Context) string {
|
|||||||
openGraph.Tags["og:video"] = "https://www.youtube.com/v/" + youtube[0].ServiceID
|
openGraph.Tags["og:video"] = "https://www.youtube.com/v/" + youtube[0].ServiceID
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Data = openGraph
|
return openGraph
|
||||||
|
|
||||||
return ctx.HTML(components.SoundTrackPage(track, user))
|
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,11 @@ component SoundTrackTabs(track *arn.SoundTrack, user *arn.User)
|
|||||||
.tabs
|
.tabs
|
||||||
TabLike(strconv.Itoa(len(track.Likes)), "heart", "track", track, user)
|
TabLike(strconv.Itoa(len(track.Likes)), "heart", "track", track, user)
|
||||||
Tab("Soundtrack", "music", track.Link())
|
Tab("Soundtrack", "music", track.Link())
|
||||||
|
|
||||||
|
if track.HasLyrics()
|
||||||
|
Tab("Lyrics", "font", track.Link() + "/lyrics")
|
||||||
|
|
||||||
if user != nil
|
if user != nil
|
||||||
Tab("Edit", "pencil", track.Link() + "/edit")
|
Tab("Edit", "pencil", track.Link() + "/edit")
|
||||||
|
|
||||||
Tab("History", "history", track.Link() + "/history")
|
Tab("History", "history", track.Link() + "/history")
|
||||||
|
12
utils/CutLongDescription.go
Normal file
12
utils/CutLongDescription.go
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
const maxDescriptionLength = 170
|
||||||
|
|
||||||
|
// CutLongDescription cuts a long description for use in OpenGraph tags.
|
||||||
|
func CutLongDescription(description string) string {
|
||||||
|
if len(description) > maxDescriptionLength {
|
||||||
|
return description[:maxDescriptionLength-3] + "..."
|
||||||
|
}
|
||||||
|
|
||||||
|
return description
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user