diff --git a/app.rb b/app.rb index dc420fce..2c359893 100644 --- a/app.rb +++ b/app.rb @@ -92,6 +92,14 @@ before do params[:page] = '1' end end + + if params[:tag] + begin + params.delete 'tag' if params[:tag].nil? || !params[:tag].is_a?(String) || params[:tag].strip.empty? || params[:tag].match?(Tag::INVALID_TAG_REGEX) + rescue Encoding::CompatibilityError + params.delete 'tag' + end + end end after do diff --git a/app/activity.rb b/app/activity.rb index 35896e0d..1c2d97ad 100644 --- a/app/activity.rb +++ b/app/activity.rb @@ -3,15 +3,52 @@ get '/activity' do @page = params[:page] || 1 - @pagination_dataset = Event.global_dataset + if params[:tag] + query1 = Event + .join(:sites, id: :site_id) + .join(:sites_tags, site_id: :id) + .join(:tags, id: :tag_id) + .where(tags__name: params[:tag]) + .where(events__is_deleted: false, sites__is_deleted: false) + .where{sites__score > Event::ACTIVITY_TAG_SCORE_LIMIT} + .where(sites__is_nsfw: false) + .where(follow_id: nil) + .select_all(:events) - if current_site - blocking_site_ids = current_site.blocking_site_ids - @pagination_dataset.exclude(events__site_id: blocking_site_ids).exclude(events__actioning_site_id: blocking_site_ids) + query2 = Event + .join(:sites, id: :actioning_site_id) + .join(:sites_tags, site_id: :id) + .join(:tags, id: :tag_id) + .where(tags__name: params[:tag]) + .where(events__is_deleted: false, sites__is_deleted: false) + .where{sites__score > Event::ACTIVITY_TAG_SCORE_LIMIT} + .where(sites__is_nsfw: false) + .where(follow_id: nil) + .select_all(:events) + + if current_site + blocking_site_ids = current_site.blocking_site_ids + query1 = query1.where(Sequel.|({events__site_id: nil}, ~{events__site_id: blocking_site_ids})).where(Sequel.|({events__actioning_site_id: nil}, ~{events__actioning_site_id: blocking_site_ids})) + query2 = query2.where(Sequel.|({events__site_id: nil}, ~{events__site_id: blocking_site_ids})).where(Sequel.|({events__actioning_site_id: nil}, ~{events__actioning_site_id: blocking_site_ids})) + end + + ds = query1.union(query2, all: true).order(Sequel.desc(:created_at)) + else + ds = Event.news_feed_default_dataset.exclude(sites__is_nsfw: true) + + if current_site + blocking_site_ids = current_site.blocking_site_ids + ds = ds.where(Sequel.|({events__site_id: nil}, ~{events__site_id: blocking_site_ids})).where(Sequel.|({events__actioning_site_id: nil}, ~{events__actioning_site_id: blocking_site_ids})) + end + + ds = ds.where( + Sequel.expr(Sequel[:sites][:score] > Event::GLOBAL_SCORE_LIMIT) | + Sequel.expr(Sequel[:actioning_sites][:score] > Event::GLOBAL_SCORE_LIMIT) + ) end - @pagination_dataset = @pagination_dataset.paginate @page.to_i, Event::GLOBAL_PAGINATION_LENGTH + @pagination_dataset = ds.paginate @page.to_i, Event::GLOBAL_PAGINATION_LENGTH @events = @pagination_dataset.all erb :'activity' -end +end \ No newline at end of file diff --git a/app/browse.rb b/app/browse.rb index 166b6f8a..b7d95c95 100644 --- a/app/browse.rb +++ b/app/browse.rb @@ -2,12 +2,6 @@ get '/browse/?' do @page = params[:page] @page = 1 if @page.not_an_integer? - begin - params.delete 'tag' if params[:tag].nil? || !params[:tag].is_a?(String) || params[:tag].strip.empty? || params[:tag].match?(Tag::INVALID_TAG_REGEX) - rescue Encoding::CompatibilityError - params.delete 'tag' - end - if is_education? ds = education_sites_dataset else diff --git a/models/event.rb b/models/event.rb index 94d584c5..b9cf6d99 100644 --- a/models/event.rb +++ b/models/event.rb @@ -16,6 +16,7 @@ class Event < Sequel::Model PAGINATION_LENGTH = 10 GLOBAL_PAGINATION_LENGTH = 20 GLOBAL_SCORE_LIMIT = 2 + ACTIVITY_TAG_SCORE_LIMIT = 0.2 def undeleted_comments_count comments_dataset.exclude(is_deleted: true).count @@ -40,14 +41,6 @@ class Event < Sequel::Model order(:events__created_at.desc) end - def self.global_dataset - news_feed_default_dataset.where( - Sequel.expr(Sequel[:sites][:score] > GLOBAL_SCORE_LIMIT) | - Sequel.expr(Sequel[:actioning_sites][:score] > GLOBAL_SCORE_LIMIT) - ). - exclude(sites__is_nsfw: true) - end - def created_by?(site) return true if actioning_site_id == site.id false diff --git a/sass/_project-sass/_project-Main.scss b/sass/_project-sass/_project-Main.scss index 72324748..c58d9635 100644 --- a/sass/_project-sass/_project-Main.scss +++ b/sass/_project-sass/_project-Main.scss @@ -24,7 +24,6 @@ } } .single-Col{ - max-width:800px; } // About page diff --git a/views/_browse_tags.erb b/views/_browse_tags.erb new file mode 100644 index 00000000..83af6a92 --- /dev/null +++ b/views/_browse_tags.erb @@ -0,0 +1,9 @@ +
+

Popular Tags

+

+ <% Tag.popular_names(1000).each_with_index do |tag,i| %> + <% i = (((i+1).to_f/1000) * 10).to_i %> + <%= tag[:name] %>   + <% end %> +

+
\ No newline at end of file diff --git a/views/activity.erb b/views/activity.erb index 641920a7..acb5a5d6 100644 --- a/views/activity.erb +++ b/views/activity.erb @@ -1,10 +1,27 @@ -
-
-

Latest Activity on Neocities

+
+
+
+ <% if params[:tag] %> +

Latest Activity > <%= params[:tag] %>

+

Sites

+ <% else %> +

Latest Activity on Neocities

+ <% end %> +
+ +
+
+
+ + + +
+
+
-
-
+
+
<% if !signed_in? %>

All the latest Neocities site news!

@@ -15,5 +32,6 @@ <% end %> <%== erb :'_news', locals: {current_site: nil, events: @events} %> + <%== erb :'_browse_tags' %>
\ No newline at end of file diff --git a/views/browse.erb b/views/browse.erb index c9cfd163..77b7f34b 100644 --- a/views/browse.erb +++ b/views/browse.erb @@ -3,6 +3,7 @@
<% if params[:tag] %>

Websites > <%= params[:tag] %>

+

Activity

<% else %>

Sites on Neocities

<% end %> @@ -142,15 +143,7 @@ <% end %> <% unless is_education? %> -
-

Popular Tags

-

- <% Tag.popular_names(100).each_with_index do |tag,i| %> - <% i = (((i+1).to_f/100) * 10).to_i %> - <%= tag[:name] %>   - <% end %> -

-
+<%== erb :_browse_tags %>

Text Search