github.com/bitcubate/cryptojournal@v1.2.5-0.20171102134152-f578b3d788ab/src/stories/actions/home.go (about) 1 package storyactions 2 3 import ( 4 "fmt" 5 "net/http" 6 "strings" 7 8 "github.com/fragmenta/mux" 9 "github.com/fragmenta/server" 10 "github.com/fragmenta/server/config" 11 "github.com/fragmenta/view" 12 13 "github.com/bitcubate/cryptojournal/src/lib/session" 14 "github.com/bitcubate/cryptojournal/src/lib/stats" 15 "github.com/bitcubate/cryptojournal/src/stories" 16 ) 17 18 // HandleHome displays a list of stories using gravity to order them 19 // used for the home page for gravity rank see votes.go 20 // responds to GET / 21 func HandleHome(w http.ResponseWriter, r *http.Request) error { 22 stats.RegisterHit(r) 23 24 // Build a query 25 q := stories.Query().Limit(listLimit) 26 27 // Select only above 0 points, Order by rank, then points, then name 28 q.Where("points > 0").Order("rank desc, points desc, id desc") 29 30 // Fetch the params 31 params, err := mux.Params(r) 32 if err != nil { 33 return server.InternalError(err) 34 } 35 36 // Set the offset in pages if we have one 37 page := int(params.GetInt("page")) 38 if page > 0 { 39 q.Offset(listLimit * page) 40 } 41 42 // Fetch the stories 43 results, err := stories.FindAll(q) 44 if err != nil { 45 return server.InternalError(err) 46 } 47 48 // Render the template 49 view := view.NewRenderer(w, r) 50 view.AddKey("page", page) 51 view.AddKey("stories", results) 52 view.Template("stories/views/index.html.got") 53 view.AddKey("pubdate", storiesModTime(results)) 54 view.AddKey("meta_title", fmt.Sprintf("%s - %s", config.Get("meta_title"), config.Get("meta_desc"))) 55 view.AddKey("meta_desc", config.Get("meta_desc")) 56 view.AddKey("meta_keywords", config.Get("meta_keywords")) 57 view.AddKey("meta_foot", config.Get("meta_desc")) 58 view.AddKey("meta_rss", storiesXMLPath(w, r)) 59 view.AddKey("userCount", stats.UserCount()) 60 view.AddKey("currentUser", session.CurrentUser(w, r)) 61 // For rss feeds use xml templates 62 if strings.HasSuffix(r.URL.Path, ".xml") { 63 view.Layout("") 64 view.Template("stories/views/index.xml.got") 65 } 66 67 return view.Render() 68 69 }