~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/static/javascript/collapse.js

  • Committer: Robey Pointer
  • Date: 2007-01-21 00:05:52 UTC
  • Revision ID: robey@lag.net-20070121000552-laswr1ffqh030uge
big checkpoint commit.  added some functions to util for tracking browsing
context (those key=value params to urls) since there are already a few and
now i'm adding some more: 'remember' and 'compare_revid'.

'remember' is a remembered revision_id that gets carried around if you click
on a "compare this revision to another revision" link on the revision page.
afterwards, whenever you're on a revision page, you can click "compare to
revision [x]" and it will switch 'remember' to 'compare_revid' and show the
revision page with a diff as compared to the remembered revision.  this is
to allow arbitrary diffs.  i'm not sure the ui is great, though.

bundle is also hooked up this way, so you can download an arbitrary bundle.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/* reusable implementation of expand/collapse buttons, used to show/hide
 
3
 * "more detailed" sections of the page.
 
4
 */
 
5
 
 
6
 
 
7
var collapse_cache = new Object();
 
8
var collapse_all_cache = new Object();
 
9
 
 
10
function cacheElement(group, name, remainder, element) {
 
11
    var g = collapse_cache[group];
 
12
    if (typeof(g) == "undefined") {
 
13
        g = new Object();
 
14
        collapse_cache[group] = g;
 
15
    }
 
16
    var n = g[name];
 
17
    if (typeof(n) == "undefined") {
 
18
        n = new Array();
 
19
        g[name] = n;
 
20
    }
 
21
    n.push(new Array(remainder, element));
 
22
}
 
23
 
 
24
function cacheAllElement(group, name, element) {
 
25
    var g = collapse_all_cache[group];
 
26
    if (typeof(g) == "undefined") {
 
27
        g = new Array();
 
28
        collapse_all_cache[group] = g;
 
29
    }
 
30
    g.push(new Array(name, element));
 
31
}
 
32
 
 
33
/*
 
34
 * cache all the elements that have a collapse-<group>-<name>-* class on them.
 
35
 * javascript can be very slow so this should make the UI more responsive.
 
36
 */
 
37
function sortCollapseElements() {
 
38
    var elements = document.getElementsByTagName("*");
 
39
    for (var i = 0; i < elements.length; i++) {
 
40
        var classes = elements[i].className.split(' ');
 
41
        for (var j = 0; j < classes.length; j++) {
 
42
            if (classes[j].indexOf("collapse-") == 0) {
 
43
                var segments = classes[j].split('-');
 
44
                if (segments.length == 4) {
 
45
                    cacheElement(segments[1], segments[2], segments[3], elements[i]);
 
46
                }
 
47
                if (segments.length == 3) {
 
48
                    cacheAllElement(segments[1], segments[2], elements[i]);
 
49
                }
 
50
            }
 
51
        }
 
52
    }
 
53
}
 
54
 
 
55
 
 
56
function collapseContent(group, name) {
 
57
    return 'collapse-' + group + '-' + name + '-content';
 
58
}
 
59
 
 
60
function collapseDisplay(group, name, display) {
 
61
    // display mode for the disclosure triangles:
 
62
    var dthide = 'inline', dtshow = 'none';
 
63
    if (display == 'none') { dthide = 'none'; dtshow = 'inline'; }
 
64
 
 
65
    var elements = collapse_cache[group][name];
 
66
    for (var i in elements) {
 
67
        var kind = elements[i][0], node = elements[i][1];
 
68
        if (kind == "show") {
 
69
            node.style.display = dtshow;
 
70
        } else if (kind == "hide") {
 
71
            node.style.display = dthide;
 
72
        } else if (kind == "content") {
 
73
            node.style.display = display;
 
74
        }
 
75
    }
 
76
}
 
77
 
 
78
function collapseAllDisplay(group, display) {
 
79
    for (var name in collapse_cache[group]) {
 
80
        collapseDisplay(group, name, display);
 
81
    }
 
82
    
 
83
    var dthide = 'inline', dtshow = 'none';
 
84
    if (display == 'none') { dthide = 'none'; dtshow = 'inline'; }
 
85
    for (var element in collapse_all_cache[group]) {
 
86
        var x = collapse_all_cache[group][element];
 
87
        var name = x[0], node = x[1];
 
88
        if (name == "showall") {
 
89
            node.style.display = dtshow;
 
90
        } else if (name == "hideall") {
 
91
            node.style.display = dthide;
 
92
        }
 
93
    }
 
94
}
 
95
 
 
96
 
 
97
// for debugging
 
98
function debug(s) {
 
99
    var d = new Date();
 
100
    var hh = d.getHours(), mm = d.getMinutes(), ss = d.getSeconds(), ms = d.getMilliseconds();
 
101
    var ds = ((hh < 10) ? "0" + hh : hh) + ":" + ((mm < 10) ? "0" + mm : mm) + ":" + ((ss < 10) ? "0" + ss : ss) + "." + ((ms < 10) ? "00" + ms : ((ms < 100) ? "0" + ms : ms));
 
102
    console.log("[" + ds + "] " + s);
 
103
}
 
104