2012-06-17 03:15:46 +02:00
|
|
|
class HomeController < ApplicationController
|
2012-09-18 17:38:03 +02:00
|
|
|
# for rss feeds, load the user's tag filters if a token is passed
|
|
|
|
before_filter :find_user_from_rss_token, :only => [ :index, :newest ]
|
2014-07-07 18:05:53 +02:00
|
|
|
before_filter { @page = page }
|
2014-08-18 02:10:32 +02:00
|
|
|
before_filter :require_logged_in_user, :only => [ :upvoted ]
|
2012-09-18 17:38:03 +02:00
|
|
|
|
2014-04-03 17:26:10 +02:00
|
|
|
def about
|
|
|
|
begin
|
|
|
|
render :action => "about"
|
|
|
|
rescue
|
|
|
|
render :text => "<div class=\"box wide\">" <<
|
|
|
|
"A mystery." <<
|
|
|
|
"</div>", :layout => "application"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2015-10-11 19:53:48 +02:00
|
|
|
def chat
|
2016-04-13 04:34:04 +02:00
|
|
|
begin
|
|
|
|
render :action => "chat"
|
|
|
|
rescue
|
|
|
|
render :text => "<div class=\"box wide\">" <<
|
|
|
|
"Keep it on-site" <<
|
|
|
|
"</div>", :layout => "application"
|
|
|
|
end
|
2015-10-11 19:53:48 +02:00
|
|
|
end
|
|
|
|
|
2014-07-07 18:05:53 +02:00
|
|
|
def privacy
|
|
|
|
begin
|
|
|
|
render :action => "privacy"
|
|
|
|
rescue
|
|
|
|
render :text => "<div class=\"box wide\">" <<
|
|
|
|
"You apparently have no privacy." <<
|
|
|
|
"</div>", :layout => "application"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-03-04 00:14:33 +01:00
|
|
|
def hidden
|
2014-08-04 03:47:13 +02:00
|
|
|
@stories, @show_more = get_from_cache(hidden: true) {
|
|
|
|
paginate stories.hidden
|
|
|
|
}
|
2014-03-04 00:14:33 +01:00
|
|
|
|
|
|
|
@heading = @title = "Hidden Stories"
|
|
|
|
@cur_url = "/hidden"
|
|
|
|
|
|
|
|
render :action => "index"
|
|
|
|
end
|
|
|
|
|
2012-07-01 00:43:45 +02:00
|
|
|
def index
|
2014-08-04 03:47:13 +02:00
|
|
|
@stories, @show_more = get_from_cache(hottest: true) {
|
|
|
|
paginate stories.hottest
|
|
|
|
}
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2014-03-12 23:50:51 +01:00
|
|
|
@rss_link ||= { :title => "RSS 2.0",
|
|
|
|
:href => "/rss#{@user ? "?token=#{@user.rss_token}" : ""}" }
|
2015-04-28 16:51:50 +02:00
|
|
|
@comments_rss_link ||= { :title => "Comments - RSS 2.0",
|
|
|
|
:href => "/comments.rss#{@user ? "?token=#{@user.rss_token}" : ""}" }
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2012-09-07 16:18:15 +02:00
|
|
|
@heading = @title = ""
|
2012-07-11 22:34:53 +02:00
|
|
|
@cur_url = "/"
|
|
|
|
|
2012-07-01 01:42:53 +02:00
|
|
|
respond_to do |format|
|
|
|
|
format.html { render :action => "index" }
|
2012-09-18 17:38:03 +02:00
|
|
|
format.rss {
|
|
|
|
if @user && params[:token].present?
|
|
|
|
@title = "Private feed for #{@user.username}"
|
|
|
|
end
|
|
|
|
|
|
|
|
render :action => "rss", :layout => false
|
|
|
|
}
|
2012-12-17 03:05:27 +01:00
|
|
|
format.json { render :json => @stories }
|
2012-06-17 03:15:46 +02:00
|
|
|
end
|
2012-07-01 01:42:53 +02:00
|
|
|
end
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2012-07-01 01:42:53 +02:00
|
|
|
def newest
|
2014-08-04 03:47:13 +02:00
|
|
|
@stories, @show_more = get_from_cache(newest: true) {
|
|
|
|
paginate stories.newest
|
|
|
|
}
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2012-09-07 16:18:15 +02:00
|
|
|
@heading = @title = "Newest Stories"
|
2012-07-11 22:34:53 +02:00
|
|
|
@cur_url = "/newest"
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2014-03-12 23:50:51 +01:00
|
|
|
@rss_link = { :title => "RSS 2.0 - Newest Items",
|
|
|
|
:href => "/newest.rss#{@user ? "?token=#{@user.rss_token}" : ""}" }
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2012-07-01 01:42:53 +02:00
|
|
|
respond_to do |format|
|
|
|
|
format.html { render :action => "index" }
|
2012-09-18 17:38:03 +02:00
|
|
|
format.rss {
|
|
|
|
if @user && params[:token].present?
|
|
|
|
@title += " - Private feed for #{@user.username}"
|
|
|
|
end
|
|
|
|
|
|
|
|
render :action => "rss", :layout => false
|
|
|
|
}
|
2012-12-17 03:05:27 +01:00
|
|
|
format.json { render :json => @stories }
|
2012-07-01 01:42:53 +02:00
|
|
|
end
|
2012-06-30 21:14:35 +02:00
|
|
|
end
|
|
|
|
|
2012-09-04 00:21:41 +02:00
|
|
|
def newest_by_user
|
2014-01-25 17:38:07 +01:00
|
|
|
by_user = User.where(:username => params[:user]).first!
|
2012-09-04 00:21:41 +02:00
|
|
|
|
2014-08-04 03:47:13 +02:00
|
|
|
@stories, @show_more = get_from_cache(by_user: by_user) {
|
2014-08-16 16:08:24 +02:00
|
|
|
paginate stories.newest_by_user(by_user)
|
2014-08-04 03:47:13 +02:00
|
|
|
}
|
2013-02-14 01:50:51 +01:00
|
|
|
|
2014-01-25 17:38:07 +01:00
|
|
|
@heading = @title = "Newest Stories by #{by_user.username}"
|
|
|
|
@cur_url = "/newest/#{by_user.username}"
|
2012-09-04 00:21:41 +02:00
|
|
|
|
|
|
|
@newest = true
|
2014-01-25 17:38:07 +01:00
|
|
|
@for_user = by_user.username
|
2012-09-04 00:21:41 +02:00
|
|
|
|
|
|
|
render :action => "index"
|
|
|
|
end
|
|
|
|
|
2014-01-25 18:13:14 +01:00
|
|
|
def recent
|
2014-08-04 03:47:13 +02:00
|
|
|
@stories, @show_more = get_from_cache(recent: true) {
|
2014-07-07 18:05:53 +02:00
|
|
|
scope = if page == 1
|
|
|
|
stories.recent
|
|
|
|
else
|
|
|
|
stories.newest
|
|
|
|
end
|
|
|
|
paginate scope
|
2014-08-04 03:47:13 +02:00
|
|
|
}
|
2014-01-25 18:13:14 +01:00
|
|
|
|
|
|
|
@heading = @title = "Recent Stories"
|
|
|
|
@cur_url = "/recent"
|
|
|
|
|
2014-03-12 23:50:51 +01:00
|
|
|
# our content changes every page load, so point at /newest.rss to be stable
|
|
|
|
@rss_link = { :title => "RSS 2.0 - Newest Items",
|
|
|
|
:href => "/newest.rss#{@user ? "?token=#{@user.rss_token}" : ""}" }
|
|
|
|
|
2014-01-25 18:13:14 +01:00
|
|
|
render :action => "index"
|
|
|
|
end
|
|
|
|
|
2012-06-17 03:15:46 +02:00
|
|
|
def tagged
|
2013-12-24 04:20:06 +01:00
|
|
|
@tag = Tag.where(:tag => params[:tag]).first!
|
2014-01-25 17:38:07 +01:00
|
|
|
|
2014-08-04 03:47:13 +02:00
|
|
|
@stories, @show_more = get_from_cache(tag: @tag) {
|
|
|
|
paginate stories.tagged(@tag)
|
|
|
|
}
|
2012-07-01 01:42:53 +02:00
|
|
|
|
2012-09-07 16:18:15 +02:00
|
|
|
@heading = @title = @tag.description.blank?? @tag.tag : @tag.description
|
2012-07-11 22:34:53 +02:00
|
|
|
@cur_url = tag_url(@tag.tag)
|
2012-06-17 03:15:46 +02:00
|
|
|
|
2014-03-12 23:50:51 +01:00
|
|
|
@rss_link = { :title => "RSS 2.0 - Tagged #{@tag.tag} (#{@tag.description})",
|
|
|
|
:href => "/t/#{@tag.tag}.rss" }
|
2012-07-01 01:42:53 +02:00
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html { render :action => "index" }
|
|
|
|
format.rss { render :action => "rss", :layout => false }
|
2015-08-04 02:12:39 +02:00
|
|
|
format.json { render :json => @stories }
|
2012-07-01 01:42:53 +02:00
|
|
|
end
|
2012-06-17 03:15:46 +02:00
|
|
|
end
|
2012-07-07 00:33:27 +02:00
|
|
|
|
2014-04-03 20:20:24 +02:00
|
|
|
TOP_INTVS = { "d" => "Day", "w" => "Week", "m" => "Month", "y" => "Year" }
|
|
|
|
def top
|
|
|
|
@cur_url = "/top"
|
|
|
|
length = { :dur => 1, :intv => "Week" }
|
|
|
|
|
|
|
|
if m = params[:length].to_s.match(/\A(\d+)([#{TOP_INTVS.keys.join}])\z/)
|
|
|
|
length[:dur] = m[1].to_i
|
|
|
|
length[:intv] = TOP_INTVS[m[2]]
|
|
|
|
|
|
|
|
@cur_url << "/#{params[:length]}"
|
|
|
|
end
|
|
|
|
|
2014-08-04 03:47:13 +02:00
|
|
|
@stories, @show_more = get_from_cache(top: true, length: length) {
|
|
|
|
paginate stories.top(length)
|
|
|
|
}
|
2014-04-03 20:20:24 +02:00
|
|
|
|
|
|
|
if length[:dur] > 1
|
|
|
|
@heading = @title = "Top Stories of the Past #{length[:dur]} " <<
|
|
|
|
length[:intv] << "s"
|
|
|
|
else
|
|
|
|
@heading = @title = "Top Stories of the Past " << length[:intv]
|
|
|
|
end
|
|
|
|
|
|
|
|
render :action => "index"
|
|
|
|
end
|
|
|
|
|
2013-03-11 19:19:26 +01:00
|
|
|
def upvoted
|
|
|
|
@stories, @show_more = get_from_cache(upvoted: true, user: @user) {
|
|
|
|
paginate @user.upvoted_stories.order('votes.id DESC')
|
|
|
|
}
|
|
|
|
|
2014-08-18 02:10:32 +02:00
|
|
|
@heading = @title = "Your Upvoted Stories"
|
2013-03-11 19:19:26 +01:00
|
|
|
@cur_url = "/upvoted"
|
|
|
|
|
2014-08-18 02:10:32 +02:00
|
|
|
@rss_link = { :title => "RSS 2.0 - Your Upvoted Stories",
|
2013-03-11 19:19:26 +01:00
|
|
|
:href => "/upvoted.rss#{(@user ? "?token=#{@user.rss_token}" : "")}" }
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.html { render :action => "index" }
|
|
|
|
format.rss {
|
|
|
|
if @user && params[:token].present?
|
|
|
|
@title += " - Private feed for #{@user.username}"
|
|
|
|
end
|
|
|
|
|
|
|
|
render :action => "rss", :layout => false
|
|
|
|
}
|
|
|
|
format.json { render :json => @stories }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-07-07 00:33:27 +02:00
|
|
|
private
|
2014-07-07 18:05:53 +02:00
|
|
|
def filtered_tag_ids
|
|
|
|
if @user
|
|
|
|
@user.tag_filters.map{|tf| tf.tag_id }
|
2012-07-10 21:43:51 +02:00
|
|
|
else
|
2014-07-07 18:05:53 +02:00
|
|
|
tags_filtered_by_cookie.map{|t| t.id }
|
2012-07-10 21:43:51 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-07-07 18:05:53 +02:00
|
|
|
def stories
|
|
|
|
StoryRepository.new(@user, exclude_tags: filtered_tag_ids)
|
|
|
|
end
|
2012-07-07 00:33:27 +02:00
|
|
|
|
2014-07-07 18:05:53 +02:00
|
|
|
def page
|
|
|
|
params[:page].to_i > 0 ? params[:page].to_i : 1
|
|
|
|
end
|
2012-07-07 00:33:27 +02:00
|
|
|
|
2014-07-07 18:05:53 +02:00
|
|
|
def paginate(scope)
|
|
|
|
StoriesPaginator.new(scope, page, @user).get
|
|
|
|
end
|
2013-02-08 00:35:20 +01:00
|
|
|
|
2014-07-07 18:05:53 +02:00
|
|
|
def get_from_cache(opts={}, &block)
|
|
|
|
if Rails.env.development? || @user || tags_filtered_by_cookie.any?
|
|
|
|
yield
|
2014-04-07 03:43:16 +02:00
|
|
|
else
|
2014-08-04 03:47:13 +02:00
|
|
|
key = opts.merge(page: page).sort.map{|k,v| "#{k}=#{v.to_param}"
|
|
|
|
}.join(" ")
|
2014-07-07 18:05:53 +02:00
|
|
|
Rails.cache.fetch("stories #{key}", :expires_in => 45, &block)
|
2012-07-07 00:33:27 +02:00
|
|
|
end
|
|
|
|
end
|
2012-06-17 03:15:46 +02:00
|
|
|
end
|