html.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package front
  2. import (
  3. "notabug.org/apiote/amuse/accounts"
  4. "notabug.org/apiote/amuse/i18n"
  5. "notabug.org/apiote/amuse/tmdb"
  6. "notabug.org/apiote/amuse/utils"
  7. "notabug.org/apiote/amuse/wikidata"
  8. "bytes"
  9. "golang.org/x/text/language"
  10. "html/template"
  11. "strings"
  12. "time"
  13. )
  14. type RenderData struct {
  15. Data interface{}
  16. Strings i18n.Translation
  17. State struct {
  18. Error error
  19. User accounts.User
  20. }
  21. }
  22. func (d RenderData) LetAmuse0() string {
  23. let_amuse := strings.Split(d.Strings.Index["let_amuse_you"], "{}")
  24. let_amuse[0], let_amuse[1] = strings.Trim(let_amuse[0], " "), strings.Trim(let_amuse[1], " ")
  25. return let_amuse[0]
  26. }
  27. func (d RenderData) LetAmuse1() string {
  28. let_amuse := strings.Split(d.Strings.Index["let_amuse_you"], "{}")
  29. let_amuse[0], let_amuse[1] = strings.Trim(let_amuse[0], " "), strings.Trim(let_amuse[1], " ")
  30. return let_amuse[1]
  31. }
  32. func (d RenderData) FormatDate(date time.Time) string {
  33. return i18n.FormatDate(date, d.Strings.Global["date_format"], d.Strings.Global)
  34. }
  35. func (d RenderData) RenderAsciiDoc(s string) template.HTML {
  36. return i18n.RenderAsciiDoc(s)
  37. }
  38. func (d RenderData) GetErrorData(code int, kind string) string {
  39. return i18n.GetErrorData(code, d.Strings, kind)
  40. }
  41. type HtmlRenderer struct{}
  42. func render(languages []language.Tag, data RenderData, file string) string {
  43. i18n.LoadServerLangs()
  44. language := i18n.Match(languages)
  45. strings, err := i18n.LoadStrings(language)
  46. if err != nil {
  47. // todo return http:500
  48. }
  49. data.Strings = strings
  50. t, _ := template.ParseFiles(utils.DataHome + "/templates/" + file + ".html")
  51. b := bytes.NewBuffer([]byte{})
  52. err = t.Execute(b, data)
  53. if err != nil {
  54. // todo return http:500
  55. }
  56. return b.String()
  57. }
  58. func (HtmlRenderer) RenderFilm(film *tmdb.Film, languages []language.Tag) string {
  59. data := RenderData{Data: film}
  60. return render(languages, data, "film")
  61. }
  62. func (HtmlRenderer) RenderSearch(tmdbResults *tmdb.SearchResults, inventaireResults *wikidata.SearchResults, languages []language.Tag) string {
  63. results := struct {
  64. T *tmdb.SearchResults
  65. I *wikidata.SearchResults
  66. }{tmdbResults, inventaireResults}
  67. data := RenderData{Data: results}
  68. return render(languages, data, "search")
  69. }
  70. func (HtmlRenderer) RenderIndex(randomComedy string, languages []language.Tag) string {
  71. data := RenderData{Data: randomComedy}
  72. return render(languages, data, "index")
  73. }
  74. func (HtmlRenderer) RenderTvSerie(tvSerie *tmdb.TvSerie, languages []language.Tag) string {
  75. data := RenderData{Data: tvSerie}
  76. return render(languages, data, "tvserie")
  77. }
  78. func (HtmlRenderer) RenderPerson(person *tmdb.Person, languages []language.Tag) string {
  79. data := RenderData{Data: person}
  80. return render(languages, data, "person")
  81. }
  82. func (HtmlRenderer) RenderBook(book wikidata.Book, languages []language.Tag) string {
  83. data := RenderData{Data: book}
  84. return render(languages, data, "book")
  85. }
  86. func (HtmlRenderer) RenderBookSerie(bookSerie wikidata.BookSerie, languages []language.Tag) string {
  87. data := RenderData{Data: bookSerie}
  88. return render(languages, data, "bookserie")
  89. }
  90. func (HtmlRenderer) RenderAbout(languages []language.Tag) string {
  91. data := RenderData{}
  92. return render(languages, data, "about")
  93. }
  94. func (HtmlRenderer) RenderErrorPage(code int, languages []language.Tag) string {
  95. data := RenderData{Data: code}
  96. return render(languages, data, "error")
  97. }
  98. func (HtmlRenderer) RenderLogin(languages []language.Tag, authError error) string {
  99. data := RenderData{}
  100. return render(languages, data, "login")
  101. }