diff --git a/app.rb b/app.rb
index 73301518..21dc6590 100644
--- a/app.rb
+++ b/app.rb
@@ -36,9 +36,24 @@ end
get '/browse' do
@current_page = params[:current_page] || 1
@current_page = @current_page.to_i
- site_dataset = Site.order(:updated_at.desc, :hits.desc).filter(is_banned: false).filter(site_changed: true).paginate(@current_page, 300)
- site_dataset.filter! is_nsfw: (!params[:is_nsfw].nil? ? true : false)
+ site_dataset = Site.filter(is_banned: false).filter(site_changed: true).paginate(@current_page, 300)
+
+ case params[:sort_by]
+ when 'hits'
+ site_dataset.order!(:hits.desc)
+ when 'newest'
+ site_dataset.order!(:created_at.desc)
+ when 'oldest'
+ site_dataset.order!(:created_at)
+ when 'random'
+ site_dataset.where! 'random() < 0.01'
+ else
+ params[:sort_by] = 'last_updated'
+ site_dataset.order!(:updated_at.desc, :hits.desc)
+ end
+
+ site_dataset.filter!(is_nsfw: true) if params[:is_nsfw] == 'true'
@page_count = site_dataset.page_count || 1
@sites = site_dataset.all
diff --git a/views/browse.erb b/views/browse.erb
index 992065ed..9791b331 100644
--- a/views/browse.erb
+++ b/views/browse.erb
@@ -1,34 +1,69 @@
+
-
-
Web Sites on NeoCities
-
If you like a site, don't forget to bookmark it!
Visitor counts are updated hourly.
-
+
+
+
Web Sites on NeoCities
+
If you like a site, don't forget to bookmark it!
Visitor counts are updated hourly.
+
+
+
+
<% @sites.each do |site| %>
-
-
+
<% end %>
- <% if @page_count > 1 %>
-
- <% if @current_page != 1 %>
-
- <% end %>
+ <% if params[:sort_by] != 'random' %>
+ <% if @page_count > 1 %>
+
+ <% if @current_page != 1 %>
+
+ <% end %>
- <% 1.upto(@page_count) do |num| %>
-
"><%= num %>
- <% end %>
+ <% 1.upto(@page_count) do |num| %>
+
"><%= num %>
+ <% end %>
- <% if @current_page != @page_count %>
-
- <% end %>
-
+ <% if @current_page != @page_count %>
+
+ <% end %>
+
+ <% end %>
<% end %>
\ No newline at end of file