summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-02-06 14:12:43 +0100
committerYorhel <git@yorhel.nl>2011-02-06 14:12:43 +0100
commit8b3eb97627131a9be85cf784484d8d51d9b417c0 (patch)
treeede1e2f05133f0fa95ee7f819005b2112f21e159
parentbccc7326a43020e44aea345b803adaceaa90f2a2 (diff)
Added tag visibility options by category on /v+
The JS code is a bit messy, though...
-rw-r--r--ChangeLog1
-rw-r--r--data/script.js45
-rw-r--r--lib/VNDB/Handler/VNPage.pm7
3 files changed, 36 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index 55f071dc..4cb2b349 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
2.18 -
- Added category field to tags (content/ero/technical)
- Group tags on /v+/tagmod by their category
+ - Added tag visibility options by category on /v+
2.17 - 2011-02-04
- Allow moderators to overrule VN tag votes
diff --git a/data/script.js b/data/script.js
index 4c42bffe..d124b9a6 100644
--- a/data/script.js
+++ b/data/script.js
@@ -474,7 +474,7 @@ function tvsInit() {
var l = byName(byId('tagops'), 'a');
for(var i=0;i<l.length; i++)
l[i].onclick = tvsClick;
- tvsSet(getCookie('tagspoil'), true);
+ tvsSet(getCookie('tagspoil'), true, (getCookie('tagcat')||'cont,tech').split(','));
}
function tvsClick() {
@@ -482,29 +482,43 @@ function tvsClick() {
var l = byName(byId('tagops'), 'a');
for(var i=0; i<l.length; i++)
if(l[i] == this) {
- if(i < 3) {
- tvsSet(i, null);
- setCookie('tagspoil', i);
- } else
- tvsSet(null, i == 3 ? true : false);
+ if(i < 3) { /* categories */
+ setClass(l[i], 'tsel', !hasClass(l[i], 'tsel'));
+ var c = tvsSet();
+ setCookie('tagcat', c.length ? c.join(',') : '-');
+ } else if(i < 6) { /* spoiler level */
+ tvsSet(i-3, null);
+ setCookie('tagspoil', i-3);
+ } else /* limit */
+ tvsSet(null, i == 6 ? true : false);
}
return false;
}
-function tvsSet(lvl, lim) {
+function tvsSet(lvl, lim, cats) {
/* set/get level and limit to/from the links */
var l = byName(byId('tagops'), 'a');
+ var cat = cats || [];
for(var i=0; i<l.length; i++) {
- if(i < 3) { /* spoiler level */
+ if(i < 3) { /* categories */
+ var c = l[i].href.substr(l[i].href.indexOf('#')+1);
+ if(cats) {
+ for(var j=0; j<cats.length && c != cats[j]; j++) ;
+ setClass(l[i], 'tsel', j != cats.length);
+ } else {
+ if(hasClass(l[i], 'tsel'))
+ cat.push(c);
+ }
+ } else if(i < 6) { /* spoiler level */
if(lvl != null)
- setClass(l[i], 'tsel', i == lvl);
+ setClass(l[i], 'tsel', i-3 == lvl);
if(lvl == null && hasClass(l[i], 'tsel'))
- lvl = i;
- } else { /* display limit (3 = summary) */
+ lvl = i-3;
+ } else { /* display limit (6 = summary) */
if(lim != null)
- setClass(l[i], 'tsel', lim == (i == 3));
+ setClass(l[i], 'tsel', lim == (i == 6));
if(lim == null && hasClass(l[i], 'tsel'))
- lim = i == 3;
+ lim = i == 6;
}
}
@@ -514,13 +528,14 @@ function tvsSet(lvl, lim) {
var s=0;
for(i=0;i<l.length;i++) {
var thislvl = l[i].className.substr(6, 1);
- if(thislvl <= lvl && s < lim) {
+ for(var j=0; j<cat.length && !hasClass(l[i], 'cat_'+cat[j]); j++) ;
+ if(thislvl <= lvl && s < lim && j != cat.length) {
setClass(l[i], 'hidden', false);
s++;
} else
setClass(l[i], 'hidden', true);
}
- return false;
+ return cat;
}
tvsInit();
diff --git a/lib/VNDB/Handler/VNPage.pm b/lib/VNDB/Handler/VNPage.pm
index ee121c9b..aa3c0538 100644
--- a/lib/VNDB/Handler/VNPage.pm
+++ b/lib/VNDB/Handler/VNPage.pm
@@ -156,7 +156,10 @@ sub page {
if(@$t) {
div id => 'tagops';
# NOTE: order of these links is hardcoded in JS
- a href => '#', class => 'tsel', mt '_vnpage_tags_spoil0';
+ a href => '#cont', lc mt '_tagcat_cont';
+ a href => '#ero', lc mt '_tagcat_ero';
+ a href => '#tech', lc mt '_tagcat_tech';
+ a href => '#', class => 'sec tsel', mt '_vnpage_tags_spoil0';
a href => '#', mt '_vnpage_tags_spoil1';
a href => '#', mt '_vnpage_tags_spoil2';
a href => '#', class => 'sec', mt '_vnpage_tags_summary';
@@ -164,7 +167,7 @@ sub page {
end;
div id => 'vntags';
for (@$t) {
- span class => sprintf 'tagspl%.0f %s', $_->{spoiler}, $_->{spoiler} > 0 ? 'hidden' : '';
+ span class => sprintf 'tagspl%.0f cat_%s %s', $_->{spoiler}, $_->{cat}, $_->{spoiler} > 0 ? 'hidden' : '';
a href => "/g$_->{id}", style => sprintf('font-size: %dpx', $_->{rating}*3.5+6), $_->{name};
b class => 'grayedout', sprintf ' %.1f', $_->{rating};
end;