summaryrefslogtreecommitdiff
path: root/data/js/tagops.js
blob: 26728dc4f92f4d1528abe4d1e3aa53d509ab4f7e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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();
}

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;
    }
  }

  /* 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);
  }
}

tvsInit();