Projet

Général

Profil

Paste
Télécharger (6,11 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / module_filter / js / modules.js @ 18596a08

1
(function($) {
2

    
3
Drupal.behaviors.moduleFilter = {
4
  attach: function(context) {
5
    $('#system-modules td.description').once('description', function() {
6
      $(this).click(function() {
7
        $('.inner.expand', $(this)).toggleClass('expanded');
8
      });
9
      $('.inner.expand', $(this)).children().click(function(e) {
10
        if ($(this).parent().hasClass('expanded')) {
11
          e.stopPropagation();
12
        }
13
      });
14
    });
15

    
16
    $('.module-filter-inputs-wrapper', context).once('module-filter', function() {
17
      var filterInput = $('input[name="module_filter[name]"]', context);
18
      var selector = '#system-modules table tbody tr';
19
      if (Drupal.settings.moduleFilter.tabs) {
20
        selector += '.module';
21
      }
22

    
23
      filterInput.moduleFilter(selector, {
24
        wrapper: $('#module-filter-modules'),
25
        delay: 500,
26
        striping: true,
27
        childSelector: 'td:nth(1)',
28
        rules: [
29
          function(moduleFilter, item) {
30
            if (!item.unavailable) {
31
              if (moduleFilter.options.showEnabled) {
32
                if (item.status && !item.disabled) {
33
                  return true;
34
                }
35
              }
36
              if (moduleFilter.options.showDisabled) {
37
                if (!item.status && !item.disabled) {
38
                  return true;
39
                }
40
              }
41
              if (moduleFilter.options.showRequired) {
42
                if (item.status && item.disabled) {
43
                  return true;
44
                }
45
              }
46
            }
47
            if (moduleFilter.options.showUnavailable) {
48
              if (item.unavailable || (!item.status && item.disabled)) {
49
                return true;
50
              }
51
            }
52
            return false;
53
          }
54
        ],
55
        buildIndex: [
56
          function(moduleFilter, item) {
57
            var $checkbox = $('td.checkbox :checkbox', item.element);
58
            if ($checkbox.size() > 0) {
59
              item.status = $checkbox.is(':checked');
60
              item.disabled = $checkbox.is(':disabled');
61
            }
62
            else {
63
              item.status = false;
64
              item.disabled = true;
65
              item.unavailable = true;
66
            }
67
            return item;
68
          }
69
        ],
70
        showEnabled: $('#edit-module-filter-show-enabled').is(':checked'),
71
        showDisabled: $('#edit-module-filter-show-disabled').is(':checked'),
72
        showRequired: $('#edit-module-filter-show-required').is(':checked'),
73
        showUnavailable: $('#edit-module-filter-show-unavailable').is(':checked')
74
      });
75

    
76
      var moduleFilter = filterInput.data('moduleFilter');
77

    
78
      moduleFilter.operators = {
79
        description: function(string, moduleFilter, item) {
80
          if (item.description == undefined) {
81
            var description = $('.description', item.element).clone();
82
            $('.admin-requirements', description).remove();
83
            $('.admin-operations', description).remove();
84
            item.description = description.text().toLowerCase();
85
          }
86

    
87
          if (item.description.indexOf(string) >= 0) {
88
            return true;
89
          }
90
        },
91
        requiredBy: function(string, moduleFilter, item) {
92
          if (item.requiredBy == undefined) {
93
            var requirements = Drupal.ModuleFilter.getRequirements(item.element);
94
            item.requires = requirements.requires;
95
            item.requiredBy = requirements.requiredBy;
96
          }
97

    
98
          for (var i in item.requiredBy) {
99
            if (item.requiredBy[i].indexOf(string) >= 0) {
100
              return true;
101
            }
102
          }
103
        },
104
        requires: function(string, moduleFilter, item) {
105
          if (item.requires == undefined) {
106
            var requirements = Drupal.ModuleFilter.getRequirements(item.element);
107
            item.requires = requirements.requires;
108
            item.requiredBy = requirements.requiredBy;
109
          }
110

    
111
          for (var i in item.requires) {
112
            if (item.requires[i].indexOf(string) >= 0) {
113
              return true;
114
            }
115
          }
116
        }
117
      };
118

    
119
      $('#edit-module-filter-show-enabled', context).change(function() {
120
        moduleFilter.options.showEnabled = $(this).is(':checked');
121
        moduleFilter.applyFilter();
122
      });
123
      $('#edit-module-filter-show-disabled', context).change(function() {
124
        moduleFilter.options.showDisabled = $(this).is(':checked');
125
        moduleFilter.applyFilter();
126
      });
127
      $('#edit-module-filter-show-required', context).change(function() {
128
        moduleFilter.options.showRequired = $(this).is(':checked');
129
        moduleFilter.applyFilter();
130
      });
131
      $('#edit-module-filter-show-unavailable', context).change(function() {
132
        moduleFilter.options.showUnavailable = $(this).is(':checked');
133
        moduleFilter.applyFilter();
134
      });
135

    
136
      if (!Drupal.settings.moduleFilter.tabs) {
137
        moduleFilter.element.bind('moduleFilter:start', function() {
138
          $('#system-modules fieldset').show();
139
        });
140

    
141
        moduleFilter.element.bind('moduleFilter:finish', function(e, data) {
142
          $('#system-modules fieldset').each(function(i) {
143
            $fieldset = $(this);
144
            if ($('tbody tr', $fieldset).filter(':visible').length == 0) {
145
              $fieldset.hide();
146
            }
147
          });
148
        });
149

    
150
        moduleFilter.applyFilter();
151
      }
152
    });
153
  }
154
};
155

    
156
Drupal.ModuleFilter.getRequirements = function(element) {
157
  var requires = new Array();
158
  var requiredBy = new Array();
159
  $('.admin-requirements', element).each(function() {
160
    var text = $(this).text();
161
    if (text.substr(0, 9) == 'Requires:') {
162
      // Requires element.
163
      requiresString = text.substr(9);
164
      requires = requiresString.replace(/\([a-z]*\)/g, '').split(',');
165
    }
166
    else if (text.substr(0, 12) == 'Required by:') {
167
      // Required by element.
168
      requiredByString = text.substr(12);
169
      requiredBy = requiredByString.replace(/\([a-z]*\)/g, '').split(',');
170
    }
171
  });
172
  for (var i in requires) {
173
    requires[i] = $.trim(requires[i].toLowerCase());
174
  }
175
  for (var i in requiredBy) {
176
    requiredBy[i] = $.trim(requiredBy[i].toLowerCase());
177
  }
178
  return { requires: requires, requiredBy: requiredBy };
179
};
180

    
181
})(jQuery);