diff options
author | Yorhel <git@yorhel.nl> | 2015-08-16 11:28:18 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2015-08-16 11:28:18 +0200 |
commit | fcaa479640044cc7430702e5d9c79199d58481d7 (patch) | |
tree | 6195e5428749b74ded4d5a94b4ed840359d2cef2 | |
parent | 295ccf2ef58898b1cbee32a137ae859d67237a3a (diff) |
js: Clean up charops.js & tagops.js
charops.js was already recently (re)written and followed much of the new
conventions, so that was easy.
tagops.js has been simplified somewhat, and does not rely on the
position of the "tagspl#" class anymore.
-rw-r--r-- | data/js/charops.js | 115 | ||||
-rw-r--r-- | data/js/tagops.js | 119 |
2 files changed, 123 insertions, 111 deletions
diff --git a/data/js/charops.js b/data/js/charops.js index afb762b7..7adb6ae2 100644 --- a/data/js/charops.js +++ b/data/js/charops.js @@ -1,66 +1,81 @@ -if(byId('charops')) { (function() { +var spoil, sexual, t; + + +// Fixes the commas between trait names and the hidden status of the entire row +function fixrow(c) { + var l = byName(byName(c, 'td')[1], 'span'); + var first = 1; + for(var i=0; i<l.length; i+=2) + if(!hasClass(l[i], 'hidden')) { + setClass(l[i+1], 'hidden', first); + first = 0; + } + setClass(c, 'hidden', first); +} + + +function restripe() { + for(var i=0; i<t.length; i++) { + var b = byName(t[i], 'tbody'); + if(!b.length) + continue; + setClass(t[i], 'stripe', false); + var r = 1; + var rows = byName(b[0], 'tr'); + for(var j=0; j<rows.length; j++) { + if(hasClass(rows[j], 'traitrow')) + fixrow(rows[j]); + if(!hasClass(rows[j], 'nostripe') && !hasClass(rows[j], 'hidden')) + setClass(rows[j], 'odd', r++&1); + } + } +} + + +function setall(h) { var k = byClass('charspoil'); + for(var i=0; i<k.length; i++) + setClass(k[i], 'hidden', + !sexual && hasClass(k[i], 'sexual') ? true : + hasClass(k[i], 'charspoil_0') ? false : + hasClass(k[i], 'charspoil_-1') ? spoil > 1 : + hasClass(k[i], 'charspoil_1') ? spoil < 1 : spoil < 2); + for(var i=0; i<3; i++) + setClass(h[i], 'sel', spoil == i); + if(h[3]) + setClass(h[3], 'sel', sexual); + if(k.length) + restripe(); + return false; +} + + +function init() { var h = byName(byId('charops'), 'a'); - var t = byClass('table', 'stripe'); - var spoil; - var sexual; - // Fixes the commas between trait names and the hidden status of the entire row - var fixrow = function(c) { - var l = byName(byName(c, 'td')[1], 'span'); - var first = 1; - for(var i=0; i<l.length; i+=2) - if(!hasClass(l[i], 'hidden')) { - setClass(l[i+1], 'hidden', first); - first = 0; - } - setClass(c, 'hidden', first); - }; - var restripe = function() { - for(var i=0; i<t.length; i++) { - var b = byName(t[i], 'tbody'); - if(!b.length) - continue; - setClass(t[i], 'stripe', false); - var r = 1; - var rows = byName(b[0], 'tr'); - for(var j=0; j<rows.length; j++) { - if(hasClass(rows[j], 'traitrow')) - fixrow(rows[j]); - if(!hasClass(rows[j], 'nostripe') && !hasClass(rows[j], 'hidden')) - setClass(rows[j], 'odd', r++&1); - } - } - }; - var setall = function() { - for(var i=0; i<k.length; i++) - setClass(k[i], 'hidden', - !sexual && hasClass(k[i], 'sexual') ? true : - hasClass(k[i], 'charspoil_0') ? false : - hasClass(k[i], 'charspoil_-1') ? spoil > 1 : - hasClass(k[i], 'charspoil_1') ? spoil < 1 : spoil < 2); - for(var i=0; i<3; i++) - setClass(h[i], 'sel', spoil == i); - if(h[3]) - setClass(h[3], 'sel', sexual); - if(k.length) - restripe(); - return false; - }; + t = byClass('table', 'stripe'); + + // Spoiler level for(var i=0; i<3; i++) { h[i].num = i; h[i].onclick = function() { spoil = this.num; - return setall(); + return setall(h); }; if(hasClass(h[i], 'sel')) spoil = i; }; + + // Sexual toggle if(h[3]) { h[3].onclick = function() { sexual = !sexual; - return setall(); + return setall(h); }; sexual = hasClass(h[3], 'sel'); } - setall(); -})(); } + setall(h); +} + + +if(byId('charops')) + init(); diff --git a/data/js/tagops.js b/data/js/tagops.js index 26728dc4..3f789ee6 100644 --- a/data/js/tagops.js +++ b/data/js/tagops.js @@ -1,68 +1,65 @@ -function tvsInit() { - if(!byId('tagops')) - return; - var l = byName(byId('tagops'), 'a'); - for(var i=0;i<l.length; i++) - l[i].onclick = tvsClick; - tvsSet(); -} +var l, lim, spoil = 0, cats = {}; -function tvsClick() { - var sel; - var l = byName(byId('tagops'), 'a'); - for(var i=0; i<l.length; i++) - if(l[i] == this) { - if(i < 3) { /* categories */ - setClass(l[i], 'tsel', !hasClass(l[i], 'tsel')); - tvsSet(); - } else if(i < 6) { /* spoiler level */ - tvsSet(i-3); - } else /* limit */ - tvsSet(null, i == 6); - } - return false; -} -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) { /* 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-3 == lvl); - if(lvl == null && hasClass(l[i], 'tsel')) - lvl = i-3; - } else { /* display limit (6 = summary) */ - if(lim != null) - setClass(l[i], 'tsel', lim == (i == 6)); - if(lim == null && hasClass(l[i], 'tsel')) - lim = i == 6; - } +function init() { + var i; + l = byName(byId('tagops'), 'a'); + + // Categories + for(i=0; i<3; i++) { + l[i].tagops_cat = l[i].href.substr(l[i].href.indexOf('#')+1); + l[i].onclick = function() { cats[this.tagops_cat] = !cats[this.tagops_cat]; return set(); }; + cats[l[i].tagops_cat] = hasClass(l[i], 'tsel'); + } + + // Spoiler level + for(i=3; i<6; i++) { + l[i].tagops_spoil = i-3; + l[i].onclick = function() { spoil = this.tagops_spoil; return set(); }; + if(hasClass(l[i], 'tsel')) + spoil = i-3; + } + + // Summary / all + for(i=6; i<8; i++) { + l[i].tagops_lim = i == 6; + l[i].onclick = function() { lim = this.tagops_lim; return set(); }; + if(hasClass(l[i], 'tsel')) + lim = i == 6; } - /* update tag visibility */ - l = byName(byId('vntags'), 'span'); - lim = lim ? 15 : 999; - var s=0; - for(i=0;i<l.length;i++) { - var thislvl = l[i].className.substr(6, 1); - 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); + set(); +} + + +function set() { + var i; + + // Set link selection class + for(i=0; i<8; i++) + setClass(l[i], 'tsel', + i < 3 ? cats[l[i].tagops_cat] : + i < 6 ? l[i].tagops_spoil == spoil + : l[i].tagops_lim == lim); + + // update tag visibility + var t = byName(byId('vntags'), 'span'); + var n = 0; + for(i=0; i<t.length; i++) { + var v = n < (lim ? 15 : 999); + for(var j=0; j<3; j++) + if(hasClass(t[i], 'tagspl'+j)) + v = v && j <= spoil; + for(var c in cats) + if(hasClass(t[i], 'cat_'+c)) + v = v && cats[c]; + setClass(t[i], 'hidden', !v); + n += v?1:0; } + + return false; } -tvsInit(); + +if(byId('tagops')) + init(); |