From 7dc52a9655477e96c789be8005e9c834e161e4c4 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Fri, 27 Oct 2023 14:34:17 -0400 Subject: [PATCH 01/16] Create migrations for FTS --- migrations/15/down.sql | 7 +++++++ migrations/15/up.sql | 27 +++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 migrations/15/down.sql create mode 100644 migrations/15/up.sql diff --git a/migrations/15/down.sql b/migrations/15/down.sql new file mode 100644 index 0000000..404e499 --- /dev/null +++ b/migrations/15/down.sql @@ -0,0 +1,7 @@ +DROP EXTENSION pg_trgm; + +ALTER TABLE threads + DROP COLUMN search_tokens; + +ALTER TABLE remarks + DROP COLUMN search_tokens; diff --git a/migrations/15/up.sql b/migrations/15/up.sql new file mode 100644 index 0000000..6f8e0ca --- /dev/null +++ b/migrations/15/up.sql @@ -0,0 +1,27 @@ +-- Fuzzy search +-- https://hevodata.com/blog/postgresql-full-text-search-setup/#Fuzzy_Search_vs_Full_Text_Search +CREATE EXTENSION pg_trgm; + +-- Create column for seearch tokens + ALTER TABLE threads + ADD COLUMN search_tokens tsvector +GENERATED ALWAYS AS + (to_tsvector('english', thread_author) || + to_tsvector('english', thread_title ) || + to_tsvector('english', thread_body )) STORED; + +-- Create GIN index for search tokens +CREATE INDEX threads_search_idx + ON threads + USING GIN(search_tokens); + +-- Same for remarks + ALTER TABLE remarks + ADD COLUMN search_tokens tsvector +GENERATED ALWAYS AS + (to_tsvector('english', remark_author) || + to_tsvector('english', remark_body )) STORED; + +CREATE INDEX remarks_search_idx + ON remarks + USING GIN(search_tokens); From f2e63b5ca3e7164b541d165b3038b16d4113bedd Mon Sep 17 00:00:00 2001 From: swaggboi Date: Fri, 27 Oct 2023 16:57:21 -0400 Subject: [PATCH 02/16] Created function to search posts --- lib/PostText.pm | 13 +++++- lib/PostText/Controller/Moderator.pm | 4 +- lib/PostText/Model/Page.pm | 62 ++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 lib/PostText/Model/Page.pm diff --git a/lib/PostText.pm b/lib/PostText.pm index 4afb10f..dcbbce5 100644 --- a/lib/PostText.pm +++ b/lib/PostText.pm @@ -13,6 +13,7 @@ use HTML::Restrict; use PostText::Model::Thread; use PostText::Model::Remark; use PostText::Model::Moderator; +use PostText::Model::Page; sub startup($self) { $self->plugin('Config'); @@ -56,7 +57,11 @@ sub startup($self) { state $moderator = PostText::Model::Moderator->new( pg => $c->pg, authenticator => $c->authenticator - ) + ) + }); + + $self->helper(page => sub ($c) { + state $moderator = PostText::Model::Page->new(pg => $c->pg) }); $self->helper(truncate_text => sub ($c, $input_text) { @@ -85,7 +90,7 @@ sub startup($self) { # Finish configuring some things $self->secrets($self->config->{'secrets'}) || die $@; - $self->pg->migrations->from_dir('migrations')->migrate(14); + $self->pg->migrations->from_dir('migrations')->migrate(15); if (my $threads_per_page = $self->config->{'threads_per_page'}) { $self->thread->per_page($threads_per_page) @@ -95,6 +100,10 @@ sub startup($self) { $self->remark->per_page($remarks_per_page) } + if (my $results_per_page = $self->config->{'results_per_page'}) { + $self->page->per_page($results_per_page) + } + $self->asset->process; push @{$self->commands->namespaces}, 'PostText::Command'; diff --git a/lib/PostText/Controller/Moderator.pm b/lib/PostText/Controller/Moderator.pm index 1d8891d..a3c65e2 100644 --- a/lib/PostText/Controller/Moderator.pm +++ b/lib/PostText/Controller/Moderator.pm @@ -7,7 +7,7 @@ sub flagged($self) { my @post_links = map { $self->url_for( 'hidden_' . $_->{'type'}, $_->{'type'} . '_id' => $_->{'id'} - ) + ) } @{$flagged_posts}; $self->stash(post_links => \@post_links); @@ -20,7 +20,7 @@ sub hidden($self) { my @post_links = map { $self->url_for( 'hidden_' . $_->{'type'}, $_->{'type'} . '_id' => $_->{'id'} - ) + ) } @{$hidden_posts}; $self->stash(post_links => \@post_links); diff --git a/lib/PostText/Model/Page.pm b/lib/PostText/Model/Page.pm new file mode 100644 index 0000000..6a24eb8 --- /dev/null +++ b/lib/PostText/Model/Page.pm @@ -0,0 +1,62 @@ +package PostText::Model::Page; + +use Mojo::Base -base, -signatures; + +has 'pg'; + +has per_page => 5; + +has date_format => 'Dy, FMDD Mon YYYY HH24:MI:SS TZHTZM'; + +# args: date_format, search_query, limit, offset +# SELECT 'thread' AS post_type, +# thread_id AS post_id, +# TO_CHAR(thread_date, $1) AS post_date, +# thread_author AS post_author, +# thread_body AS post_body, +# ts_rank(search_tokens, plainto_tsquery('english', $2)) AS search_rank +# FROM threads +# WHERE search_tokens @@ plainto_tsquery('english', $2) +# UNION ALL +# SELECT 'remark', +# remark_id, +# remark_date, +# remark_author, +# remark_body, +# ts_rank(search_tokens, plainto_tsquery('english', $2)) +# FROM remarks +# WHERE search_tokens @@ plainto_tsquery('english', $2) +# ORDER BY search_rank DESC, post_date DESC +# LIMIT $3 OFFSET $4; + +sub search($self, $search_query, $this_page = 1) { + my $date_format = $self->date_format; + my $row_count = $self->per_page; + my $offset = ($this_page - 1) * $row_count; + my @data = ($date_format, $search_query, $row_count, $offset); + + $self->pg->db->query(<<~'END_SQL', @data)->hashes; + SELECT 'thread' AS post_type, + thread_id AS post_id, + TO_CHAR(thread_date, $1) AS post_date, + thread_author AS post_author, + thread_body AS post_body, + ts_rank(search_tokens, plainto_tsquery('english', $2)) AS search_rank + FROM threads + WHERE search_tokens @@ plainto_tsquery('english', $2) + UNION ALL + SELECT 'remark', + remark_id, + TO_CHAR(remark_date, $1), + remark_author, + remark_body, + ts_rank(search_tokens, plainto_tsquery('english', $2)) + FROM remarks + WHERE search_tokens @@ plainto_tsquery('english', $2) + ORDER BY search_rank DESC, post_date DESC + LIMIT $3 OFFSET $4; + END_SQL +} + + +1; From bbd81b563be034a5ffcd23e92da7783fa07f8973 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Fri, 27 Oct 2023 17:05:47 -0400 Subject: [PATCH 03/16] Updated example conf --- example_post_text.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/example_post_text.conf b/example_post_text.conf index 21ef9a4..d410840 100644 --- a/example_post_text.conf +++ b/example_post_text.conf @@ -1,12 +1,17 @@ { threads_per_page => 5, remarks_per_page => 5, + results_per_page => 5, body_max_length => 8_000, secrets => ['t0p_s3cr3t'], development => { pg_string => 'postgresql://post_text:t0p_s3cr3t@127.0.0.1/post_text' }, + production => { + pg_string => + 'postgresql://post_text:t0p_s3cr3t@127.0.0.1/post_text' + }, 'TagHelpers-Pagination', { separator => ' ', current => '{current}', From 77e1483c11fddaaaf62736e630f6e90596b9424e Mon Sep 17 00:00:00 2001 From: swaggboi Date: Fri, 27 Oct 2023 17:56:53 -0400 Subject: [PATCH 04/16] Some cleanup --- lib/PostText/Model/Page.pm | 29 ++++------------------------- migrations/15/up.sql | 14 +++++++------- 2 files changed, 11 insertions(+), 32 deletions(-) diff --git a/lib/PostText/Model/Page.pm b/lib/PostText/Model/Page.pm index 6a24eb8..4bf7e53 100644 --- a/lib/PostText/Model/Page.pm +++ b/lib/PostText/Model/Page.pm @@ -8,27 +8,6 @@ has per_page => 5; has date_format => 'Dy, FMDD Mon YYYY HH24:MI:SS TZHTZM'; -# args: date_format, search_query, limit, offset -# SELECT 'thread' AS post_type, -# thread_id AS post_id, -# TO_CHAR(thread_date, $1) AS post_date, -# thread_author AS post_author, -# thread_body AS post_body, -# ts_rank(search_tokens, plainto_tsquery('english', $2)) AS search_rank -# FROM threads -# WHERE search_tokens @@ plainto_tsquery('english', $2) -# UNION ALL -# SELECT 'remark', -# remark_id, -# remark_date, -# remark_author, -# remark_body, -# ts_rank(search_tokens, plainto_tsquery('english', $2)) -# FROM remarks -# WHERE search_tokens @@ plainto_tsquery('english', $2) -# ORDER BY search_rank DESC, post_date DESC -# LIMIT $3 OFFSET $4; - sub search($self, $search_query, $this_page = 1) { my $date_format = $self->date_format; my $row_count = $self->per_page; @@ -41,18 +20,18 @@ sub search($self, $search_query, $this_page = 1) { TO_CHAR(thread_date, $1) AS post_date, thread_author AS post_author, thread_body AS post_body, - ts_rank(search_tokens, plainto_tsquery('english', $2)) AS search_rank + TS_RANK(search_tokens, PLAINTO_TSQUERY('english', $2)) AS search_rank FROM threads - WHERE search_tokens @@ plainto_tsquery('english', $2) + WHERE search_tokens @@ PLAINTO_TSQUERY('english', $2) UNION ALL SELECT 'remark', remark_id, TO_CHAR(remark_date, $1), remark_author, remark_body, - ts_rank(search_tokens, plainto_tsquery('english', $2)) + TS_RANK(search_tokens, PLAINTO_TSQUERY('english', $2)) FROM remarks - WHERE search_tokens @@ plainto_tsquery('english', $2) + WHERE search_tokens @@ PLAINTO_TSQUERY('english', $2) ORDER BY search_rank DESC, post_date DESC LIMIT $3 OFFSET $4; END_SQL diff --git a/migrations/15/up.sql b/migrations/15/up.sql index 6f8e0ca..ef2ba0d 100644 --- a/migrations/15/up.sql +++ b/migrations/15/up.sql @@ -4,11 +4,11 @@ CREATE EXTENSION pg_trgm; -- Create column for seearch tokens ALTER TABLE threads - ADD COLUMN search_tokens tsvector + ADD COLUMN search_tokens TSVECTOR GENERATED ALWAYS AS - (to_tsvector('english', thread_author) || - to_tsvector('english', thread_title ) || - to_tsvector('english', thread_body )) STORED; + (TO_TSVECTOR('english', thread_author) || + TO_TSVECTOR('english', thread_title ) || + TO_TSVECTOR('english', thread_body )) STORED; -- Create GIN index for search tokens CREATE INDEX threads_search_idx @@ -17,10 +17,10 @@ CREATE INDEX threads_search_idx -- Same for remarks ALTER TABLE remarks - ADD COLUMN search_tokens tsvector + ADD COLUMN search_tokens TSVECTOR GENERATED ALWAYS AS - (to_tsvector('english', remark_author) || - to_tsvector('english', remark_body )) STORED; + (TO_TSVECTOR('english', remark_author) || + TO_TSVECTOR('english', remark_body )) STORED; CREATE INDEX remarks_search_idx ON remarks From fd10bb4f4a131cb8e63e85bf9745789f7c76b997 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Fri, 27 Oct 2023 23:03:32 -0400 Subject: [PATCH 05/16] Implement the search page --- lib/PostText.pm | 3 ++ lib/PostText/Controller/Page.pm | 28 ++++++++++++++++++ lib/PostText/Model/Page.pm | 23 +++++++++++++++ t/search.t | 18 ++++++++++++ templates/page/search.html.ep | 50 +++++++++++++++++++++++++++++++++ 5 files changed, 122 insertions(+) create mode 100644 t/search.t create mode 100644 templates/page/search.html.ep diff --git a/lib/PostText.pm b/lib/PostText.pm index dcbbce5..6ef3d79 100644 --- a/lib/PostText.pm +++ b/lib/PostText.pm @@ -146,6 +146,9 @@ sub startup($self) { $r->get('/feeds')->to('page#feeds')->name('feeds_page'); + # Not-so-static but I mean they're all 'pages' c'mon + $r->get('/search')->to('page#search')->name('search_page'); + $r->any([qw{GET POST}], '/captcha/*return_url') ->to('page#captcha') ->name('captcha_page'); diff --git a/lib/PostText/Controller/Page.pm b/lib/PostText/Controller/Page.pm index e8614bc..e5acc8b 100644 --- a/lib/PostText/Controller/Page.pm +++ b/lib/PostText/Controller/Page.pm @@ -50,4 +50,32 @@ sub captcha($self) { $self->render; } +sub search($self) { + my $v = $self->validation; + my $search_results = []; + my ($search_query, $this_page, $last_page, $base_path); + + if ($v->has_data) { + $v->required('q' )->size(1, 2_047); + $v->optional('page'); + + $search_query = $v->param('q'); + $this_page = $v->param('page') || 1; + $last_page = $self->page->last_page_for($search_query); + $base_path = $self->url_for->query(q => $search_query); + $search_results = $self->page->search($search_query, $this_page); + + $self->stash(status => 400) if $v->has_error; + } + + $self->stash( + this_page => $this_page, + last_page => $last_page, + base_path => $base_path, + search_results => $search_results + ); + + $self->render; +} + 1; diff --git a/lib/PostText/Model/Page.pm b/lib/PostText/Model/Page.pm index 4bf7e53..a4b5651 100644 --- a/lib/PostText/Model/Page.pm +++ b/lib/PostText/Model/Page.pm @@ -37,5 +37,28 @@ sub search($self, $search_query, $this_page = 1) { END_SQL } +sub count_for($self, $search_query) { + $self->pg->db->query(<<~'END_SQL', $search_query)->hash->{'post_tally'} + SELECT COUNT(*) AS post_tally + FROM (SELECT thread_date AS post_date + FROM threads + WHERE search_tokens @@ PLAINTO_TSQUERY('english', $1) + UNION ALL + SELECT remark_date + FROM remarks + WHERE search_tokens @@ PLAINTO_TSQUERY('english', $1)) + AS posts; + END_SQL +} + +sub last_page_for($self, $search_query) { + my $post_count = $self->count_for($search_query); + my $last_page = int($post_count / $self->per_page); + + # Add a page for 'remainder' posts + $last_page++ if $post_count % $self->per_page; + + return $last_page; +} 1; diff --git a/t/search.t b/t/search.t new file mode 100644 index 0000000..b0ff946 --- /dev/null +++ b/t/search.t @@ -0,0 +1,18 @@ +use Mojo::Base -strict; +use Test::More; +use Test::Mojo; + +my $t = Test::Mojo->new('PostText'); +my $invalid_query = 'aaaaaaaa' x 300; + +subtest Search => sub { + $t->get_ok('/search')->status_is(200)->text_like(h2 => qr/Search/); + + $t->get_ok('/search?q=test')->status_is(200) + ->text_like(h3 => qr/Results/); + + $t->get_ok("/search?q=$invalid_query")->status_is(400) + ->text_like(p => qr/Must be between/); +}; + +done_testing; diff --git a/templates/page/search.html.ep b/templates/page/search.html.ep new file mode 100644 index 0000000..0bea18f --- /dev/null +++ b/templates/page/search.html.ep @@ -0,0 +1,50 @@ +% layout 'default'; +% title 'Search Posts'; +

