Code

Ticket #3099: 3099.diff

File 3099.diff, 5.2 KB (added by Gary Wilson <gary.wilson@…>, 7 years ago)

a patch instead of the whole file. also fixed indention and spacing.

Line 
1=== modified file 'django/contrib/admin/media/js/SelectBox.js'
2--- django/contrib/admin/media/js/SelectBox.js  2006-12-19 04:35:09 +0000
3+++ django/contrib/admin/media/js/SelectBox.js  2007-01-21 20:35:30 +0000
4@@ -3,18 +3,19 @@
5     init: function(id) {
6         var box = document.getElementById(id);
7         var node;
8-        SelectBox.cache[id] = new Array();
9-        var cache = SelectBox.cache[id];
10-        for (var i = 0; (node = box.options[i]); i++) {
11-            cache.push({ value: node.value, text: node.text, displayed: 1 });
12+        SelectBox.cache[id] = new Object();
13+        var boxCache = SelectBox.cache[id];
14+        for (var i=0; (node=box.options[i]); i++) {
15+            boxCache[node.value] = {value: node.value, text: node.text, displayed: 1};
16         }
17     },
18     redisplay: function(id) {
19         // Repopulate HTML select box from cache
20         var box = document.getElementById(id);
21         box.options.length = 0; // clear all options
22-        for (var i = 0, j = SelectBox.cache[id].length; i < j; i++) {
23-            var node = SelectBox.cache[id][i];
24+        var elementsArray = SelectBox.sort(id);
25+        for (var i=0; i<elementsArray.length; i++ ) {
26+            var node = elementsArray[i]; //SelectBox.cache[id][nodeValue];
27             if (node.displayed) {
28                 box.options[box.options.length] = new Option(node.text, node.value, false, false);
29             }
30@@ -25,9 +26,10 @@
31         // the words in text. (It's an AND search.)
32         var tokens = text.toLowerCase().split(/\s+/);
33         var node, token;
34-        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
35+        for (var nodeValue in SelectBox.cache[id]) {
36+            node = SelectBox.cache[id][nodeValue];
37             node.displayed = 1;
38-            for (var j = 0; (token = tokens[j]); j++) {
39+            for (var j=0; (token=tokens[j]); j++) {
40                 if (node.text.toLowerCase().indexOf(token) == -1) {
41                     node.displayed = 0;
42                 }
43@@ -36,39 +38,21 @@
44         SelectBox.redisplay(id);
45     },
46     delete_from_cache: function(id, value) {
47-        var node, delete_index = null;
48-        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
49-            if (node.value == value) {
50-                delete_index = i;
51-                break;
52-            }
53-        }
54-        var j = SelectBox.cache[id].length - 1;
55-        for (var i = delete_index; i < j; i++) {
56-            SelectBox.cache[id][i] = SelectBox.cache[id][i+1];
57-        }
58-        SelectBox.cache[id].length--;
59+        delete SelectBox.cache[id][value];
60     },
61     add_to_cache: function(id, option) {
62-        SelectBox.cache[id].push({ value: option.value, text: option.text, displayed: 1 });
63+        SelectBox.cache[id][option.value] = {value: option.value, text: option.text, displayed: 1};
64     },
65     cache_contains: function(id, value) {
66-        // Check if an item is contained in the cache
67-        var node;
68-        for (var i = 0; (node = SelectBox.cache[id][i]); i++) {
69-            if (node.value == value) {
70-                return true;
71-            }
72-        }
73-        return false;
74+        return SelectBox.cache[id].hasOwnProperty(value);
75     },
76     move: function(from, to) {
77         var from_box = document.getElementById(from);
78         var to_box = document.getElementById(to);
79         var option;
80-        for (var i = 0; (option = from_box.options[i]); i++) {
81+        for (var i=0; (option=from_box.options[i]); i++) {
82             if (option.selected && SelectBox.cache_contains(from, option.value)) {
83-                SelectBox.add_to_cache(to, { value: option.value, text: option.text, displayed: 1 });
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@@ -79,15 +63,21 @@
89         var from_box = document.getElementById(from);
90         var to_box = document.getElementById(to);
91         var option;
92-        for (var i = 0; (option = from_box.options[i]); i++) {
93-            SelectBox.add_to_cache(to, { value: option.value, text: option.text, displayed: 1 });
94+        for (var i=0; (option=from_box.options[i]); i++) {
95+            SelectBox.add_to_cache(to, {value: option.value, text: option.text, displayed: 1});
96             SelectBox.delete_from_cache(from, option.value);
97         }
98         SelectBox.redisplay(from);
99         SelectBox.redisplay(to);
100     },
101     sort: function(id) {
102-        SelectBox.cache[id].sort( function(a, b) {
103+        var cache = SelectBox.cache[id];
104+        var array = new Array();
105+        for (optionValue in cache) {
106+            var option = cache[optionValue];
107+            array.push(option);
108+        }
109+        array.sort(function(a, b) {
110             a = a.text.toLowerCase();
111             b = b.text.toLowerCase();
112             try {
113@@ -98,11 +88,12 @@
114                 // silently fail on IE 'unknown' exception
115             }
116             return 0;
117-        } );
118+        });
119+        return array;
120     },
121     select_all: function(id) {
122         var box = document.getElementById(id);
123-        for (var i = 0; i < box.options.length; i++) {
124+        for (var i=0; i<box.options.length; i++) {
125             box.options[i].selected = 'selected';
126         }
127     }
128