modules.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. (function($) {
  2. Drupal.behaviors.moduleFilter = {
  3. attach: function(context) {
  4. $('#system-modules td.description').once('description', function() {
  5. $(this).click(function() {
  6. $('.inner.expand', $(this)).toggleClass('expanded');
  7. });
  8. $('.inner.expand', $(this)).children().click(function(e) {
  9. if ($(this).parent().hasClass('expanded')) {
  10. e.stopPropagation();
  11. }
  12. });
  13. });
  14. $('.module-filter-inputs-wrapper', context).once('module-filter', function() {
  15. var filterInput = $('input[name="module_filter[name]"]', context);
  16. var selector = '#system-modules table tbody tr';
  17. if (Drupal.settings.moduleFilter.tabs) {
  18. selector += '.module';
  19. }
  20. filterInput.moduleFilter(selector, {
  21. wrapper: $('#module-filter-modules'),
  22. delay: 500,
  23. striping: true,
  24. childSelector: 'td:nth(1)',
  25. rules: [
  26. function(moduleFilter, item) {
  27. if (!item.unavailable) {
  28. if (moduleFilter.options.showEnabled) {
  29. if (item.status && !item.disabled) {
  30. return true;
  31. }
  32. }
  33. if (moduleFilter.options.showDisabled) {
  34. if (!item.status && !item.disabled) {
  35. return true;
  36. }
  37. }
  38. if (moduleFilter.options.showRequired) {
  39. if (item.status && item.disabled) {
  40. return true;
  41. }
  42. }
  43. }
  44. if (moduleFilter.options.showUnavailable) {
  45. if (item.unavailable || (!item.status && item.disabled)) {
  46. return true;
  47. }
  48. }
  49. return false;
  50. }
  51. ],
  52. buildIndex: [
  53. function(moduleFilter, item) {
  54. var $checkbox = $('td.checkbox :checkbox', item.element);
  55. if ($checkbox.size() > 0) {
  56. item.status = $checkbox.is(':checked');
  57. item.disabled = $checkbox.is(':disabled');
  58. }
  59. else {
  60. item.status = false;
  61. item.disabled = true;
  62. item.unavailable = true;
  63. }
  64. return item;
  65. }
  66. ],
  67. showEnabled: $('#edit-module-filter-show-enabled').is(':checked'),
  68. showDisabled: $('#edit-module-filter-show-disabled').is(':checked'),
  69. showRequired: $('#edit-module-filter-show-required').is(':checked'),
  70. showUnavailable: $('#edit-module-filter-show-unavailable').is(':checked')
  71. });
  72. var moduleFilter = filterInput.data('moduleFilter');
  73. moduleFilter.operators = {
  74. description: function(string, moduleFilter, item) {
  75. if (item.description == undefined) {
  76. var description = $('.description', item.element).clone();
  77. $('.admin-requirements', description).remove();
  78. $('.admin-operations', description).remove();
  79. item.description = description.text().toLowerCase();
  80. }
  81. if (item.description.indexOf(string) >= 0) {
  82. return true;
  83. }
  84. },
  85. requiredBy: function(string, moduleFilter, item) {
  86. if (item.requiredBy == undefined) {
  87. var requirements = Drupal.ModuleFilter.getRequirements(item.element);
  88. item.requires = requirements.requires;
  89. item.requiredBy = requirements.requiredBy;
  90. }
  91. for (var i in item.requiredBy) {
  92. if (item.requiredBy[i].indexOf(string) >= 0) {
  93. return true;
  94. }
  95. }
  96. },
  97. requires: function(string, moduleFilter, item) {
  98. if (item.requires == undefined) {
  99. var requirements = Drupal.ModuleFilter.getRequirements(item.element);
  100. item.requires = requirements.requires;
  101. item.requiredBy = requirements.requiredBy;
  102. }
  103. for (var i in item.requires) {
  104. if (item.requires[i].indexOf(string) >= 0) {
  105. return true;
  106. }
  107. }
  108. }
  109. };
  110. $('#edit-module-filter-show-enabled', context).change(function() {
  111. moduleFilter.options.showEnabled = $(this).is(':checked');
  112. moduleFilter.applyFilter();
  113. });
  114. $('#edit-module-filter-show-disabled', context).change(function() {
  115. moduleFilter.options.showDisabled = $(this).is(':checked');
  116. moduleFilter.applyFilter();
  117. });
  118. $('#edit-module-filter-show-required', context).change(function() {
  119. moduleFilter.options.showRequired = $(this).is(':checked');
  120. moduleFilter.applyFilter();
  121. });
  122. $('#edit-module-filter-show-unavailable', context).change(function() {
  123. moduleFilter.options.showUnavailable = $(this).is(':checked');
  124. moduleFilter.applyFilter();
  125. });
  126. if (!Drupal.settings.moduleFilter.tabs) {
  127. moduleFilter.element.bind('moduleFilter:start', function() {
  128. $('#system-modules fieldset').show();
  129. });
  130. moduleFilter.element.bind('moduleFilter:finish', function(e, data) {
  131. $('#system-modules fieldset').each(function(i) {
  132. $fieldset = $(this);
  133. if ($('tbody tr', $fieldset).filter(':visible').length == 0) {
  134. $fieldset.hide();
  135. }
  136. });
  137. });
  138. moduleFilter.applyFilter();
  139. }
  140. });
  141. }
  142. };
  143. Drupal.ModuleFilter.getRequirements = function(element) {
  144. var requires = new Array();
  145. var requiredBy = new Array();
  146. $('.admin-requirements', element).each(function() {
  147. var text = $(this).text();
  148. if (text.substr(0, 9) == 'Requires:') {
  149. // Requires element.
  150. requiresString = text.substr(9);
  151. requires = requiresString.replace(/\([a-z]*\)/g, '').split(',');
  152. }
  153. else if (text.substr(0, 12) == 'Required by:') {
  154. // Required by element.
  155. requiredByString = text.substr(12);
  156. requiredBy = requiredByString.replace(/\([a-z]*\)/g, '').split(',');
  157. }
  158. });
  159. for (var i in requires) {
  160. requires[i] = $.trim(requires[i].toLowerCase());
  161. }
  162. for (var i in requiredBy) {
  163. requiredBy[i] = $.trim(requiredBy[i].toLowerCase());
  164. }
  165. return { requires: requires, requiredBy: requiredBy };
  166. };
  167. })(jQuery);