summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/style.css4
-rw-r--r--lib/VNDB/DB/Tags.pm6
-rw-r--r--lib/VNDB/Handler/Tags.pm7
-rw-r--r--lib/VNDB/Util/LayoutHTML.pm1
-rw-r--r--static/f/forms.js20
5 files changed, 27 insertions, 11 deletions
diff --git a/data/style.css b/data/style.css
index 0b719a91..2b84a4c6 100644
--- a/data/style.css
+++ b/data/style.css
@@ -979,6 +979,7 @@ ul#catselect li li.exc { background-position: 0px -33px; color: $statnok$; }
#tagtable .tc3_1 { border-left: 1px solid $border$; width: 150px; text-align: center }
#tagtable .tc1 { min-width: 200px; border-right: 1px solid $border$ }
#tagtable .tc3 { border-right: 1px solid $border$ }
+#tagtable .tc5 { text-align: right }
a.taglvl { display: block; float: left; width: 8px; height: 12px; border: 1px solid $border$; font-size: 1px; color: $maintext$!important }
a.taglvl0 { width: 15px; border: none!important; font-size: 10px; text-align: center; }
a.taglvl:hover { border-bottom: 1px solid transparent!important }
@@ -988,6 +989,9 @@ a.taglvl:hover { border-bottom: 1px solid transparent!important }
.taglvlsel.taglvl1 { background-color: #cf0; border-color: #cf0 }
.taglvlsel.taglvl2 { background-color: #8f0; border-color: #8f0 }
.taglvlsel.taglvl3 { background-color: #0f0; border-color: #0f0 }
+#jt_box_tags #tagtable .tc5 { padding: 0 }
+#tagtable .tc5 select { width: 90px; height: 15px; border: 0; margin: 0; font-size: 11px; background-color: $_blendbg$; text-align: right }
+#tagtable .odd .tc5 select { background-color: $secbg$ }
diff --git a/lib/VNDB/DB/Tags.pm b/lib/VNDB/DB/Tags.pm
index 2250ff90..9ed6560b 100644
--- a/lib/VNDB/DB/Tags.pm
+++ b/lib/VNDB/DB/Tags.pm
@@ -101,11 +101,13 @@ sub dbTagLinks {
# Change a user's tags for a VN entry
-# Arguments: uid, vid, [ [ tag, vote ], .. ]
+# Arguments: uid, vid, [ [ tag, vote, spoiler ], .. ]
sub dbTagLinkEdit {
my($self, $uid, $vid, $tags) = @_;
$self->dbExec('DELETE FROM tags_vn WHERE vid = ? AND uid = ?', $vid, $uid);
- $self->dbExec('INSERT INTO tags_vn (tag, vid, uid, vote) VALUES (?, ?, ?, ?)', $_->[0], $vid, $uid, $_->[1]) for (@$tags);
+ $self->dbExec('INSERT INTO tags_vn (tag, vid, uid, vote, spoiler) VALUES (?, ?, ?, ?, ?)',
+ $_->[0], $vid, $uid, $_->[1], $_->[2] == -1 ? undef : $_->[2]
+ ) for (@$tags);
}
diff --git a/lib/VNDB/Handler/Tags.pm b/lib/VNDB/Handler/Tags.pm
index 667b302f..614123df 100644
--- a/lib/VNDB/Handler/Tags.pm
+++ b/lib/VNDB/Handler/Tags.pm
@@ -217,9 +217,8 @@ sub vntagmod {
if($self->reqMethod eq 'POST') {
my $frm = $self->formValidate(
- { name => 'taglinks', required => 0, default => '', maxlength => 10240, regex => [ qr/^[1-9][0-9]*,-?[1-3]( [1-9][0-9]*,-?[1-3])*$/, 'meh' ] }
+ { name => 'taglinks', required => 0, default => '', maxlength => 10240, regex => [ qr/^[1-9][0-9]*,-?[1-3],-?[0-2]( [1-9][0-9]*,-?[1-3],-?[0-2])*$/, 'meh' ] }
);
- use Data::Dumper; warn Dumper $frm;
return 404 if $frm->{_err};
$self->dbTagLinkEdit($self->authInfo->{id}, $vid, [ map [ split /,/ ], split / /, $frm->{taglinks}]);
}
@@ -273,9 +272,9 @@ sub vntagmod {
td class => 'tc2', sprintf '%.2f (%d)',
!$m->{vote} ? $t->{rating} : $t->{users} == 1 ? 0 : ($t->{rating}*$t->{users} - $m->{vote}) / ($t->{users}-1),
$t->{users} - ($m->{vote} ? 1 : 0);
- td class => 'tc3', $t->{spoiler};
+ td class => 'tc3', sprintf '%.2f', $t->{spoiler};
td class => 'tc4', $m->{vote}||0;
- td class => 'tc5', $m->{spoiler}||'-';
+ td class => 'tc5', defined $m->{spoiler} ? $m->{spoiler} : -1;
end;
}
end;
diff --git a/lib/VNDB/Util/LayoutHTML.pm b/lib/VNDB/Util/LayoutHTML.pm
index 257c6e14..f2a63c7b 100644
--- a/lib/VNDB/Util/LayoutHTML.pm
+++ b/lib/VNDB/Util/LayoutHTML.pm
@@ -57,6 +57,7 @@ sub _menu {
div;
a href => '/', 'Home'; br;
a href => '/v/all', 'Visual novels'; br;
+ a href => '/g', 'Tags'; br;
a href => '/p/all', 'Producers'; br;
a href => '/u/all', 'Users'; br;
a href => '/hist', 'Recent changes'; br;
diff --git a/static/f/forms.js b/static/f/forms.js
index 65f9efc0..e0ec7084 100644
--- a/static/f/forms.js
+++ b/static/f/forms.js
@@ -885,14 +885,24 @@ function tglLoad() {
tglStripe();
var l = x('tagtable').getElementsByTagName('tbody')[0].getElementsByTagName('tr');
for(var i=0; i<l.length;i++) {
- var o = l[i].getElementsByTagName('td')[3];
- tglVoteBar(o, parseInt(o.innerHTML));
+ var o = l[i].getElementsByTagName('td');
+ tglSpoiler(o[4], parseInt(o[4].innerHTML));
+ tglVoteBar(o[3], parseInt(o[3].innerHTML));
}
}
+function tglSpoiler(obj, spoil) {
+ var r = '<select onchange="tglSerialize()">';
+ for(var i=-1; i<=2; i++)
+ r += '<option value="'+i+'"'+(spoil==i?' selected="selected"':'')+'>'
+ +(i == -1 ? 'neutral' : i == 0 ? 'no spoiler' : i == 1 ? 'minor spoiler' : 'major spoiler')
+ +'&nbsp;</option>';
+ obj.innerHTML = r+'</select>';
+}
+
function tglVoteBar(obj, vote) {
var r = '';
- for(i=-3;i<=3;i++)
+ for(var i=-3;i<=3;i++)
r += '<a href="#" class="taglvl taglvl'+i+'" onmouseover="tglVoteBarSel(this, '+i+')"'
+ ' onmouseout="tglVoteBarSel(this, '+vote+')" onclick="return tglVoteBar(this.parentNode, '+i+')">&nbsp;</a>';
obj.innerHTML = r;
@@ -958,7 +968,7 @@ function tglAdd() {
td.className = 'tc4';
tr.appendChild(td);
td = document.createElement('td');
- td.innerHTML = '-';
+ tglSpoiler(td, -1);
td.className = 'tc5';
tr.appendChild(td);
x('tagtable').getElementsByTagName('tbody')[0].appendChild(tr);
@@ -981,7 +991,7 @@ function tglSerialize() {
var vt = l[i].getElementsByTagName('td')[3].getElementsByTagName('a');
var id;
if((id = lnk.replace(/^.*g([1-9][0-9]*)$/, "$1")) != lnk && vt.length > 3 && vt[3].innerHTML != '-')
- r += (r?' ':'')+id+','+vt[3].innerHTML;
+ r += (r?' ':'')+id+','+vt[3].innerHTML+','+(l[i].getElementsByTagName('select')[0].selectedIndex-1);
}
x('taglinks').value = r;
}