Projet

Général

Profil

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

root / drupal7 / sites / all / modules / module_filter / js / modules.js @ 74f6bef0

1
(function($) {
2

    
3
Drupal.behaviors.moduleFilter = {
4
  attach: function(context) {
5
    $('.module-filter-inputs-wrapper', context).once('module-filter', function() {
6
      var filterInput = $('input[name="module_filter[name]"]', context);
7
      var selector = '#system-modules table tbody tr';
8
      if (Drupal.settings.moduleFilter.tabs) {
9
        selector += '.module';
10
      }
11

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

    
65
      var moduleFilter = filterInput.data('moduleFilter');
66

    
67
      moduleFilter.operators = {
68
        description: function(string, moduleFilter, item) {
69
          if (item.description == undefined) {
70
            var description = $('.description', item.element).clone();
71
            $('.admin-requirements', description).remove();
72
            $('.admin-operations', description).remove();
73
            item.description = description.text().toLowerCase();
74
          }
75

    
76
          if (item.description.indexOf(string) >= 0) {
77
            return true;
78
          }
79
        },
80
        requiredBy: function(string, moduleFilter, item) {
81
          if (item.requiredBy == undefined) {
82
            var requirements = Drupal.ModuleFilter.getRequirements(item.element);
83
            item.requires = requirements.requires;
84
            item.requiredBy = requirements.requiredBy;
85
          }
86

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

    
100
          for (var i in item.requires) {
101
            if (item.requires[i].indexOf(string) >= 0) {
102
              return true;
103
            }
104
          }
105
        }
106
      };
107

    
108
      $('#edit-module-filter-show-enabled', context).change(function() {
109
        moduleFilter.options.showEnabled = $(this).is(':checked');
110
        moduleFilter.applyFilter();
111
      });
112
      $('#edit-module-filter-show-disabled', context).change(function() {
113
        moduleFilter.options.showDisabled = $(this).is(':checked');
114
        moduleFilter.applyFilter();
115
      });
116
      $('#edit-module-filter-show-required', context).change(function() {
117
        moduleFilter.options.showRequired = $(this).is(':checked');
118
        moduleFilter.applyFilter();
119
      });
120
      $('#edit-module-filter-show-unavailable', context).change(function() {
121
        moduleFilter.options.showUnavailable = $(this).is(':checked');
122
        moduleFilter.applyFilter();
123
      });
124

    
125
      if (!Drupal.settings.moduleFilter.tabs) {
126
        moduleFilter.element.bind('moduleFilter:start', function() {
127
          $('#system-modules fieldset').show();
128
        });
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

    
139
        moduleFilter.applyFilter();
140
      }
141
    });
142
  }
143
};
144

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

    
170
})(jQuery);