Projet

Général

Profil

Paste
Télécharger (5,95 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / module_filter / js / modules.js @ 7d7b5830

1
(function($) {
2

    
3
Drupal.behaviors.moduleFilter = {
4
  attach: function(context) {
5
    $('#system-modules td.description').once('description', function() {
6
      $('.inner.expand', $(this)).click(function() {
7
        $(this).toggleClass('expanded');
8
      });
9
    });
10

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

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

    
71
      var moduleFilter = filterInput.data('moduleFilter');
72

    
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

    
82
          if (item.description.indexOf(string) >= 0) {
83
            return true;
84
          }
85
        },
86
        requiredBy: function(string, moduleFilter, item) {
87
          if (item.requiredBy == undefined) {
88
            var requirements = Drupal.ModuleFilter.getRequirements(item.element);
89
            item.requires = requirements.requires;
90
            item.requiredBy = requirements.requiredBy;
91
          }
92

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

    
106
          for (var i in item.requires) {
107
            if (item.requires[i].indexOf(string) >= 0) {
108
              return true;
109
            }
110
          }
111
        }
112
      };
113

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

    
131
      if (!Drupal.settings.moduleFilter.tabs) {
132
        moduleFilter.element.bind('moduleFilter:start', function() {
133
          $('#system-modules fieldset').show();
134
        });
135

    
136
        moduleFilter.element.bind('moduleFilter:finish', function(e, data) {
137
          $('#system-modules fieldset').each(function(i) {
138
            $fieldset = $(this);
139
            if ($('tbody tr', $fieldset).filter(':visible').length == 0) {
140
              $fieldset.hide();
141
            }
142
          });
143
        });
144

    
145
        moduleFilter.applyFilter();
146
      }
147
    });
148
  }
149
};
150

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

    
176
})(jQuery);