mirror of
https://github.com/neocities/neocities.git
synced 2025-04-24 17:22:35 +02:00
add views display/search, and improve initial site suggestions
This commit is contained in:
parent
df4cf8a3d6
commit
5cb988b3e7
6 changed files with 56 additions and 16 deletions
17
app.rb
17
app.rb
|
@ -216,9 +216,7 @@ get '/?' do
|
|||
if current_site
|
||||
require_login
|
||||
|
||||
if current_site.followings_dataset.count == 0
|
||||
@suggestions = current_site.suggestions
|
||||
end
|
||||
@suggestions = current_site.suggestions
|
||||
|
||||
@current_page = params[:current_page].to_i
|
||||
@current_page = 1 if @current_page == 0
|
||||
|
@ -398,9 +396,17 @@ get '/browse/?' do
|
|||
site_dataset.order!(:created_at)
|
||||
when 'random'
|
||||
site_dataset.where! 'random() < 0.01'
|
||||
else
|
||||
when 'last_updated'
|
||||
params[:sort_by] = 'last_updated'
|
||||
site_dataset.order!(:updated_at.desc, :hits.desc)
|
||||
site_dataset.order!(:updated_at.desc, :views.desc)
|
||||
else
|
||||
if params[:tag]
|
||||
params[:sort_by] = 'views'
|
||||
site_dataset.order!(:views.desc)
|
||||
else
|
||||
params[:sort_by] = 'last_updated'
|
||||
site_dataset.order!(:updated_at.desc, :views.desc)
|
||||
end
|
||||
end
|
||||
|
||||
site_dataset.filter! is_nsfw: (params[:is_nsfw] == 'true' ? true : false)
|
||||
|
@ -1221,6 +1227,7 @@ def api_info_for(site)
|
|||
{
|
||||
info: {
|
||||
sitename: site.username,
|
||||
views: site.views,
|
||||
hits: site.hits,
|
||||
created_at: site.created_at.rfc2822,
|
||||
last_updated: site.updated_at.rfc2822,
|
||||
|
|
|
@ -93,6 +93,9 @@ class Site < Sequel::Model
|
|||
}
|
||||
}
|
||||
|
||||
SUGGESTIONS_LIMIT = 32
|
||||
SUGGESTIONS_VIEWS_MIN = 500
|
||||
|
||||
PLAN_FEATURES[:catbus] = PLAN_FEATURES[:fatcat].merge(
|
||||
name: 'Cat Bus',
|
||||
space: Filesize.from('10GB').to_i,
|
||||
|
@ -793,6 +796,10 @@ class Site < Sequel::Model
|
|||
values[:hits].to_s.reverse.gsub(/...(?=.)/,'\&,').reverse
|
||||
end
|
||||
|
||||
def views_english
|
||||
values[:views].to_s.reverse.gsub(/...(?=.)/,'\&,').reverse
|
||||
end
|
||||
|
||||
def screenshots_delete(path)
|
||||
SCREENSHOT_RESOLUTIONS.each do |res|
|
||||
begin
|
||||
|
@ -811,8 +818,13 @@ class Site < Sequel::Model
|
|||
end
|
||||
end
|
||||
|
||||
def suggestions(limit=8, offset=0)
|
||||
Site.where(tags: tags).limit(limit, offset).order(:updated_at.desc).all
|
||||
def suggestions(limit=SUGGESTIONS_LIMIT, offset=0)
|
||||
suggestions_dataset = Site.exclude(id: id).order(:views.desc, :updated_at.desc)
|
||||
suggestions = suggestions_dataset.where(tags: tags).limit(limit, offset).all
|
||||
|
||||
return suggestions if suggestions.length == 32
|
||||
|
||||
suggestions += suggestions_dataset.where("views >= #{SUGGESTIONS_VIEWS_MIN}").limit(limit-suggestions.length).order(Sequel.lit('RANDOM()')).all
|
||||
end
|
||||
|
||||
def screenshot_path(path, resolution)
|
||||
|
|
|
@ -7,7 +7,7 @@ def app
|
|||
Sinatra::Application
|
||||
end
|
||||
|
||||
describe 'site' do
|
||||
describe Site do
|
||||
describe 'plan_name' do
|
||||
it 'should set to free for missing stripe_customer_id' do
|
||||
site = Fabricate :site
|
||||
|
@ -26,4 +26,22 @@ describe 'site' do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'suggestions' do
|
||||
it 'should return suggestions for tags' do
|
||||
site = Fabricate :site, new_tags_string: 'vegetables'
|
||||
Site::SUGGESTIONS_LIMIT.times { Fabricate :site, new_tags_string: 'vegetables' }
|
||||
|
||||
site.suggestions.length.must_equal Site::SUGGESTIONS_LIMIT
|
||||
|
||||
site.suggestions.each {|s| s.tags.first.name.must_equal 'vegetables'}
|
||||
|
||||
site = Fabricate :site, new_tags_string: 'gardening'
|
||||
(Site::SUGGESTIONS_LIMIT-5).times {
|
||||
Fabricate :site, new_tags_string: 'gardening', views: Site::SUGGESTIONS_VIEWS_MIN
|
||||
}
|
||||
|
||||
site.suggestions.length.must_equal Site::SUGGESTIONS_LIMIT
|
||||
end
|
||||
end
|
||||
end
|
|
@ -81,7 +81,11 @@
|
|||
</div>
|
||||
<div style="float: right">
|
||||
<a href="/site/<%= site.username %>">
|
||||
<%= site.hits %> hit<%= site.hits == 1 ? '' : 's' %>
|
||||
<% if params[:sort_by] == 'hits' %>
|
||||
<%= site.hits %> hit<%= site.hits == 1 ? '' : 's' %>
|
||||
<% else %>
|
||||
<%= site.views %> view<%= site.views == 1 ? '' : 's' %>
|
||||
<% end %>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -31,11 +31,7 @@
|
|||
<p>
|
||||
You aren't following any websites yet! Once you do, updates will show up here and you can like and comment on them.
|
||||
|
||||
<% if @suggestions.length > 0 %>
|
||||
Here are some website suggestions based on your tags, or <a href="/browse">check out all the sites on Neocities!</a>
|
||||
<% else %>
|
||||
Want to find some sites to follow? <a href="/browse">Check out all the sites on Neocities!</a>
|
||||
<% end %>
|
||||
Here are some website suggestions for you. Want to find some sites to follow? <a href="/browse">Check out all the sites on Neocities!</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
@ -45,8 +41,9 @@
|
|||
<a href="//<%= suggested_site.host %>">
|
||||
<img src="<%= suggested_site.screenshot_url('index.html', '270x162') %>">
|
||||
</a>
|
||||
<span class="caption">
|
||||
<a href="/site/<%= suggested_site.username %>"><%= suggested_site.title %></a></span>
|
||||
<span class="caption">
|
||||
<a href="/site/<%= suggested_site.username %>"><%= suggested_site.title %></a>
|
||||
</span>
|
||||
</div>
|
||||
<% suggested_site.tags.each do |tag| %>
|
||||
<a class="tag" href="/browse?tag=<%= Rack::Utils.escape tag.name %>"><%= tag.name %></a>
|
||||
|
@ -67,6 +64,7 @@
|
|||
<% end %>
|
||||
</div>
|
||||
<div class="col col-50">
|
||||
<div><strong><%= site.views_english %></strong> unique views</div>
|
||||
<div><strong><%= site.hits_english %></strong> hits</div>
|
||||
<div><strong><%= site.follows_dataset.count %></strong> followers</div>
|
||||
<div><strong><%= site.tips_dataset.count %></strong> tips ($<%= site.tip_amount %>)</div>
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
<h2 class="eps title-with-badge"><span><%= site.title %></span> <% if site.supporter? && !site.ended_supporter? %><a href="/plan" class="supporter-badge" title="Neocities Supporter"></a> <% end %></h2>
|
||||
<p class="site-url"><a href="//<%= site.host %>"><%= site.host %></a></p>
|
||||
<div class="stats">
|
||||
<div class="stat"><strong><%= site.views_english %></strong> <span>views</span></div>
|
||||
<div class="stat"><strong><%= site.hits_english %></strong> <span>hits</span></div>
|
||||
<div class="stat"><strong><%= site.follows_dataset.count %></strong> <span>followers</span></div>
|
||||
<!-- <div class="stat tips"><strong><%= site.tips_dataset.count %></strong> <span>tips</span></div> -->
|
||||
|
|
Loading…
Add table
Reference in a new issue