123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- (function($) {
- Drupal.behaviors.moduleFilter = {
- attach: function(context) {
- $('#system-modules td.description').once('description', function() {
- $(this).click(function() {
- $('.inner.expand', $(this)).toggleClass('expanded');
- });
- $('.inner.expand', $(this)).children().click(function(e) {
- if ($(this).parent().hasClass('expanded')) {
- e.stopPropagation();
- }
- });
- });
- $('.module-filter-inputs-wrapper', context).once('module-filter', function() {
- var filterInput = $('input[name="module_filter[name]"]', context);
- var selector = '#system-modules table tbody tr';
- if (Drupal.settings.moduleFilter.tabs) {
- selector += '.module';
- }
- filterInput.moduleFilter(selector, {
- wrapper: $('#module-filter-modules'),
- delay: 500,
- striping: true,
- childSelector: 'td:nth(1)',
- rules: [
- function(moduleFilter, item) {
- if (!item.unavailable) {
- if (moduleFilter.options.showEnabled) {
- if (item.status && !item.disabled) {
- return true;
- }
- }
- if (moduleFilter.options.showDisabled) {
- if (!item.status && !item.disabled) {
- return true;
- }
- }
- if (moduleFilter.options.showRequired) {
- if (item.status && item.disabled) {
- return true;
- }
- }
- }
- if (moduleFilter.options.showUnavailable) {
- if (item.unavailable || (!item.status && item.disabled)) {
- return true;
- }
- }
- return false;
- }
- ],
- buildIndex: [
- function(moduleFilter, item) {
- var $checkbox = $('td.checkbox :checkbox', item.element);
- if ($checkbox.size() > 0) {
- item.status = $checkbox.is(':checked');
- item.disabled = $checkbox.is(':disabled');
- }
- else {
- item.status = false;
- item.disabled = true;
- item.unavailable = true;
- }
- return item;
- }
- ],
- showEnabled: $('#edit-module-filter-show-enabled').is(':checked'),
- showDisabled: $('#edit-module-filter-show-disabled').is(':checked'),
- showRequired: $('#edit-module-filter-show-required').is(':checked'),
- showUnavailable: $('#edit-module-filter-show-unavailable').is(':checked')
- });
- var moduleFilter = filterInput.data('moduleFilter');
- moduleFilter.operators = {
- description: function(string, moduleFilter, item) {
- if (item.description == undefined) {
- var description = $('.description', item.element).clone();
- $('.admin-requirements', description).remove();
- $('.admin-operations', description).remove();
- item.description = description.text().toLowerCase();
- }
- if (item.description.indexOf(string) >= 0) {
- return true;
- }
- },
- requiredBy: function(string, moduleFilter, item) {
- if (item.requiredBy == undefined) {
- var requirements = Drupal.ModuleFilter.getRequirements(item.element);
- item.requires = requirements.requires;
- item.requiredBy = requirements.requiredBy;
- }
- for (var i in item.requiredBy) {
- if (item.requiredBy[i].indexOf(string) >= 0) {
- return true;
- }
- }
- },
- requires: function(string, moduleFilter, item) {
- if (item.requires == undefined) {
- var requirements = Drupal.ModuleFilter.getRequirements(item.element);
- item.requires = requirements.requires;
- item.requiredBy = requirements.requiredBy;
- }
- for (var i in item.requires) {
- if (item.requires[i].indexOf(string) >= 0) {
- return true;
- }
- }
- }
- };
- $('#edit-module-filter-show-enabled', context).change(function() {
- moduleFilter.options.showEnabled = $(this).is(':checked');
- moduleFilter.applyFilter();
- });
- $('#edit-module-filter-show-disabled', context).change(function() {
- moduleFilter.options.showDisabled = $(this).is(':checked');
- moduleFilter.applyFilter();
- });
- $('#edit-module-filter-show-required', context).change(function() {
- moduleFilter.options.showRequired = $(this).is(':checked');
- moduleFilter.applyFilter();
- });
- $('#edit-module-filter-show-unavailable', context).change(function() {
- moduleFilter.options.showUnavailable = $(this).is(':checked');
- moduleFilter.applyFilter();
- });
- if (!Drupal.settings.moduleFilter.tabs) {
- moduleFilter.element.bind('moduleFilter:start', function() {
- $('#system-modules fieldset').show();
- });
- moduleFilter.element.bind('moduleFilter:finish', function(e, data) {
- $('#system-modules fieldset').each(function(i) {
- $fieldset = $(this);
- if ($('tbody tr', $fieldset).filter(':visible').length == 0) {
- $fieldset.hide();
- }
- });
- });
- moduleFilter.applyFilter();
- }
- });
- }
- };
- Drupal.ModuleFilter.getRequirements = function(element) {
- var requires = new Array();
- var requiredBy = new Array();
- $('.admin-requirements', element).each(function() {
- var text = $(this).text();
- if (text.substr(0, 9) == 'Requires:') {
- // Requires element.
- requiresString = text.substr(9);
- requires = requiresString.replace(/\([a-z]*\)/g, '').split(',');
- }
- else if (text.substr(0, 12) == 'Required by:') {
- // Required by element.
- requiredByString = text.substr(12);
- requiredBy = requiredByString.replace(/\([a-z]*\)/g, '').split(',');
- }
- });
- for (var i in requires) {
- requires[i] = $.trim(requires[i].toLowerCase());
- }
- for (var i in requiredBy) {
- requiredBy[i] = $.trim(requiredBy[i].toLowerCase());
- }
- return { requires: requires, requiredBy: requiredBy };
- };
- })(jQuery);
|