PageRenderTime 15ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/django/contrib/admin/media/js/SelectBox.js

https://code.google.com/p/mango-py/
JavaScript | 111 lines | 106 code | 0 blank | 5 comment | 22 complexity | 37509c7e5ad598f2f3461bd80d64162f MD5 | raw file
Possible License(s): BSD-3-Clause
  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. }