summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2020-02-28 10:05:00 +0100
committerYorhel <git@yorhel.nl>2020-02-28 10:05:08 +0100
commit03106135b8d4f0c2c0387991133cc3205957d68b (patch)
treee66b8249a7a6f8bae8f78c8a2b573d3394fb399c /lib
parent018cbf36fe8e33818759909d8ff4fbda87fa3f62 (diff)
v2rw/RelEdit: Add visual novel relation editing
And a few minor styling fixes.
Diffstat (limited to 'lib')
-rw-r--r--lib/VNWeb/Elm.pm5
-rw-r--r--lib/VNWeb/Releases/Edit.pm6
-rw-r--r--lib/VNWeb/VN/Elm.pm25
3 files changed, 36 insertions, 0 deletions
diff --git a/lib/VNWeb/Elm.pm b/lib/VNWeb/Elm.pm
index e3d0e4f6..4a5269dc 100644
--- a/lib/VNWeb/Elm.pm
+++ b/lib/VNWeb/Elm.pm
@@ -70,6 +70,11 @@ my %apis = (
applicable => { anybool => 1 },
state => { int => 1 },
} } ],
+ VNResult => [ { aoh => { # Response to 'VN'
+ id => { id => 1 },
+ title => {},
+ original => { required => 0, default => '' },
+ } } ],
);
diff --git a/lib/VNWeb/Releases/Edit.pm b/lib/VNWeb/Releases/Edit.pm
index 28fc96d4..21563c34 100644
--- a/lib/VNWeb/Releases/Edit.pm
+++ b/lib/VNWeb/Releases/Edit.pm
@@ -30,6 +30,10 @@ my $FORM = {
engine => { required => 0, default => '', maxlength => 50 },
extlinks => validate_extlinks('r'),
notes => { required => 0, default => '', maxlength => 10240 },
+ vn => { sort_keys => 'vid', aoh => {
+ vid => { id => 1 },
+ title => { _when => 'out' },
+ } },
hidden => { anybool => 1 },
locked => { anybool => 1 },
@@ -62,6 +66,8 @@ TUWF::get qr{/$RE{rrev}/(?<action>edit|copy)} => sub {
});
to_extlinks $e;
+ enrich_merge vid => 'SELECT id AS vid, title FROM vn WHERE id IN', $e->{vn};
+
my $title = ($copy ? 'Copy ' : 'Edit ').$e->{title};
framework_ title => $title, type => 'r', dbobj => $e, tab => tuwf->capture('action'),
sub {
diff --git a/lib/VNWeb/VN/Elm.pm b/lib/VNWeb/VN/Elm.pm
new file mode 100644
index 00000000..fd43c8ca
--- /dev/null
+++ b/lib/VNWeb/VN/Elm.pm
@@ -0,0 +1,25 @@
+package VNWeb::VN::Elm;
+
+use VNWeb::Prelude;
+
+elm_api VN => undef, { search => {} }, sub {
+ my $q = shift->{search};
+ my $qs = $q =~ s/[%_]//gr;
+ my @q = normalize_query $q;
+
+ elm_VNResult tuwf->dbPagei({ results => 15, page => 1 },
+ 'SELECT v.id, v.title, v.original
+ FROM (',
+ sql_join('UNION ALL',
+ $q =~ /^$RE{vid}$/ ? sql('SELECT 1, id FROM vn WHERE id =', \"$+{id}") : (),
+ sql('SELECT 1+substr_score(lower(title),', \$qs, '), id FROM vn WHERE title ILIKE', \"$qs%"),
+ @q ? (sql 'SELECT 10, id FROM vn WHERE', sql_and map sql('c_search ILIKE', \"%$_%"), @q) : ()
+ ), ') x(prio, id)
+ JOIN vn v ON v.id = x.id
+ WHERE NOT v.hidden
+ GROUP BY v.id, v.title, v.original
+ ORDER BY MIN(x.prio), v.title
+ ');
+};
+
+1;