Project

General

Profile

Statistics
| Branch: | Revision:

root / env / lib / python2.7 / site-packages / django / contrib / admin / static / admin / js / SelectBox.js @ 1a305335

History | View | Annotate | Download (3.96 KB)

1 1a305335 officers
var SelectBox = {
2
    cache: new Object(),
3
    init: function(id) {
4
        var box = document.getElementById(id);
5
        var node;
6
        SelectBox.cache[id] = new Array();
7
        var cache = SelectBox.cache[id];
8
        for (var i = 0; (node = box.options[i]); i++) {
9
            cache.push({value: node.value, text: node.text, displayed: 1});
10
        }
11
    },
12
    redisplay: function(id) {
13
        // Repopulate HTML select box from cache
14
        var box = document.getElementById(id);
15
        box.options.length = 0; // clear all options
16
        for (var i = 0, j = SelectBox.cache[id].length; i < j; i++) {
17
            var node = SelectBox.cache[id][i];
18
            if (node.displayed) {
19
                box.options[box.options.length] = new Option(node.text, node.value, false, false);
20
            }
21
        }
22
    },
23
    filter: function(id, text) {
24
        // Redisplay the HTML select box, displaying only the choices containing ALL
25
        // the words in text. (It's an AND search.)
26
        var tokens = text.toLowerCase().split(/\s+/);
27
        var node, token;
28
        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
29
            node.displayed = 1;
30
            for (var j = 0; (token = tokens[j]); j++) {
31
                if (node.text.toLowerCase().indexOf(token) == -1) {
32
                    node.displayed = 0;
33
                }
34
            }
35
        }
36
        SelectBox.redisplay(id);
37
    },
38
    delete_from_cache: function(id, value) {
39
        var node, delete_index = null;
40
        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
41
            if (node.value == value) {
42
                delete_index = i;
43
                break;
44
            }
45
        }
46
        var j = SelectBox.cache[id].length - 1;
47
        for (var i = delete_index; i < j; i++) {
48
            SelectBox.cache[id][i] = SelectBox.cache[id][i+1];
49
        }
50
        SelectBox.cache[id].length--;
51
    },
52
    add_to_cache: function(id, option) {
53
        SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1});
54
    },
55
    cache_contains: function(id, value) {
56
        // Check if an item is contained in the cache
57
        var node;
58
        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
59
            if (node.value == value) {
60
                return true;
61
            }
62
        }
63
        return false;
64
    },
65
    move: function(from, to) {
66
        var from_box = document.getElementById(from);
67
        var to_box = document.getElementById(to);
68
        var option;
69
        for (var i = 0; (option = from_box.options[i]); i++) {
70
            if (option.selected && SelectBox.cache_contains(from, option.value)) {
71
                SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
72
                SelectBox.delete_from_cache(from, option.value);
73
            }
74
        }
75
        SelectBox.redisplay(from);
76
        SelectBox.redisplay(to);
77
    },
78
    move_all: function(from, to) {
79
        var from_box = document.getElementById(from);
80
        var to_box = document.getElementById(to);
81
        var option;
82
        for (var i = 0; (option = from_box.options[i]); i++) {
83
            if (SelectBox.cache_contains(from, option.value)) {
84
                SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
85
                SelectBox.delete_from_cache(from, option.value);
86
            }
87
        }
88
        SelectBox.redisplay(from);
89
        SelectBox.redisplay(to);
90
    },
91
    sort: function(id) {
92
        SelectBox.cache[id].sort( function(a, b) {
93
            a = a.text.toLowerCase();
94
            b = b.text.toLowerCase();
95
            try {
96
                if (a > b) return 1;
97
                if (a < b) return -1;
98
            }
99
            catch (e) {
100
                // silently fail on IE 'unknown' exception
101
            }
102
            return 0;
103
        } );
104
    },
105
    select_all: function(id) {
106
        var box = document.getElementById(id);
107
        for (var i = 0; i < box.options.length; i++) {
108
            box.options[i].selected = 'selected';
109
        }
110
    }
111
}