summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2015-08-16 11:28:18 +0200
committerYorhel <git@yorhel.nl>2015-08-16 11:28:18 +0200
commitfcaa479640044cc7430702e5d9c79199d58481d7 (patch)
tree6195e5428749b74ded4d5a94b4ed840359d2cef2
parent295ccf2ef58898b1cbee32a137ae859d67237a3a (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.js115
-rw-r--r--data/js/tagops.js119
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();