summaryrefslogtreecommitdiff
path: root/buildscripts/jGrouseDoc/skins/common/js/jgindex.js
blob: d1944cff1f825ea24bf2792381ceccb138e36336 (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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
 * Script that builds jGrouseDoc Index Page
 * Copyright (c) 2007 by Robert Kieffer and jGrouseDoc contributors 
 * $Id: jgindex.js 303 2007-12-24 22:52:30Z denis.riabtchik $
 */

var jgindex = {
  load: function() {
    // Sort data by localName
    jgindex.data.sort(function(a,b) {
      var c = (a.localName || a.fullName).toLowerCase();
      var d = (b.localName || b.fullName).toLowerCase();
      return c < d ? -1 : (c > d ? 1 : 0);
    });

    // Now render the index
    jgindex.renderEntries();
  },

  renderEntries: function() {
    var h = [];

    // Use a DL, since this is the most semantically correct structure
    h.push('<dl>');

    // Hash to track which letters have entries
    var letters = {};

    // Loop through each entry
    for (var i = 0; i < jgindex.data.length; i++) {
      var entry = jgindex.data[i];

      // Get name/url for the entry's namespace
      var srcName = entry.parent;
      var srcLink = entry.ref.replace(/#.*/, '');

      // Apply odd/even classname (makes styling even/odd rows easy)
      var cn = [(i % 2) ? 'odd' : 'even'];
      cn.push(/^(class|interface|struct|object)/.test(entry.summary) ? 'is_namespace' : 'is_not_namespace');

      // Get the entry's first letter
      var ln = entry.localName || entry.fullName || '_unnamed';
      var letter = ln.charAt(0).toUpperCase();

      //  ... and see if it's the first one for that letter
      if (!letters[letter]) {
        letters[letter] = true;
      } else {
        letter = null;
      }

      // ... and if it is, render the section header
      if (letter) {
        h.push('<h3 class="letter_section"><a name="' + letter + '">' + letter + '</a></h3>');
      }

      // Render the entry's HTML
      cn = cn.join(' ');
      h.push(
        '<dt title="' + entry.summary + '" class="' + cn + '">' +
          '<a href="' + entry.ref + '">' + ln + '</a>' +
        '</dt>' +
        '<dd class="' + cn + '">' +
          '<a href="' + srcLink + '">' + srcName + '</a>' +
        '</dd>'
      );
    }
    h.push('</dl>');

    // Stick it all into the element
    document.getElementById('index').innerHTML = h.join('\n');

    // Render the letters table-of-contents at the top
    h = [];
    var toc = '$_ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    for (var i = 0; i < toc.length; i++) {
      var letter = toc.charAt(i);
      h.push(letters[letter] ?
        '<span class="has_entries"><a href="#' + letter + '">' + letter + '</a></span>' :
        '<span class="no_entries">' + letter + '</span>'
      );
    }
    document.getElementById('toc').innerHTML = h.join('\n');
  }
}


// Hack so we can get access to the index data
var jgdoc = {
  Searcher: {
    setData: function(data) {
      jgindex.data = data;
      jgindex.load();
    }
  }
}