package main import ( "fmt" "net/url" "sort" "strings" ) func RouteGoldberry(u *url.URL) (string, error) { switch strings.ToLower(u.Host) { case "home": return GoldberryHome() default: return ConvertErrorToHTML(90, "The requested route does not exist"), nil } } func GoldberryHome() (string, error) { var out strings.Builder out.WriteString("

Home

\n
\n") out.WriteString(CustomHTML()) out.WriteString("

Most Visited

\n
\n") out.WriteString(MostVisited()) out.WriteString(HistoryOutput()) return out.String(), nil } func CustomHTML() string { if !settings.UseCustomHome { return "\n" } return settings.CustomHomeHTML } func MostVisited() string { if !settings.KeepHistory { return "

History is currently disabled

\n" } if len(settings.History) == 0 { return "" } format := `%s
` hash := make(map[string]int) counts := make([]VisitedPage, 0, len(settings.History)) for _, u := range settings.History { hash[u]++ } for k, v := range hash { counts = append(counts, VisitedPage{v, k}) } sort.Slice(counts, func(i, j int) bool { return counts[i].count > counts[j].count }) countOfCounts := 5 if len(counts) < 5 { countOfCounts = len(counts) } var out strings.Builder out.WriteString("

") for _, c := range counts[:countOfCounts] { out.WriteString(fmt.Sprintf(format, c.u, c.u)) } out.WriteString("

") return out.String() } func HistoryOutput() string { if !settings.KeepHistory { return "\n" } format := "\t%s
\n" var out strings.Builder out.WriteString("
\n\tFull History\n") for _, u := range settings.History { out.WriteString(fmt.Sprintf(format, u, u)) } out.WriteString("
\n") return out.String() }