diff options
author | Yorhel <git@yorhel.nl> | 2011-02-06 14:12:43 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2011-02-06 14:12:43 +0100 |
commit | 8b3eb97627131a9be85cf784484d8d51d9b417c0 (patch) | |
tree | ede1e2f05133f0fa95ee7f819005b2112f21e159 | |
parent | bccc7326a43020e44aea345b803adaceaa90f2a2 (diff) |
Added tag visibility options by category on /v+
The JS code is a bit messy, though...
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | data/script.js | 45 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNPage.pm | 7 |
3 files changed, 36 insertions, 17 deletions
@@ -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; |