<%= title %>

+
+
+ <% if (my $error = validation->error('q')) { =%> +

Must be between <%= $error->[2] %> + and <%= $error->[3] %> characters.

+ <% } =%> + <%= label_for search => 'Search' %> + <%= text_field q => ( + id => 'search', + maxlength => 2047, + minlength => 1, + required => undef + ) %> +
+ +
+<% if (scalar @{$search_results}) { =%> +
+

Results

+ <% for my $result (@{$search_results}) { =%> +
+

+ + <%= $result->{'post_date'} %> + + <% if ($result->{'post_type'} eq 'thread') { =%> + <%= link_to "#$result->{'post_id'}", single_thread => + {thread_id => $result->{'post_id'}}, (class => 'post__id') %> + <% } else { =%> + <%= link_to "#$result->{'post_id'}", single_remark => + {remark_id => $result->{'post_id'}}, (class => 'post__id') %> + <% } =%> +

+ +
+ <%== markdown $result->{'post_body'} =%> +
+
+ <% } =%> + <% if ($last_page && $last_page != 1) { =%> + + <% } =%> +
+<% } =%> From dd8fdea5e36e901a4ae8105086fca805ef59fab4 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Fri, 27 Oct 2023 23:16:47 -0400 Subject: [PATCH 06/16] Put search_page behind the CAPTCHA wall --- lib/PostText.pm | 2 +- t/search.t | 21 +++++++++++++++++---- templates/page/search.html.ep | 9 +++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/PostText.pm b/lib/PostText.pm index 6ef3d79..1caa0a4 100644 --- a/lib/PostText.pm +++ b/lib/PostText.pm @@ -147,7 +147,7 @@ sub startup($self) { $r->get('/feeds')->to('page#feeds')->name('feeds_page'); # Not-so-static but I mean they're all 'pages' c'mon - $r->get('/search')->to('page#search')->name('search_page'); + $human->get('/search')->to('page#search')->name('search_page'); $r->any([qw{GET POST}], '/captcha/*return_url') ->to('page#captcha') diff --git a/t/search.t b/t/search.t index b0ff946..d7ffa4a 100644 --- a/t/search.t +++ b/t/search.t @@ -4,14 +4,27 @@ use Test::Mojo; my $t = Test::Mojo->new('PostText'); my $invalid_query = 'aaaaaaaa' x 300; +my %good_human = (answer => 1, number => 'Ⅰ'); +my $search_url = + '/captcha/H4sIABJ8PGUAA8soKSmw0tfPyU9OzMnILy6xMjYwMNDPKM1NzNMvTk0sSs4AAPrUR3kiAAAA%0A'; -subtest Search => sub { - $t->get_ok('/search')->status_is(200)->text_like(h2 => qr/Search/); +subtest 'Search before CAPTCHA', sub { + $t->get_ok('/human/search')->status_is(302) + ->header_like(Location => qr/captcha/); +}; - $t->get_ok('/search?q=test')->status_is(200) +subtest 'Search after CAPTCHA', sub { + $t->post_ok($search_url, form => \%good_human) + ->status_is(302) + ->header_like(Location => qr{human/search}); + + $t->get_ok('/human/search')->status_is(200) + ->text_like(h2 => qr/Search Posts/); + + $t->get_ok('/human/search?q=test')->status_is(200) ->text_like(h3 => qr/Results/); - $t->get_ok("/search?q=$invalid_query")->status_is(400) + $t->get_ok("/human/search?q=$invalid_query")->status_is(400) ->text_like(p => qr/Must be between/); }; diff --git a/templates/page/search.html.ep b/templates/page/search.html.ep index 0bea18f..9f305aa 100644 --- a/templates/page/search.html.ep +++ b/templates/page/search.html.ep @@ -1,5 +1,14 @@ % layout 'default'; % title 'Search Posts'; +<% content_for open_graph => begin %> + + + +<% end %> +<% content_for twitter_card => begin %> + + +<% end %>

<%= title %>

From b5912d86b705a54dc33411c75fa03bb39bfd94f2 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Sat, 28 Oct 2023 00:23:43 -0400 Subject: [PATCH 07/16] TODOs --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1f91c97..13efa40 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,8 @@ tests locally: ## TODOs -1. Full text search + archive old posts +1. Hide ancient posts +1. Put a link to search_page somewhere 1. "All new posts flagged" mode (require approval for new posts) 1. Tests for mod-only user? From 2c8dee8cf5b20c4d30d2a5f90930816ba89df078 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Sat, 28 Oct 2023 01:19:36 -0400 Subject: [PATCH 08/16] TODO --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 13efa40..f2f836e 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ tests locally: ## TODOs +1. Do something if a search returns nothing 1. Hide ancient posts 1. Put a link to search_page somewhere 1. "All new posts flagged" mode (require approval for new posts) From 0c1e041b2901ad0945c34d45dc7fbf84c604c2d1 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Sat, 28 Oct 2023 01:42:36 -0400 Subject: [PATCH 09/16] Handle no search results --- README.md | 1 - lib/PostText/Controller/Page.pm | 18 ++++++++++++------ t/search.t | 5 ++++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index f2f836e..13efa40 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,6 @@ tests locally: ## TODOs -1. Do something if a search returns nothing 1. Hide ancient posts 1. Put a link to search_page somewhere 1. "All new posts flagged" mode (require approval for new posts) diff --git a/lib/PostText/Controller/Page.pm b/lib/PostText/Controller/Page.pm index e5acc8b..2b5dba1 100644 --- a/lib/PostText/Controller/Page.pm +++ b/lib/PostText/Controller/Page.pm @@ -59,13 +59,19 @@ sub search($self) { $v->required('q' )->size(1, 2_047); $v->optional('page'); - $search_query = $v->param('q'); - $this_page = $v->param('page') || 1; - $last_page = $self->page->last_page_for($search_query); - $base_path = $self->url_for->query(q => $search_query); - $search_results = $self->page->search($search_query, $this_page); + if ($v->has_error) { + $self->stash(status => 400) + } + else { + $search_query = $v->param('q'); + $this_page = $v->param('page') || 1; + $last_page = $self->page->last_page_for($search_query); + $base_path = $self->url_for->query(q => $search_query); + $search_results = $self->page->search($search_query, $this_page); - $self->stash(status => 400) if $v->has_error; + $self->stash(status => 404, error => 'No posts found. 🔎') + unless scalar @{$search_results}; + } } $self->stash( diff --git a/t/search.t b/t/search.t index d7ffa4a..4ebbef9 100644 --- a/t/search.t +++ b/t/search.t @@ -21,7 +21,10 @@ subtest 'Search after CAPTCHA', sub { $t->get_ok('/human/search')->status_is(200) ->text_like(h2 => qr/Search Posts/); - $t->get_ok('/human/search?q=test')->status_is(200) + $t->get_ok('/human/search?q=aaaaaaaaaa')->status_is(404) + ->text_like(p => qr/No posts found/); + + $t->get_ok('/human/search?q=lmao')->status_is(200) ->text_like(h3 => qr/Results/); $t->get_ok("/human/search?q=$invalid_query")->status_is(400) From 894bac4f38f97482bbfece0847e47fb8570a28eb Mon Sep 17 00:00:00 2001 From: swaggboi Date: Sat, 28 Oct 2023 01:44:54 -0400 Subject: [PATCH 10/16] Add autofocus --- templates/page/search.html.ep | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/templates/page/search.html.ep b/templates/page/search.html.ep index 9f305aa..fab866f 100644 --- a/templates/page/search.html.ep +++ b/templates/page/search.html.ep @@ -21,7 +21,8 @@ id => 'search', maxlength => 2047, minlength => 1, - required => undef + required => undef, + autofocus => undef ) %>
From cd452735f04c3060ee7cab80a29b253ed609e02b Mon Sep 17 00:00:00 2001 From: swaggboi Date: Sat, 28 Oct 2023 02:09:57 -0400 Subject: [PATCH 11/16] For consistency... --- Dockerfile | 2 +- lib/PostText/Controller/Moderator.pm | 22 +++++++++++----------- lib/PostText/Controller/Remark.pm | 4 ++-- lib/PostText/Controller/Thread.pm | 6 +++--- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5ee383e..1b105c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ RUN cpanm --notest Net::HTTP RUN cpanm --installdeps . # Test it -RUN prove -l -v +#RUN prove -l -v # Finish setting up the environment ENV MOJO_REVERSE_PROXY=1 diff --git a/lib/PostText/Controller/Moderator.pm b/lib/PostText/Controller/Moderator.pm index a3c65e2..93e9f64 100644 --- a/lib/PostText/Controller/Moderator.pm +++ b/lib/PostText/Controller/Moderator.pm @@ -57,7 +57,7 @@ sub login($self) { author => $mod_name, is_admin => $admin_status ); - $self->flash(info => "Hello, $mod_name 😎"); + $self->flash(info => "Hello, $mod_name. 😎"); $self->moderator->login_timestamp($mod_id); return $self->redirect_to('flagged_list'); @@ -77,7 +77,7 @@ sub login($self) { sub logout($self) { delete $self->session->%{qw(mod_id is_admin)}; - $self->flash(info => 'Logged out successfully 👋'); + $self->flash(info => 'Logged out successfully. 👋'); $self->redirect_to('threads_list'); } @@ -163,7 +163,7 @@ sub create($self) { my $password = $v->param('password'); $self->moderator->create($name, $email, $password); - $self->stash(info => "Created moderator account for $name 🧑‍🏭"); + $self->stash(info => "Created moderator account for $name. 🧑‍🏭"); } } @@ -187,7 +187,7 @@ sub admin_reset($self) { my $password = $v->param('password'); $self->moderator->admin_reset($email, $password); - $self->stash(info => "Reset password for $email 🔐"); + $self->stash(info => "Reset password for $email. 🔐"); } } @@ -210,7 +210,7 @@ sub mod_reset($self) { my $mod_id = $self->session->{'mod_id'}; $self->moderator->mod_reset($mod_id, $password); - $self->flash(info => "Password has been reset 🔐"); + $self->flash(info => "Password has been reset. 🔐"); return $self->redirect_to('flagged_list'); } @@ -234,7 +234,7 @@ sub lock_acct($self) { my $email = $v->param('email'); $self->moderator->lock_acct($email); - $self->stash(info => "Account $email has been locked 🔒"); + $self->stash(info => "Account $email has been locked. 🔒"); } } @@ -256,7 +256,7 @@ sub unlock_acct($self) { my $email = $v->param('email'); $self->moderator->unlock_acct($email); - $self->stash(info => "Account $email has been unlocked 🔓"); + $self->stash(info => "Account $email has been unlocked. 🔓"); } } @@ -278,7 +278,7 @@ sub promote($self) { my $email = $v->param('email'); $self->moderator->promote($email); - $self->stash(info => "Account $email has been promoted to admin 🧑‍🎓"); + $self->stash(info => "Account $email has been promoted to admin. 🧑‍🎓"); } } @@ -300,7 +300,7 @@ sub demote($self) { my $email = $v->param('email'); $self->moderator->demote($email); - $self->stash(info => "Account $email has been demoted to mod 🧒"); + $self->stash(info => "Account $email has been demoted to mod. 🧒"); } } @@ -326,7 +326,7 @@ sub thread_by_id($self) { $self->stash(thread => $thread); - $self->stash(status => 404, error => 'Thread not found 🤷') + $self->stash(status => 404, error => 'Thread not found. 🤷') unless keys %{$thread}; $self->render; @@ -338,7 +338,7 @@ sub remark_by_id($self) { $self->stash(remark => $remark); - $self->stash(status => 404, error => 'Remark not found 🤷') + $self->stash(status => 404, error => 'Remark not found. 🤷') unless keys %{$remark}; $self->render; diff --git a/lib/PostText/Controller/Remark.pm b/lib/PostText/Controller/Remark.pm index 4cbe8d4..7af6dd7 100644 --- a/lib/PostText/Controller/Remark.pm +++ b/lib/PostText/Controller/Remark.pm @@ -10,7 +10,7 @@ sub by_id($self) { $self->stash(remark => $remark); - $self->stash(status => 404, error => 'Remark not found 🤷') + $self->stash(status => 404, error => 'Remark not found. 🤷') unless keys %{$remark}; # Set filename for right-click & save-as behavior @@ -79,7 +79,7 @@ sub create($self) { body_limit => $body_limit ); - $self->stash(status => 404, error => 'Thread not found 🤷') + $self->stash(status => 404, error => 'Thread not found. 🤷') unless keys %{$thread}; return $self->render; diff --git a/lib/PostText/Controller/Thread.pm b/lib/PostText/Controller/Thread.pm index b258a94..d0cd240 100644 --- a/lib/PostText/Controller/Thread.pm +++ b/lib/PostText/Controller/Thread.pm @@ -67,12 +67,12 @@ sub by_id($self) { remarks => $remarks ); - $self->stash(status => 404, error => 'Thread not found 🤷') + $self->stash(status => 404, error => 'Thread not found. 🤷') unless keys %{$thread}; # Check for remarks or thread page number to make sure # remark->by_page_for did its job - $self->stash(status => 404, error => 'Page not found 🕵️') + $self->stash(status => 404, error => 'Page not found. 🕵️') unless scalar @{$remarks} || $this_page == $last_page; # Set filename for right-click & save-as behavior @@ -98,7 +98,7 @@ sub by_page($self) { base_path => $base_path ); - $self->stash(status => 404, error => 'Page not found 🕵️') + $self->stash(status => 404, error => 'Page not found. 🕵️') unless scalar @{$threads}; $self->render; From b11a616d900c0ab06e7c456171509a9495fe675d Mon Sep 17 00:00:00 2001 From: swaggboi Date: Sat, 28 Oct 2023 02:24:56 -0400 Subject: [PATCH 12/16] Add new background for later --- assets/css/elements.css | 2 ++ public/images/windowstars.gif | Bin 0 -> 130063 bytes 2 files changed, 2 insertions(+) create mode 100644 public/images/windowstars.gif diff --git a/assets/css/elements.css b/assets/css/elements.css index 49a92eb..03a3813 100644 --- a/assets/css/elements.css +++ b/assets/css/elements.css @@ -32,6 +32,8 @@ body { /* background-image: url('/images/topwwbackground.gif'); */ /* Spooky time! */ background-image: url('/images/halloween_background_1.gif'); + /* Christmas */ + /* background-image: url('/images/windowstars.gif'); */ width: 95vmin; margin: 0 auto; font-family: 'w95fa', sans-serif; diff --git a/public/images/windowstars.gif b/public/images/windowstars.gif new file mode 100644 index 0000000000000000000000000000000000000000..5a9db7370a1a4e3c215039820d6e033a237a7b37 GIT binary patch literal 130063 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

fQ;075Uc&32q$CG9P1ILunp^W0HT-<; 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 Date: Sat, 28 Oct 2023 11:34:44 -0400 Subject: [PATCH 13/16] Do max_pages for threads --- README.md | 2 +- example_post_text.conf | 1 + lib/PostText.pm | 4 ++++ lib/PostText/Model/Thread.pm | 8 ++++++-- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 13efa40..94b8df9 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ tests locally: ## TODOs -1. Hide ancient posts +1. Hide ancient posts (test this, dev DB is broken fuck) 1. Put a link to search_page somewhere 1. "All new posts flagged" mode (require approval for new posts) 1. Tests for mod-only user? diff --git a/example_post_text.conf b/example_post_text.conf index d410840..7926ff1 100644 --- a/example_post_text.conf +++ b/example_post_text.conf @@ -1,4 +1,5 @@ { + max_thread_pages => 10, threads_per_page => 5, remarks_per_page => 5, results_per_page => 5, diff --git a/lib/PostText.pm b/lib/PostText.pm index 1caa0a4..abfc485 100644 --- a/lib/PostText.pm +++ b/lib/PostText.pm @@ -104,6 +104,10 @@ sub startup($self) { $self->page->per_page($results_per_page) } + if (my $max_thread_pages = $self->config->{'max_thread_pages'}) { + $self->thread->max_pages($max_thread_pages) + } + $self->asset->process; push @{$self->commands->namespaces}, 'PostText::Command'; diff --git a/lib/PostText/Model/Thread.pm b/lib/PostText/Model/Thread.pm index 9564910..01ec23b 100644 --- a/lib/PostText/Model/Thread.pm +++ b/lib/PostText/Model/Thread.pm @@ -2,7 +2,7 @@ package PostText::Model::Thread; use Mojo::Base -base, -signatures; -has [qw{pg hr}]; +has [qw{pg hr max_pages}]; has per_page => 5; @@ -57,7 +57,11 @@ sub last_page($self) { # Add a page for 'remainder' posts $last_page++ if $thread_count % $self->per_page; - $last_page; + if ($max_pages) { + $last_page = $max_pages if $last_page > $max_pages + } + + return $last_page; } sub count($self) { From 6744498b4debb3a44d7621680a20299d1cc13e80 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Wed, 1 Nov 2023 09:12:54 -0400 Subject: [PATCH 14/16] Add search bar and fix max_thread_pages --- README.md | 4 ++-- assets/css/elements.css | 2 +- lib/PostText/Model/Thread.pm | 1 + templates/thread/by_page.html.ep | 16 ++++++++++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 94b8df9..a0dc7e8 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,8 @@ tests locally: ## TODOs -1. Hide ancient posts (test this, dev DB is broken fuck) -1. Put a link to search_page somewhere +1. Winter/Christmas/New Years background +1. Make CAPTCHA preserve search query 1. "All new posts flagged" mode (require approval for new posts) 1. Tests for mod-only user? diff --git a/assets/css/elements.css b/assets/css/elements.css index 03a3813..2a2d37b 100644 --- a/assets/css/elements.css +++ b/assets/css/elements.css @@ -32,7 +32,7 @@ body { /* background-image: url('/images/topwwbackground.gif'); */ /* Spooky time! */ background-image: url('/images/halloween_background_1.gif'); - /* Christmas */ + /* Christmas/New Years-ish? */ /* background-image: url('/images/windowstars.gif'); */ width: 95vmin; margin: 0 auto; diff --git a/lib/PostText/Model/Thread.pm b/lib/PostText/Model/Thread.pm index 01ec23b..f380650 100644 --- a/lib/PostText/Model/Thread.pm +++ b/lib/PostText/Model/Thread.pm @@ -53,6 +53,7 @@ sub by_page($self, $this_page = 1) { sub last_page($self) { my $thread_count = $self->count; my $last_page = int($thread_count / $self->per_page); + my $max_pages = $self->max_pages; # Add a page for 'remainder' posts $last_page++ if $thread_count % $self->per_page; diff --git a/templates/thread/by_page.html.ep b/templates/thread/by_page.html.ep index 844fec5..5212c8b 100644 --- a/templates/thread/by_page.html.ep +++ b/templates/thread/by_page.html.ep @@ -12,6 +12,22 @@

<%= title %>

<% if (scalar @{$threads}) { =%>
+ <%= form_for search_page => (class => 'form-body'), begin %> +
+ <% if (my $error = validation->error('q')) { =%> +

Must be between <%= $error->[2] %> + and <%= $error->[3] %> characters.

+ <% } =%> + <%= label_for search => 'Search' %> + <%= text_field q => ( + id => 'search', + maxlength => 2047, + minlength => 1, + required => undef + ) %> +
+ + <% end %> <% for my $thread (@{$threads}) { =%>

From 1c4299d95b07f775710a77fc2c6f20515a776a95 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Wed, 1 Nov 2023 13:23:23 -0400 Subject: [PATCH 15/16] Fixy pooh --- README.md | 1 - lib/PostText.pm | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index a0dc7e8..383f6d3 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,6 @@ tests locally: ## TODOs 1. Winter/Christmas/New Years background -1. Make CAPTCHA preserve search query 1. "All new posts flagged" mode (require approval for new posts) 1. Tests for mod-only user? diff --git a/lib/PostText.pm b/lib/PostText.pm index abfc485..eb53c6e 100644 --- a/lib/PostText.pm +++ b/lib/PostText.pm @@ -129,7 +129,7 @@ sub startup($self) { return $c->redirect_to( captcha_page => return_url => - b64_encode gzip $c->url_for->to_abs->to_string + b64_encode gzip $c->url_with->to_abs->to_string ), undef; }); From d4f9494ef5fb87eeb80ba66c3a844ebee4f3a006 Mon Sep 17 00:00:00 2001 From: swaggboi Date: Wed, 1 Nov 2023 15:01:31 -0400 Subject: [PATCH 16/16] yay tests --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 1b105c6..5ee383e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ RUN cpanm --notest Net::HTTP RUN cpanm --installdeps . # Test it -#RUN prove -l -v +RUN prove -l -v # Finish setting up the environment ENV MOJO_REVERSE_PROXY=1