comparison media/django/js/SelectBox.js @ 1:0dcfcdf50c62

Initial import of Madeira project from the private repository.
author Brian Neal <bgneal@gmail.com>
date Mon, 06 Apr 2009 03:10:59 +0000
parents
children
comparison
equal deleted inserted replaced
0:df0370bfe3f0 1:0dcfcdf50c62
1 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 }